summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authorscherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-16 20:44:42 +0000
committerscherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-16 20:44:42 +0000
commite11c8ee1b8d01092326de43f8b881efb03a7ba0c (patch)
tree61a2ec2d89543d66ea9b555be3d9c1496c9bbabc /media
parente75962686027614e8b532e6e630cd84b88360486 (diff)
downloadchromium_src-e11c8ee1b8d01092326de43f8b881efb03a7ba0c.zip
chromium_src-e11c8ee1b8d01092326de43f8b881efb03a7ba0c.tar.gz
chromium_src-e11c8ee1b8d01092326de43f8b881efb03a7ba0c.tar.bz2
Replace AudioDecoderConfig with simple accessors on AudioDecoder.
AudioDecoderConfig was being used as a struct for outputting format information to an AudioRenderer. This was confusing and in contrast to VideoDecoderConfig, which is is actually used as input to configure a video decoder! Review URL: http://codereview.chromium.org/7796033 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@101563 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media')
-rw-r--r--media/audio/audio_parameters.cc9
-rw-r--r--media/audio/audio_parameters.h5
-rw-r--r--media/audio/audio_parameters_unittest.cc22
-rw-r--r--media/base/audio_decoder_config.h26
-rw-r--r--media/base/filters.h9
-rw-r--r--media/base/mock_filters.h4
-rw-r--r--media/filters/audio_renderer_base.cc13
-rw-r--r--media/filters/audio_renderer_base.h4
-rw-r--r--media/filters/audio_renderer_base_unittest.cc17
-rw-r--r--media/filters/audio_renderer_impl.cc8
-rw-r--r--media/filters/audio_renderer_impl.h4
-rw-r--r--media/filters/ffmpeg_audio_decoder.cc27
-rw-r--r--media/filters/ffmpeg_audio_decoder.h9
-rw-r--r--media/filters/ffmpeg_audio_decoder_unittest.cc6
-rw-r--r--media/filters/null_audio_renderer.cc8
-rw-r--r--media/filters/null_audio_renderer.h4
-rw-r--r--media/media.gyp1
17 files changed, 73 insertions, 103 deletions
diff --git a/media/audio/audio_parameters.cc b/media/audio/audio_parameters.cc
index 029f831..45c98d9 100644
--- a/media/audio/audio_parameters.cc
+++ b/media/audio/audio_parameters.cc
@@ -15,15 +15,6 @@ AudioParameters::AudioParameters()
channels(0) {
}
-AudioParameters::AudioParameters(const media::AudioDecoderConfig& config)
- : format(AUDIO_PCM_LINEAR),
- channel_layout(config.channel_layout),
- sample_rate(config.sample_rate),
- bits_per_sample(config.bits_per_channel),
- samples_per_packet(0),
- channels(ChannelLayoutToChannelCount(config.channel_layout)) {
-}
-
AudioParameters::AudioParameters(Format format, ChannelLayout channel_layout,
int sample_rate, int bits_per_sample,
int samples_per_packet)
diff --git a/media/audio/audio_parameters.h b/media/audio/audio_parameters.h
index 5c86990..0de5f6a 100644
--- a/media/audio/audio_parameters.h
+++ b/media/audio/audio_parameters.h
@@ -6,7 +6,7 @@
#define MEDIA_AUDIO_AUDIO_PARAMETERS_H_
#include "base/basictypes.h"
-#include "media/base/audio_decoder_config.h"
+#include "media/base/channel_layout.h"
#include "media/base/media_export.h"
struct MEDIA_EXPORT AudioParameters {
@@ -31,9 +31,6 @@ struct MEDIA_EXPORT AudioParameters {
static const uint32 kAudioDATSampleRate = 48000;
AudioParameters();
-
- explicit AudioParameters(const media::AudioDecoderConfig& config);
-
AudioParameters(Format format, ChannelLayout channel_layout, int sample_rate,
int bits_per_sample, int samples_per_packet);
diff --git a/media/audio/audio_parameters_unittest.cc b/media/audio/audio_parameters_unittest.cc
index afcf6ff..da3e746 100644
--- a/media/audio/audio_parameters_unittest.cc
+++ b/media/audio/audio_parameters_unittest.cc
@@ -7,8 +7,6 @@
#include "media/audio/audio_parameters.h"
#include "testing/gtest/include/gtest/gtest.h"
-using media::AudioDecoderConfig;
-
TEST(AudioParameters, Constructor_Default) {
AudioParameters::Format expected_format = AudioParameters::AUDIO_PCM_LINEAR;
int expected_bits = 0;
@@ -27,26 +25,6 @@ TEST(AudioParameters, Constructor_Default) {
EXPECT_EQ(expected_samples, params.samples_per_packet);
}
-TEST(AudioParameters, Constructor_AudioDecoderConfig) {
- AudioParameters::Format expected_format = AudioParameters::AUDIO_PCM_LINEAR;
- int expected_bits = 8;
- int expected_channels = 2;
- ChannelLayout expected_channel_layout = CHANNEL_LAYOUT_STEREO;
- int expected_rate = 44000;
- int expected_samples = 0;
-
- AudioDecoderConfig config(expected_bits, expected_channel_layout,
- expected_rate);
- AudioParameters params(config);
-
- EXPECT_EQ(expected_format, params.format);
- EXPECT_EQ(expected_bits, params.bits_per_sample);
- EXPECT_EQ(expected_channels, params.channels);
- EXPECT_EQ(expected_channel_layout, params.channel_layout);
- EXPECT_EQ(expected_rate, params.sample_rate);
- EXPECT_EQ(expected_samples, params.samples_per_packet);
-}
-
TEST(AudioParameters, Constructor_ParameterValues) {
AudioParameters::Format expected_format =
AudioParameters::AUDIO_PCM_LOW_LATENCY;
diff --git a/media/base/audio_decoder_config.h b/media/base/audio_decoder_config.h
deleted file mode 100644
index e2c848d..0000000
--- a/media/base/audio_decoder_config.h
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright (c) 2011 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_BASE_AUDIO_DECODER_CONFIG_H_
-#define MEDIA_BASE_AUDIO_DECODER_CONFIG_H_
-
-#include "media/base/channel_layout.h"
-
-namespace media {
-
-struct AudioDecoderConfig {
- AudioDecoderConfig(int bits, ChannelLayout layout, int rate)
- : bits_per_channel(bits),
- channel_layout(layout),
- sample_rate(rate) {
- }
-
- int bits_per_channel;
- ChannelLayout channel_layout;
- int sample_rate;
-};
-
-} // namespace media
-
-#endif // MEDIA_BASE_AUDIO_DECODER_CONFIG_H_
diff --git a/media/base/filters.h b/media/base/filters.h
index 180739d..faafa4e 100644
--- a/media/base/filters.h
+++ b/media/base/filters.h
@@ -31,7 +31,7 @@
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
#include "base/time.h"
-#include "media/base/audio_decoder_config.h"
+#include "media/base/channel_layout.h"
#include "media/base/media_export.h"
#include "media/base/pipeline_status.h"
#include "media/base/video_frame.h"
@@ -215,8 +215,6 @@ class MEDIA_EXPORT AudioDecoder : public Filter {
virtual void Initialize(DemuxerStream* stream, FilterCallback* callback,
StatisticsCallback* stats_callback) = 0;
- virtual AudioDecoderConfig config() = 0;
-
// Renderer provides an output buffer for Decoder to write to. These buffers
// will be recycled to renderer via the permanent callback.
//
@@ -230,6 +228,11 @@ class MEDIA_EXPORT AudioDecoder : public Filter {
consume_audio_samples_callback_ = callback;
}
+ // Returns various information about the decoded audio format.
+ virtual int bits_per_channel() = 0;
+ virtual ChannelLayout channel_layout() = 0;
+ virtual int sample_rate() = 0;
+
protected:
AudioDecoder();
virtual ~AudioDecoder();
diff --git a/media/base/mock_filters.h b/media/base/mock_filters.h
index e215186..8abcbd3 100644
--- a/media/base/mock_filters.h
+++ b/media/base/mock_filters.h
@@ -212,8 +212,10 @@ class MockAudioDecoder : public AudioDecoder {
MOCK_METHOD3(Initialize, void(DemuxerStream* stream,
FilterCallback* callback,
StatisticsCallback* stats_callback));
- MOCK_METHOD0(config, AudioDecoderConfig());
MOCK_METHOD1(ProduceAudioSamples, void(scoped_refptr<Buffer>));
+ MOCK_METHOD0(bits_per_channel, int(void));
+ MOCK_METHOD0(channel_layout, ChannelLayout(void));
+ MOCK_METHOD0(sample_rate, int(void));
void ConsumeAudioSamplesForTest(scoped_refptr<Buffer> buffer) {
AudioDecoder::ConsumeAudioSamples(buffer);
diff --git a/media/filters/audio_renderer_base.cc b/media/filters/audio_renderer_base.cc
index 2d6205e..f64f13f 100644
--- a/media/filters/audio_renderer_base.cc
+++ b/media/filters/audio_renderer_base.cc
@@ -104,15 +104,14 @@ void AudioRendererBase::Initialize(AudioDecoder* decoder,
// Initialize our algorithm with media properties, initial playback rate,
// and a callback to request more reads from the data source.
- AudioDecoderConfig config = decoder_->config();
- algorithm_->Initialize(ChannelLayoutToChannelCount(config.channel_layout),
- config.sample_rate,
- config.bits_per_channel,
- 0.0f,
- cb);
+ ChannelLayout channel_layout = decoder_->channel_layout();
+ int channels = ChannelLayoutToChannelCount(channel_layout);
+ int bits_per_channel = decoder_->bits_per_channel();
+ int sample_rate = decoder_->sample_rate();
+ algorithm_->Initialize(channels, sample_rate, bits_per_channel, 0.0f, cb);
// Give the subclass an opportunity to initialize itself.
- if (!OnInitialize(config)) {
+ if (!OnInitialize(bits_per_channel, channel_layout, sample_rate)) {
host()->SetError(PIPELINE_ERROR_INITIALIZATION_FAILED);
callback->Run();
return;
diff --git a/media/filters/audio_renderer_base.h b/media/filters/audio_renderer_base.h
index 5305c7b..cf73924 100644
--- a/media/filters/audio_renderer_base.h
+++ b/media/filters/audio_renderer_base.h
@@ -46,7 +46,9 @@ class MEDIA_EXPORT AudioRendererBase : public AudioRenderer {
protected:
// Subclasses should return true if they were able to initialize, false
// otherwise.
- virtual bool OnInitialize(const AudioDecoderConfig& config) = 0;
+ virtual bool OnInitialize(int bits_per_channel,
+ ChannelLayout channel_layout,
+ int sample_rate) = 0;
// Called by Stop(). Subclasses should perform any necessary cleanup during
// this time, such as stopping any running threads.
diff --git a/media/filters/audio_renderer_base_unittest.cc b/media/filters/audio_renderer_base_unittest.cc
index b0be7ae..87faab3 100644
--- a/media/filters/audio_renderer_base_unittest.cc
+++ b/media/filters/audio_renderer_base_unittest.cc
@@ -31,7 +31,7 @@ class MockAudioRendererBase : public AudioRendererBase {
MOCK_METHOD1(SetVolume, void(float volume));
// AudioRendererBase implementation.
- MOCK_METHOD1(OnInitialize, bool(const AudioDecoderConfig& config));
+ MOCK_METHOD3(OnInitialize, bool(int, ChannelLayout, int));
MOCK_METHOD0(OnStop, void());
// Used for verifying check points during tests.
@@ -57,9 +57,12 @@ class AudioRendererBaseTest : public ::testing::Test {
.WillRepeatedly(Invoke(this, &AudioRendererBaseTest::EnqueueCallback));
// Set up audio properties.
- ON_CALL(*decoder_, config())
- .WillByDefault(Return(AudioDecoderConfig(16, CHANNEL_LAYOUT_MONO,
- 44100)));
+ ON_CALL(*decoder_, bits_per_channel())
+ .WillByDefault(Return(16));
+ ON_CALL(*decoder_, channel_layout())
+ .WillByDefault(Return(CHANNEL_LAYOUT_MONO));
+ ON_CALL(*decoder_, sample_rate())
+ .WillByDefault(Return(44100));
}
virtual ~AudioRendererBaseTest() {
@@ -93,7 +96,7 @@ TEST_F(AudioRendererBaseTest, Initialize_Failed) {
InSequence s;
// Our subclass will fail when asked to initialize.
- EXPECT_CALL(*renderer_, OnInitialize(_))
+ EXPECT_CALL(*renderer_, OnInitialize(_, _, _))
.WillOnce(Return(false));
// We expect to receive an error.
@@ -108,7 +111,7 @@ TEST_F(AudioRendererBaseTest, Initialize_Successful) {
InSequence s;
// Then our subclass will be asked to initialize.
- EXPECT_CALL(*renderer_, OnInitialize(_))
+ EXPECT_CALL(*renderer_, OnInitialize(_, _, _))
.WillOnce(Return(true));
// Initialize, we shouldn't have any reads.
@@ -136,7 +139,7 @@ TEST_F(AudioRendererBaseTest, OneCompleteReadCycle) {
InSequence s;
// Then our subclass will be asked to initialize.
- EXPECT_CALL(*renderer_, OnInitialize(_))
+ EXPECT_CALL(*renderer_, OnInitialize(_, _, _))
.WillOnce(Return(true));
// Initialize, we shouldn't have any reads.
diff --git a/media/filters/audio_renderer_impl.cc b/media/filters/audio_renderer_impl.cc
index ae91993..84fb645 100644
--- a/media/filters/audio_renderer_impl.cc
+++ b/media/filters/audio_renderer_impl.cc
@@ -72,9 +72,11 @@ void AudioRendererImpl::OnError(AudioOutputStream* stream, int code) {
NOTIMPLEMENTED();
}
-bool AudioRendererImpl::OnInitialize(const AudioDecoderConfig& config) {
- AudioParameters params(config);
- params.samples_per_packet = kSamplesPerBuffer;
+bool AudioRendererImpl::OnInitialize(int bits_per_channel,
+ ChannelLayout channel_layout,
+ int sample_rate) {
+ AudioParameters params(AudioParameters::AUDIO_PCM_LINEAR, channel_layout,
+ sample_rate, bits_per_channel, kSamplesPerBuffer);
bytes_per_second_ = params.GetBytesPerSecond();
diff --git a/media/filters/audio_renderer_impl.h b/media/filters/audio_renderer_impl.h
index f52913d..238f59c 100644
--- a/media/filters/audio_renderer_impl.h
+++ b/media/filters/audio_renderer_impl.h
@@ -45,7 +45,9 @@ class MEDIA_EXPORT AudioRendererImpl
protected:
// AudioRendererBase implementation.
- virtual bool OnInitialize(const AudioDecoderConfig& config);
+ virtual bool OnInitialize(int bits_per_channel,
+ ChannelLayout channel_layout,
+ int sample_rate);
virtual void OnStop();
private:
diff --git a/media/filters/ffmpeg_audio_decoder.cc b/media/filters/ffmpeg_audio_decoder.cc
index 22c5685..50335d3 100644
--- a/media/filters/ffmpeg_audio_decoder.cc
+++ b/media/filters/ffmpeg_audio_decoder.cc
@@ -29,7 +29,9 @@ const size_t FFmpegAudioDecoder::kOutputBufferSize =
FFmpegAudioDecoder::FFmpegAudioDecoder(MessageLoop* message_loop)
: DecoderBase<AudioDecoder, Buffer>(message_loop),
codec_context_(NULL),
- config_(0, CHANNEL_LAYOUT_NONE, 0),
+ bits_per_channel_(0),
+ channel_layout_(CHANNEL_LAYOUT_NONE),
+ sample_rate_(0),
estimated_next_timestamp_(kNoTimestamp) {
}
@@ -70,12 +72,11 @@ void FFmpegAudioDecoder::DoInitialize(DemuxerStream* demuxer_stream,
return;
}
- config_.bits_per_channel =
- av_get_bits_per_sample_fmt(codec_context_->sample_fmt);
- config_.channel_layout =
+ bits_per_channel_ = av_get_bits_per_sample_fmt(codec_context_->sample_fmt);
+ channel_layout_ =
ChannelLayoutToChromeChannelLayout(codec_context_->channel_layout,
codec_context_->channels);
- config_.sample_rate = codec_context_->sample_rate;
+ sample_rate_ = codec_context_->sample_rate;
// Prepare the output buffer.
output_buffer_.reset(static_cast<uint8*>(av_malloc(kOutputBufferSize)));
@@ -86,14 +87,22 @@ void FFmpegAudioDecoder::DoInitialize(DemuxerStream* demuxer_stream,
*success = true;
}
-AudioDecoderConfig FFmpegAudioDecoder::config() {
- return config_;
-}
-
void FFmpegAudioDecoder::ProduceAudioSamples(scoped_refptr<Buffer> output) {
DecoderBase<AudioDecoder, Buffer>::PostReadTaskHack(output);
}
+int FFmpegAudioDecoder::bits_per_channel() {
+ return bits_per_channel_;
+}
+
+ChannelLayout FFmpegAudioDecoder::channel_layout() {
+ return channel_layout_;
+}
+
+int FFmpegAudioDecoder::sample_rate() {
+ return sample_rate_;
+}
+
void FFmpegAudioDecoder::DoSeek(base::TimeDelta time, Task* done_cb) {
avcodec_flush_buffers(codec_context_);
estimated_next_timestamp_ = kNoTimestamp;
diff --git a/media/filters/ffmpeg_audio_decoder.h b/media/filters/ffmpeg_audio_decoder.h
index 1025083..e92a851 100644
--- a/media/filters/ffmpeg_audio_decoder.h
+++ b/media/filters/ffmpeg_audio_decoder.h
@@ -21,8 +21,10 @@ class MEDIA_EXPORT FFmpegAudioDecoder
virtual ~FFmpegAudioDecoder();
// AudioDecoder implementation.
- virtual AudioDecoderConfig config();
virtual void ProduceAudioSamples(scoped_refptr<Buffer> output);
+ virtual int bits_per_channel();
+ virtual ChannelLayout channel_layout();
+ virtual int sample_rate();
protected:
virtual void DoInitialize(DemuxerStream* demuxer_stream, bool* success,
@@ -41,7 +43,10 @@ class MEDIA_EXPORT FFmpegAudioDecoder
// is initialized in OnInitialize().
AVCodecContext* codec_context_;
- AudioDecoderConfig config_;
+ // Decoded audio format.
+ int bits_per_channel_;
+ ChannelLayout channel_layout_;
+ int sample_rate_;
// Estimated timestamp for next packet. Useful for packets without timestamps.
base::TimeDelta estimated_next_timestamp_;
diff --git a/media/filters/ffmpeg_audio_decoder_unittest.cc b/media/filters/ffmpeg_audio_decoder_unittest.cc
index 885ef5a..9edc85a 100644
--- a/media/filters/ffmpeg_audio_decoder_unittest.cc
+++ b/media/filters/ffmpeg_audio_decoder_unittest.cc
@@ -141,9 +141,9 @@ class FFmpegAudioDecoderTest : public testing::Test {
TEST_F(FFmpegAudioDecoderTest, Initialize) {
Initialize();
- EXPECT_EQ(16, decoder_->config().bits_per_channel);
- EXPECT_EQ(CHANNEL_LAYOUT_STEREO, decoder_->config().channel_layout);
- EXPECT_EQ(44100, decoder_->config().sample_rate);
+ EXPECT_EQ(16, decoder_->bits_per_channel());
+ EXPECT_EQ(CHANNEL_LAYOUT_STEREO, decoder_->channel_layout());
+ EXPECT_EQ(44100, decoder_->sample_rate());
Stop();
}
diff --git a/media/filters/null_audio_renderer.cc b/media/filters/null_audio_renderer.cc
index 21b3e07..0d5daf5 100644
--- a/media/filters/null_audio_renderer.cc
+++ b/media/filters/null_audio_renderer.cc
@@ -60,11 +60,13 @@ void NullAudioRenderer::ThreadMain() {
}
}
-bool NullAudioRenderer::OnInitialize(const AudioDecoderConfig& config) {
+bool NullAudioRenderer::OnInitialize(int bits_per_channel,
+ ChannelLayout channel_layout,
+ int sample_rate) {
// Calculate our bytes per millisecond value and allocate our buffer.
bytes_per_millisecond_ =
- (ChannelLayoutToChannelCount(config.channel_layout) * config.sample_rate *
- config.bits_per_channel / 8) / base::Time::kMillisecondsPerSecond;
+ (ChannelLayoutToChannelCount(channel_layout) * sample_rate *
+ bits_per_channel / 8) / base::Time::kMillisecondsPerSecond;
buffer_size_ = bytes_per_millisecond_ * kBufferSizeInMilliseconds;
buffer_.reset(new uint8[buffer_size_]);
DCHECK(buffer_.get());
diff --git a/media/filters/null_audio_renderer.h b/media/filters/null_audio_renderer.h
index f330c77..2f9d062 100644
--- a/media/filters/null_audio_renderer.h
+++ b/media/filters/null_audio_renderer.h
@@ -38,7 +38,9 @@ class MEDIA_EXPORT NullAudioRenderer
protected:
// AudioRendererBase implementation.
- virtual bool OnInitialize(const AudioDecoderConfig& config);
+ virtual bool OnInitialize(int bits_per_channel,
+ ChannelLayout channel_layout,
+ int sample_rate);
virtual void OnStop();
private:
diff --git a/media/media.gyp b/media/media.gyp
index 7af199e..55133ec6 100644
--- a/media/media.gyp
+++ b/media/media.gyp
@@ -84,7 +84,6 @@
'audio/win/waveout_output_win.h',
'base/async_filter_factory_base.cc',
'base/async_filter_factory_base.h',
- 'base/audio_decoder_config.h',
'base/bitstream_buffer.h',
'base/buffers.cc',
'base/buffers.h',