Index: media/base/android/media_player_bridge.cc |
diff --git a/media/base/android/media_player_bridge.cc b/media/base/android/media_player_bridge.cc |
index 64e2db849ea151798585db4ccb53488e40ed15c1..88c57ff44d3003875677f2ffcfd8e4ed2fa878a7 100644 |
--- a/media/base/android/media_player_bridge.cc |
+++ b/media/base/android/media_player_bridge.cc |
@@ -74,6 +74,13 @@ void MediaPlayerBridge::CreateJavaMediaPlayerBridge() { |
j_media_player_bridge_.Reset(Java_MediaPlayerBridge_create(env)); |
+ if (!surface_.IsEmpty()) { |
+ JNIEnv* env = base::android::AttachCurrentThread(); |
qinmin
2013/11/22 18:06:55
env is already defined inside this function.
|
+ CHECK(env); |
+ Java_MediaPlayerBridge_setSurface( |
+ env, j_media_player_bridge_.obj(), surface_.j_surface().obj()); |
+ } |
+ |
SetMediaPlayerListener(); |
} |
@@ -110,11 +117,13 @@ void MediaPlayerBridge::SetVideoSurface(gfx::ScopedJavaSurface surface) { |
Prepare(); |
} |
+ surface_ = surface.Pass(); |
+ |
JNIEnv* env = base::android::AttachCurrentThread(); |
CHECK(env); |
Java_MediaPlayerBridge_setSurface( |
- env, j_media_player_bridge_.obj(), surface.j_surface().obj()); |
+ env, j_media_player_bridge_.obj(), surface_.j_surface().obj()); |
} |
void MediaPlayerBridge::Prepare() { |
@@ -265,9 +274,12 @@ void MediaPlayerBridge::Release() { |
pending_seek_ = GetCurrentTime(); |
prepared_ = false; |
pending_play_ = false; |
- SetVideoSurface(gfx::ScopedJavaSurface()); |
+ // Detach the surface from the java side player. We still hold our reference |
+ // to it because we might reuse it when restarting with a new player. |
JNIEnv* env = base::android::AttachCurrentThread(); |
+ Java_MediaPlayerBridge_setSurface(env, j_media_player_bridge_.obj(), NULL); |
+ |
Java_MediaPlayerBridge_release(env, j_media_player_bridge_.obj()); |
j_media_player_bridge_.Reset(); |
manager()->ReleaseMediaResources(player_id()); |