diff --git a/ijkmedia/ijkplayer/android/ijkplayer_android.c b/ijkmedia/ijkplayer/android/ijkplayer_android.c index 5e97f3bdd8cb922e4713c273eb6d2ed7d0e4226d..d1e47a11e7359c75db1be087ba4b9b5b8c011ac5 100644 --- a/ijkmedia/ijkplayer/android/ijkplayer_android.c +++ b/ijkmedia/ijkplayer/android/ijkplayer_android.c @@ -51,16 +51,17 @@ IjkMediaPlayer *ijkmp_android_create(int(*msg_loop)(void*)) void ijkmp_android_set_surface_l(JNIEnv *env, IjkMediaPlayer *mp, jobject android_surface) { - assert(mp); - assert(mp->ffplayer); - assert(mp->ffplayer->vout); + if (!mp || !mp->ffplayer || !mp->ffplayer->vout) + return; SDL_VoutAndroid_SetAndroidSurface(env, mp->ffplayer->vout, android_surface); } void ijkmp_android_set_surface(JNIEnv *env, IjkMediaPlayer *mp, jobject android_surface) { - assert(mp); + if (!mp) + return; + MPTRACE("ijkmp_set_android_surface(surface=%p)", (void*)android_surface); pthread_mutex_lock(&mp->mutex); ijkmp_android_set_surface_l(env, mp, android_surface); diff --git a/ijkmedia/ijkplayer/android/ijkplayer_jni.c b/ijkmedia/ijkplayer/android/ijkplayer_jni.c index 920f606e2d5e6bd6892a9e4632e577d534304a84..97642c164a9b2dcddade4a97db81663c31a06402 100644 --- a/ijkmedia/ijkplayer/android/ijkplayer_jni.c +++ b/ijkmedia/ijkplayer/android/ijkplayer_jni.c @@ -242,6 +242,7 @@ IjkMediaPlayer_release(JNIEnv *env, jobject thiz) return; // explicit shutdown mp, in case it is not the last mp-ref here + ijkmp_android_set_surface(env, mp, NULL); ijkmp_shutdown(mp); jni_set_media_player(env, thiz, NULL); @@ -255,6 +256,7 @@ IjkMediaPlayer_reset(JNIEnv *env, jobject thiz) IjkMediaPlayer *mp = jni_get_media_player(env, thiz); JNI_CHECK_GOTO(mp, env, NULL, "mpjni: reset: null mp", LABEL_RETURN); + ijkmp_android_set_surface(env, mp, NULL); ijkmp_reset(mp); LABEL_RETURN: diff --git a/ijkmedia/ijksdl/android/ijksdl_vout_android_surface.c b/ijkmedia/ijksdl/android/ijksdl_vout_android_surface.c index 9790883612981ae24a5892a1b15a76ca85229fe1..9b82f3c248263451ae744503b8e1424e91e9b4b3 100644 --- a/ijkmedia/ijksdl/android/ijksdl_vout_android_surface.c +++ b/ijkmedia/ijksdl/android/ijksdl_vout_android_surface.c @@ -35,13 +35,11 @@ SDL_Vout *SDL_VoutAndroid_CreateForAndroidSurface() void SDL_VoutAndroid_SetAndroidSurface(JNIEnv *env, SDL_Vout *vout, jobject android_surface) { - if (!android_surface) - return; - - ANativeWindow *native_window = ANativeWindow_fromSurface(env, android_surface); - if (!native_window) - return; + ANativeWindow *native_window = NULL; + if (android_surface) + native_window = ANativeWindow_fromSurface(env, android_surface); SDL_VoutAndroid_SetNativeWindow(vout, native_window); - ANativeWindow_release(native_window); + if (native_window) + ANativeWindow_release(native_window); }