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