| Index: media/blink/webmediaplayer_impl.cc
|
| diff --git a/content/renderer/media/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc
|
| similarity index 89%
|
| rename from content/renderer/media/webmediaplayer_impl.cc
|
| rename to media/blink/webmediaplayer_impl.cc
|
| index 83e620267aef10d15275c5b6bbbe34c546c8ad91..bed92998d3670c8370328271bc5d9f55147a2df3 100644
|
| --- a/content/renderer/media/webmediaplayer_impl.cc
|
| +++ b/media/blink/webmediaplayer_impl.cc
|
| @@ -2,7 +2,7 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -#include "content/renderer/media/webmediaplayer_impl.h"
|
| +#include "media/blink/webmediaplayer_impl.h"
|
|
|
| #include <algorithm>
|
| #include <limits>
|
| @@ -21,15 +21,6 @@
|
| #include "base/synchronization/waitable_event.h"
|
| #include "cc/blink/web_layer_impl.h"
|
| #include "cc/layers/video_layer.h"
|
| -#include "content/renderer/media/buffered_data_source.h"
|
| -#include "content/renderer/media/crypto/encrypted_media_player_support.h"
|
| -#include "content/renderer/media/texttrack_impl.h"
|
| -#include "content/renderer/media/webaudiosourceprovider_impl.h"
|
| -#include "content/renderer/media/webinbandtexttrack_impl.h"
|
| -#include "content/renderer/media/webmediaplayer_delegate.h"
|
| -#include "content/renderer/media/webmediaplayer_params.h"
|
| -#include "content/renderer/media/webmediaplayer_util.h"
|
| -#include "content/renderer/media/webmediasource_impl.h"
|
| #include "gpu/GLES2/gl2extchromium.h"
|
| #include "gpu/command_buffer/common/mailbox_holder.h"
|
| #include "media/audio/null_audio_sink.h"
|
| @@ -40,6 +31,15 @@
|
| #include "media/base/pipeline.h"
|
| #include "media/base/text_renderer.h"
|
| #include "media/base/video_frame.h"
|
| +#include "media/blink/buffered_data_source.h"
|
| +#include "media/blink/encrypted_media_player_support.h"
|
| +#include "media/blink/texttrack_impl.h"
|
| +#include "media/blink/webaudiosourceprovider_impl.h"
|
| +#include "media/blink/webinbandtexttrack_impl.h"
|
| +#include "media/blink/webmediaplayer_delegate.h"
|
| +#include "media/blink/webmediaplayer_params.h"
|
| +#include "media/blink/webmediaplayer_util.h"
|
| +#include "media/blink/webmediasource_impl.h"
|
| #include "media/filters/audio_renderer_impl.h"
|
| #include "media/filters/chunk_demuxer.h"
|
| #include "media/filters/ffmpeg_audio_decoder.h"
|
| @@ -65,7 +65,6 @@ using blink::WebMediaPlayer;
|
| using blink::WebRect;
|
| using blink::WebSize;
|
| using blink::WebString;
|
| -using media::PipelineStatus;
|
|
|
| namespace {
|
|
|
| @@ -107,7 +106,7 @@ class SyncPointClientImpl : public media::VideoFrame::SyncPointClient {
|
|
|
| } // namespace
|
|
|
| -namespace content {
|
| +namespace media {
|
|
|
| class BufferedDataSourceHostImpl;
|
|
|
| @@ -122,13 +121,13 @@ COMPILE_ASSERT_MATCHING_ENUM(UseCredentials);
|
|
|
| #define BIND_TO_RENDER_LOOP(function) \
|
| (DCHECK(main_task_runner_->BelongsToCurrentThread()), \
|
| - media::BindToCurrentLoop(base::Bind(function, AsWeakPtr())))
|
| + BindToCurrentLoop(base::Bind(function, AsWeakPtr())))
|
|
|
| #define BIND_TO_RENDER_LOOP1(function, arg1) \
|
| (DCHECK(main_task_runner_->BelongsToCurrentThread()), \
|
| - media::BindToCurrentLoop(base::Bind(function, AsWeakPtr(), arg1)))
|
| + BindToCurrentLoop(base::Bind(function, AsWeakPtr(), arg1)))
|
|
|
| -static void LogMediaSourceError(const scoped_refptr<media::MediaLog>& media_log,
|
| +static void LogMediaSourceError(const scoped_refptr<MediaLog>& media_log,
|
| const std::string& error) {
|
| media_log->AddEvent(media_log->CreateMediaSourceErrorEvent(error));
|
| }
|
| @@ -176,7 +175,7 @@ WebMediaPlayerImpl::WebMediaPlayerImpl(
|
| compositor_task_runner_ = base::MessageLoopProxy::current();
|
|
|
| media_log_->AddEvent(
|
| - media_log_->CreateEvent(media::MediaLogEvent::WEBMEDIAPLAYER_CREATED));
|
| + media_log_->CreateEvent(MediaLogEvent::WEBMEDIAPLAYER_CREATED));
|
|
|
| // |gpu_factories_| requires that its entry points be called on its
|
| // |GetTaskRunner()|. Since |pipeline_| will own decoders created from the
|
| @@ -188,7 +187,7 @@ WebMediaPlayerImpl::WebMediaPlayerImpl(
|
| audio_source_provider_ = new WebAudioSourceProviderImpl(
|
| params.audio_renderer_sink().get()
|
| ? params.audio_renderer_sink()
|
| - : new media::NullAudioSink(media_task_runner_));
|
| + : new NullAudioSink(media_task_runner_));
|
| }
|
|
|
| WebMediaPlayerImpl::~WebMediaPlayerImpl() {
|
| @@ -196,7 +195,7 @@ WebMediaPlayerImpl::~WebMediaPlayerImpl() {
|
|
|
| DCHECK(main_task_runner_->BelongsToCurrentThread());
|
| media_log_->AddEvent(
|
| - media_log_->CreateEvent(media::MediaLogEvent::WEBMEDIAPLAYER_DESTROYED));
|
| + media_log_->CreateEvent(MediaLogEvent::WEBMEDIAPLAYER_DESTROYED));
|
|
|
| if (delegate_.get())
|
| delegate_->PlayerGone(this);
|
| @@ -280,7 +279,7 @@ void WebMediaPlayerImpl::play() {
|
| if (data_source_)
|
| data_source_->MediaIsPlaying();
|
|
|
| - media_log_->AddEvent(media_log_->CreateEvent(media::MediaLogEvent::PLAY));
|
| + media_log_->AddEvent(media_log_->CreateEvent(MediaLogEvent::PLAY));
|
|
|
| if (delegate_.get())
|
| delegate_->DidPlay(this);
|
| @@ -296,7 +295,7 @@ void WebMediaPlayerImpl::pause() {
|
| data_source_->MediaIsPaused();
|
| paused_time_ = pipeline_.GetMediaTime();
|
|
|
| - media_log_->AddEvent(media_log_->CreateEvent(media::MediaLogEvent::PAUSE));
|
| + media_log_->AddEvent(media_log_->CreateEvent(MediaLogEvent::PAUSE));
|
|
|
| if (delegate_.get())
|
| delegate_->DidPause(this);
|
| @@ -469,11 +468,11 @@ WebMediaPlayer::ReadyState WebMediaPlayerImpl::readyState() const {
|
| blink::WebTimeRanges WebMediaPlayerImpl::buffered() const {
|
| DCHECK(main_task_runner_->BelongsToCurrentThread());
|
|
|
| - media::Ranges<base::TimeDelta> buffered_time_ranges =
|
| + Ranges<base::TimeDelta> buffered_time_ranges =
|
| pipeline_.GetBufferedTimeRanges();
|
|
|
| const base::TimeDelta duration = pipeline_.GetMediaDuration();
|
| - if (duration != media::kInfiniteDuration()) {
|
| + if (duration != kInfiniteDuration()) {
|
| buffered_data_source_host_.AddBufferedTimeRanges(
|
| &buffered_time_ranges, duration);
|
| }
|
| @@ -519,7 +518,7 @@ void WebMediaPlayerImpl::paint(blink::WebCanvas* canvas,
|
| // - We haven't reached HAVE_CURRENT_DATA and need to paint black
|
| // - We're painting to a canvas
|
| // See http://crbug.com/341225 http://crbug.com/342621 for details.
|
| - scoped_refptr<media::VideoFrame> video_frame =
|
| + scoped_refptr<VideoFrame> video_frame =
|
| GetCurrentFrameFromCompositor();
|
|
|
| gfx::Rect gfx_rect(rect);
|
| @@ -551,28 +550,28 @@ double WebMediaPlayerImpl::mediaTimeForTimeValue(double timeValue) const {
|
| unsigned WebMediaPlayerImpl::decodedFrameCount() const {
|
| DCHECK(main_task_runner_->BelongsToCurrentThread());
|
|
|
| - media::PipelineStatistics stats = pipeline_.GetStatistics();
|
| + PipelineStatistics stats = pipeline_.GetStatistics();
|
| return stats.video_frames_decoded;
|
| }
|
|
|
| unsigned WebMediaPlayerImpl::droppedFrameCount() const {
|
| DCHECK(main_task_runner_->BelongsToCurrentThread());
|
|
|
| - media::PipelineStatistics stats = pipeline_.GetStatistics();
|
| + PipelineStatistics stats = pipeline_.GetStatistics();
|
| return stats.video_frames_dropped;
|
| }
|
|
|
| unsigned WebMediaPlayerImpl::audioDecodedByteCount() const {
|
| DCHECK(main_task_runner_->BelongsToCurrentThread());
|
|
|
| - media::PipelineStatistics stats = pipeline_.GetStatistics();
|
| + PipelineStatistics stats = pipeline_.GetStatistics();
|
| return stats.audio_bytes_decoded;
|
| }
|
|
|
| unsigned WebMediaPlayerImpl::videoDecodedByteCount() const {
|
| DCHECK(main_task_runner_->BelongsToCurrentThread());
|
|
|
| - media::PipelineStatistics stats = pipeline_.GetStatistics();
|
| + PipelineStatistics stats = pipeline_.GetStatistics();
|
| return stats.video_bytes_decoded;
|
| }
|
|
|
| @@ -586,12 +585,12 @@ bool WebMediaPlayerImpl::copyVideoTextureToPlatformTexture(
|
| bool flip_y) {
|
| TRACE_EVENT0("media", "WebMediaPlayerImpl:copyVideoTextureToPlatformTexture");
|
|
|
| - scoped_refptr<media::VideoFrame> video_frame =
|
| + scoped_refptr<VideoFrame> video_frame =
|
| GetCurrentFrameFromCompositor();
|
|
|
| if (!video_frame.get())
|
| return false;
|
| - if (video_frame->format() != media::VideoFrame::NATIVE_TEXTURE)
|
| + if (video_frame->format() != VideoFrame::NATIVE_TEXTURE)
|
| return false;
|
|
|
| const gpu::MailboxHolder* mailbox_holder = video_frame->mailbox_holder();
|
| @@ -693,7 +692,7 @@ void WebMediaPlayerImpl::OnPipelineSeeked(bool time_changed,
|
| return;
|
| }
|
|
|
| - if (status != media::PIPELINE_OK) {
|
| + if (status != PIPELINE_OK) {
|
| OnPipelineError(status);
|
| return;
|
| }
|
| @@ -719,7 +718,7 @@ void WebMediaPlayerImpl::OnPipelineEnded() {
|
|
|
| void WebMediaPlayerImpl::OnPipelineError(PipelineStatus error) {
|
| DCHECK(main_task_runner_->BelongsToCurrentThread());
|
| - DCHECK_NE(error, media::PIPELINE_OK);
|
| + DCHECK_NE(error, PIPELINE_OK);
|
|
|
| if (ready_state_ == WebMediaPlayer::ReadyStateHaveNothing) {
|
| // Any error that occurs before reaching ReadyStateHaveMetadata should
|
| @@ -730,19 +729,19 @@ void WebMediaPlayerImpl::OnPipelineError(PipelineStatus error) {
|
|
|
| SetNetworkState(PipelineErrorToNetworkState(error));
|
|
|
| - if (error == media::PIPELINE_ERROR_DECRYPT)
|
| + if (error == PIPELINE_ERROR_DECRYPT)
|
| encrypted_media_support_->OnPipelineDecryptError();
|
| }
|
|
|
| void WebMediaPlayerImpl::OnPipelineMetadata(
|
| - media::PipelineMetadata metadata) {
|
| + PipelineMetadata metadata) {
|
| DVLOG(1) << __FUNCTION__;
|
|
|
| pipeline_metadata_ = metadata;
|
|
|
| UMA_HISTOGRAM_ENUMERATION("Media.VideoRotation",
|
| metadata.video_rotation,
|
| - media::VIDEO_ROTATION_MAX + 1);
|
| + VIDEO_ROTATION_MAX + 1);
|
| SetReadyState(WebMediaPlayer::ReadyStateHaveMetadata);
|
|
|
| if (hasVideo()) {
|
| @@ -750,8 +749,8 @@ void WebMediaPlayerImpl::OnPipelineMetadata(
|
| scoped_refptr<cc::VideoLayer> layer =
|
| cc::VideoLayer::Create(compositor_, pipeline_metadata_.video_rotation);
|
|
|
| - if (pipeline_metadata_.video_rotation == media::VIDEO_ROTATION_90 ||
|
| - pipeline_metadata_.video_rotation == media::VIDEO_ROTATION_270) {
|
| + if (pipeline_metadata_.video_rotation == VIDEO_ROTATION_90 ||
|
| + pipeline_metadata_.video_rotation == VIDEO_ROTATION_270) {
|
| gfx::Size size = pipeline_metadata_.natural_size;
|
| pipeline_metadata_.natural_size = gfx::Size(size.height(), size.width());
|
| }
|
| @@ -763,7 +762,7 @@ void WebMediaPlayerImpl::OnPipelineMetadata(
|
| }
|
|
|
| void WebMediaPlayerImpl::OnPipelineBufferingStateChanged(
|
| - media::BufferingState buffering_state) {
|
| + BufferingState buffering_state) {
|
| DVLOG(1) << __FUNCTION__ << "(" << buffering_state << ")";
|
|
|
| // Ignore buffering state changes until we've completed all outstanding seeks.
|
| @@ -772,7 +771,7 @@ void WebMediaPlayerImpl::OnPipelineBufferingStateChanged(
|
|
|
| // TODO(scherkus): Handle other buffering states when Pipeline starts using
|
| // them and translate them ready state changes http://crbug.com/144683
|
| - DCHECK_EQ(buffering_state, media::BUFFERING_HAVE_ENOUGH);
|
| + DCHECK_EQ(buffering_state, BUFFERING_HAVE_ENOUGH);
|
| SetReadyState(WebMediaPlayer::ReadyStateHaveEnoughData);
|
|
|
| // Blink expects a timeChanged() in response to a seek().
|
| @@ -787,8 +786,8 @@ void WebMediaPlayerImpl::OnDemuxerOpened() {
|
| }
|
|
|
| void WebMediaPlayerImpl::OnAddTextTrack(
|
| - const media::TextTrackConfig& config,
|
| - const media::AddTextTrackDoneCB& done_cb) {
|
| + const TextTrackConfig& config,
|
| + const AddTextTrackDoneCB& done_cb) {
|
| DCHECK(main_task_runner_->BelongsToCurrentThread());
|
|
|
| const WebInbandTextTrackImpl::Kind web_kind =
|
| @@ -804,7 +803,7 @@ void WebMediaPlayerImpl::OnAddTextTrack(
|
| new WebInbandTextTrackImpl(web_kind, web_label, web_language, web_id,
|
| text_track_index_++));
|
|
|
| - scoped_ptr<media::TextTrack> text_track(new TextTrackImpl(
|
| + scoped_ptr<TextTrack> text_track(new TextTrackImpl(
|
| main_task_runner_, client_, web_inband_text_track.Pass()));
|
|
|
| done_cb.Run(text_track.Pass());
|
| @@ -828,25 +827,24 @@ void WebMediaPlayerImpl::NotifyDownloading(bool is_downloading) {
|
| SetNetworkState(WebMediaPlayer::NetworkStateLoading);
|
| media_log_->AddEvent(
|
| media_log_->CreateBooleanEvent(
|
| - media::MediaLogEvent::NETWORK_ACTIVITY_SET,
|
| + MediaLogEvent::NETWORK_ACTIVITY_SET,
|
| "is_downloading_data", is_downloading));
|
| }
|
|
|
| // TODO(xhwang): Move this to a factory class so that we can create different
|
| // renderers.
|
| -scoped_ptr<media::Renderer> WebMediaPlayerImpl::CreateRenderer() {
|
| - media::SetDecryptorReadyCB set_decryptor_ready_cb =
|
| +scoped_ptr<Renderer> WebMediaPlayerImpl::CreateRenderer() {
|
| + SetDecryptorReadyCB set_decryptor_ready_cb =
|
| encrypted_media_support_->CreateSetDecryptorReadyCB();
|
|
|
| // Create our audio decoders and renderer.
|
| - ScopedVector<media::AudioDecoder> audio_decoders;
|
| + ScopedVector<AudioDecoder> audio_decoders;
|
|
|
| - media::LogCB log_cb = base::Bind(&LogMediaSourceError, media_log_);
|
| - audio_decoders.push_back(new media::FFmpegAudioDecoder(media_task_runner_,
|
| - log_cb));
|
| - audio_decoders.push_back(new media::OpusAudioDecoder(media_task_runner_));
|
| + LogCB log_cb = base::Bind(&LogMediaSourceError, media_log_);
|
| + audio_decoders.push_back(new FFmpegAudioDecoder(media_task_runner_, log_cb));
|
| + audio_decoders.push_back(new OpusAudioDecoder(media_task_runner_));
|
|
|
| - scoped_ptr<media::AudioRenderer> audio_renderer(new media::AudioRendererImpl(
|
| + scoped_ptr<AudioRenderer> audio_renderer(new AudioRendererImpl(
|
| media_task_runner_,
|
| audio_source_provider_.get(),
|
| audio_decoders.Pass(),
|
| @@ -854,21 +852,21 @@ scoped_ptr<media::Renderer> WebMediaPlayerImpl::CreateRenderer() {
|
| audio_hardware_config_));
|
|
|
| // Create our video decoders and renderer.
|
| - ScopedVector<media::VideoDecoder> video_decoders;
|
| + ScopedVector<VideoDecoder> video_decoders;
|
|
|
| if (gpu_factories_.get()) {
|
| video_decoders.push_back(
|
| - new media::GpuVideoDecoder(gpu_factories_, media_log_));
|
| + new GpuVideoDecoder(gpu_factories_, media_log_));
|
| }
|
|
|
| #if !defined(MEDIA_DISABLE_LIBVPX)
|
| - video_decoders.push_back(new media::VpxVideoDecoder(media_task_runner_));
|
| + video_decoders.push_back(new VpxVideoDecoder(media_task_runner_));
|
| #endif // !defined(MEDIA_DISABLE_LIBVPX)
|
|
|
| - video_decoders.push_back(new media::FFmpegVideoDecoder(media_task_runner_));
|
| + video_decoders.push_back(new FFmpegVideoDecoder(media_task_runner_));
|
|
|
| - scoped_ptr<media::VideoRenderer> video_renderer(
|
| - new media::VideoRendererImpl(
|
| + scoped_ptr<VideoRenderer> video_renderer(
|
| + new VideoRendererImpl(
|
| media_task_runner_,
|
| video_decoders.Pass(),
|
| set_decryptor_ready_cb,
|
| @@ -876,7 +874,7 @@ scoped_ptr<media::Renderer> WebMediaPlayerImpl::CreateRenderer() {
|
| true));
|
|
|
| // Create renderer.
|
| - return scoped_ptr<media::Renderer>(new media::RendererImpl(
|
| + return scoped_ptr<Renderer>(new RendererImpl(
|
| media_task_runner_,
|
| demuxer_.get(),
|
| audio_renderer.Pass(),
|
| @@ -890,8 +888,8 @@ void WebMediaPlayerImpl::StartPipeline() {
|
| UMA_HISTOGRAM_BOOLEAN("Media.MSE.Playback",
|
| (load_type_ == LoadTypeMediaSource));
|
|
|
| - media::LogCB mse_log_cb;
|
| - media::Demuxer::NeedKeyCB need_key_cb =
|
| + LogCB mse_log_cb;
|
| + Demuxer::NeedKeyCB need_key_cb =
|
| encrypted_media_support_->CreateNeedKeyCB();
|
|
|
| // Figure out which demuxer to use.
|
| @@ -899,7 +897,7 @@ void WebMediaPlayerImpl::StartPipeline() {
|
| DCHECK(!chunk_demuxer_);
|
| DCHECK(data_source_);
|
|
|
| - demuxer_.reset(new media::FFmpegDemuxer(
|
| + demuxer_.reset(new FFmpegDemuxer(
|
| media_task_runner_, data_source_.get(),
|
| need_key_cb,
|
| media_log_));
|
| @@ -909,7 +907,7 @@ void WebMediaPlayerImpl::StartPipeline() {
|
|
|
| mse_log_cb = base::Bind(&LogMediaSourceError, media_log_);
|
|
|
| - chunk_demuxer_ = new media::ChunkDemuxer(
|
| + chunk_demuxer_ = new ChunkDemuxer(
|
| BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnDemuxerOpened),
|
| need_key_cb,
|
| mse_log_cb,
|
| @@ -962,7 +960,7 @@ double WebMediaPlayerImpl::GetPipelineDuration() const {
|
|
|
| // Return positive infinity if the resource is unbounded.
|
| // http://www.whatwg.org/specs/web-apps/current-work/multipage/video.html#dom-media-duration
|
| - if (duration == media::kInfiniteDuration())
|
| + if (duration == kInfiniteDuration())
|
| return std::numeric_limits<double>::infinity();
|
|
|
| return duration.InSecondsF();
|
| @@ -997,7 +995,7 @@ void WebMediaPlayerImpl::OnOpacityChanged(bool opaque) {
|
| }
|
|
|
| void WebMediaPlayerImpl::FrameReady(
|
| - const scoped_refptr<media::VideoFrame>& frame) {
|
| + const scoped_refptr<VideoFrame>& frame) {
|
| compositor_task_runner_->PostTask(
|
| FROM_HERE,
|
| base::Bind(&VideoFrameCompositor::UpdateCurrentFrame,
|
| @@ -1007,14 +1005,14 @@ void WebMediaPlayerImpl::FrameReady(
|
|
|
| static void GetCurrentFrameAndSignal(
|
| VideoFrameCompositor* compositor,
|
| - scoped_refptr<media::VideoFrame>* video_frame_out,
|
| + scoped_refptr<VideoFrame>* video_frame_out,
|
| base::WaitableEvent* event) {
|
| TRACE_EVENT0("media", "GetCurrentFrameAndSignal");
|
| *video_frame_out = compositor->GetCurrentFrame();
|
| event->Signal();
|
| }
|
|
|
| -scoped_refptr<media::VideoFrame>
|
| +scoped_refptr<VideoFrame>
|
| WebMediaPlayerImpl::GetCurrentFrameFromCompositor() {
|
| TRACE_EVENT0("media", "WebMediaPlayerImpl::GetCurrentFrameFromCompositor");
|
| if (compositor_task_runner_->BelongsToCurrentThread())
|
| @@ -1022,7 +1020,7 @@ WebMediaPlayerImpl::GetCurrentFrameFromCompositor() {
|
|
|
| // Use a posted task and waitable event instead of a lock otherwise
|
| // WebGL/Canvas can see different content than what the compositor is seeing.
|
| - scoped_refptr<media::VideoFrame> video_frame;
|
| + scoped_refptr<VideoFrame> video_frame;
|
| base::WaitableEvent event(false, false);
|
| compositor_task_runner_->PostTask(FROM_HERE,
|
| base::Bind(&GetCurrentFrameAndSignal,
|
| @@ -1033,4 +1031,4 @@ WebMediaPlayerImpl::GetCurrentFrameFromCompositor() {
|
| return video_frame;
|
| }
|
|
|
| -} // namespace content
|
| +} // namespace media
|
|
|