summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndroid (Google) Code Review <android-gerrit@google.com>2009-05-29 14:18:55 -0700
committerThe Android Open Source Project <initial-contribution@android.com>2009-05-29 14:18:55 -0700
commit27b3eaf4de9e093bef27803dcfc6d572be5b08ca (patch)
treeba29f1d31617770224c63ea9b3f5605de780424c
parent0a91b0be8f0eedc52f5b1f68d3bf6f64f13d7228 (diff)
parent0f5179c7d333ddab729b5943766637c21d1b74db (diff)
downloadframeworks_base-27b3eaf4de9e093bef27803dcfc6d572be5b08ca.zip
frameworks_base-27b3eaf4de9e093bef27803dcfc6d572be5b08ca.tar.gz
frameworks_base-27b3eaf4de9e093bef27803dcfc6d572be5b08ca.tar.bz2
am 0f5179c7: Merge change 2716 into donut
Merge commit '0f5179c7d333ddab729b5943766637c21d1b74db' * commit '0f5179c7d333ddab729b5943766637c21d1b74db': Update MediaPlayer to allow setVideoSurface calls after prepare. Also allow
-rw-r--r--media/java/android/media/MediaPlayer.java12
-rw-r--r--media/jni/android_media_MediaPlayer.cpp30
2 files changed, 34 insertions, 8 deletions
diff --git a/media/java/android/media/MediaPlayer.java b/media/java/android/media/MediaPlayer.java
index 19ab0ad..d3743e6 100644
--- a/media/java/android/media/MediaPlayer.java
+++ b/media/java/android/media/MediaPlayer.java
@@ -468,6 +468,11 @@ public class MediaPlayer
*/
native_setup(new WeakReference<MediaPlayer>(this));
}
+
+ /*
+ * Update the MediaPlayer ISurface. Call after updating mSurface.
+ */
+ private native void _setVideoSurface();
/**
* Sets the SurfaceHolder to use for displaying the video portion of the media.
@@ -478,7 +483,12 @@ public class MediaPlayer
*/
public void setDisplay(SurfaceHolder sh) {
mSurfaceHolder = sh;
- mSurface = sh.getSurface();
+ if (sh != null) {
+ mSurface = sh.getSurface();
+ } else {
+ mSurface = null;
+ }
+ _setVideoSurface();
updateSurfaceScreenOn();
}
diff --git a/media/jni/android_media_MediaPlayer.cpp b/media/jni/android_media_MediaPlayer.cpp
index 707db02..5abe451 100644
--- a/media/jni/android_media_MediaPlayer.cpp
+++ b/media/jni/android_media_MediaPlayer.cpp
@@ -198,22 +198,37 @@ android_media_MediaPlayer_setDataSourceFD(JNIEnv *env, jobject thiz, jobject fil
process_media_player_call( env, thiz, mp->setDataSource(fd, offset, length), "java/io/IOException", "setDataSourceFD failed." );
}
+static void setVideoSurface(const sp<MediaPlayer>& mp, JNIEnv *env, jobject thiz)
+{
+ jobject surface = env->GetObjectField(thiz, fields.surface);
+ if (surface != NULL) {
+ const sp<Surface>& native_surface = get_surface(env, surface);
+ LOGV("prepare: surface=%p (id=%d)",
+ native_surface.get(), native_surface->ID());
+ mp->setVideoSurface(native_surface);
+ }
+}
static void
-android_media_MediaPlayer_prepare(JNIEnv *env, jobject thiz)
+android_media_MediaPlayer_setVideoSurface(JNIEnv *env, jobject thiz)
{
sp<MediaPlayer> mp = getMediaPlayer(env, thiz);
if (mp == NULL ) {
jniThrowException(env, "java/lang/IllegalStateException", NULL);
return;
}
- jobject surface = env->GetObjectField(thiz, fields.surface);
- if (surface != NULL) {
- const sp<Surface>& native_surface = get_surface(env, surface);
- LOGV("prepare: surface=%p (id=%d)",
- native_surface.get(), native_surface->ID());
- mp->setVideoSurface(native_surface);
+ setVideoSurface(mp, env, thiz);
+}
+
+static void
+android_media_MediaPlayer_prepare(JNIEnv *env, jobject thiz)
+{
+ sp<MediaPlayer> mp = getMediaPlayer(env, thiz);
+ if (mp == NULL ) {
+ jniThrowException(env, "java/lang/IllegalStateException", NULL);
+ return;
}
+ setVideoSurface(mp, env, thiz);
process_media_player_call( env, thiz, mp->prepare(), "java/io/IOException", "Prepare failed." );
}
@@ -469,6 +484,7 @@ android_media_MediaPlayer_native_finalize(JNIEnv *env, jobject thiz)
static JNINativeMethod gMethods[] = {
{"setDataSource", "(Ljava/lang/String;)V", (void *)android_media_MediaPlayer_setDataSource},
{"setDataSource", "(Ljava/io/FileDescriptor;JJ)V", (void *)android_media_MediaPlayer_setDataSourceFD},
+ {"_setVideoSurface", "()V", (void *)android_media_MediaPlayer_setVideoSurface},
{"prepare", "()V", (void *)android_media_MediaPlayer_prepare},
{"prepareAsync", "()V", (void *)android_media_MediaPlayer_prepareAsync},
{"_start", "()V", (void *)android_media_MediaPlayer_start},