Index: media/base/media_filter_collection.cc |
diff --git a/media/base/media_filter_collection.cc b/media/base/media_filter_collection.cc |
index 2c90412761516d1e9cb0e82d591f90b805618bee..34f8b6f4a8cebb472ea86a29bca93b9872d4e1e9 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::AddFilter(DataSource* filter) { |
+ AddFilter(FILTER_DATA_SOURCE, filter); |
+} |
+ |
+void MediaFilterCollection::AddFilter(Demuxer* filter) { |
+ AddFilter(FILTER_DEMUXER, filter); |
+} |
+ |
+void MediaFilterCollection::AddFilter(VideoDecoder* filter) { |
+ AddFilter(FILTER_VIDEO_DECODER, filter); |
+} |
+ |
+void MediaFilterCollection::AddFilter(AudioDecoder* filter) { |
+ AddFilter(FILTER_AUDIO_DECODER, filter); |
+} |
+ |
+void MediaFilterCollection::AddFilter(VideoRenderer* filter) { |
+ AddFilter(FILTER_VIDEO_RENDERER, filter); |
+} |
+ |
+void MediaFilterCollection::AddFilter(AudioRenderer* filter) { |
+ AddFilter(FILTER_AUDIO_RENDERER, filter); |
} |
bool MediaFilterCollection::IsEmpty() const { |
@@ -22,18 +42,61 @@ void MediaFilterCollection::Clear() { |
} |
void MediaFilterCollection::SelectFilter( |
+ scoped_refptr<DataSource>* filter_out) { |
+ SelectFilter<FILTER_DATA_SOURCE>(filter_out); |
+} |
+ |
+void MediaFilterCollection::SelectFilter(scoped_refptr<Demuxer>* filter_out) { |
+ SelectFilter<FILTER_DEMUXER>(filter_out); |
+} |
+ |
+void MediaFilterCollection::SelectFilter( |
+ scoped_refptr<VideoDecoder>* filter_out) { |
+ SelectFilter<FILTER_VIDEO_DECODER>(filter_out); |
+} |
+ |
+void MediaFilterCollection::SelectFilter( |
+ scoped_refptr<AudioDecoder>* filter_out) { |
+ SelectFilter<FILTER_AUDIO_DECODER>(filter_out); |
+} |
+ |
+void MediaFilterCollection::SelectFilter( |
+ scoped_refptr<VideoRenderer>* filter_out) { |
+ SelectFilter<FILTER_VIDEO_RENDERER>(filter_out); |
+} |
+ |
+void MediaFilterCollection::SelectFilter( |
+ scoped_refptr<AudioRenderer>* filter_out) { |
+ SelectFilter<FILTER_AUDIO_RENDERER>(filter_out); |
+} |
+ |
+void MediaFilterCollection::AddFilter(FilterType filter_type, |
+ MediaFilter* filter) { |
+ filters_.push_back(Tuple2<FilterType, scoped_refptr<MediaFilter> >( |
+ 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->a == filter_type) |
break; |
++it; |
} |
if (it != filters_.end()) { |
- *filter_out = it->get(); |
+ *filter_out = it->b.get(); |
filters_.erase(it); |
} |
} |