| 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);
|
| }
|
| }
|
|
|