Index: media/blink/webmediaplayer_impl.cc |
diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc |
index 201ab1701908483c5db5f53e9c33861b8d1f0a8f..acc31def8054823e813f94f259b7318010be1d2d 100644 |
--- a/media/blink/webmediaplayer_impl.cc |
+++ b/media/blink/webmediaplayer_impl.cc |
@@ -144,6 +144,75 @@ WebMediaPlayerImpl::WebMediaPlayerImpl( |
BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnOpacityChanged))), |
encrypted_media_support_(cdm_factory, |
client, |
+ nullptr, |
+ params.media_permission(), |
+ base::Bind(&WebMediaPlayerImpl::SetCdm, |
+ AsWeakPtr(), |
+ base::Bind(&IgnoreCdmAttached))), |
+ renderer_factory_(renderer_factory.Pass()) { |
+ media_log_->AddEvent( |
+ media_log_->CreateEvent(MediaLogEvent::WEBMEDIAPLAYER_CREATED)); |
+ |
+ if (params.initial_cdm()) { |
+ SetCdm(base::Bind(&IgnoreCdmAttached), |
+ ToWebContentDecryptionModuleImpl(params.initial_cdm()) |
+ ->GetCdmContext()); |
+ } |
+ |
+ // TODO(xhwang): When we use an external Renderer, many methods won't work, |
+ // e.g. GetCurrentFrameFromCompositor(). See http://crbug.com/434861 |
+ |
+ // Use the null sink if no sink was provided. |
+ audio_source_provider_ = new WebAudioSourceProviderImpl( |
+ params.audio_renderer_sink().get() |
+ ? params.audio_renderer_sink() |
+ : new NullAudioSink(media_task_runner_)); |
+} |
+ |
+WebMediaPlayerImpl::WebMediaPlayerImpl( |
+ blink::WebLocalFrame* frame, |
+ blink::WebMediaPlayerClient* client, |
+ blink::WebMediaPlayerEncryptedMediaClient* encrypted_client, |
+ base::WeakPtr<WebMediaPlayerDelegate> delegate, |
+ scoped_ptr<RendererFactory> renderer_factory, |
+ CdmFactory* cdm_factory, |
+ const WebMediaPlayerParams& params) |
+ : frame_(frame), |
+ network_state_(WebMediaPlayer::NetworkStateEmpty), |
+ ready_state_(WebMediaPlayer::ReadyStateHaveNothing), |
+ preload_(BufferedDataSource::AUTO), |
+ main_task_runner_(base::ThreadTaskRunnerHandle::Get()), |
+ media_task_runner_(params.media_task_runner()), |
+ media_log_(params.media_log()), |
+ pipeline_(media_task_runner_, media_log_.get()), |
+ load_type_(LoadTypeURL), |
+ opaque_(false), |
+ paused_(true), |
+ seeking_(false), |
+ playback_rate_(0.0), |
+ ended_(false), |
+ pending_seek_(false), |
+ pending_seek_seconds_(0.0f), |
+ should_notify_time_changed_(false), |
+ client_(client), |
+ encrypted_client_(encrypted_client), |
+ delegate_(delegate), |
+ defer_load_cb_(params.defer_load_cb()), |
+ context_3d_cb_(params.context_3d_cb()), |
+ supports_save_(true), |
+ chunk_demuxer_(NULL), |
+ // Threaded compositing isn't enabled universally yet. |
+ compositor_task_runner_( |
+ params.compositor_task_runner() |
+ ? params.compositor_task_runner() |
+ : base::MessageLoop::current()->task_runner()), |
+ compositor_(new VideoFrameCompositor( |
+ compositor_task_runner_, |
+ BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnNaturalSizeChanged), |
+ BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnOpacityChanged))), |
+ encrypted_media_support_(cdm_factory, |
+ client, |
+ encrypted_client, |
params.media_permission(), |
base::Bind(&WebMediaPlayerImpl::SetCdm, |
AsWeakPtr(), |
@@ -686,15 +755,23 @@ void WebMediaPlayerImpl::OnEncryptedMediaInitData( |
client_->encrypted(ConvertToWebInitDataType(init_data_type), |
vector_as_array(&init_data), |
base::saturated_cast<unsigned int>(init_data.size())); |
+ if (encrypted_client_) |
+ encrypted_client_->encrypted( |
+ ConvertToWebInitDataType(init_data_type), vector_as_array(&init_data), |
+ base::saturated_cast<unsigned int>(init_data.size())); |
} |
void WebMediaPlayerImpl::OnWaitingForDecryptionKey() { |
client_->didBlockPlaybackWaitingForKey(); |
+ if (encrypted_client_) |
+ encrypted_client_->didBlockPlaybackWaitingForKey(); |
// TODO(jrummell): didResumePlaybackBlockedForKey() should only be called |
// when a key has been successfully added (e.g. OnSessionKeysChange() with |
// |has_additional_usable_key| = true). http://crbug.com/461903 |
client_->didResumePlaybackBlockedForKey(); |
+ if (encrypted_client_) |
+ encrypted_client_->didResumePlaybackBlockedForKey(); |
} |
void WebMediaPlayerImpl::SetCdm(const CdmAttachedCB& cdm_attached_cb, |