Chromium Code Reviews| 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()); |