| Index: content/renderer/media/webmediaplayer_impl.cc
|
| diff --git a/content/renderer/media/webmediaplayer_impl.cc b/content/renderer/media/webmediaplayer_impl.cc
|
| index dfdad6184ea62859ea181c223889ef8aa5e0cfff..2aad3ceb93f9d778bbbabbfd8dc10f8c1e8e87a4 100644
|
| --- a/content/renderer/media/webmediaplayer_impl.cc
|
| +++ b/content/renderer/media/webmediaplayer_impl.cc
|
| @@ -58,7 +58,6 @@
|
| #include "media/filters/gpu_video_accelerator_factories.h"
|
| #include "media/filters/gpu_video_decoder.h"
|
| #include "media/filters/opus_audio_decoder.h"
|
| -#include "media/filters/renderer_impl.h"
|
| #include "media/filters/video_renderer_impl.h"
|
| #include "media/filters/vpx_video_decoder.h"
|
| #include "third_party/WebKit/public/platform/WebContentDecryptionModule.h"
|
| @@ -1169,17 +1168,50 @@
|
| "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() {
|
| +void WebMediaPlayerImpl::StartPipeline() {
|
| + DCHECK(main_loop_->BelongsToCurrentThread());
|
| + const CommandLine* cmd_line = CommandLine::ForCurrentProcess();
|
| +
|
| + // Keep track if this is a MSE or non-MSE playback.
|
| + UMA_HISTOGRAM_BOOLEAN("Media.MSE.Playback",
|
| + (load_type_ == LoadTypeMediaSource));
|
| +
|
| + media::LogCB mse_log_cb;
|
| +
|
| + // Figure out which demuxer to use.
|
| + if (load_type_ != LoadTypeMediaSource) {
|
| + DCHECK(!chunk_demuxer_);
|
| + DCHECK(data_source_);
|
| +
|
| + demuxer_.reset(new media::FFmpegDemuxer(
|
| + media_loop_, data_source_.get(),
|
| + BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnNeedKey),
|
| + media_log_));
|
| + } else {
|
| + DCHECK(!chunk_demuxer_);
|
| + DCHECK(!data_source_);
|
| +
|
| + mse_log_cb = base::Bind(&LogMediaSourceError, media_log_);
|
| +
|
| + chunk_demuxer_ = new media::ChunkDemuxer(
|
| + BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnDemuxerOpened),
|
| + BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnNeedKey),
|
| + mse_log_cb,
|
| + true);
|
| + demuxer_.reset(chunk_demuxer_);
|
| + }
|
| +
|
| + scoped_ptr<media::FilterCollection> filter_collection(
|
| + new media::FilterCollection());
|
| + filter_collection->SetDemuxer(demuxer_.get());
|
| +
|
| media::SetDecryptorReadyCB set_decryptor_ready_cb =
|
| BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::SetDecryptorReadyCB);
|
|
|
| // Create our audio decoders and renderer.
|
| ScopedVector<media::AudioDecoder> audio_decoders;
|
| -
|
| - media::LogCB log_cb = base::Bind(&LogMediaSourceError, media_log_);
|
| - audio_decoders.push_back(new media::FFmpegAudioDecoder(media_loop_, log_cb));
|
| + audio_decoders.push_back(new media::FFmpegAudioDecoder(media_loop_,
|
| + mse_log_cb));
|
| audio_decoders.push_back(new media::OpusAudioDecoder(media_loop_));
|
|
|
| scoped_ptr<media::AudioRenderer> audio_renderer(new media::AudioRendererImpl(
|
| @@ -1188,6 +1220,7 @@
|
| audio_decoders.Pass(),
|
| set_decryptor_ready_cb,
|
| RenderThreadImpl::current()->GetAudioHardwareConfig()));
|
| + filter_collection->SetAudioRenderer(audio_renderer.Pass());
|
|
|
| // Create our video decoders and renderer.
|
| ScopedVector<media::VideoDecoder> video_decoders;
|
| @@ -1210,52 +1243,7 @@
|
| set_decryptor_ready_cb,
|
| base::Bind(&WebMediaPlayerImpl::FrameReady, base::Unretained(this)),
|
| true));
|
| -
|
| - // Create renderer.
|
| - return scoped_ptr<media::Renderer>(new media::RendererImpl(
|
| - media_loop_,
|
| - demuxer_.get(),
|
| - audio_renderer.Pass(),
|
| - video_renderer.Pass()));
|
| -}
|
| -
|
| -void WebMediaPlayerImpl::StartPipeline() {
|
| - DCHECK(main_loop_->BelongsToCurrentThread());
|
| - const CommandLine* cmd_line = CommandLine::ForCurrentProcess();
|
| -
|
| - // Keep track if this is a MSE or non-MSE playback.
|
| - UMA_HISTOGRAM_BOOLEAN("Media.MSE.Playback",
|
| - (load_type_ == LoadTypeMediaSource));
|
| -
|
| - media::LogCB mse_log_cb;
|
| -
|
| - // Figure out which demuxer to use.
|
| - if (load_type_ != LoadTypeMediaSource) {
|
| - DCHECK(!chunk_demuxer_);
|
| - DCHECK(data_source_);
|
| -
|
| - demuxer_.reset(new media::FFmpegDemuxer(
|
| - media_loop_, data_source_.get(),
|
| - BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnNeedKey),
|
| - media_log_));
|
| - } else {
|
| - DCHECK(!chunk_demuxer_);
|
| - DCHECK(!data_source_);
|
| -
|
| - mse_log_cb = base::Bind(&LogMediaSourceError, media_log_);
|
| -
|
| - chunk_demuxer_ = new media::ChunkDemuxer(
|
| - BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnDemuxerOpened),
|
| - BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnNeedKey),
|
| - mse_log_cb,
|
| - true);
|
| - demuxer_.reset(chunk_demuxer_);
|
| - }
|
| -
|
| - scoped_ptr<media::FilterCollection> filter_collection(
|
| - new media::FilterCollection());
|
| - filter_collection->SetDemuxer(demuxer_.get());
|
| - filter_collection->SetRenderer(CreateRenderer());
|
| + filter_collection->SetVideoRenderer(video_renderer.Pass());
|
|
|
| if (cmd_line->HasSwitch(switches::kEnableInbandTextTracks)) {
|
| scoped_ptr<media::TextRenderer> text_renderer(
|
|
|