summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author James Dong <jdong@google.com> 2011-08-12 11:33:27 -0700
committer James Dong <jdong@google.com> 2011-08-12 16:39:47 -0700
commit43ef913815ec84d04877a698614a31e129cd97e3 (patch)
tree38983c24f478cc7582bf5db084790239a086bbdf
parent6e97ed2127bdda72fee739fe9d28011d52155b9c (diff)
If release has been called before finalize, do not expect MediaPlayer still exists
o also, we should releae the surface object when release is called, not wait until finalize is called. related-to-bug: 5157956 Change-Id: I0233ad61d8349c3e3800de68b752b9548ece1742
-rw-r--r--media/jni/android_media_MediaPlayer.cpp18
1 files changed, 13 insertions, 5 deletions
diff --git a/media/jni/android_media_MediaPlayer.cpp b/media/jni/android_media_MediaPlayer.cpp
index 13ed152c6486..354f2c94933a 100644
--- a/media/jni/android_media_MediaPlayer.cpp
+++ b/media/jni/android_media_MediaPlayer.cpp
@@ -189,6 +189,7 @@ android_media_MediaPlayer_setDataSourceAndHeaders(
if (tmp == NULL) { // Out of memory
return;
}
+ LOGV("setDataSource: path %s", tmp);
String8 pathStr(tmp);
env->ReleaseStringUTFChars(path, tmp);
@@ -201,7 +202,6 @@ android_media_MediaPlayer_setDataSourceAndHeaders(
return;
}
- LOGV("setDataSource: path %s", pathStr);
status_t opStatus =
mp->setDataSource(
pathStr,
@@ -243,11 +243,13 @@ getVideoSurfaceTexture(JNIEnv* env, jobject thiz) {
}
static void
-android_media_MediaPlayer_setVideoSurface(JNIEnv *env, jobject thiz, jobject jsurface)
+setVideoSurface(JNIEnv *env, jobject thiz, jobject jsurface, jboolean mediaPlayerMustBeAlive)
{
sp<MediaPlayer> mp = getMediaPlayer(env, thiz);
- if (mp == NULL ) {
- jniThrowException(env, "java/lang/IllegalStateException", NULL);
+ if (mp == NULL) {
+ if (mediaPlayerMustBeAlive) {
+ jniThrowException(env, "java/lang/IllegalStateException", NULL);
+ }
return;
}
@@ -271,6 +273,12 @@ android_media_MediaPlayer_setVideoSurface(JNIEnv *env, jobject thiz, jobject jsu
}
static void
+android_media_MediaPlayer_setVideoSurface(JNIEnv *env, jobject thiz, jobject jsurface)
+{
+ setVideoSurface(env, thiz, jsurface, true /* mediaPlayerMustBeAlive */);
+}
+
+static void
android_media_MediaPlayer_prepare(JNIEnv *env, jobject thiz)
{
sp<MediaPlayer> mp = getMediaPlayer(env, thiz);
@@ -615,6 +623,7 @@ static void
android_media_MediaPlayer_release(JNIEnv *env, jobject thiz)
{
LOGV("release");
+ setVideoSurface(env, thiz, NULL, false /* mediaPlayerMustBeAlive */);
sp<MediaPlayer> mp = setMediaPlayer(env, thiz, 0);
if (mp != NULL) {
// this prevents native callbacks after the object is released
@@ -627,7 +636,6 @@ static void
android_media_MediaPlayer_native_finalize(JNIEnv *env, jobject thiz)
{
LOGV("native_finalize");
- android_media_MediaPlayer_setVideoSurface(env, thiz, NULL);
android_media_MediaPlayer_release(env, thiz);
}