diff options
author | fischman@chromium.org <fischman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-24 20:01:35 +0000 |
---|---|---|
committer | fischman@chromium.org <fischman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-24 20:01:35 +0000 |
commit | 1a48048a07ce4d4ba771c206f6ceb48f1438ec98 (patch) | |
tree | d4047e2856b804162949e5244e9708bf574226b0 /media | |
parent | 3e55e217f748774885c8babb9a8a1d3dcc4a163b (diff) | |
download | chromium_src-1a48048a07ce4d4ba771c206f6ceb48f1438ec98.zip chromium_src-1a48048a07ce4d4ba771c206f6ceb48f1438ec98.tar.gz chromium_src-1a48048a07ce4d4ba771c206f6ceb48f1438ec98.tar.bz2 |
Die, DemuxerStream::QueryInterface, die!
This appears to have been an attempt at hand-rolling an RTTI system, all for the
use of a *single* class (!). Removing it makes for cleaner, simpler, shorter
code. It also enables delegating DemuxerStreams, which wasn't possible before
(b/c the overridable method was protected, so not visible to a HAS-A wrapper).
BUG=none
TEST=trybots
Review URL: http://codereview.chromium.org/6730006
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@79309 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media')
-rw-r--r-- | media/base/filters.cc | 2 | ||||
-rw-r--r-- | media/base/filters.h | 22 | ||||
-rw-r--r-- | media/base/mock_filters.h | 2 | ||||
-rw-r--r-- | media/filters/ffmpeg_audio_decoder.cc | 6 | ||||
-rw-r--r-- | media/filters/ffmpeg_demuxer.cc | 9 | ||||
-rw-r--r-- | media/filters/ffmpeg_demuxer.h | 8 | ||||
-rw-r--r-- | media/filters/ffmpeg_demuxer_unittest.cc | 10 | ||||
-rw-r--r-- | media/filters/ffmpeg_interfaces.cc | 18 | ||||
-rw-r--r-- | media/filters/ffmpeg_interfaces.h | 33 | ||||
-rw-r--r-- | media/filters/ffmpeg_video_decoder.cc | 7 | ||||
-rw-r--r-- | media/filters/ffmpeg_video_decoder_unittest.cc | 17 | ||||
-rw-r--r-- | media/filters/omx_video_decoder.cc | 7 | ||||
-rw-r--r-- | media/media.gyp | 2 |
13 files changed, 19 insertions, 124 deletions
diff --git a/media/base/filters.cc b/media/base/filters.cc index fc5f537..1386842 100644 --- a/media/base/filters.cc +++ b/media/base/filters.cc @@ -66,7 +66,7 @@ void Filter::Seek(base::TimeDelta time, FilterCallback* callback) { void Filter::OnAudioRendererDisabled() { } -void* DemuxerStream::QueryInterface(const char* interface_id) { +AVStream* DemuxerStream::GetAVStream() { return NULL; } diff --git a/media/base/filters.h b/media/base/filters.h index d6b962d..88e6143 100644 --- a/media/base/filters.h +++ b/media/base/filters.h @@ -33,6 +33,8 @@ #include "media/base/media_format.h" #include "media/base/video_frame.h" +struct AVStream; + namespace media { class Buffer; @@ -144,16 +146,8 @@ class DemuxerStream : public base::RefCountedThreadSafe<DemuxerStream> { // TODO(scherkus): switch Read() callback to scoped_refptr<>. virtual void Read(Callback1<Buffer*>::Type* read_callback) = 0; - // Given a class that supports the |Interface| and a related static method - // interface_id(), which returns a const char*, this method returns true if - // the class returns an interface pointer and assigns the pointer to - // |interface_out|. Otherwise this method returns false. - template <class Interface> - bool QueryInterface(Interface** interface_out) { - void* i = QueryInterface(Interface::interface_id()); - *interface_out = reinterpret_cast<Interface*>(i); - return (NULL != i); - }; + // Returns an |AVStream*| if supported, or NULL. + virtual AVStream* GetAVStream(); // Returns the type of stream. virtual Type type() = 0; @@ -164,14 +158,6 @@ class DemuxerStream : public base::RefCountedThreadSafe<DemuxerStream> { virtual void EnableBitstreamConverter() = 0; protected: - // Optional method that is implemented by filters that support extended - // interfaces. The filter should return a pointer to the interface - // associated with the |interface_id| string if they support it, otherwise - // return NULL to indicate the interface is unknown. The derived filter - // should NOT AddRef() the interface. The DemuxerStream::QueryInterface() - // public template function will assign the interface to a scoped_refptr<>. - virtual void* QueryInterface(const char* interface_id); - friend class base::RefCountedThreadSafe<DemuxerStream>; virtual ~DemuxerStream(); }; diff --git a/media/base/mock_filters.h b/media/base/mock_filters.h index 44d3236..205218f 100644 --- a/media/base/mock_filters.h +++ b/media/base/mock_filters.h @@ -156,7 +156,7 @@ class MockDemuxerStream : public DemuxerStream { MOCK_METHOD0(type, Type()); MOCK_METHOD0(media_format, const MediaFormat&()); MOCK_METHOD1(Read, void(Callback1<Buffer*>::Type* read_callback)); - MOCK_METHOD1(QueryInterface, void*(const char* interface_id)); + MOCK_METHOD0(GetAVStream, AVStream*()); MOCK_METHOD0(EnableBitstreamConverter, void()); protected: diff --git a/media/filters/ffmpeg_audio_decoder.cc b/media/filters/ffmpeg_audio_decoder.cc index b01977b..74085a7 100644 --- a/media/filters/ffmpeg_audio_decoder.cc +++ b/media/filters/ffmpeg_audio_decoder.cc @@ -42,12 +42,10 @@ void FFmpegAudioDecoder::DoInitialize(DemuxerStream* demuxer_stream, AutoTaskRunner done_runner(done_cb); *success = false; - // Get the AVStream by querying for the provider interface. - AVStreamProvider* av_stream_provider; - if (!demuxer_stream->QueryInterface(&av_stream_provider)) { + AVStream* av_stream = demuxer_stream->GetAVStream(); + if (!av_stream) { return; } - AVStream* av_stream = av_stream_provider->GetAVStream(); // Grab the AVStream's codec context and make sure we have sensible values. codec_context_ = av_stream->codec; diff --git a/media/filters/ffmpeg_demuxer.cc b/media/filters/ffmpeg_demuxer.cc index d0d4c34..9f214cb 100644 --- a/media/filters/ffmpeg_demuxer.cc +++ b/media/filters/ffmpeg_demuxer.cc @@ -85,15 +85,6 @@ FFmpegDemuxerStream::~FFmpegDemuxerStream() { DCHECK(buffer_queue_.empty()); } -void* FFmpegDemuxerStream::QueryInterface(const char* id) { - DCHECK(id); - AVStreamProvider* interface_ptr = NULL; - if (0 == strcmp(id, AVStreamProvider::interface_id())) { - interface_ptr = this; - } - return interface_ptr; -} - bool FFmpegDemuxerStream::HasPendingReads() { DCHECK_EQ(MessageLoop::current(), demuxer_->message_loop()); DCHECK(!stopped_ || read_queue_.empty()) diff --git a/media/filters/ffmpeg_demuxer.h b/media/filters/ffmpeg_demuxer.h index 120b3b8..57e1a3d 100644 --- a/media/filters/ffmpeg_demuxer.h +++ b/media/filters/ffmpeg_demuxer.h @@ -33,7 +33,6 @@ #include "media/base/pipeline.h" #include "media/base/media_format.h" #include "media/filters/ffmpeg_glue.h" -#include "media/filters/ffmpeg_interfaces.h" // FFmpeg forward declarations. struct AVFormatContext; @@ -49,7 +48,7 @@ class FFmpegDemuxer; // Forward declaration for scoped_ptr_malloc. class ScopedPtrAVFree; -class FFmpegDemuxerStream : public DemuxerStream, public AVStreamProvider { +class FFmpegDemuxerStream : public DemuxerStream { public: // Maintains a reference to |demuxer| and initializes itself using information // inside |stream|. @@ -78,13 +77,8 @@ class FFmpegDemuxerStream : public DemuxerStream, public AVStreamProvider { virtual void Read(Callback1<Buffer*>::Type* read_callback); // Bitstream converter to convert input packet. virtual void EnableBitstreamConverter(); - - // AVStreamProvider implementation. virtual AVStream* GetAVStream(); - protected: - virtual void* QueryInterface(const char* interface_id); - private: virtual ~FFmpegDemuxerStream(); diff --git a/media/filters/ffmpeg_demuxer_unittest.cc b/media/filters/ffmpeg_demuxer_unittest.cc index fdf2893..3675f6e 100644 --- a/media/filters/ffmpeg_demuxer_unittest.cc +++ b/media/filters/ffmpeg_demuxer_unittest.cc @@ -237,21 +237,15 @@ TEST_F(FFmpegDemuxerTest, Initialize_Successful) { // First stream should be video and support the FFmpegDemuxerStream interface. scoped_refptr<DemuxerStream> stream = demuxer_->GetStream(DemuxerStream::VIDEO); - AVStreamProvider* av_stream_provider = NULL; ASSERT_TRUE(stream); EXPECT_EQ(DemuxerStream::VIDEO, stream->type()); - EXPECT_TRUE(stream->QueryInterface(&av_stream_provider)); - EXPECT_TRUE(av_stream_provider); - EXPECT_EQ(&streams_[AV_STREAM_VIDEO], av_stream_provider->GetAVStream()); + EXPECT_EQ(&streams_[AV_STREAM_VIDEO], stream->GetAVStream()); // Other stream should be audio and support the FFmpegDemuxerStream interface. stream = demuxer_->GetStream(DemuxerStream::AUDIO); - av_stream_provider = NULL; ASSERT_TRUE(stream); EXPECT_EQ(DemuxerStream::AUDIO, stream->type()); - EXPECT_TRUE(stream->QueryInterface(&av_stream_provider)); - EXPECT_TRUE(av_stream_provider); - EXPECT_EQ(&streams_[AV_STREAM_AUDIO], av_stream_provider->GetAVStream()); + EXPECT_EQ(&streams_[AV_STREAM_AUDIO], stream->GetAVStream()); } TEST_F(FFmpegDemuxerTest, Read_DiscardUninteresting) { diff --git a/media/filters/ffmpeg_interfaces.cc b/media/filters/ffmpeg_interfaces.cc deleted file mode 100644 index a244b27..0000000 --- a/media/filters/ffmpeg_interfaces.cc +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (c) 2009 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "media/filters/ffmpeg_interfaces.h" - -namespace media { - -AVStreamProvider::AVStreamProvider() {} - -AVStreamProvider::~AVStreamProvider() {} - -// static -const char* AVStreamProvider::interface_id() { - return "AVStreamProvider"; -} - -} // namespace media diff --git a/media/filters/ffmpeg_interfaces.h b/media/filters/ffmpeg_interfaces.h deleted file mode 100644 index c4cbe77..0000000 --- a/media/filters/ffmpeg_interfaces.h +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) 2009 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef MEDIA_FILTERS_FFMPEG_INTERFACES_H_ -#define MEDIA_FILTERS_FFMPEG_INTERFACES_H_ - -#include "base/basictypes.h" - -struct AVStream; - -namespace media { - -// Queryable interface that provides an initialized AVStream object suitable for -// decoding. -class AVStreamProvider { - public: - AVStreamProvider(); - virtual ~AVStreamProvider(); - - // AVStreamProvider interface. - virtual AVStream* GetAVStream() = 0; - - // Required by QueryInterface. - static const char* interface_id(); - - private: - DISALLOW_COPY_AND_ASSIGN(AVStreamProvider); -}; - -} // namespace media - -#endif // MEDIA_FILTERS_FFMPEG_INTERFACES_H_ diff --git a/media/filters/ffmpeg_video_decoder.cc b/media/filters/ffmpeg_video_decoder.cc index cbad2e8..9354563 100644 --- a/media/filters/ffmpeg_video_decoder.cc +++ b/media/filters/ffmpeg_video_decoder.cc @@ -14,7 +14,6 @@ #include "media/base/media_format.h" #include "media/base/video_frame.h" #include "media/ffmpeg/ffmpeg_common.h" -#include "media/filters/ffmpeg_interfaces.h" #include "media/video/ffmpeg_video_decode_engine.h" #include "media/video/video_decode_context.h" @@ -54,14 +53,12 @@ void FFmpegVideoDecoder::Initialize(DemuxerStream* demuxer_stream, initialize_callback_.reset(callback); statistics_callback_.reset(stats_callback); - // Get the AVStream by querying for the provider interface. - AVStreamProvider* av_stream_provider; - if (!demuxer_stream->QueryInterface(&av_stream_provider)) { + AVStream* av_stream = demuxer_stream->GetAVStream(); + if (!av_stream) { VideoCodecInfo info = {0}; OnInitializeComplete(info); return; } - AVStream* av_stream = av_stream_provider->GetAVStream(); time_base_->den = av_stream->r_frame_rate.num; time_base_->num = av_stream->r_frame_rate.den; diff --git a/media/filters/ffmpeg_video_decoder_unittest.cc b/media/filters/ffmpeg_video_decoder_unittest.cc index 2b3fc9b..692ba4d 100644 --- a/media/filters/ffmpeg_video_decoder_unittest.cc +++ b/media/filters/ffmpeg_video_decoder_unittest.cc @@ -15,7 +15,6 @@ #include "media/base/mock_task.h" #include "media/base/video_frame.h" #include "media/ffmpeg/ffmpeg_common.h" -#include "media/filters/ffmpeg_interfaces.h" #include "media/filters/ffmpeg_video_decoder.h" #include "media/video/video_decode_engine.h" #include "media/video/video_decode_context.h" @@ -47,12 +46,10 @@ static const FFmpegVideoDecoder::TimeTuple kTestPts3 = base::TimeDelta::FromMicroseconds(60) }; static const PipelineStatistics kStatistics; -class MockFFmpegDemuxerStream : public MockDemuxerStream, - public AVStreamProvider { +class MockFFmpegDemuxerStream : public MockDemuxerStream { public: MockFFmpegDemuxerStream() {} - // AVStreamProvider implementation. MOCK_METHOD0(GetAVStream, AVStream*()); protected: @@ -184,9 +181,6 @@ class FFmpegVideoDecoderTest : public testing::Test { void InitializeDecoderSuccessfully() { // Test successful initialization. - AVStreamProvider* av_stream_provider = demuxer_; - EXPECT_CALL(*demuxer_, QueryInterface(AVStreamProvider::interface_id())) - .WillOnce(Return(av_stream_provider)); EXPECT_CALL(*demuxer_, GetAVStream()) .WillOnce(Return(&stream_)); @@ -226,9 +220,9 @@ class FFmpegVideoDecoderTest : public testing::Test { DISALLOW_COPY_AND_ASSIGN(FFmpegVideoDecoderTest); }; -TEST_F(FFmpegVideoDecoderTest, Initialize_QueryInterfaceFails) { - // Test QueryInterface returning NULL. - EXPECT_CALL(*demuxer_, QueryInterface(AVStreamProvider::interface_id())) +TEST_F(FFmpegVideoDecoderTest, Initialize_GetAVStreamFails) { + // Test GetAVStream returning NULL. + EXPECT_CALL(*demuxer_, GetAVStream()) .WillOnce(ReturnNull()); EXPECT_CALL(host_, SetError(PIPELINE_ERROR_DECODE)); @@ -240,9 +234,6 @@ TEST_F(FFmpegVideoDecoderTest, Initialize_QueryInterfaceFails) { TEST_F(FFmpegVideoDecoderTest, Initialize_EngineFails) { // Test successful initialization. - AVStreamProvider* av_stream_provider = demuxer_; - EXPECT_CALL(*demuxer_, QueryInterface(AVStreamProvider::interface_id())) - .WillOnce(Return(av_stream_provider)); EXPECT_CALL(*demuxer_, GetAVStream()) .WillOnce(Return(&stream_)); diff --git a/media/filters/omx_video_decoder.cc b/media/filters/omx_video_decoder.cc index 0dc25f9..69a80d4 100644 --- a/media/filters/omx_video_decoder.cc +++ b/media/filters/omx_video_decoder.cc @@ -10,7 +10,6 @@ #include "media/base/filter_host.h" #include "media/base/limits.h" #include "media/ffmpeg/ffmpeg_common.h" -#include "media/filters/ffmpeg_interfaces.h" #include "media/video/omx_video_decode_engine.h" namespace media { @@ -53,14 +52,12 @@ void OmxVideoDecoder::Initialize(DemuxerStream* demuxer_stream, // We require bit stream converter for openmax hardware decoder. demuxer_stream->EnableBitstreamConverter(); - // Get the AVStream by querying for the provider interface. - AVStreamProvider* av_stream_provider; - if (!demuxer_stream->QueryInterface(&av_stream_provider)) { + AVStream* av_stream = demuxer_stream->GetAVStream(); + if (!av_stream) { VideoCodecInfo info = {0}; OnInitializeComplete(info); return; } - AVStream* av_stream = av_stream_provider->GetAVStream(); int width = av_stream->codec->coded_width; int height = av_stream->codec->coded_height; diff --git a/media/media.gyp b/media/media.gyp index 482e8e8..4df272c 100644 --- a/media/media.gyp +++ b/media/media.gyp @@ -148,8 +148,6 @@ 'filters/ffmpeg_h264_bitstream_converter.h', 'filters/ffmpeg_glue.cc', 'filters/ffmpeg_glue.h', - 'filters/ffmpeg_interfaces.cc', - 'filters/ffmpeg_interfaces.h', 'filters/ffmpeg_video_decoder.cc', 'filters/ffmpeg_video_decoder.h', 'filters/file_data_source.cc', |