diff options
author | scherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-09-16 20:44:42 +0000 |
---|---|---|
committer | scherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-09-16 20:44:42 +0000 |
commit | e11c8ee1b8d01092326de43f8b881efb03a7ba0c (patch) | |
tree | 61a2ec2d89543d66ea9b555be3d9c1496c9bbabc /media | |
parent | e75962686027614e8b532e6e630cd84b88360486 (diff) | |
download | chromium_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.cc | 9 | ||||
-rw-r--r-- | media/audio/audio_parameters.h | 5 | ||||
-rw-r--r-- | media/audio/audio_parameters_unittest.cc | 22 | ||||
-rw-r--r-- | media/base/audio_decoder_config.h | 26 | ||||
-rw-r--r-- | media/base/filters.h | 9 | ||||
-rw-r--r-- | media/base/mock_filters.h | 4 | ||||
-rw-r--r-- | media/filters/audio_renderer_base.cc | 13 | ||||
-rw-r--r-- | media/filters/audio_renderer_base.h | 4 | ||||
-rw-r--r-- | media/filters/audio_renderer_base_unittest.cc | 17 | ||||
-rw-r--r-- | media/filters/audio_renderer_impl.cc | 8 | ||||
-rw-r--r-- | media/filters/audio_renderer_impl.h | 4 | ||||
-rw-r--r-- | media/filters/ffmpeg_audio_decoder.cc | 27 | ||||
-rw-r--r-- | media/filters/ffmpeg_audio_decoder.h | 9 | ||||
-rw-r--r-- | media/filters/ffmpeg_audio_decoder_unittest.cc | 6 | ||||
-rw-r--r-- | media/filters/null_audio_renderer.cc | 8 | ||||
-rw-r--r-- | media/filters/null_audio_renderer.h | 4 | ||||
-rw-r--r-- | media/media.gyp | 1 |
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', |