Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "media/blink/webmediaplayer_impl.h" | 5 #include "media/blink/webmediaplayer_impl.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <cmath> | 8 #include <cmath> |
| 9 #include <limits> | 9 #include <limits> |
| 10 | 10 |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 31 #include "media/blink/texttrack_impl.h" | 31 #include "media/blink/texttrack_impl.h" |
| 32 #include "media/blink/webaudiosourceprovider_impl.h" | 32 #include "media/blink/webaudiosourceprovider_impl.h" |
| 33 #include "media/blink/webcontentdecryptionmodule_impl.h" | 33 #include "media/blink/webcontentdecryptionmodule_impl.h" |
| 34 #include "media/blink/webinbandtexttrack_impl.h" | 34 #include "media/blink/webinbandtexttrack_impl.h" |
| 35 #include "media/blink/webmediaplayer_delegate.h" | 35 #include "media/blink/webmediaplayer_delegate.h" |
| 36 #include "media/blink/webmediaplayer_util.h" | 36 #include "media/blink/webmediaplayer_util.h" |
| 37 #include "media/blink/webmediasource_impl.h" | 37 #include "media/blink/webmediasource_impl.h" |
| 38 #include "media/filters/chunk_demuxer.h" | 38 #include "media/filters/chunk_demuxer.h" |
| 39 #include "media/filters/ffmpeg_demuxer.h" | 39 #include "media/filters/ffmpeg_demuxer.h" |
| 40 #include "third_party/WebKit/public/platform/WebEncryptedMediaTypes.h" | 40 #include "third_party/WebKit/public/platform/WebEncryptedMediaTypes.h" |
| 41 #include "third_party/WebKit/public/platform/WebMediaPlayerClient.h" | |
| 41 #include "third_party/WebKit/public/platform/WebMediaSource.h" | 42 #include "third_party/WebKit/public/platform/WebMediaSource.h" |
| 42 #include "third_party/WebKit/public/platform/WebRect.h" | 43 #include "third_party/WebKit/public/platform/WebRect.h" |
| 43 #include "third_party/WebKit/public/platform/WebSize.h" | 44 #include "third_party/WebKit/public/platform/WebSize.h" |
| 44 #include "third_party/WebKit/public/platform/WebString.h" | 45 #include "third_party/WebKit/public/platform/WebString.h" |
| 45 #include "third_party/WebKit/public/platform/WebURL.h" | 46 #include "third_party/WebKit/public/platform/WebURL.h" |
| 46 #include "third_party/WebKit/public/web/WebDocument.h" | 47 #include "third_party/WebKit/public/web/WebDocument.h" |
| 47 #include "third_party/WebKit/public/web/WebFrame.h" | 48 #include "third_party/WebKit/public/web/WebFrame.h" |
| 48 #include "third_party/WebKit/public/web/WebLocalFrame.h" | 49 #include "third_party/WebKit/public/web/WebLocalFrame.h" |
| 49 #include "third_party/WebKit/public/web/WebRuntimeFeatures.h" | 50 #include "third_party/WebKit/public/web/WebRuntimeFeatures.h" |
| 50 #include "third_party/WebKit/public/web/WebSecurityOrigin.h" | 51 #include "third_party/WebKit/public/web/WebSecurityOrigin.h" |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 96 (DCHECK(main_task_runner_->BelongsToCurrentThread()), \ | 97 (DCHECK(main_task_runner_->BelongsToCurrentThread()), \ |
| 97 BindToCurrentLoop(base::Bind(function, AsWeakPtr()))) | 98 BindToCurrentLoop(base::Bind(function, AsWeakPtr()))) |
| 98 | 99 |
| 99 #define BIND_TO_RENDER_LOOP1(function, arg1) \ | 100 #define BIND_TO_RENDER_LOOP1(function, arg1) \ |
| 100 (DCHECK(main_task_runner_->BelongsToCurrentThread()), \ | 101 (DCHECK(main_task_runner_->BelongsToCurrentThread()), \ |
| 101 BindToCurrentLoop(base::Bind(function, AsWeakPtr(), arg1))) | 102 BindToCurrentLoop(base::Bind(function, AsWeakPtr(), arg1))) |
| 102 | 103 |
| 103 WebMediaPlayerImpl::WebMediaPlayerImpl( | 104 WebMediaPlayerImpl::WebMediaPlayerImpl( |
| 104 blink::WebLocalFrame* frame, | 105 blink::WebLocalFrame* frame, |
| 105 blink::WebMediaPlayerClient* client, | 106 blink::WebMediaPlayerClient* client, |
| 107 blink::WebMediaPlayerEncryptedMediaClient* encrypted_client, | |
| 106 base::WeakPtr<WebMediaPlayerDelegate> delegate, | 108 base::WeakPtr<WebMediaPlayerDelegate> delegate, |
| 107 scoped_ptr<RendererFactory> renderer_factory, | 109 scoped_ptr<RendererFactory> renderer_factory, |
| 108 CdmFactory* cdm_factory, | 110 CdmFactory* cdm_factory, |
| 109 const WebMediaPlayerParams& params) | 111 const WebMediaPlayerParams& params) |
| 110 : frame_(frame), | 112 : frame_(frame), |
| 111 network_state_(WebMediaPlayer::NetworkStateEmpty), | 113 network_state_(WebMediaPlayer::NetworkStateEmpty), |
| 112 ready_state_(WebMediaPlayer::ReadyStateHaveNothing), | 114 ready_state_(WebMediaPlayer::ReadyStateHaveNothing), |
| 113 preload_(BufferedDataSource::AUTO), | 115 preload_(BufferedDataSource::AUTO), |
| 114 main_task_runner_(base::ThreadTaskRunnerHandle::Get()), | 116 main_task_runner_(base::ThreadTaskRunnerHandle::Get()), |
| 115 media_task_runner_(params.media_task_runner()), | 117 media_task_runner_(params.media_task_runner()), |
| 116 media_log_(params.media_log()), | 118 media_log_(params.media_log()), |
| 117 pipeline_(media_task_runner_, media_log_.get()), | 119 pipeline_(media_task_runner_, media_log_.get()), |
| 118 load_type_(LoadTypeURL), | 120 load_type_(LoadTypeURL), |
| 119 opaque_(false), | 121 opaque_(false), |
| 120 playback_rate_(0.0), | 122 playback_rate_(0.0), |
| 121 paused_(true), | 123 paused_(true), |
| 122 seeking_(false), | 124 seeking_(false), |
| 123 ended_(false), | 125 ended_(false), |
| 124 pending_seek_(false), | 126 pending_seek_(false), |
| 125 should_notify_time_changed_(false), | 127 should_notify_time_changed_(false), |
| 126 client_(client), | 128 client_(client), |
| 129 encrypted_client_(encrypted_client), | |
| 127 delegate_(delegate), | 130 delegate_(delegate), |
| 128 defer_load_cb_(params.defer_load_cb()), | 131 defer_load_cb_(params.defer_load_cb()), |
| 129 context_3d_cb_(params.context_3d_cb()), | 132 context_3d_cb_(params.context_3d_cb()), |
| 130 supports_save_(true), | 133 supports_save_(true), |
| 131 chunk_demuxer_(NULL), | 134 chunk_demuxer_(NULL), |
| 132 // Threaded compositing isn't enabled universally yet. | 135 // Threaded compositing isn't enabled universally yet. |
| 133 compositor_task_runner_( | 136 compositor_task_runner_( |
| 134 params.compositor_task_runner() | 137 params.compositor_task_runner() |
| 135 ? params.compositor_task_runner() | 138 ? params.compositor_task_runner() |
| 136 : base::MessageLoop::current()->task_runner()), | 139 : base::MessageLoop::current()->task_runner()), |
| 137 compositor_(new VideoFrameCompositor( | 140 compositor_(new VideoFrameCompositor( |
| 138 compositor_task_runner_, | 141 compositor_task_runner_, |
| 139 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnNaturalSizeChanged), | 142 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnNaturalSizeChanged), |
| 140 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnOpacityChanged))), | 143 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnOpacityChanged))), |
| 141 encrypted_media_support_(cdm_factory, | 144 encrypted_media_support_(cdm_factory, |
| 142 client, | 145 encrypted_client, |
| 143 params.media_permission(), | 146 params.media_permission(), |
| 144 base::Bind(&WebMediaPlayerImpl::SetCdm, | 147 base::Bind(&WebMediaPlayerImpl::SetCdm, |
| 145 AsWeakPtr(), | 148 AsWeakPtr(), |
| 146 base::Bind(&IgnoreCdmAttached))), | 149 base::Bind(&IgnoreCdmAttached))), |
| 147 renderer_factory_(renderer_factory.Pass()) { | 150 renderer_factory_(renderer_factory.Pass()) { |
| 148 media_log_->AddEvent( | 151 media_log_->AddEvent( |
| 149 media_log_->CreateEvent(MediaLogEvent::WEBMEDIAPLAYER_CREATED)); | 152 media_log_->CreateEvent(MediaLogEvent::WEBMEDIAPLAYER_CREATED)); |
| 150 | 153 |
| 151 if (params.initial_cdm()) { | 154 if (params.initial_cdm()) { |
| 152 SetCdm(base::Bind(&IgnoreCdmAttached), | 155 SetCdm(base::Bind(&IgnoreCdmAttached), |
| (...skipping 544 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 697 if (!blink::WebRuntimeFeatures::isPrefixedEncryptedMediaEnabled() && | 700 if (!blink::WebRuntimeFeatures::isPrefixedEncryptedMediaEnabled() && |
| 698 !blink::WebRuntimeFeatures::isEncryptedMediaEnabled()) { | 701 !blink::WebRuntimeFeatures::isEncryptedMediaEnabled()) { |
| 699 return; | 702 return; |
| 700 } | 703 } |
| 701 | 704 |
| 702 // TODO(xhwang): Update this UMA name. | 705 // TODO(xhwang): Update this UMA name. |
| 703 UMA_HISTOGRAM_COUNTS("Media.EME.NeedKey", 1); | 706 UMA_HISTOGRAM_COUNTS("Media.EME.NeedKey", 1); |
| 704 | 707 |
| 705 encrypted_media_support_.SetInitDataType(init_data_type); | 708 encrypted_media_support_.SetInitDataType(init_data_type); |
| 706 | 709 |
| 707 client_->encrypted(ConvertToWebInitDataType(init_data_type), | 710 encrypted_client_->encrypted( |
|
ddorwin
2015/07/10 17:56:56
Must #include the definition
Srirama
2015/07/10 18:36:03
Please refer to my comment in webmediaplayer_andro
Srirama
2015/07/11 08:44:10
Done.
| |
| 708 vector_as_array(&init_data), | 711 ConvertToWebInitDataType(init_data_type), vector_as_array(&init_data), |
| 709 base::saturated_cast<unsigned int>(init_data.size())); | 712 base::saturated_cast<unsigned int>(init_data.size())); |
| 710 } | 713 } |
| 711 | 714 |
| 712 void WebMediaPlayerImpl::OnWaitingForDecryptionKey() { | 715 void WebMediaPlayerImpl::OnWaitingForDecryptionKey() { |
| 713 client_->didBlockPlaybackWaitingForKey(); | 716 encrypted_client_->didBlockPlaybackWaitingForKey(); |
| 714 | 717 |
| 715 // TODO(jrummell): didResumePlaybackBlockedForKey() should only be called | 718 // TODO(jrummell): didResumePlaybackBlockedForKey() should only be called |
| 716 // when a key has been successfully added (e.g. OnSessionKeysChange() with | 719 // when a key has been successfully added (e.g. OnSessionKeysChange() with |
| 717 // |has_additional_usable_key| = true). http://crbug.com/461903 | 720 // |has_additional_usable_key| = true). http://crbug.com/461903 |
| 718 client_->didResumePlaybackBlockedForKey(); | 721 encrypted_client_->didResumePlaybackBlockedForKey(); |
| 719 } | 722 } |
| 720 | 723 |
| 721 void WebMediaPlayerImpl::SetCdm(const CdmAttachedCB& cdm_attached_cb, | 724 void WebMediaPlayerImpl::SetCdm(const CdmAttachedCB& cdm_attached_cb, |
| 722 CdmContext* cdm_context) { | 725 CdmContext* cdm_context) { |
| 723 // If CDM initialization succeeded, tell the pipeline about it. | 726 // If CDM initialization succeeded, tell the pipeline about it. |
| 724 if (cdm_context) | 727 if (cdm_context) |
| 725 pipeline_.SetCdm(cdm_context, cdm_attached_cb); | 728 pipeline_.SetCdm(cdm_context, cdm_attached_cb); |
| 726 } | 729 } |
| 727 | 730 |
| 728 void WebMediaPlayerImpl::OnCdmAttached( | 731 void WebMediaPlayerImpl::OnCdmAttached( |
| (...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1031 | 1034 |
| 1032 // pause() may be called after playback has ended and the HTMLMediaElement | 1035 // pause() may be called after playback has ended and the HTMLMediaElement |
| 1033 // requires that currentTime() == duration() after ending. We want to ensure | 1036 // requires that currentTime() == duration() after ending. We want to ensure |
| 1034 // |paused_time_| matches currentTime() in this case or a future seek() may | 1037 // |paused_time_| matches currentTime() in this case or a future seek() may |
| 1035 // incorrectly discard what it thinks is a seek to the existing time. | 1038 // incorrectly discard what it thinks is a seek to the existing time. |
| 1036 paused_time_ = | 1039 paused_time_ = |
| 1037 ended_ ? pipeline_.GetMediaDuration() : pipeline_.GetMediaTime(); | 1040 ended_ ? pipeline_.GetMediaDuration() : pipeline_.GetMediaTime(); |
| 1038 } | 1041 } |
| 1039 | 1042 |
| 1040 } // namespace media | 1043 } // namespace media |
| OLD | NEW |