summaryrefslogtreecommitdiffstats
path: root/webkit/media
diff options
context:
space:
mode:
authorscherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-21 22:33:47 +0000
committerscherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-21 22:33:47 +0000
commit7dd4c740735765a73f2b58e6518eed446730862b (patch)
tree51f02622aace9a0337e8823c5b502e15523f8d40 /webkit/media
parentcc2ba3a7e0fda5e0fd6916ff4f450d14e2fc379b (diff)
downloadchromium_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.cc30
-rw-r--r--webkit/media/filter_helpers.h8
-rw-r--r--webkit/media/webmediaplayer_impl.cc5
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());
}