Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(256)

Unified Diff: media/filters/ffmpeg_audio_decoder_unittest.cc

Issue 311373004: Consolidate and improve audio decoding test for all decoders. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase. Expand tests. Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: media/filters/ffmpeg_audio_decoder_unittest.cc
diff --git a/media/filters/ffmpeg_audio_decoder_unittest.cc b/media/filters/ffmpeg_audio_decoder_unittest.cc
deleted file mode 100644
index 05d1ee28bb0fa007c9b26a54e7b94ead6e3c26eb..0000000000000000000000000000000000000000
--- a/media/filters/ffmpeg_audio_decoder_unittest.cc
+++ /dev/null
@@ -1,197 +0,0 @@
-// Copyright (c) 2012 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 <deque>
-
-#include "base/bind.h"
-#include "base/message_loop/message_loop.h"
-#include "base/run_loop.h"
-#include "base/strings/stringprintf.h"
-#include "media/base/audio_buffer.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 "testing/gtest/include/gtest/gtest.h"
-
-using ::testing::_;
-using ::testing::StrictMock;
-
-namespace media {
-
-class FFmpegAudioDecoderTest : public testing::Test {
- public:
- FFmpegAudioDecoderTest()
- : decoder_(new FFmpegAudioDecoder(message_loop_.message_loop_proxy(),
- LogCB())),
- pending_decode_(false),
- pending_reset_(false),
- last_decode_status_(AudioDecoder::kOk) {
- 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.
- encoded_audio_.push_back(DecoderBuffer::CreateEOSBuffer());
-
- Initialize();
- }
-
- virtual ~FFmpegAudioDecoderTest() {
- EXPECT_FALSE(pending_decode_);
- EXPECT_FALSE(pending_reset_);
- }
-
- void Initialize() {
- AudioDecoderConfig config(kCodecVorbis,
- kSampleFormatPlanarF32,
- CHANNEL_LAYOUT_STEREO,
- 44100,
- vorbis_extradata_->data(),
- vorbis_extradata_->data_size(),
- false); // Not encrypted.
- decoder_->Initialize(config,
- NewExpectedStatusCB(PIPELINE_OK),
- base::Bind(&FFmpegAudioDecoderTest::OnDecoderOutput,
- base::Unretained(this)));
- base::RunLoop().RunUntilIdle();
- }
-
- void SatisfyPendingDecode() {
- base::RunLoop().RunUntilIdle();
- }
-
- void Decode() {
- pending_decode_ = true;
- scoped_refptr<DecoderBuffer> buffer(encoded_audio_.front());
- encoded_audio_.pop_front();
- decoder_->Decode(buffer,
- base::Bind(&FFmpegAudioDecoderTest::DecodeFinished,
- base::Unretained(this)));
- base::RunLoop().RunUntilIdle();
- EXPECT_FALSE(pending_decode_);
- EXPECT_EQ(AudioDecoder::kOk, last_decode_status_);
- }
-
- void Reset() {
- pending_reset_ = true;
- decoder_->Reset(base::Bind(
- &FFmpegAudioDecoderTest::ResetFinished, base::Unretained(this)));
- base::RunLoop().RunUntilIdle();
- }
-
- void Stop() {
- decoder_->Stop();
- base::RunLoop().RunUntilIdle();
- }
-
- void OnDecoderOutput(const scoped_refptr<AudioBuffer>& buffer) {
- EXPECT_FALSE(buffer->end_of_stream());
- decoded_audio_.push_back(buffer);
- }
-
- void DecodeFinished(AudioDecoder::Status status) {
- EXPECT_TRUE(pending_decode_);
- pending_decode_ = false;
-
- last_decode_status_ = status;
- }
-
- void ResetFinished() {
- EXPECT_TRUE(pending_reset_);
- // Reset should always finish after Decode.
- EXPECT_FALSE(pending_decode_);
-
- pending_reset_ = false;
- }
-
- void ExpectDecodedAudio(size_t i, int64 timestamp, int64 duration) {
- EXPECT_LT(i, decoded_audio_.size());
- EXPECT_EQ(timestamp, decoded_audio_[i]->timestamp().InMicroseconds());
- EXPECT_EQ(duration, decoded_audio_[i]->duration().InMicroseconds());
- }
-
- base::MessageLoop message_loop_;
- scoped_ptr<FFmpegAudioDecoder> decoder_;
- bool pending_decode_;
- bool pending_reset_;
-
- scoped_refptr<DecoderBuffer> vorbis_extradata_;
-
- std::deque<scoped_refptr<DecoderBuffer> > encoded_audio_;
- std::deque<scoped_refptr<AudioBuffer> > decoded_audio_;
- AudioDecoder::Status last_decode_status_;
-};
-
-TEST_F(FFmpegAudioDecoderTest, Initialize) {
- AudioDecoderConfig config(kCodecVorbis,
- kSampleFormatPlanarF32,
- CHANNEL_LAYOUT_STEREO,
- 44100,
- vorbis_extradata_->data(),
- vorbis_extradata_->data_size(),
- false); // Not encrypted.
- Stop();
-}
-
-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.
- Decode();
- Decode();
- Decode();
- Decode();
-
- ASSERT_EQ(3u, decoded_audio_.size());
- ExpectDecodedAudio(0, 0, 2902);
- ExpectDecodedAudio(1, 2902, 13061);
- ExpectDecodedAudio(2, 15963, 23219);
-
- // Call one more time with EOS.
- Decode();
- ASSERT_EQ(3u, decoded_audio_.size());
- Stop();
-}
-
-TEST_F(FFmpegAudioDecoderTest, PendingDecode_Stop) {
- Decode();
- Stop();
- SatisfyPendingDecode();
-}
-
-TEST_F(FFmpegAudioDecoderTest, PendingDecode_Reset) {
- Decode();
- Reset();
- SatisfyPendingDecode();
- Stop();
-}
-
-TEST_F(FFmpegAudioDecoderTest, PendingDecode_ResetStop) {
- Decode();
- Reset();
- Stop();
- SatisfyPendingDecode();
-}
-
-} // namespace media

Powered by Google App Engine
This is Rietveld 408576698