| Index: media/blink/webmediaplayer_impl.cc
|
| diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc
|
| index e56b4bb17a0bc88f2c75e690abca676b8fcddeb9..6b2a26050adc6edf35dc7e7b10104d36ec540430 100644
|
| --- a/media/blink/webmediaplayer_impl.cc
|
| +++ b/media/blink/webmediaplayer_impl.cc
|
| @@ -160,6 +160,7 @@ WebMediaPlayerImpl::WebMediaPlayerImpl(
|
| client_(client),
|
| encrypted_client_(encrypted_client),
|
| delegate_(delegate),
|
| + delegate_id_(0),
|
| defer_load_cb_(params.defer_load_cb()),
|
| context_3d_cb_(params.context_3d_cb()),
|
| adjust_allocated_memory_cb_(params.adjust_allocated_memory_cb()),
|
| @@ -184,14 +185,16 @@ WebMediaPlayerImpl::WebMediaPlayerImpl(
|
| base::Bind(&IgnoreCdmAttached))),
|
| is_cdm_attached_(false),
|
| #if defined(OS_ANDROID) // WMPI_CAST
|
| - cast_impl_(this, client_, params.context_3d_cb(), delegate),
|
| + cast_impl_(this, client_, params.context_3d_cb()),
|
| #endif
|
| + volume_(1.0),
|
| + volume_multiplier_(1.0),
|
| renderer_factory_(std::move(renderer_factory)) {
|
| DCHECK(!adjust_allocated_memory_cb_.is_null());
|
| DCHECK(renderer_factory_);
|
|
|
| - if (delegate)
|
| - delegate->AddObserver(this);
|
| + if (delegate_)
|
| + delegate_id_ = delegate_->AddObserver(this);
|
|
|
| media_log_->AddEvent(
|
| media_log_->CreateEvent(MediaLogEvent::WEBMEDIAPLAYER_CREATED));
|
| @@ -218,8 +221,8 @@ WebMediaPlayerImpl::~WebMediaPlayerImpl() {
|
| DCHECK(main_task_runner_->BelongsToCurrentThread());
|
|
|
| if (delegate_) {
|
| - delegate_->RemoveObserver(this);
|
| - delegate_->PlayerGone(this);
|
| + delegate_->PlayerGone(delegate_id_);
|
| + delegate_->RemoveObserver(delegate_id_);
|
| }
|
|
|
| // Abort any pending IO so stopping the pipeline doesn't get blocked.
|
| @@ -309,7 +312,7 @@ void WebMediaPlayerImpl::DoLoad(LoadType load_type,
|
| base::Bind(&WebMediaPlayerImpl::DataSourceInitialized, AsWeakPtr()));
|
|
|
| #if defined(OS_ANDROID) // WMPI_CAST
|
| - cast_impl_.Initialize(url, frame_);
|
| + cast_impl_.Initialize(url, frame_, delegate_id_);
|
| #endif
|
| }
|
|
|
| @@ -332,7 +335,7 @@ void WebMediaPlayerImpl::play() {
|
|
|
| media_log_->AddEvent(media_log_->CreateEvent(MediaLogEvent::PLAY));
|
|
|
| - if (delegate_ && playback_rate_ > 0)
|
| + if (playback_rate_ > 0)
|
| NotifyPlaybackStarted();
|
| }
|
|
|
| @@ -355,7 +358,7 @@ void WebMediaPlayerImpl::pause() {
|
|
|
| media_log_->AddEvent(media_log_->CreateEvent(MediaLogEvent::PAUSE));
|
|
|
| - if (!was_already_paused && delegate_)
|
| + if (!was_already_paused)
|
| NotifyPlaybackPaused();
|
| }
|
|
|
| @@ -475,9 +478,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 +495,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 +918,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 +966,8 @@ void WebMediaPlayerImpl::OnPipelineSuspended(PipelineStatus status) {
|
| }
|
|
|
| suspending_ = false;
|
| + if (delegate_)
|
| + delegate_->PlayerGone(delegate_id_);
|
|
|
| #if defined(OS_ANDROID)
|
| if (isRemote()) {
|
| @@ -1188,6 +1197,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 +1496,10 @@ void WebMediaPlayerImpl::NotifyPlaybackStarted() {
|
| if (isRemote())
|
| return;
|
| #endif
|
| - if (delegate_)
|
| - delegate_->DidPlay(this);
|
| + if (delegate_) {
|
| + delegate_->DidPlay(delegate_id_, 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 +1513,7 @@ void WebMediaPlayerImpl::NotifyPlaybackPaused() {
|
| return;
|
| #endif
|
| if (delegate_)
|
| - delegate_->DidPause(this);
|
| + delegate_->DidPause(delegate_id_, ended_);
|
| memory_usage_reporting_timer_.Stop();
|
| ReportMemoryUsage();
|
| }
|
|
|