diff --git a/media/jni/android_media_MediaPlayer.cpp b/media/jni/android_media_MediaPlayer.cpp index 5dfbe01396a11..f16a029a36cf5 100644 --- a/media/jni/android_media_MediaPlayer.cpp +++ b/media/jni/android_media_MediaPlayer.cpp @@ -244,6 +244,15 @@ getVideoSurfaceTexture(JNIEnv* env, jobject thiz) { return sp(p); } +static void +decVideoSurfaceRef(JNIEnv *env, jobject thiz) +{ + sp old_st = getVideoSurfaceTexture(env, thiz); + if (old_st != NULL) { + old_st->decStrong(thiz); + } +} + static void setVideoSurface(JNIEnv *env, jobject thiz, jobject jsurface, jboolean mediaPlayerMustBeAlive) { @@ -255,16 +264,15 @@ setVideoSurface(JNIEnv *env, jobject thiz, jobject jsurface, jboolean mediaPlaye return; } - sp old_st = getVideoSurfaceTexture(env, thiz); + decVideoSurfaceRef(env, thiz); + sp new_st; if (jsurface) { sp surface(Surface_getSurface(env, jsurface)); new_st = surface->getSurfaceTexture(); new_st->incStrong(thiz); } - if (old_st != NULL) { - old_st->decStrong(thiz); - } + env->SetIntField(thiz, fields.surface_texture, (int)new_st.get()); // This will fail if the media player has not been initialized yet. This @@ -625,7 +633,7 @@ static void android_media_MediaPlayer_release(JNIEnv *env, jobject thiz) { LOGV("release"); - setVideoSurface(env, thiz, NULL, false /* mediaPlayerMustBeAlive */); + decVideoSurfaceRef(env, thiz); sp mp = setMediaPlayer(env, thiz, 0); if (mp != NULL) { // this prevents native callbacks after the object is released