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( |