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 a9bf7e42900a7528ce284ee442aa8771b468d65a..a6877709e11b28faf59685998e5523a6df4eb4fa 100644 |
--- a/media/base/android/media_player_bridge.cc |
+++ b/media/base/android/media_player_bridge.cc |
@@ -48,7 +48,8 @@ MediaPlayerBridge::MediaPlayerBridge( |
can_pause_(true), |
can_seek_forward_(true), |
can_seek_backward_(true), |
- volume_(-1.0), |
+ initial_volume_(-1.0), |
+ current_volume_(-1.0), |
allow_credentials_(allow_credentials), |
weak_factory_(this) { |
} |
@@ -99,8 +100,8 @@ void MediaPlayerBridge::CreateJavaMediaPlayerBridge() { |
j_media_player_bridge_.Reset(Java_MediaPlayerBridge_create( |
env, reinterpret_cast<intptr_t>(this))); |
- if (volume_ >= 0) |
- SetVolume(volume_); |
+ if (initial_volume_ >= 0) |
+ SetVolume(initial_volume_); |
AttachListener(j_media_player_bridge_.obj()); |
} |
@@ -355,6 +356,8 @@ void MediaPlayerBridge::Release() { |
if (j_media_player_bridge_.is_null()) |
return; |
+ SetAudible(false); |
+ |
time_update_timer_.Stop(); |
if (prepared_) { |
pending_seek_ = GetCurrentTime(); |
@@ -372,14 +375,23 @@ void MediaPlayerBridge::Release() { |
void MediaPlayerBridge::SetVolume(double volume) { |
if (j_media_player_bridge_.is_null()) { |
- volume_ = volume; |
+ initial_volume_ = volume; |
return; |
} |
JNIEnv* env = base::android::AttachCurrentThread(); |
CHECK(env); |
+ |
+ // Update the audible state if we are playing. |
+ jboolean is_playing = Java_MediaPlayerBridge_isPlaying( |
+ env, j_media_player_bridge_.obj()); |
+ if (is_playing) |
+ SetAudible(volume > 0); |
+ |
Java_MediaPlayerBridge_setVolume( |
env, j_media_player_bridge_.obj(), volume); |
+ |
+ current_volume_ = volume; |
} |
void MediaPlayerBridge::OnVideoSizeChanged(int width, int height) { |
@@ -389,11 +401,13 @@ void MediaPlayerBridge::OnVideoSizeChanged(int width, int height) { |
} |
void MediaPlayerBridge::OnPlaybackComplete() { |
+ SetAudible(false); |
time_update_timer_.Stop(); |
MediaPlayerAndroid::OnPlaybackComplete(); |
} |
void MediaPlayerBridge::OnMediaInterrupted() { |
+ SetAudible(false); |
time_update_timer_.Stop(); |
MediaPlayerAndroid::OnMediaInterrupted(); |
} |
@@ -453,9 +467,13 @@ void MediaPlayerBridge::StartInternal() { |
base::TimeDelta::FromMilliseconds(kTimeUpdateInterval), |
this, &MediaPlayerBridge::OnTimeUpdateTimerFired); |
} |
+ |
+ SetAudible(current_volume_ > 0); |
} |
void MediaPlayerBridge::PauseInternal() { |
+ SetAudible(false); |
+ |
JNIEnv* env = base::android::AttachCurrentThread(); |
Java_MediaPlayerBridge_pause(env, j_media_player_bridge_.obj()); |
time_update_timer_.Stop(); |