Chromium Code Reviews| Index: media/filters/opus_audio_decoder_unittest.cc |
| diff --git a/media/filters/ffmpeg_audio_decoder_unittest.cc b/media/filters/opus_audio_decoder_unittest.cc |
| similarity index 68% |
| copy from media/filters/ffmpeg_audio_decoder_unittest.cc |
| copy to media/filters/opus_audio_decoder_unittest.cc |
| index 9614c169a796ca8b22fcf2dee2f2865694e72acd..f3fc522b153f8f41688427fc0bea3b5d496b6c9e 100644 |
| --- a/media/filters/ffmpeg_audio_decoder_unittest.cc |
| +++ b/media/filters/opus_audio_decoder_unittest.cc |
| @@ -1,4 +1,4 @@ |
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| +// Copyright 2013 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. |
| @@ -9,14 +9,11 @@ |
| #include "base/run_loop.h" |
| #include "base/strings/stringprintf.h" |
| #include "media/base/audio_buffer.h" |
| -#include "media/base/bind_to_loop.h" |
| #include "media/base/decoder_buffer.h" |
| #include "media/base/mock_filters.h" |
| #include "media/base/test_data_util.h" |
| #include "media/base/test_helpers.h" |
| -#include "media/ffmpeg/ffmpeg_common.h" |
| -#include "media/filters/ffmpeg_audio_decoder.h" |
| -#include "media/filters/ffmpeg_glue.h" |
| +#include "media/filters/opus_audio_decoder.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| using ::testing::_; |
| @@ -32,53 +29,43 @@ ACTION_P(EnterPendingDemuxerReadState, test) { |
| test->EnterPendingDemuxerRead(arg0); |
| } |
| -class FFmpegAudioDecoderTest : public testing::Test { |
| +// Lifted from media/test/data/bear-opus.ogg |
| +static const unsigned char kOpusExtraData[] = { |
|
xhwang
2014/01/15 20:10:31
Add a comment why we need it for this test.
globa
|
| + 0x4f, 0x70, 0x75, 0x73, 0x48, 0x65, 0x61, 0x64, 0x01, 0x02, |
| + 0x38, 0x01, 0x80, 0xbb, 0x00, 0x00, 0x00, 0x00, 0x00}; |
| + |
| +class OpusAudioDecoderTest : public testing::Test { |
| public: |
| - FFmpegAudioDecoderTest() |
| - : decoder_(new FFmpegAudioDecoder(message_loop_.message_loop_proxy())), |
| + OpusAudioDecoderTest() |
| + : decoder_(new OpusAudioDecoder(message_loop_.message_loop_proxy())), |
| demuxer_(new StrictMock<MockDemuxerStream>(DemuxerStream::AUDIO)), |
| pending_read_(false), |
| pending_reset_(false), |
| pending_stop_(false) { |
| - FFmpegGlue::InitializeFFmpeg(); |
| - |
| - vorbis_extradata_ = ReadTestDataFile("vorbis-extradata"); |
| - |
| - // Refer to media/test/data/README for details on vorbis test data. |
| - for (int i = 0; i < 4; ++i) { |
| - scoped_refptr<DecoderBuffer> buffer = |
| - ReadTestDataFile(base::StringPrintf("vorbis-packet-%d", i)); |
| - |
| - if (i < 3) { |
| - buffer->set_timestamp(base::TimeDelta()); |
| - } else { |
| - buffer->set_timestamp(base::TimeDelta::FromMicroseconds(2902)); |
| - } |
| - |
| - buffer->set_duration(base::TimeDelta()); |
| - encoded_audio_.push_back(buffer); |
| - } |
| - |
| - // Push in an EOS buffer. |
| + // Just push in an EOS buffer. |
|
DaleCurtis
2014/01/15 20:55:40
Seems like the only test which uses this is Initia
|
| encoded_audio_.push_back(DecoderBuffer::CreateEOSBuffer()); |
| - |
| Initialize(); |
| } |
| - virtual ~FFmpegAudioDecoderTest() { |
| + virtual ~OpusAudioDecoderTest() { |
| EXPECT_FALSE(pending_read_); |
| EXPECT_FALSE(pending_reset_); |
| EXPECT_FALSE(pending_stop_); |
| } |
| void Initialize() { |
|
DaleCurtis
2014/01/15 20:55:40
Collapse this into the constructor, no need for a
|
| - AudioDecoderConfig config(kCodecVorbis, |
| - kSampleFormatPlanarF32, |
| - CHANNEL_LAYOUT_STEREO, |
| - 44100, |
| - vorbis_extradata_->data(), |
| - vorbis_extradata_->data_size(), |
| - false); // Not encrypted. |
| + AudioDecoderConfig config; |
| + |
| + config.Initialize(kCodecOpus, |
| + kSampleFormatPlanarF32, |
| + CHANNEL_LAYOUT_STEREO, |
| + 48000, |
| + kOpusExtraData, |
| + sizeof(kOpusExtraData), |
| + false, |
| + false, |
| + base::TimeDelta(), |
| + base::TimeDelta::FromMicroseconds(6500)); |
|
rileya (GONE FROM CHROMIUM)
2014/01/15 19:12:41
This is ugly, but a DCHECK fails unless this match
xhwang
2014/01/15 20:10:31
Put 6500 in a constant which is defined together w
|
| demuxer_->set_audio_decoder_config(config); |
| decoder_->Initialize(demuxer_.get(), |
| NewExpectedStatusCB(PIPELINE_OK), |
| @@ -120,21 +107,21 @@ class FFmpegAudioDecoderTest : public testing::Test { |
| void Read() { |
| pending_read_ = true; |
| decoder_->Read(base::Bind( |
| - &FFmpegAudioDecoderTest::ReadFinished, base::Unretained(this))); |
| + &OpusAudioDecoderTest::ReadFinished, base::Unretained(this))); |
| base::RunLoop().RunUntilIdle(); |
| } |
| void Reset() { |
| pending_reset_ = true; |
| decoder_->Reset(base::Bind( |
| - &FFmpegAudioDecoderTest::ResetFinished, base::Unretained(this))); |
| + &OpusAudioDecoderTest::ResetFinished, base::Unretained(this))); |
| base::RunLoop().RunUntilIdle(); |
| } |
| void Stop() { |
| pending_stop_ = true; |
| decoder_->Stop(base::Bind( |
| - &FFmpegAudioDecoderTest::StopFinished, base::Unretained(this))); |
| + &OpusAudioDecoderTest::StopFinished, base::Unretained(this))); |
| base::RunLoop().RunUntilIdle(); |
| } |
| @@ -192,7 +179,7 @@ class FFmpegAudioDecoderTest : public testing::Test { |
| } |
| base::MessageLoop message_loop_; |
| - scoped_ptr<FFmpegAudioDecoder> decoder_; |
| + scoped_ptr<OpusAudioDecoder> decoder_; |
| scoped_ptr<StrictMock<MockDemuxerStream> > demuxer_; |
| MockStatisticsCB statistics_cb_; |
| DemuxerStream::ReadCB pending_demuxer_read_cb_; |
| @@ -206,40 +193,14 @@ class FFmpegAudioDecoderTest : public testing::Test { |
| std::deque<scoped_refptr<AudioBuffer> > decoded_audio_; |
| }; |
| -TEST_F(FFmpegAudioDecoderTest, Initialize) { |
| +TEST_F(OpusAudioDecoderTest, Initialize) { |
| const AudioDecoderConfig& config = demuxer_->audio_decoder_config(); |
| EXPECT_EQ(config.bits_per_channel(), decoder_->bits_per_channel()); |
| EXPECT_EQ(config.channel_layout(), decoder_->channel_layout()); |
| EXPECT_EQ(config.samples_per_second(), decoder_->samples_per_second()); |
| } |
| -TEST_F(FFmpegAudioDecoderTest, ProduceAudioSamples) { |
| - // Vorbis requires N+1 packets to produce audio data for N packets. |
| - // |
| - // This will should result in the demuxer receiving three reads for two |
| - // requests to produce audio samples. |
| - EXPECT_CALL(*demuxer_, Read(_)) |
| - .Times(5) |
| - .WillRepeatedly(InvokeReadPacket(this)); |
| - EXPECT_CALL(statistics_cb_, OnStatistics(_)) |
| - .Times(4); |
| - |
| - Read(); |
| - Read(); |
| - Read(); |
| - |
| - ASSERT_EQ(3u, decoded_audio_.size()); |
| - ExpectDecodedAudio(0, 0, 2902); |
| - ExpectDecodedAudio(1, 2902, 13061); |
| - ExpectDecodedAudio(2, 15963, 23220); |
| - |
| - // Call one more time to trigger EOS. |
| - Read(); |
| - ASSERT_EQ(4u, decoded_audio_.size()); |
| - ExpectEndOfStream(3); |
| -} |
| - |
| -TEST_F(FFmpegAudioDecoderTest, ReadAbort) { |
| +TEST_F(OpusAudioDecoderTest, ReadAbort) { |
| encoded_audio_.clear(); |
| encoded_audio_.push_back(NULL); |
| EXPECT_CALL(*demuxer_, Read(_)) |
| @@ -250,7 +211,7 @@ TEST_F(FFmpegAudioDecoderTest, ReadAbort) { |
| EXPECT_TRUE(decoded_audio_[0].get() == NULL); |
| } |
| -TEST_F(FFmpegAudioDecoderTest, PendingRead_Stop) { |
| +TEST_F(OpusAudioDecoderTest, PendingRead_Stop) { |
| SetupPendingReadTest(); |
| Read(); |
| Stop(); |
| @@ -258,7 +219,7 @@ TEST_F(FFmpegAudioDecoderTest, PendingRead_Stop) { |
| SatisfyPendingRead(); |
| } |
| -TEST_F(FFmpegAudioDecoderTest, PendingRead_Reset) { |
| +TEST_F(OpusAudioDecoderTest, PendingRead_Reset) { |
| SetupPendingReadTest(); |
| Read(); |
| Reset(); |
| @@ -266,7 +227,7 @@ TEST_F(FFmpegAudioDecoderTest, PendingRead_Reset) { |
| SatisfyPendingRead(); |
| } |
| -TEST_F(FFmpegAudioDecoderTest, PendingRead_ResetStop) { |
| +TEST_F(OpusAudioDecoderTest, PendingRead_ResetStop) { |
| SetupPendingReadTest(); |
| Read(); |
| Reset(); |