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 62d589de3729fa2b90d6c60fc5b8efb57411c675..e043a7878df7efa29149b60a6842fc3d4831c21d 100644 |
--- a/media/base/android/media_player_bridge.cc |
+++ b/media/base/android/media_player_bridge.cc |
@@ -28,12 +28,12 @@ MediaPlayerBridge::MediaPlayerBridge( |
const std::string& user_agent, |
bool hide_url_log, |
MediaPlayerManager* manager, |
- const RequestMediaResourcesCB& request_media_resources_cb, |
+ const OnDecoderResourcesReleasedCB& on_decoder_resources_released_cb, |
const GURL& frame_url, |
bool allow_credentials) |
: MediaPlayerAndroid(player_id, |
manager, |
- request_media_resources_cb, |
+ on_decoder_resources_released_cb, |
frame_url), |
prepared_(false), |
pending_play_(false), |
@@ -110,13 +110,14 @@ void MediaPlayerBridge::SetDuration(base::TimeDelta duration) { |
void MediaPlayerBridge::SetVideoSurface(gfx::ScopedJavaSurface surface) { |
if (j_media_player_bridge_.is_null()) { |
- if (surface.IsEmpty()) |
- return; |
- Prepare(); |
+ if (!surface.IsEmpty()) |
+ surface_ = surface.Pass(); |
+ return; |
} |
JNIEnv* env = base::android::AttachCurrentThread(); |
CHECK(env); |
+ |
Java_MediaPlayerBridge_setSurface( |
env, j_media_player_bridge_.obj(), surface.j_surface().obj()); |
} |
@@ -181,7 +182,6 @@ void MediaPlayerBridge::SetDataSource(const std::string& url) { |
} |
} |
- request_media_resources_cb_.Run(player_id()); |
if (!Java_MediaPlayerBridge_prepareAsync(env, j_media_player_bridge_.obj())) |
OnMediaError(MEDIA_ERROR_FORMAT); |
} |
@@ -212,7 +212,6 @@ void MediaPlayerBridge::OnDidSetDataUriDataSource(JNIEnv* env, jobject obj, |
return; |
} |
- request_media_resources_cb_.Run(player_id()); |
if (!Java_MediaPlayerBridge_prepareAsync(env, j_media_player_bridge_.obj())) |
OnMediaError(MEDIA_ERROR_FORMAT); |
} |
@@ -240,6 +239,7 @@ void MediaPlayerBridge::OnAuthCredentialsRetrieved( |
void MediaPlayerBridge::ExtractMediaMetadata(const std::string& url) { |
if (url.empty()) { |
OnMediaError(MEDIA_ERROR_FORMAT); |
+ on_decoder_resources_released_cb_.Run(player_id()); |
return; |
} |
@@ -268,6 +268,7 @@ void MediaPlayerBridge::OnMediaMetadataExtracted( |
} |
manager()->OnMediaMetadataChanged( |
player_id(), duration_, width_, height_, success); |
+ on_decoder_resources_released_cb_.Run(player_id()); |
} |
void MediaPlayerBridge::Start() { |
@@ -325,9 +326,7 @@ void MediaPlayerBridge::SeekTo(base::TimeDelta timestamp) { |
pending_seek_ = timestamp; |
should_seek_on_prepare_ = true; |
- if (j_media_player_bridge_.is_null()) |
- Prepare(); |
- else if (prepared_) |
+ if (prepared_) |
SeekInternal(GetCurrentTime(), timestamp); |
} |
@@ -351,6 +350,7 @@ base::TimeDelta MediaPlayerBridge::GetDuration() { |
} |
void MediaPlayerBridge::Release() { |
+ on_decoder_resources_released_cb_.Run(player_id()); |
if (j_media_player_bridge_.is_null()) |
return; |
@@ -413,6 +413,9 @@ void MediaPlayerBridge::OnMediaPrepared() { |
should_seek_on_prepare_ = false; |
} |
+ if (!surface_.IsEmpty()) |
+ SetVideoSurface(surface_.Pass()); |
+ |
if (pending_play_) { |
StartInternal(); |
pending_play_ = false; |