vlc | branch: master | Thomas Guillem <[email protected]> | Wed Oct 5 11:43:47 2016 +0200| [64252ac8e4d15b61835405bf8b95c5ad72123181] | committer: Thomas Guillem
android/utils: remove AWindowHandler_releaseSurface AWindowHandler_releaseANativeWindow should be used instead. AWindowHandler_getSurface and AWindowHandler_getANativeWindow do the same initialisation now. > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=64252ac8e4d15b61835405bf8b95c5ad72123181 --- modules/codec/omxil/mediacodec.c | 2 +- modules/video_output/android/utils.c | 77 +++++++++++++++++------------------- modules/video_output/android/utils.h | 5 +-- 3 files changed, 40 insertions(+), 44 deletions(-) diff --git a/modules/codec/omxil/mediacodec.c b/modules/codec/omxil/mediacodec.c index 250f063..6f291b6 100644 --- a/modules/codec/omxil/mediacodec.c +++ b/modules/codec/omxil/mediacodec.c @@ -577,7 +577,7 @@ static void StopMediaCodec(decoder_t *p_dec) p_sys->api->stop(p_sys->api); if (p_dec->fmt_in.i_cat == VIDEO_ES && p_sys->u.video.p_awh) - AWindowHandler_releaseSurface(p_sys->u.video.p_awh, AWindow_Video); + AWindowHandler_releaseANativeWindow(p_sys->u.video.p_awh, AWindow_Video); } /***************************************************************************** diff --git a/modules/video_output/android/utils.c b/modules/video_output/android/utils.c index 09907b5..7c0c05a 100644 --- a/modules/video_output/android/utils.c +++ b/modules/video_output/android/utils.c @@ -503,10 +503,17 @@ AWindowHandler_new(vlc_object_t *p_obj) } static void -AWindowHandler_releaseSurfaceEnv(AWindowHandler *p_awh, JNIEnv *p_env, - enum AWindow_ID id) +AWindowHandler_releaseANativeWindowEnv(AWindowHandler *p_awh, JNIEnv *p_env, + enum AWindow_ID id) { - AWindowHandler_releaseANativeWindow(p_awh, id); + assert(id < AWindow_Max); + + if (p_awh->views[id].p_anw) + { + p_awh->pf_winRelease(p_awh->views[id].p_anw); + p_awh->views[id].p_anw = NULL; + } + if (p_awh->views[id].jsurface) { (*p_env)->DeleteGlobalRef(p_env, p_awh->views[id].jsurface); @@ -523,8 +530,8 @@ AWindowHandler_destroy(AWindowHandler *p_awh) { if (p_awh->event.b_registered) JNI_CALL(CallBooleanMethod, setCallback, (jlong)0LL); - AWindowHandler_releaseSurfaceEnv(p_awh, p_env, AWindow_Video); - AWindowHandler_releaseSurfaceEnv(p_awh, p_env, AWindow_Subtitles); + AWindowHandler_releaseANativeWindowEnv(p_awh, p_env, AWindow_Video); + AWindowHandler_releaseANativeWindowEnv(p_awh, p_env, AWindow_Subtitles); (*p_env)->DeleteGlobalRef(p_env, p_awh->jobj); } @@ -551,41 +558,22 @@ AWindowHandler_getANativeWindowPrivAPI(AWindowHandler *p_awh) return &p_awh->anwpriv_api; } -jobject -AWindowHandler_getSurface(AWindowHandler *p_awh, enum AWindow_ID id) +static int +WindowHandler_NewSurfaceEnv(AWindowHandler *p_awh, JNIEnv *p_env, + enum AWindow_ID id) { - assert(id < AWindow_Max); - jobject jsurface; - JNIEnv *p_env; - - if (p_awh->views[id].jsurface) - return p_awh->views[id].jsurface; - - p_env = AWindowHandler_getEnv(p_awh); - if (!p_env) - return NULL; if (id == AWindow_Video) jsurface = JNI_CALL(CallObjectMethod, getVideoSurface); else jsurface = JNI_CALL(CallObjectMethod, getSubtitlesSurface); if (!jsurface) - return NULL; + return VLC_EGENERIC; p_awh->views[id].jsurface = (*p_env)->NewGlobalRef(p_env, jsurface); (*p_env)->DeleteLocalRef(p_env, jsurface); - return p_awh->views[id].jsurface; -} - -void -AWindowHandler_releaseSurface(AWindowHandler *p_awh, enum AWindow_ID id) -{ - assert(id < AWindow_Max); - - JNIEnv *p_env = AWindowHandler_getEnv(p_awh); - if (p_env) - AWindowHandler_releaseSurfaceEnv(p_awh, p_env, id); + return VLC_SUCCESS; } ANativeWindow * @@ -593,7 +581,6 @@ AWindowHandler_getANativeWindow(AWindowHandler *p_awh, enum AWindow_ID id) { assert(id < AWindow_Max); - jobject jsurf; JNIEnv *p_env; if (p_awh->views[id].p_anw) @@ -603,24 +590,34 @@ AWindowHandler_getANativeWindow(AWindowHandler *p_awh, enum AWindow_ID id) if (!p_env) return NULL; - jsurf = AWindowHandler_getSurface(p_awh, id); - if (!jsurf) + if (WindowHandler_NewSurfaceEnv(p_awh, p_env, id) != VLC_SUCCESS) return NULL; + assert(p_awh->views[id].jsurface != NULL); - p_awh->views[id].p_anw = p_awh->pf_winFromSurface(p_env, jsurf); + p_awh->views[id].p_anw = p_awh->pf_winFromSurface(p_env, + p_awh->views[id].jsurface); return p_awh->views[id].p_anw; } -void AWindowHandler_releaseANativeWindow(AWindowHandler *p_awh, - enum AWindow_ID id) +jobject +AWindowHandler_getSurface(AWindowHandler *p_awh, enum AWindow_ID id) { assert(id < AWindow_Max); - if (p_awh->views[id].p_anw) - { - p_awh->pf_winRelease(p_awh->views[id].p_anw); - p_awh->views[id].p_anw = NULL; - } + if (p_awh->views[id].jsurface) + return p_awh->views[id].jsurface; + + AWindowHandler_getANativeWindow(p_awh, id); + return p_awh->views[id].jsurface; +} + + +void AWindowHandler_releaseANativeWindow(AWindowHandler *p_awh, + enum AWindow_ID id) +{ + JNIEnv *p_env = AWindowHandler_getEnv(p_awh); + if (p_env) + AWindowHandler_releaseANativeWindowEnv(p_awh, p_env, id); } static inline AWindowHandler *jlong_AWindowHandler(jlong handle) diff --git a/modules/video_output/android/utils.h b/modules/video_output/android/utils.h index 956f5e2..5adacd6 100644 --- a/modules/video_output/android/utils.h +++ b/modules/video_output/android/utils.h @@ -139,11 +139,10 @@ bool AWindowHandler_getWindowSize(AWindowHandler *p_awh, /** * This function returns the Video or the Subtitles Android Surface attached to - * the MediaPlayer. It can be released with AWindowHandler_releaseSurface or by - * AWindowHandler_destroy. + * the MediaPlayer. It can be released with AWindowHandler_releaseANativeWindow + * or by AWindowHandler_destroy. */ jobject AWindowHandler_getSurface(AWindowHandler *p_awh, enum AWindow_ID id); -void AWindowHandler_releaseSurface(AWindowHandler *p_awh, enum AWindow_ID id); /** * This function returns the Video or the Subtitles ANativeWindow attached to _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
