Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(344)

Unified Diff: content/renderer/media/webmediaplayer_ms.cc

Issue 1570043002: Implement MediaSession on top of the WebMediaPlayerDelegate. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@media_session
Patch Set: Reorder. Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/renderer/media/webmediaplayer_ms.h ('k') | content/test/data/android/media/audio-1second.mp3 » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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,
« no previous file with comments | « content/renderer/media/webmediaplayer_ms.h ('k') | content/test/data/android/media/audio-1second.mp3 » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698