summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authorfischman@chromium.org <fischman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-24 20:01:35 +0000
committerfischman@chromium.org <fischman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-24 20:01:35 +0000
commit1a48048a07ce4d4ba771c206f6ceb48f1438ec98 (patch)
treed4047e2856b804162949e5244e9708bf574226b0 /media
parent3e55e217f748774885c8babb9a8a1d3dcc4a163b (diff)
downloadchromium_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.cc2
-rw-r--r--media/base/filters.h22
-rw-r--r--media/base/mock_filters.h2
-rw-r--r--media/filters/ffmpeg_audio_decoder.cc6
-rw-r--r--media/filters/ffmpeg_demuxer.cc9
-rw-r--r--media/filters/ffmpeg_demuxer.h8
-rw-r--r--media/filters/ffmpeg_demuxer_unittest.cc10
-rw-r--r--media/filters/ffmpeg_interfaces.cc18
-rw-r--r--media/filters/ffmpeg_interfaces.h33
-rw-r--r--media/filters/ffmpeg_video_decoder.cc7
-rw-r--r--media/filters/ffmpeg_video_decoder_unittest.cc17
-rw-r--r--media/filters/omx_video_decoder.cc7
-rw-r--r--media/media.gyp2
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',