summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authorscherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-04-26 23:21:03 +0000
committerscherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-04-26 23:21:03 +0000
commit08bff2cc79f4fd0b5f78f8b07babf2c6bbb4a9c0 (patch)
tree59ade6118ab9e3a9ff70eedbcf468cc2b2934fb6 /media
parentb481edbd6eb1803a01704f0c7d3aeeda7f1ec962 (diff)
downloadchromium_src-08bff2cc79f4fd0b5f78f8b07babf2c6bbb4a9c0.zip
chromium_src-08bff2cc79f4fd0b5f78f8b07babf2c6bbb4a9c0.tar.gz
chromium_src-08bff2cc79f4fd0b5f78f8b07babf2c6bbb4a9c0.tar.bz2
Replace AudioDecoder::media_format() with AudioDecoderConfig.
Also includes some cleanup for AudioParameter users including a new helper method GetBytesPerSecond(). BUG=28206 TEST=media_unittests, test_shell_tests, etc... Review URL: http://codereview.chromium.org/6903007 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@83098 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media')
-rw-r--r--media/audio/audio_parameters.cc14
-rw-r--r--media/audio/audio_parameters.h8
-rw-r--r--media/audio/audio_parameters_unittest.cc50
-rw-r--r--media/base/audio_decoder_config.h24
-rw-r--r--media/base/filters.h6
-rw-r--r--media/base/mock_filters.h2
-rw-r--r--media/filters/audio_renderer_base.cc30
-rw-r--r--media/filters/audio_renderer_base.h11
-rw-r--r--media/filters/audio_renderer_base_unittest.cc13
-rw-r--r--media/filters/audio_renderer_impl.cc16
-rw-r--r--media/filters/audio_renderer_impl.h4
-rw-r--r--media/filters/decoder_base.h7
-rw-r--r--media/filters/ffmpeg_audio_decoder.cc20
-rw-r--r--media/filters/ffmpeg_audio_decoder.h7
-rw-r--r--media/filters/null_audio_renderer.cc17
-rw-r--r--media/filters/null_audio_renderer.h2
16 files changed, 136 insertions, 95 deletions
diff --git a/media/audio/audio_parameters.cc b/media/audio/audio_parameters.cc
index d1d44a7..dfe2d07 100644
--- a/media/audio/audio_parameters.cc
+++ b/media/audio/audio_parameters.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// 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.
@@ -14,6 +14,14 @@ AudioParameters::AudioParameters()
samples_per_packet(0) {
}
+AudioParameters::AudioParameters(const media::AudioDecoderConfig& config)
+ : format(AUDIO_PCM_LINEAR),
+ channels(config.channels_per_sample),
+ sample_rate(config.sample_rate),
+ bits_per_sample(config.bits_per_channel),
+ samples_per_packet(0) {
+}
+
AudioParameters::AudioParameters(Format format, int channels,
int sample_rate, int bits_per_sample,
int samples_per_packet)
@@ -38,6 +46,10 @@ int AudioParameters::GetPacketSize() const {
return samples_per_packet * channels * bits_per_sample / 8;
}
+int AudioParameters::GetBytesPerSecond() const {
+ return sample_rate * channels * bits_per_sample / 8;
+}
+
bool AudioParameters::Compare::operator()(
const AudioParameters& a,
const AudioParameters& b) const {
diff --git a/media/audio/audio_parameters.h b/media/audio/audio_parameters.h
index 2842bc1..ac08067 100644
--- a/media/audio/audio_parameters.h
+++ b/media/audio/audio_parameters.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// 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.
@@ -6,6 +6,7 @@
#define MEDIA_AUDIO_AUDIO_PARAMETERS_H_
#include "base/basictypes.h"
+#include "media/base/audio_decoder_config.h"
struct AudioParameters {
// Compare is useful when AudioParameters is used as a key in std::map.
@@ -30,6 +31,8 @@ struct AudioParameters {
AudioParameters();
+ explicit AudioParameters(const media::AudioDecoderConfig& config);
+
AudioParameters(Format format, int channels, int sample_rate,
int bits_per_sample, int samples_per_packet);
@@ -40,6 +43,9 @@ struct AudioParameters {
// Returns size of audio packets in bytes.
int GetPacketSize() const;
+ // Returns the number of bytes representing one second of audio.
+ int GetBytesPerSecond() const;
+
Format format; // Format of the stream.
int channels; // Number of channels.
int sample_rate; // Sampling frequency/rate.
diff --git a/media/audio/audio_parameters_unittest.cc b/media/audio/audio_parameters_unittest.cc
index 61b8ad0..9f5bb2b 100644
--- a/media/audio/audio_parameters_unittest.cc
+++ b/media/audio/audio_parameters_unittest.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// 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.
@@ -7,6 +7,41 @@
#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;
+ int expected_channels = 0;
+ int expected_rate = 0;
+ int expected_samples = 0;
+
+ AudioParameters params;
+
+ EXPECT_EQ(expected_format, params.format);
+ EXPECT_EQ(expected_bits, params.bits_per_sample);
+ EXPECT_EQ(expected_channels, params.channels);
+ EXPECT_EQ(expected_rate, params.sample_rate);
+ 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;
+ int expected_rate = 44000;
+ int expected_samples = 0;
+
+ AudioDecoderConfig config(expected_bits, expected_channels, 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_rate, params.sample_rate);
+ EXPECT_EQ(expected_samples, params.samples_per_packet);
+}
+
TEST(AudioParameters, GetPacketSize) {
EXPECT_EQ(100, AudioParameters(AudioParameters::AUDIO_PCM_LINEAR,
1, 1000, 8, 100).GetPacketSize());
@@ -20,6 +55,19 @@ TEST(AudioParameters, GetPacketSize) {
2, 1000, 16, 200).GetPacketSize());
}
+TEST(AudioParameters, GetBytesPerSecond) {
+ EXPECT_EQ(0, AudioParameters(AudioParameters::AUDIO_PCM_LINEAR,
+ 0, 0, 0, 0).GetBytesPerSecond());
+ EXPECT_EQ(0, AudioParameters(AudioParameters::AUDIO_PCM_LINEAR,
+ 2, 0, 0, 0).GetBytesPerSecond());
+ EXPECT_EQ(0, AudioParameters(AudioParameters::AUDIO_PCM_LINEAR,
+ 0, 100, 0, 0).GetBytesPerSecond());
+ EXPECT_EQ(0, AudioParameters(AudioParameters::AUDIO_PCM_LINEAR,
+ 0, 0, 8, 0).GetBytesPerSecond());
+ EXPECT_EQ(200, AudioParameters(AudioParameters::AUDIO_PCM_LINEAR,
+ 2, 100, 8, 0).GetBytesPerSecond());
+}
+
TEST(AudioParameters, Compare) {
AudioParameters values[] = {
AudioParameters(AudioParameters::AUDIO_PCM_LINEAR, 1, 1000, 8, 100),
diff --git a/media/base/audio_decoder_config.h b/media/base/audio_decoder_config.h
new file mode 100644
index 0000000..791d2cd
--- /dev/null
+++ b/media/base/audio_decoder_config.h
@@ -0,0 +1,24 @@
+// 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_
+
+namespace media {
+
+struct AudioDecoderConfig {
+ AudioDecoderConfig(int bits, int channels, int rate)
+ : bits_per_channel(bits),
+ channels_per_sample(channels),
+ sample_rate(rate) {
+ }
+
+ int bits_per_channel;
+ int channels_per_sample;
+ 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 7d56114..f290fec 100644
--- a/media/base/filters.h
+++ b/media/base/filters.h
@@ -30,6 +30,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/media_format.h"
#include "media/base/video_frame.h"
@@ -238,6 +239,8 @@ class AudioDecoder : public Filter {
virtual void Initialize(DemuxerStream* stream, FilterCallback* callback,
StatisticsCallback* stats_callback) = 0;
+ virtual AudioDecoderConfig config() = 0;
+
// |set_fill_buffer_done_callback| install permanent callback from downstream
// filter (i.e. Renderer). The callback is used to deliver buffers at
// runtime to downstream filter.
@@ -255,9 +258,6 @@ class AudioDecoder : public Filter {
// We could also pass empty pointer here to let decoder provide buffers pool.
virtual void ProduceAudioSamples(scoped_refptr<Buffer> buffer) = 0;
- // Returns the media format produced by this decoder.
- virtual const MediaFormat& media_format() = 0;
-
protected:
AudioDecoder();
~AudioDecoder();
diff --git a/media/base/mock_filters.h b/media/base/mock_filters.h
index 636b60f..7a58095 100644
--- a/media/base/mock_filters.h
+++ b/media/base/mock_filters.h
@@ -214,7 +214,7 @@ class MockAudioDecoder : public AudioDecoder {
MOCK_METHOD3(Initialize, void(DemuxerStream* stream,
FilterCallback* callback,
StatisticsCallback* stats_callback));
- MOCK_METHOD0(media_format, const MediaFormat&());
+ MOCK_METHOD0(config, AudioDecoderConfig());
MOCK_METHOD1(ProduceAudioSamples, void(scoped_refptr<Buffer>));
// change to public to allow unittest for access;
diff --git a/media/filters/audio_renderer_base.cc b/media/filters/audio_renderer_base.cc
index 4dec0a4..7e40ba1 100644
--- a/media/filters/audio_renderer_base.cc
+++ b/media/filters/audio_renderer_base.cc
@@ -90,16 +90,6 @@ void AudioRendererBase::Initialize(AudioDecoder* decoder,
decoder_->set_consume_audio_samples_callback(
NewCallback(this, &AudioRendererBase::ConsumeAudioSamples));
- // Get the media properties to initialize our algorithms.
- int channels = 0;
- int sample_rate = 0;
- int sample_bits = 0;
- if (!ParseMediaFormat(decoder_->media_format(), &channels, &sample_rate,
- &sample_bits)) {
- host()->SetError(PIPELINE_ERROR_INITIALIZATION_FAILED);
- callback->Run();
- return;
- }
// Create a callback so our algorithm can request more reads.
AudioRendererAlgorithmBase::RequestReadCallback* cb =
@@ -110,14 +100,15 @@ 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.
- algorithm_->Initialize(channels,
- sample_rate,
- sample_bits,
+ AudioDecoderConfig config = decoder_->config();
+ algorithm_->Initialize(config.channels_per_sample,
+ config.sample_rate,
+ config.bits_per_channel,
0.0f,
cb);
// Give the subclass an opportunity to initialize itself.
- if (!OnInitialize(decoder_->media_format())) {
+ if (!OnInitialize(config)) {
host()->SetError(PIPELINE_ERROR_INITIALIZATION_FAILED);
callback->Run();
return;
@@ -253,17 +244,6 @@ void AudioRendererBase::ScheduleRead_Locked() {
decoder_->ProduceAudioSamples(buffer);
}
-// static
-bool AudioRendererBase::ParseMediaFormat(const MediaFormat& media_format,
- int* channels_out,
- int* sample_rate_out,
- int* sample_bits_out) {
- // TODO(scherkus): might be handy to support NULL parameters.
- return media_format.GetAsInteger(MediaFormat::kChannels, channels_out) &&
- media_format.GetAsInteger(MediaFormat::kSampleRate, sample_rate_out) &&
- media_format.GetAsInteger(MediaFormat::kSampleBits, sample_bits_out);
-}
-
void AudioRendererBase::SetPlaybackRate(float playback_rate) {
algorithm_->set_playback_rate(playback_rate);
}
diff --git a/media/filters/audio_renderer_base.h b/media/filters/audio_renderer_base.h
index 6c77acb..0b13e02a 100644
--- a/media/filters/audio_renderer_base.h
+++ b/media/filters/audio_renderer_base.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// 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.
@@ -44,10 +44,9 @@ class AudioRendererBase : public AudioRenderer {
virtual bool HasEnded();
protected:
- // Called by Initialize(). |media_format| is the format of the AudioDecoder.
// Subclasses should return true if they were able to initialize, false
// otherwise.
- virtual bool OnInitialize(const MediaFormat& media_format) = 0;
+ virtual bool OnInitialize(const AudioDecoderConfig& config) = 0;
// Called by Stop(). Subclasses should perform any necessary cleanup during
// this time, such as stopping any running threads.
@@ -79,12 +78,6 @@ class AudioRendererBase : public AudioRenderer {
const base::TimeDelta& playback_delay,
bool buffers_empty);
- // Helper to parse a media format and return whether we were successful
- // retrieving all the information we care about.
- static bool ParseMediaFormat(const MediaFormat& media_format,
- int* channels_out, int* sample_rate_out,
- int* sample_bits_out);
-
// Get/Set the playback rate of |algorithm_|.
virtual void SetPlaybackRate(float playback_rate);
virtual float GetPlaybackRate();
diff --git a/media/filters/audio_renderer_base_unittest.cc b/media/filters/audio_renderer_base_unittest.cc
index c1af178..f63bad9 100644
--- a/media/filters/audio_renderer_base_unittest.cc
+++ b/media/filters/audio_renderer_base_unittest.cc
@@ -16,7 +16,6 @@ using ::testing::InSequence;
using ::testing::Invoke;
using ::testing::NotNull;
using ::testing::Return;
-using ::testing::ReturnRef;
using ::testing::StrictMock;
namespace media {
@@ -32,7 +31,7 @@ class MockAudioRendererBase : public AudioRendererBase {
MOCK_METHOD1(SetVolume, void(float volume));
// AudioRendererBase implementation.
- MOCK_METHOD1(OnInitialize, bool(const MediaFormat& media_format));
+ MOCK_METHOD1(OnInitialize, bool(const AudioDecoderConfig& config));
MOCK_METHOD0(OnStop, void());
// Used for verifying check points during tests.
@@ -57,12 +56,9 @@ class AudioRendererBaseTest : public ::testing::Test {
EXPECT_CALL(*decoder_, ProduceAudioSamples(_))
.WillRepeatedly(Invoke(this, &AudioRendererBaseTest::EnqueueCallback));
- // Sets the essential media format keys for this decoder.
- decoder_media_format_.SetAsInteger(MediaFormat::kChannels, 1);
- decoder_media_format_.SetAsInteger(MediaFormat::kSampleRate, 44100);
- decoder_media_format_.SetAsInteger(MediaFormat::kSampleBits, 16);
- EXPECT_CALL(*decoder_, media_format())
- .WillRepeatedly(ReturnRef(decoder_media_format_));
+ // Set up audio properties.
+ ON_CALL(*decoder_, config())
+ .WillByDefault(Return(AudioDecoderConfig(16, 1, 44100)));
}
virtual ~AudioRendererBaseTest() {
@@ -78,7 +74,6 @@ class AudioRendererBaseTest : public ::testing::Test {
scoped_refptr<MockAudioRendererBase> renderer_;
scoped_refptr<MockAudioDecoder> decoder_;
StrictMock<MockFilterHost> host_;
- MediaFormat decoder_media_format_;
// Number of asynchronous read requests sent to |decoder_|.
size_t pending_reads_;
diff --git a/media/filters/audio_renderer_impl.cc b/media/filters/audio_renderer_impl.cc
index b0dcaf1..ae91993 100644
--- a/media/filters/audio_renderer_impl.cc
+++ b/media/filters/audio_renderer_impl.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// 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.
@@ -72,19 +72,11 @@ void AudioRendererImpl::OnError(AudioOutputStream* stream, int code) {
NOTIMPLEMENTED();
}
-bool AudioRendererImpl::OnInitialize(const MediaFormat& media_format) {
- // Parse out audio parameters.
- AudioParameters params;
- if (!ParseMediaFormat(media_format, &params.channels,
- &params.sample_rate, &params.bits_per_sample)) {
- return false;
- }
-
- // Set packet size.
+bool AudioRendererImpl::OnInitialize(const AudioDecoderConfig& config) {
+ AudioParameters params(config);
params.samples_per_packet = kSamplesPerBuffer;
- bytes_per_second_ = params.sample_rate * params.channels *
- params.bits_per_sample / 8;
+ bytes_per_second_ = params.GetBytesPerSecond();
// Create our audio stream.
stream_ = AudioManager::GetAudioManager()->MakeAudioOutputStream(params);
diff --git a/media/filters/audio_renderer_impl.h b/media/filters/audio_renderer_impl.h
index 3e19992..b0ffc87 100644
--- a/media/filters/audio_renderer_impl.h
+++ b/media/filters/audio_renderer_impl.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// 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.
@@ -44,7 +44,7 @@ class AudioRendererImpl : public AudioRendererBase,
protected:
// AudioRendererBase implementation.
- virtual bool OnInitialize(const MediaFormat& media_format);
+ virtual bool OnInitialize(const AudioDecoderConfig& config);
virtual void OnStop();
private:
diff --git a/media/filters/decoder_base.h b/media/filters/decoder_base.h
index 086aa96..280c0bf 100644
--- a/media/filters/decoder_base.h
+++ b/media/filters/decoder_base.h
@@ -53,8 +53,6 @@ class DecoderBase : public Decoder {
callback));
}
- virtual const MediaFormat& media_format() { return media_format_; }
-
// Audio decoder.
// Note that this class is only used by the audio decoder, this will
// eventually be merged into FFmpegAudioDecoder.
@@ -97,8 +95,7 @@ class DecoderBase : public Decoder {
// the demuxer stream. Returns true if successful, otherwise false indicates
// a fatal error. The derived class should NOT call the filter host's
// InitializationComplete() method. If this method returns true, then the
- // base class will call the host to complete initialization. During this
- // call, the derived class must fill in the media_format_ member.
+ // base class will call the host to complete initialization.
virtual void DoInitialize(DemuxerStream* demuxer_stream, bool* success,
Task* done_cb) = 0;
@@ -118,8 +115,6 @@ class DecoderBase : public Decoder {
// the EnequeueResult() method from within this method.
virtual void DoDecode(Buffer* input) = 0;
- MediaFormat media_format_;
-
void OnDecodeComplete(const PipelineStatistics& statistics) {
statistics_callback_->Run(statistics);
diff --git a/media/filters/ffmpeg_audio_decoder.cc b/media/filters/ffmpeg_audio_decoder.cc
index 74085a7..0dfc783d 100644
--- a/media/filters/ffmpeg_audio_decoder.cc
+++ b/media/filters/ffmpeg_audio_decoder.cc
@@ -30,6 +30,7 @@ const size_t FFmpegAudioDecoder::kOutputBufferSize =
FFmpegAudioDecoder::FFmpegAudioDecoder(MessageLoop* message_loop)
: DecoderBase<AudioDecoder, Buffer>(message_loop),
codec_context_(NULL),
+ config_(0, 0, 0),
estimated_next_timestamp_(kNoTimestamp) {
}
@@ -68,17 +69,10 @@ void FFmpegAudioDecoder::DoInitialize(DemuxerStream* demuxer_stream,
return;
}
- // When calling avcodec_find_decoder(), |codec_context_| might be altered by
- // the decoder to give more accurate values of the output format of the
- // decoder. So set the media format after a decoder is allocated.
- // TODO(hclam): Reuse the information provided by the demuxer for now, we may
- // need to wait until the first buffer is decoded to know the correct
- // information.
- media_format_.SetAsInteger(MediaFormat::kChannels, codec_context_->channels);
- media_format_.SetAsInteger(MediaFormat::kSampleBits,
- av_get_bits_per_sample_fmt(codec_context_->sample_fmt));
- media_format_.SetAsInteger(MediaFormat::kSampleRate,
- codec_context_->sample_rate);
+ config_.bits_per_channel =
+ av_get_bits_per_sample_fmt(codec_context_->sample_fmt);
+ config_.channels_per_sample = codec_context_->channels;
+ config_.sample_rate = codec_context_->sample_rate;
// Prepare the output buffer.
output_buffer_.reset(static_cast<uint8*>(av_malloc(kOutputBufferSize)));
@@ -89,6 +83,10 @@ void FFmpegAudioDecoder::DoInitialize(DemuxerStream* demuxer_stream,
*success = true;
}
+AudioDecoderConfig FFmpegAudioDecoder::config() {
+ return config_;
+}
+
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 20bc22e..c3ca801 100644
--- a/media/filters/ffmpeg_audio_decoder.h
+++ b/media/filters/ffmpeg_audio_decoder.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved.
+// 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.
@@ -19,6 +19,9 @@ class FFmpegAudioDecoder : public DecoderBase<AudioDecoder, Buffer> {
explicit FFmpegAudioDecoder(MessageLoop* message_loop);
virtual ~FFmpegAudioDecoder();
+ // AudioDecoder implementation.
+ virtual AudioDecoderConfig config();
+
protected:
virtual void DoInitialize(DemuxerStream* demuxer_stream, bool* success,
Task* done_cb);
@@ -36,6 +39,8 @@ class FFmpegAudioDecoder : public DecoderBase<AudioDecoder, Buffer> {
// is initialized in OnInitialize().
AVCodecContext* codec_context_;
+ AudioDecoderConfig config_;
+
// Estimated timestamp for next packet. Useful for packets without timestamps.
base::TimeDelta estimated_next_timestamp_;
diff --git a/media/filters/null_audio_renderer.cc b/media/filters/null_audio_renderer.cc
index 15fd41b..de04f0a 100644
--- a/media/filters/null_audio_renderer.cc
+++ b/media/filters/null_audio_renderer.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// 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.
@@ -60,18 +60,11 @@ void NullAudioRenderer::ThreadMain() {
}
}
-bool NullAudioRenderer::OnInitialize(const MediaFormat& media_format) {
- // Parse out audio parameters.
- int channels;
- int sample_rate;
- int sample_bits;
- if (!ParseMediaFormat(media_format, &channels, &sample_rate, &sample_bits)) {
- return false;
- }
-
+bool NullAudioRenderer::OnInitialize(const AudioDecoderConfig& config) {
// Calculate our bytes per millisecond value and allocate our buffer.
- bytes_per_millisecond_ = (channels * sample_rate * sample_bits / 8)
- / base::Time::kMillisecondsPerSecond;
+ bytes_per_millisecond_ =
+ (config.channels_per_sample * config.sample_rate *
+ config.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 db57276..28da99b 100644
--- a/media/filters/null_audio_renderer.h
+++ b/media/filters/null_audio_renderer.h
@@ -41,7 +41,7 @@ class NullAudioRenderer : public AudioRendererBase,
protected:
// AudioRendererBase implementation.
- virtual bool OnInitialize(const MediaFormat& media_format);
+ virtual bool OnInitialize(const AudioDecoderConfig& config);
virtual void OnStop();
private: