From 35f3e67adf323b55cab5775a503afec9cf6e87da Mon Sep 17 00:00:00 2001
From: "acolwell@chromium.org"
 <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>
Date: Mon, 15 Nov 2010 17:13:08 +0000
Subject: [PATCH] Move FilterType into MediaFilterCollection

MediaFilterCollection is the only code that uses FilterType now so
I'm moving the enum into that class and removing all references from
the MediaFilter & derived classes.

BUG=61823
TEST=No new functionality. Existing tests pass.

Review URL: http://codereview.chromium.org/4653005

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@66125 0039d316-1c4b-4281-b951-d872f2087c98
---
 chrome/renderer/render_view.cc                |  6 +-
 media/base/filters.cc                         | 24 -------
 media/base/filters.h                          | 34 ---------
 media/base/media_filter_collection.cc         | 71 +++++++++++++++++--
 media/base/media_filter_collection.h          | 43 ++++++++---
 .../base/media_filter_collection_unittest.cc  | 36 +++++-----
 media/base/mock_filters.h                     | 12 ++--
 media/base/pipeline_impl.cc                   | 12 ++--
 media/filters/decoder_base_unittest.cc        |  4 --
 media/tools/player_x11/player_x11.cc          | 18 ++---
 webkit/glue/webmediaplayer_impl.cc            | 16 ++---
 webkit/support/webkit_support.cc              |  2 +-
 .../tools/test_shell/test_webview_delegate.cc |  2 +-
 13 files changed, 154 insertions(+), 126 deletions(-)

diff --git a/chrome/renderer/render_view.cc b/chrome/renderer/render_view.cc
index 8bd4675279f63..015ed0f3a0e1a 100644
--- a/chrome/renderer/render_view.cc
+++ b/chrome/renderer/render_view.cc
@@ -2636,7 +2636,7 @@ WebMediaPlayer* RenderView::createMediaPlayer(
   const CommandLine* cmd_line = CommandLine::ForCurrentProcess();
   if (!cmd_line->HasSwitch(switches::kDisableAudio)) {
     // Add the chrome specific audio renderer.
-    collection->AddFilter(new AudioRendererImpl(audio_message_filter()));
+    collection->AddAudioRenderer(new AudioRendererImpl(audio_message_filter()));
   }
 
   if (cmd_line->HasSwitch(switches::kEnableAcceleratedDecoding) &&
@@ -2652,7 +2652,7 @@ WebMediaPlayer* RenderView::createMediaPlayer(
     // lost.
     bool ret = context->makeContextCurrent();
     CHECK(ret) << "Failed to switch context";
-    collection->AddFilter(new IpcVideoDecoder(
+    collection->AddVideoDecoder(new IpcVideoDecoder(
         MessageLoop::current(), context->context()));
   }
 
@@ -2683,7 +2683,7 @@ WebMediaPlayer* RenderView::createMediaPlayer(
   bool pts_logging = cmd_line->HasSwitch(switches::kEnableVideoLogging);
   scoped_refptr<webkit_glue::VideoRendererImpl> renderer(
       new webkit_glue::VideoRendererImpl(pts_logging));
-  collection->AddFilter(renderer);
+  collection->AddVideoRenderer(renderer);
   video_renderer = renderer;
 
   return new webkit_glue::WebMediaPlayerImpl(
diff --git a/media/base/filters.cc b/media/base/filters.cc
index 0773b89b3ea50..100af783a66f1 100644
--- a/media/base/filters.cc
+++ b/media/base/filters.cc
@@ -93,14 +93,6 @@ bool DataSource::IsUrlSupported(const std::string& url) {
   return true;
 }
 
-FilterType DataSource::filter_type() const {
-  return static_filter_type();
-}
-
-FilterType Demuxer::filter_type() const {
-  return static_filter_type();
-}
-
 bool Demuxer::requires_message_loop() const {
   return true;
 }
@@ -109,10 +101,6 @@ const char* Demuxer::message_loop_name() const {
   return "DemuxerThread";
 }
 
-FilterType AudioDecoder::filter_type() const {
-  return static_filter_type();
-}
-
 const char* AudioDecoder::major_mime_type() const {
   return mime_type::kMajorTypeAudio;
 }
@@ -125,18 +113,10 @@ const char* AudioDecoder::message_loop_name() const {
   return "AudioDecoderThread";
 }
 
-FilterType AudioRenderer::filter_type() const {
-  return static_filter_type();
-}
-
 const char* AudioRenderer::major_mime_type() const {
   return mime_type::kMajorTypeAudio;
 }
 
-FilterType VideoDecoder::filter_type() const {
-  return static_filter_type();
-}
-
 const char* VideoDecoder::major_mime_type() const {
   return mime_type::kMajorTypeVideo;
 }
@@ -149,10 +129,6 @@ const char* VideoDecoder::message_loop_name() const {
   return "VideoDecoderThread";
 }
 
-FilterType VideoRenderer::filter_type() const {
-  return static_filter_type();
-}
-
 const char* VideoRenderer::major_mime_type() const {
   return mime_type::kMajorTypeVideo;
 }
diff --git a/media/base/filters.h b/media/base/filters.h
index bec7d39d5c209..8c3d7571c9f29 100644
--- a/media/base/filters.h
+++ b/media/base/filters.h
@@ -43,18 +43,6 @@ class DemuxerStream;
 class FilterHost;
 class MediaFilter;
 
-// Identifies the type of filter implementation. Each filter has to be one of
-// the following types. This is used to identify filter object during
-// initialization of pipeline.
-enum FilterType {
-  FILTER_DATA_SOURCE,
-  FILTER_DEMUXER,
-  FILTER_AUDIO_DECODER,
-  FILTER_VIDEO_DECODER,
-  FILTER_AUDIO_RENDERER,
-  FILTER_VIDEO_RENDERER
-};
-
 // Used for completing asynchronous methods.
 typedef Callback0::Type FilterCallback;
 
@@ -62,10 +50,6 @@ class MediaFilter : public base::RefCountedThreadSafe<MediaFilter> {
  public:
   MediaFilter();
 
-  // Return the type of this filter. All implementor has to provide this
-  // method.
-  virtual FilterType filter_type() const = 0;
-
   // Return the major mime type for this filter.
   virtual const char* major_mime_type() const;
 
@@ -146,9 +130,6 @@ class DataSource : public MediaFilter {
 
   virtual bool IsUrlSupported(const std::string& url);
 
-  static FilterType static_filter_type() { return FILTER_DATA_SOURCE; }
-  virtual FilterType filter_type() const;
-
   // Initialize a DataSource for the given URL, executing the callback upon
   // completion.
   virtual void Initialize(const std::string& url, FilterCallback* callback) = 0;
@@ -173,9 +154,6 @@ class DataSource : public MediaFilter {
 
 class Demuxer : public MediaFilter {
  public:
-  static FilterType static_filter_type() { return FILTER_DEMUXER; }
-  virtual FilterType filter_type() const;
-
   virtual bool requires_message_loop() const;
   virtual const char* message_loop_name() const;
 
@@ -232,9 +210,6 @@ class DemuxerStream : public base::RefCountedThreadSafe<DemuxerStream> {
 
 class VideoDecoder : public MediaFilter {
  public:
-  static FilterType static_filter_type() { return FILTER_VIDEO_DECODER; }
-  virtual FilterType filter_type() const;
-
   virtual const char* major_mime_type() const;
   virtual bool requires_message_loop() const;
   virtual const char* message_loop_name() const;
@@ -280,9 +255,6 @@ class VideoDecoder : public MediaFilter {
 
 class AudioDecoder : public MediaFilter {
  public:
-  static FilterType static_filter_type() { return FILTER_AUDIO_DECODER; }
-  virtual FilterType filter_type() const;
-
   virtual const char* major_mime_type() const;
   virtual bool requires_message_loop() const;
   virtual const char* message_loop_name() const;
@@ -322,9 +294,6 @@ class AudioDecoder : public MediaFilter {
 
 class VideoRenderer : public MediaFilter {
  public:
-  static FilterType static_filter_type() { return FILTER_VIDEO_RENDERER; }
-  virtual FilterType filter_type() const;
-
   virtual const char* major_mime_type() const;
 
   // Initialize a VideoRenderer with the given VideoDecoder, executing the
@@ -339,9 +308,6 @@ class VideoRenderer : public MediaFilter {
 
 class AudioRenderer : public MediaFilter {
  public:
-  static FilterType static_filter_type() { return FILTER_AUDIO_RENDERER; }
-  virtual FilterType filter_type() const;
-
   virtual const char* major_mime_type() const;
 
   // Initialize a AudioRenderer with the given AudioDecoder, executing the
diff --git a/media/base/media_filter_collection.cc b/media/base/media_filter_collection.cc
index 2c90412761516..a1380c492fdc6 100644
--- a/media/base/media_filter_collection.cc
+++ b/media/base/media_filter_collection.cc
@@ -9,8 +9,28 @@ namespace media {
 MediaFilterCollection::MediaFilterCollection() {
 }
 
-void MediaFilterCollection::AddFilter(MediaFilter* filter) {
-  filters_.push_back(filter);
+void MediaFilterCollection::AddDataSource(DataSource* filter) {
+  AddFilter(DATA_SOURCE, filter);
+}
+
+void MediaFilterCollection::AddDemuxer(Demuxer* filter) {
+  AddFilter(DEMUXER, filter);
+}
+
+void MediaFilterCollection::AddVideoDecoder(VideoDecoder* filter) {
+  AddFilter(VIDEO_DECODER, filter);
+}
+
+void MediaFilterCollection::AddAudioDecoder(AudioDecoder* filter) {
+  AddFilter(AUDIO_DECODER, filter);
+}
+
+void MediaFilterCollection::AddVideoRenderer(VideoRenderer* filter) {
+  AddFilter(VIDEO_RENDERER, filter);
+}
+
+void MediaFilterCollection::AddAudioRenderer(AudioRenderer* filter) {
+  AddFilter(AUDIO_RENDERER, filter);
 }
 
 bool MediaFilterCollection::IsEmpty() const {
@@ -21,19 +41,60 @@ void MediaFilterCollection::Clear() {
   filters_.clear();
 }
 
+void MediaFilterCollection::SelectDataSource(
+    scoped_refptr<DataSource>* filter_out) {
+  SelectFilter<DATA_SOURCE>(filter_out);
+}
+
+void MediaFilterCollection::SelectDemuxer(scoped_refptr<Demuxer>* filter_out) {
+  SelectFilter<DEMUXER>(filter_out);
+}
+
+void MediaFilterCollection::SelectVideoDecoder(
+    scoped_refptr<VideoDecoder>* filter_out) {
+  SelectFilter<VIDEO_DECODER>(filter_out);
+}
+
+void MediaFilterCollection::SelectAudioDecoder(
+    scoped_refptr<AudioDecoder>* filter_out) {
+  SelectFilter<AUDIO_DECODER>(filter_out);
+}
+
+void MediaFilterCollection::SelectVideoRenderer(
+    scoped_refptr<VideoRenderer>* filter_out) {
+  SelectFilter<VIDEO_RENDERER>(filter_out);
+}
+
+void MediaFilterCollection::SelectAudioRenderer(
+    scoped_refptr<AudioRenderer>* filter_out) {
+  SelectFilter<AUDIO_RENDERER>(filter_out);
+}
+
+void MediaFilterCollection::AddFilter(FilterType filter_type,
+                                      MediaFilter* filter) {
+  filters_.push_back(FilterListElement(filter_type, filter));
+}
+
+template<MediaFilterCollection::FilterType filter_type, class Filter>
+void MediaFilterCollection::SelectFilter(scoped_refptr<Filter>* filter_out) {
+  scoped_refptr<MediaFilter> filter;
+  SelectFilter(filter_type, &filter);
+  *filter_out = reinterpret_cast<Filter*>(filter.get());
+}
+
 void MediaFilterCollection::SelectFilter(
     FilterType filter_type,
     scoped_refptr<MediaFilter>* filter_out)  {
 
-  std::list<scoped_refptr<MediaFilter> >::iterator it = filters_.begin();
+  FilterList::iterator it = filters_.begin();
   while (it != filters_.end()) {
-    if ((*it)->filter_type() == filter_type)
+    if (it->first == filter_type)
       break;
     ++it;
   }
 
   if (it != filters_.end()) {
-    *filter_out = it->get();
+    *filter_out = it->second.get();
     filters_.erase(it);
   }
 }
diff --git a/media/base/media_filter_collection.h b/media/base/media_filter_collection.h
index 31ea69c315dfc..c4a403abf185e 100644
--- a/media/base/media_filter_collection.h
+++ b/media/base/media_filter_collection.h
@@ -19,7 +19,12 @@ class MediaFilterCollection {
   MediaFilterCollection();
 
   // Adds a filter to the collection.
-  void AddFilter(MediaFilter* filter);
+  void AddDataSource(DataSource* filter);
+  void AddDemuxer(Demuxer* filter);
+  void AddVideoDecoder(VideoDecoder* filter);
+  void AddAudioDecoder(AudioDecoder* filter);
+  void AddVideoRenderer(VideoRenderer* filter);
+  void AddAudioRenderer(AudioRenderer* filter);
 
   // Is the collection empty?
   bool IsEmpty() const;
@@ -30,16 +35,38 @@ class MediaFilterCollection {
   // Selects a filter of the specified type from the collection.
   // If the required filter cannot be found, NULL is returned.
   // If a filter is returned it is removed from the collection.
-  template <class Filter>
-  void SelectFilter(scoped_refptr<Filter>* filter_out) {
-    scoped_refptr<MediaFilter> filter;
-    SelectFilter(Filter::static_filter_type(), &filter);
-    *filter_out = reinterpret_cast<Filter*>(filter.get());
-  }
+  void SelectDataSource(scoped_refptr<DataSource>* filter_out);
+  void SelectDemuxer(scoped_refptr<Demuxer>* filter_out);
+  void SelectVideoDecoder(scoped_refptr<VideoDecoder>* filter_out);
+  void SelectAudioDecoder(scoped_refptr<AudioDecoder>* filter_out);
+  void SelectVideoRenderer(scoped_refptr<VideoRenderer>* filter_out);
+  void SelectAudioRenderer(scoped_refptr<AudioRenderer>* filter_out);
 
  private:
+  // Identifies the type of filter implementation. Each filter has to be one of
+  // the following types. This is used to mark, identify, and support
+  // downcasting of different filter types stored in the filters_ list.
+  enum FilterType {
+    DATA_SOURCE,
+    DEMUXER,
+    AUDIO_DECODER,
+    VIDEO_DECODER,
+    AUDIO_RENDERER,
+    VIDEO_RENDERER
+  };
+
   // List of filters managed by this collection.
-  std::list<scoped_refptr<MediaFilter> > filters_;
+  typedef std::pair<FilterType, scoped_refptr<MediaFilter> > FilterListElement;
+  typedef std::list<FilterListElement> FilterList;
+  FilterList filters_;
+
+  // Helper function that adds a filter to the filter list.
+  void AddFilter(FilterType filter_type, MediaFilter* filter);
+
+  // Helper function for SelectXXX() methods. It manages the
+  // downcasting and mapping between FilterType and Filter class.
+  template<FilterType filter_type, class Filter>
+  void SelectFilter(scoped_refptr<Filter>* filter_out);
 
   // Helper function that searches the filters list for a specific
   // filter type.
diff --git a/media/base/media_filter_collection_unittest.cc b/media/base/media_filter_collection_unittest.cc
index d974b4fda17bf..523123be5af69 100644
--- a/media/base/media_filter_collection_unittest.cc
+++ b/media/base/media_filter_collection_unittest.cc
@@ -23,7 +23,7 @@ class MediaFilterCollectionTest : public ::testing::Test {
 TEST_F(MediaFilterCollectionTest, TestIsEmptyAndClear) {
   EXPECT_TRUE(collection_.IsEmpty());
 
-  collection_.AddFilter(mock_filters_.data_source());
+  collection_.AddDataSource(mock_filters_.data_source());
 
   EXPECT_FALSE(collection_.IsEmpty());
 
@@ -32,41 +32,41 @@ TEST_F(MediaFilterCollectionTest, TestIsEmptyAndClear) {
   EXPECT_TRUE(collection_.IsEmpty());
 }
 
-TEST_F(MediaFilterCollectionTest, SelectFilter) {
+TEST_F(MediaFilterCollectionTest, SelectXXXMethods) {
   scoped_refptr<AudioDecoder> audio_decoder;
   scoped_refptr<DataSource> data_source;
 
-  collection_.AddFilter(mock_filters_.data_source());
+  collection_.AddDataSource(mock_filters_.data_source());
   EXPECT_FALSE(collection_.IsEmpty());
 
   // Verify that the data source will not be returned if we
   // ask for a different type.
-  collection_.SelectFilter(&audio_decoder);
+  collection_.SelectAudioDecoder(&audio_decoder);
   EXPECT_FALSE(audio_decoder);
   EXPECT_FALSE(collection_.IsEmpty());
 
   // Verify that we can actually retrieve the data source
   // and that it is removed from the collection.
-  collection_.SelectFilter(&data_source);
+  collection_.SelectDataSource(&data_source);
   EXPECT_TRUE(data_source);
   EXPECT_TRUE(collection_.IsEmpty());
 
   // Add a data source and audio decoder.
-  collection_.AddFilter(mock_filters_.data_source());
-  collection_.AddFilter(mock_filters_.audio_decoder());
+  collection_.AddDataSource(mock_filters_.data_source());
+  collection_.AddAudioDecoder(mock_filters_.audio_decoder());
 
   // Verify that we can select the audio decoder.
-  collection_.SelectFilter(&audio_decoder);
+  collection_.SelectAudioDecoder(&audio_decoder);
   EXPECT_TRUE(audio_decoder);
   EXPECT_FALSE(collection_.IsEmpty());
 
   // Verify that we can't select it again since only one has been added.
-  collection_.SelectFilter(&audio_decoder);
+  collection_.SelectAudioDecoder(&audio_decoder);
   EXPECT_FALSE(audio_decoder);
 
   // Verify that we can select the data source and that doing so will
   // empty the collection again.
-  collection_.SelectFilter(&data_source);
+  collection_.SelectDataSource(&data_source);
   EXPECT_TRUE(collection_.IsEmpty());
 }
 
@@ -76,23 +76,23 @@ TEST_F(MediaFilterCollectionTest, MultipleFiltersOfSameType) {
 
   scoped_refptr<DataSource> data_source;
 
-  collection_.AddFilter(data_source_a.get());
-  collection_.AddFilter(data_source_b.get());
+  collection_.AddDataSource(data_source_a.get());
+  collection_.AddDataSource(data_source_b.get());
 
-  // Verify that first SelectFilter() returns data_source_a.
-  collection_.SelectFilter(&data_source);
+  // Verify that first SelectDataSource() returns data_source_a.
+  collection_.SelectDataSource(&data_source);
   EXPECT_TRUE(data_source);
   EXPECT_EQ(data_source, data_source_a);
   EXPECT_FALSE(collection_.IsEmpty());
 
-  // Verify that second SelectFilter() returns data_source_b.
-  collection_.SelectFilter(&data_source);
+  // Verify that second SelectDataSource() returns data_source_b.
+  collection_.SelectDataSource(&data_source);
   EXPECT_TRUE(data_source);
   EXPECT_EQ(data_source, data_source_b);
   EXPECT_TRUE(collection_.IsEmpty());
 
-  // Verify that third SelectFilter returns nothing.
-  collection_.SelectFilter(&data_source);
+  // Verify that third SelectDataSource() returns nothing.
+  collection_.SelectDataSource(&data_source);
   EXPECT_FALSE(data_source);
 }
 
diff --git a/media/base/mock_filters.h b/media/base/mock_filters.h
index ba15293480cab..af7c0c5121c40 100644
--- a/media/base/mock_filters.h
+++ b/media/base/mock_filters.h
@@ -293,13 +293,13 @@ class MockFilterCollection {
     MediaFilterCollection* collection = new MediaFilterCollection();
 
     if (include_data_source) {
-      collection->AddFilter(data_source_);
+      collection->AddDataSource(data_source_);
     }
-    collection->AddFilter(demuxer_);
-    collection->AddFilter(video_decoder_);
-    collection->AddFilter(audio_decoder_);
-    collection->AddFilter(video_renderer_);
-    collection->AddFilter(audio_renderer_);
+    collection->AddDemuxer(demuxer_);
+    collection->AddVideoDecoder(video_decoder_);
+    collection->AddAudioDecoder(audio_decoder_);
+    collection->AddVideoRenderer(video_renderer_);
+    collection->AddAudioRenderer(audio_renderer_);
     return collection;
   }
 
diff --git a/media/base/pipeline_impl.cc b/media/base/pipeline_impl.cc
index 7f17ff88a5ca5..7765cd0eeb2d7 100644
--- a/media/base/pipeline_impl.cc
+++ b/media/base/pipeline_impl.cc
@@ -954,7 +954,7 @@ void PipelineImpl::InitializeDataSource() {
 
   scoped_refptr<DataSource> data_source;
   while (true) {
-    filter_collection_->SelectFilter(&data_source);
+    filter_collection_->SelectDataSource(&data_source);
     if (!data_source || data_source->IsUrlSupported(url_))
       break;
   }
@@ -979,7 +979,7 @@ void PipelineImpl::InitializeDemuxer(
 
   CHECK(data_source);
 
-  filter_collection_->SelectFilter(&demuxer);
+  filter_collection_->SelectDemuxer(&demuxer);
   if (!demuxer) {
     SetError(PIPELINE_ERROR_REQUIRED_FILTER_MISSING);
     return;
@@ -1001,7 +1001,7 @@ bool PipelineImpl::InitializeAudioDecoder(
 
   if (stream) {
     scoped_refptr<AudioDecoder> audio_decoder;
-    filter_collection_->SelectFilter(&audio_decoder);
+    filter_collection_->SelectAudioDecoder(&audio_decoder);
 
     if (audio_decoder) {
       PrepareFilter(audio_decoder);
@@ -1028,7 +1028,7 @@ bool PipelineImpl::InitializeVideoDecoder(
 
   if (stream) {
     scoped_refptr<VideoDecoder> video_decoder;
-    filter_collection_->SelectFilter(&video_decoder);
+    filter_collection_->SelectVideoDecoder(&video_decoder);
 
     if (video_decoder) {
       PrepareFilter(video_decoder);
@@ -1050,7 +1050,7 @@ bool PipelineImpl::InitializeAudioRenderer(
   DCHECK(IsPipelineOk());
 
   if (decoder) {
-    filter_collection_->SelectFilter(&audio_renderer_);
+    filter_collection_->SelectAudioRenderer(&audio_renderer_);
 
     if (audio_renderer_) {
       PrepareFilter(audio_renderer_);
@@ -1070,7 +1070,7 @@ bool PipelineImpl::InitializeVideoRenderer(
   DCHECK(IsPipelineOk());
 
   if (decoder) {
-    filter_collection_->SelectFilter(&video_renderer_);
+    filter_collection_->SelectVideoRenderer(&video_renderer_);
 
     if (video_renderer_) {
       PrepareFilter(video_renderer_);
diff --git a/media/filters/decoder_base_unittest.cc b/media/filters/decoder_base_unittest.cc
index d280895cc1b8e..410077cd78809 100644
--- a/media/filters/decoder_base_unittest.cc
+++ b/media/filters/decoder_base_unittest.cc
@@ -67,10 +67,6 @@ class MockDecoderImpl : public media::DecoderBase<
 
   virtual ~MockDecoderImpl() {}
 
-  virtual media::FilterType filter_type() const {
-    return media::FILTER_VIDEO_DECODER;
-  }
-
   // DecoderBase Implementations.
   MOCK_METHOD3(DoInitialize,
                void(media::DemuxerStream* demuxer_stream,
diff --git a/media/tools/player_x11/player_x11.cc b/media/tools/player_x11/player_x11.cc
index ad307c4891ef0..ffff1bd92848a 100644
--- a/media/tools/player_x11/player_x11.cc
+++ b/media/tools/player_x11/player_x11.cc
@@ -99,21 +99,23 @@ bool InitPipeline(MessageLoop* message_loop,
   // Create our filter factories.
   scoped_ptr<media::MediaFilterCollection> collection(
       new media::MediaFilterCollection());
-  collection->AddFilter(new media::FileDataSource());
-  collection->AddFilter(new media::FFmpegDemuxer());
-  collection->AddFilter(new media::FFmpegAudioDecoder());
+  collection->AddDataSource(new media::FileDataSource());
+  collection->AddDemuxer(new media::FFmpegDemuxer());
+  collection->AddAudioDecoder(new media::FFmpegAudioDecoder());
   if (CommandLine::ForCurrentProcess()->HasSwitch(
           switches::kEnableOpenMax)) {
-    collection->AddFilter(new media::OmxVideoDecoder(NULL));
+    collection->AddVideoDecoder(new media::OmxVideoDecoder(NULL));
   } else {
-    collection->AddFilter(new media::FFmpegVideoDecoder(NULL));
+    collection->AddVideoDecoder(new media::FFmpegVideoDecoder(NULL));
   }
-  collection->AddFilter(new Renderer(g_display, g_window, paint_message_loop));
+  collection->AddVideoRenderer(new Renderer(g_display,
+                                            g_window,
+                                            paint_message_loop));
 
   if (enable_audio)
-    collection->AddFilter(new media::AudioRendererImpl());
+    collection->AddAudioRenderer(new media::AudioRendererImpl());
   else
-    collection->AddFilter(new media::NullAudioRenderer());
+    collection->AddAudioRenderer(new media::NullAudioRenderer());
 
   // Creates the pipeline and start it.
   *pipeline = new media::PipelineImpl(message_loop);
diff --git a/webkit/glue/webmediaplayer_impl.cc b/webkit/glue/webmediaplayer_impl.cc
index 02d98ca466c0e..bbf6172ff394a 100644
--- a/webkit/glue/webmediaplayer_impl.cc
+++ b/webkit/glue/webmediaplayer_impl.cc
@@ -278,18 +278,18 @@ WebMediaPlayerImpl::WebMediaPlayerImpl(
   proxy_->SetDataSource(buffered_data_source);
 
   if (use_simple_data_source) {
-    filter_collection_->AddFilter(simple_data_source);
-    filter_collection_->AddFilter(buffered_data_source);
+    filter_collection_->AddDataSource(simple_data_source);
+    filter_collection_->AddDataSource(buffered_data_source);
   } else {
-    filter_collection_->AddFilter(buffered_data_source);
-    filter_collection_->AddFilter(simple_data_source);
+    filter_collection_->AddDataSource(buffered_data_source);
+    filter_collection_->AddDataSource(simple_data_source);
   }
 
   // Add in the default filter factories.
-  filter_collection_->AddFilter(new media::FFmpegDemuxer());
-  filter_collection_->AddFilter(new media::FFmpegAudioDecoder());
-  filter_collection_->AddFilter(new media::FFmpegVideoDecoder(NULL));
-  filter_collection_->AddFilter(new media::NullAudioRenderer());
+  filter_collection_->AddDemuxer(new media::FFmpegDemuxer());
+  filter_collection_->AddAudioDecoder(new media::FFmpegAudioDecoder());
+  filter_collection_->AddVideoDecoder(new media::FFmpegVideoDecoder(NULL));
+  filter_collection_->AddAudioRenderer(new media::NullAudioRenderer());
 }
 
 WebMediaPlayerImpl::~WebMediaPlayerImpl() {
diff --git a/webkit/support/webkit_support.cc b/webkit/support/webkit_support.cc
index b80c0af09083d..eb839a18f5a92 100644
--- a/webkit/support/webkit_support.cc
+++ b/webkit/support/webkit_support.cc
@@ -292,7 +292,7 @@ WebKit::WebMediaPlayer* CreateMediaPlayer(WebFrame* frame,
 
   scoped_refptr<webkit_glue::VideoRendererImpl> video_renderer(
       new webkit_glue::VideoRendererImpl(false));
-  collection->AddFilter(video_renderer);
+  collection->AddVideoRenderer(video_renderer);
 
   return new webkit_glue::WebMediaPlayerImpl(
       client, collection.release(), bridge_factory_simple,
diff --git a/webkit/tools/test_shell/test_webview_delegate.cc b/webkit/tools/test_shell/test_webview_delegate.cc
index 3a423826f264a..f5d30b73e292f 100644
--- a/webkit/tools/test_shell/test_webview_delegate.cc
+++ b/webkit/tools/test_shell/test_webview_delegate.cc
@@ -743,7 +743,7 @@ WebMediaPlayer* TestWebViewDelegate::createMediaPlayer(
 
   scoped_refptr<webkit_glue::VideoRendererImpl> video_renderer(
       new webkit_glue::VideoRendererImpl(false));
-  collection->AddFilter(video_renderer);
+  collection->AddVideoRenderer(video_renderer);
 
   return new webkit_glue::WebMediaPlayerImpl(
       client, collection.release(), bridge_factory_simple,
-- 
GitLab