diff options
author | scherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-03-21 22:33:47 +0000 |
---|---|---|
committer | scherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-03-21 22:33:47 +0000 |
commit | 7dd4c740735765a73f2b58e6518eed446730862b (patch) | |
tree | 51f02622aace9a0337e8823c5b502e15523f8d40 /webkit/media | |
parent | cc2ba3a7e0fda5e0fd6916ff4f450d14e2fc379b (diff) | |
download | chromium_src-7dd4c740735765a73f2b58e6518eed446730862b.zip chromium_src-7dd4c740735765a73f2b58e6518eed446730862b.tar.gz chromium_src-7dd4c740735765a73f2b58e6518eed446730862b.tar.bz2 |
Remove reference counting from media::AudioDecoder and friends.
This also changes AudioRenderer to no longer accept a list of AudioDecoders during Initialize(). Instead we now pass them into AudioRendererImpl during construction.
BUG=173313
Review URL: https://codereview.chromium.org/12964004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@189705 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/media')
-rw-r--r-- | webkit/media/filter_helpers.cc | 30 | ||||
-rw-r--r-- | webkit/media/filter_helpers.h | 8 | ||||
-rw-r--r-- | webkit/media/webmediaplayer_impl.cc | 5 |
3 files changed, 26 insertions, 17 deletions
diff --git a/webkit/media/filter_helpers.cc b/webkit/media/filter_helpers.cc index df584a4..c803f69 100644 --- a/webkit/media/filter_helpers.cc +++ b/webkit/media/filter_helpers.cc @@ -18,26 +18,23 @@ namespace webkit_media { -// Constructs and adds the default audio/video decoders to |filter_collection|. -// Note that decoders in the |filter_collection| are ordered. The first -// audio/video decoder in the |filter_collection| that supports the input -// audio/video stream will be selected as the audio/video decoder in the media -// pipeline. This is done by trying to initialize the decoder with the input -// stream. Some decoder may only accept certain types of streams. -static void AddDefaultDecodersToCollection( +void AddDefaultAudioDecoders( const scoped_refptr<base::MessageLoopProxy>& message_loop, - media::FilterCollection* filter_collection) { - - scoped_refptr<media::FFmpegAudioDecoder> ffmpeg_audio_decoder = - new media::FFmpegAudioDecoder(message_loop); - filter_collection->GetAudioDecoders()->push_back(ffmpeg_audio_decoder); + ScopedVector<media::AudioDecoder>* audio_decoders) { + audio_decoders->push_back(new media::FFmpegAudioDecoder(message_loop)); const CommandLine* cmd_line = CommandLine::ForCurrentProcess(); if (cmd_line->HasSwitch(switches::kEnableOpusPlayback)) { - scoped_refptr<media::OpusAudioDecoder> opus_audio_decoder = - new media::OpusAudioDecoder(message_loop); - filter_collection->GetAudioDecoders()->push_back(opus_audio_decoder); + audio_decoders->push_back(new media::OpusAudioDecoder(message_loop)); } +} + +// Constructs and adds the default video decoders to |filter_collection|. +// +// Note that decoders in the |filter_collection| are initialized in order. +static void AddDefaultDecodersToCollection( + const scoped_refptr<base::MessageLoopProxy>& message_loop, + media::FilterCollection* filter_collection) { scoped_refptr<media::FFmpegVideoDecoder> ffmpeg_video_decoder = new media::FFmpegVideoDecoder(message_loop); @@ -46,12 +43,13 @@ static void AddDefaultDecodersToCollection( // TODO(phajdan.jr): Remove ifdefs when libvpx with vp9 support is released // (http://crbug.com/174287) . #if !defined(MEDIA_DISABLE_LIBVPX) + const CommandLine* cmd_line = CommandLine::ForCurrentProcess(); if (cmd_line->HasSwitch(switches::kEnableVp9Playback)) { scoped_refptr<media::VpxVideoDecoder> vpx_video_decoder = new media::VpxVideoDecoder(message_loop); filter_collection->GetVideoDecoders()->push_back(vpx_video_decoder); } -#endif // defined(MEDIA_USE_LIBVPX) +#endif // !defined(MEDIA_DISABLE_LIBVPX) } void BuildMediaSourceCollection( diff --git a/webkit/media/filter_helpers.h b/webkit/media/filter_helpers.h index b30ecd2..29a3e38 100644 --- a/webkit/media/filter_helpers.h +++ b/webkit/media/filter_helpers.h @@ -7,6 +7,7 @@ #include "base/basictypes.h" #include "base/memory/ref_counted.h" +#include "base/memory/scoped_vector.h" // TODO(fgalligan): Remove the dependency on FFmpeg. #include "media/filters/ffmpeg_demuxer.h" @@ -15,14 +16,19 @@ class MessageLoopProxy; } namespace media { +class AudioDecoder; class ChunkDemuxer; class DataSource; -class FFmpegVideoDecoder; class FilterCollection; } namespace webkit_media { +// Creates and adds the default set of audio decoders to |audio_decoders|. +void AddDefaultAudioDecoders( + const scoped_refptr<base::MessageLoopProxy>& message_loop, + ScopedVector<media::AudioDecoder>* audio_decoders); + // Builds the required filters for handling media source URLs, adds them to // |filter_collection|. void BuildMediaSourceCollection( diff --git a/webkit/media/webmediaplayer_impl.cc b/webkit/media/webmediaplayer_impl.cc index 87d907a..7ccb522 100644 --- a/webkit/media/webmediaplayer_impl.cc +++ b/webkit/media/webmediaplayer_impl.cc @@ -202,10 +202,15 @@ WebMediaPlayerImpl::WebMediaPlayerImpl( audio_source_provider_ = new WebAudioSourceProviderImpl( params.audio_renderer_sink() ? params.audio_renderer_sink() : new media::NullAudioSink(media_thread_.message_loop_proxy())); + + ScopedVector<media::AudioDecoder> audio_decoders; + AddDefaultAudioDecoders(media_thread_.message_loop_proxy(), &audio_decoders); + scoped_ptr<media::AudioRenderer> audio_renderer( new media::AudioRendererImpl( media_thread_.message_loop_proxy(), audio_source_provider_, + audio_decoders.Pass(), set_decryptor_ready_cb)); filter_collection_->SetAudioRenderer(audio_renderer.Pass()); } |