| Index: content/renderer/media/webmediaplayer_ms.cc
|
| diff --git a/content/renderer/media/webmediaplayer_ms.cc b/content/renderer/media/webmediaplayer_ms.cc
|
| index e302d9dcd93942855a9fcf649416c213952e3f51..d0e107870a5064d3454106a9dc7df4c7f9514156 100644
|
| --- a/content/renderer/media/webmediaplayer_ms.cc
|
| +++ b/content/renderer/media/webmediaplayer_ms.cc
|
| @@ -32,12 +32,6 @@
|
|
|
| namespace content {
|
|
|
| -namespace {
|
| -
|
| -static const float DEFAULT_AUDIO_VOLUME = 1.0f;
|
| -
|
| -} // anonymous namespace
|
| -
|
| WebMediaPlayerMS::WebMediaPlayerMS(
|
| blink::WebFrame* frame,
|
| blink::WebMediaPlayerClient* client,
|
| @@ -50,13 +44,13 @@ WebMediaPlayerMS::WebMediaPlayerMS(
|
| media::GpuVideoAcceleratorFactories* gpu_factories,
|
| const blink::WebString& sink_id,
|
| const blink::WebSecurityOrigin& security_origin)
|
| - : RenderFrameObserver(RenderFrame::FromWebFrame(frame)),
|
| - frame_(frame),
|
| + : frame_(frame),
|
| network_state_(WebMediaPlayer::NetworkStateEmpty),
|
| ready_state_(WebMediaPlayer::ReadyStateHaveNothing),
|
| buffered_(static_cast<size_t>(0)),
|
| client_(client),
|
| delegate_(delegate),
|
| + delegate_id_(0),
|
| paused_(true),
|
| render_frame_suspended_(false),
|
| received_first_frame_(false),
|
| @@ -69,9 +63,14 @@ WebMediaPlayerMS::WebMediaPlayerMS(
|
| initial_audio_output_device_id_(sink_id.utf8()),
|
| initial_security_origin_(security_origin.isNull()
|
| ? url::Origin()
|
| - : url::Origin(security_origin)) {
|
| + : url::Origin(security_origin)),
|
| + volume_(1.0),
|
| + volume_multiplier_(1.0) {
|
| DVLOG(1) << __FUNCTION__;
|
| DCHECK(client);
|
| + if (delegate_)
|
| + delegate_id_ = delegate_->AddObserver(this);
|
| +
|
| media_log_->AddEvent(
|
| media_log_->CreateEvent(media::MediaLogEvent::WEBMEDIAPLAYER_CREATED));
|
| }
|
| @@ -94,8 +93,10 @@ WebMediaPlayerMS::~WebMediaPlayerMS() {
|
| media_log_->AddEvent(
|
| media_log_->CreateEvent(media::MediaLogEvent::WEBMEDIAPLAYER_DESTROYED));
|
|
|
| - if (delegate_.get())
|
| - delegate_->PlayerGone(this);
|
| + if (delegate_) {
|
| + delegate_->PlayerGone(delegate_id_);
|
| + delegate_->RemoveObserver(delegate_id_);
|
| + }
|
| }
|
|
|
| void WebMediaPlayerMS::load(LoadType load_type,
|
| @@ -137,7 +138,7 @@ void WebMediaPlayerMS::load(LoadType load_type,
|
| }
|
|
|
| if (audio_renderer_) {
|
| - audio_renderer_->SetVolume(DEFAULT_AUDIO_VOLUME);
|
| + audio_renderer_->SetVolume(volume_);
|
| audio_renderer_->Start();
|
| }
|
| if (video_frame_provider_)
|
| @@ -161,8 +162,10 @@ void WebMediaPlayerMS::play() {
|
| if (audio_renderer_.get())
|
| audio_renderer_->Play();
|
|
|
| - if (delegate_.get())
|
| - delegate_->DidPlay(this);
|
| + if (delegate_) {
|
| + delegate_->DidPlay(delegate_id_, hasVideo(), hasAudio(), false,
|
| + media::kInfiniteDuration());
|
| + }
|
| }
|
|
|
| paused_ = false;
|
| @@ -184,8 +187,8 @@ void WebMediaPlayerMS::pause() {
|
| if (audio_renderer_.get())
|
| audio_renderer_->Pause();
|
|
|
| - if (delegate_.get())
|
| - delegate_->DidPause(this);
|
| + if (delegate_)
|
| + delegate_->DidPause(delegate_id_, false);
|
| }
|
|
|
| paused_ = true;
|
| @@ -209,8 +212,9 @@ void WebMediaPlayerMS::setRate(double rate) {
|
| void WebMediaPlayerMS::setVolume(double volume) {
|
| DVLOG(1) << __FUNCTION__ << "(volume=" << volume << ")";
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
| + volume_ = volume;
|
| if (audio_renderer_.get())
|
| - audio_renderer_->SetVolume(volume);
|
| + audio_renderer_->SetVolume(volume_ * volume_multiplier_);
|
| }
|
|
|
| void WebMediaPlayerMS::setSinkId(
|
| @@ -360,7 +364,7 @@ unsigned WebMediaPlayerMS::videoDecodedByteCount() const {
|
| return 0;
|
| }
|
|
|
| -void WebMediaPlayerMS::WasHidden() {
|
| +void WebMediaPlayerMS::OnHidden() {
|
| #if defined(OS_ANDROID)
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
| DCHECK(!render_frame_suspended_);
|
| @@ -368,13 +372,13 @@ void WebMediaPlayerMS::WasHidden() {
|
| // Method called when the RenderFrame is sent to background and suspended
|
| // (android). Substitute the displayed VideoFrame with a copy to avoid
|
| // holding on to it unnecessarily.
|
| - render_frame_suspended_=true;
|
| + render_frame_suspended_ = true;
|
| if (!paused_)
|
| compositor_->ReplaceCurrentFrameWithACopy();
|
| #endif // defined(OS_ANDROID)
|
| }
|
|
|
| -void WebMediaPlayerMS::WasShown() {
|
| +void WebMediaPlayerMS::OnShown() {
|
| #if defined(OS_ANDROID)
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
|
|
| @@ -382,6 +386,21 @@ void WebMediaPlayerMS::WasShown() {
|
| #endif // defined(OS_ANDROID)
|
| }
|
|
|
| +void WebMediaPlayerMS::OnPlay() {
|
| + play();
|
| + client_->playbackStateChanged();
|
| +}
|
| +
|
| +void WebMediaPlayerMS::OnPause() {
|
| + pause();
|
| + client_->playbackStateChanged();
|
| +}
|
| +
|
| +void WebMediaPlayerMS::OnVolumeMultiplierUpdate(double multiplier) {
|
| + volume_multiplier_ = multiplier;
|
| + setVolume(volume_);
|
| +}
|
| +
|
| bool WebMediaPlayerMS::copyVideoTextureToPlatformTexture(
|
| blink::WebGraphicsContext3D* web_graphics_context,
|
| unsigned int texture,
|
|
|