Index: media/blink/webmediaplayer_impl.cc |
diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc |
index e56b4bb17a0bc88f2c75e690abca676b8fcddeb9..507defb522601508fd8d0cca4a1477de35edf6fe 100644 |
--- a/media/blink/webmediaplayer_impl.cc |
+++ b/media/blink/webmediaplayer_impl.cc |
@@ -186,6 +186,8 @@ WebMediaPlayerImpl::WebMediaPlayerImpl( |
#if defined(OS_ANDROID) // WMPI_CAST |
cast_impl_(this, client_, params.context_3d_cb(), delegate), |
#endif |
+ volume_(1.0), |
+ volume_multiplier_(1.0), |
renderer_factory_(std::move(renderer_factory)) { |
DCHECK(!adjust_allocated_memory_cb_.is_null()); |
DCHECK(renderer_factory_); |
@@ -218,8 +220,8 @@ WebMediaPlayerImpl::~WebMediaPlayerImpl() { |
DCHECK(main_task_runner_->BelongsToCurrentThread()); |
if (delegate_) { |
- delegate_->RemoveObserver(this); |
delegate_->PlayerGone(this); |
+ delegate_->RemoveObserver(this); |
} |
// Abort any pending IO so stopping the pipeline doesn't get blocked. |
@@ -332,7 +334,7 @@ void WebMediaPlayerImpl::play() { |
media_log_->AddEvent(media_log_->CreateEvent(MediaLogEvent::PLAY)); |
- if (delegate_ && playback_rate_ > 0) |
+ if (playback_rate_ > 0) |
NotifyPlaybackStarted(); |
} |
@@ -355,7 +357,7 @@ void WebMediaPlayerImpl::pause() { |
media_log_->AddEvent(media_log_->CreateEvent(MediaLogEvent::PAUSE)); |
- if (!was_already_paused && delegate_) |
+ if (!was_already_paused) |
NotifyPlaybackPaused(); |
} |
@@ -475,9 +477,9 @@ void WebMediaPlayerImpl::setRate(double rate) { |
rate = kMinRate; |
else if (rate > kMaxRate) |
rate = kMaxRate; |
- if (playback_rate_ == 0 && !paused_ && delegate_) |
+ if (playback_rate_ == 0 && !paused_) |
NotifyPlaybackStarted(); |
- } else if (playback_rate_ != 0 && !paused_ && delegate_) { |
+ } else if (playback_rate_ != 0 && !paused_) { |
NotifyPlaybackPaused(); |
} |
@@ -492,8 +494,8 @@ void WebMediaPlayerImpl::setRate(double rate) { |
void WebMediaPlayerImpl::setVolume(double volume) { |
DVLOG(1) << __FUNCTION__ << "(" << volume << ")"; |
DCHECK(main_task_runner_->BelongsToCurrentThread()); |
- |
- pipeline_.SetVolume(volume); |
+ volume_ = volume; |
+ pipeline_.SetVolume(volume_ * volume_multiplier_); |
} |
void WebMediaPlayerImpl::setSinkId( |
@@ -915,6 +917,10 @@ void WebMediaPlayerImpl::OnPipelineSeeked(bool time_changed, |
return; |
} |
+ // If we we're resuming into the playing state, notify the delegate. |
+ if (resuming_ && playback_rate_ > 0 && !paused_) |
+ NotifyPlaybackStarted(); |
+ |
// Whether or not the seek was caused by a resume, we're not suspended now. |
resuming_ = false; |
suspended_ = false; |
@@ -959,6 +965,8 @@ void WebMediaPlayerImpl::OnPipelineSuspended(PipelineStatus status) { |
} |
suspending_ = false; |
+ if (delegate_) |
+ delegate_->PlayerGone(this); |
#if defined(OS_ANDROID) |
if (isRemote()) { |
@@ -1188,6 +1196,21 @@ void WebMediaPlayerImpl::ScheduleResume() { |
Resume(); |
} |
+void WebMediaPlayerImpl::OnPlay() { |
+ play(); |
+ client_->playbackStateChanged(); |
+} |
+ |
+void WebMediaPlayerImpl::OnPause() { |
+ pause(); |
+ client_->playbackStateChanged(); |
+} |
+ |
+void WebMediaPlayerImpl::OnVolumeMultiplierUpdate(double multiplier) { |
+ volume_multiplier_ = multiplier; |
+ setVolume(volume_); |
+} |
+ |
void WebMediaPlayerImpl::Resume() { |
DCHECK(main_task_runner_->BelongsToCurrentThread()); |
CHECK(suspended_); |
@@ -1472,8 +1495,10 @@ void WebMediaPlayerImpl::NotifyPlaybackStarted() { |
if (isRemote()) |
return; |
#endif |
- if (delegate_) |
- delegate_->DidPlay(this); |
+ if (delegate_) { |
+ delegate_->DidPlay(this, hasVideo(), hasAudio(), false, |
+ pipeline_.GetMediaDuration()); |
+ } |
if (!memory_usage_reporting_timer_.IsRunning()) { |
memory_usage_reporting_timer_.Start(FROM_HERE, |
base::TimeDelta::FromSeconds(2), this, |
@@ -1487,7 +1512,7 @@ void WebMediaPlayerImpl::NotifyPlaybackPaused() { |
return; |
#endif |
if (delegate_) |
- delegate_->DidPause(this); |
+ delegate_->DidPause(this, ended_); |
memory_usage_reporting_timer_.Stop(); |
ReportMemoryUsage(); |
} |