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

Unified Diff: media/filters/audio_renderer_impl_unittest.cc

Issue 240123004: Simplify AudioSplicer logic which slots buffers before or after a splice point. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Comments. Created 6 years, 8 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
« no previous file with comments | « media/filters/audio_renderer_impl.cc ('k') | media/filters/decoder_stream.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/filters/audio_renderer_impl_unittest.cc
diff --git a/media/filters/audio_renderer_impl_unittest.cc b/media/filters/audio_renderer_impl_unittest.cc
index 7894c28201ec76d03ac2d65df8837ecd3b623772..208e6e8feee65bb578d1540ec2a3453d90d34fee 100644
--- a/media/filters/audio_renderer_impl_unittest.cc
+++ b/media/filters/audio_renderer_impl_unittest.cc
@@ -11,7 +11,9 @@
#include "base/stl_util.h"
#include "base/strings/stringprintf.h"
#include "media/base/audio_buffer.h"
+#include "media/base/audio_buffer_converter.h"
#include "media/base/audio_hardware_config.h"
+#include "media/base/audio_splicer.h"
#include "media/base/audio_timestamp_helper.h"
#include "media/base/fake_audio_renderer_sink.h"
#include "media/base/gmock_callback_support.h"
@@ -37,6 +39,8 @@ static ChannelLayout kChannelLayout = CHANNEL_LAYOUT_STEREO;
static int kChannelCount = 2;
static int kChannels = ChannelLayoutToChannelCount(kChannelLayout);
static int kSamplesPerSecond = 44100;
+// Use a different output sample rate so the AudioBufferConverter is invoked.
+static int kOutputSamplesPerSecond = 48000;
// Constants for distinguishing between muted audio and playing audio when using
// ConsumeBufferedData(). Must match the type needed by kSampleFormat.
@@ -75,12 +79,13 @@ class AudioRendererImplTest : public ::testing::Test {
// Mock out demuxer reads
EXPECT_CALL(demuxer_stream_, Read(_)).WillRepeatedly(
RunCallback<0>(DemuxerStream::kOk, DecoderBuffer::CreateEOSBuffer()));
- AudioParameters out_params =
- AudioParameters(AudioParameters::AUDIO_PCM_LOW_LATENCY,
- kChannelLayout,
- kSamplesPerSecond,
- SampleFormatToBytesPerChannel(kSampleFormat) * 8,
- 512);
+ EXPECT_CALL(demuxer_stream_, SupportsConfigChanges())
+ .WillRepeatedly(Return(true));
+ AudioParameters out_params(AudioParameters::AUDIO_PCM_LOW_LATENCY,
+ kChannelLayout,
+ kOutputSamplesPerSecond,
+ SampleFormatToBytesPerChannel(kSampleFormat) * 8,
+ 512);
hardware_config_.UpdateOutputConfig(out_params);
ScopedVector<AudioDecoder> decoders;
decoders.push_back(decoder_);
@@ -415,6 +420,18 @@ class AudioRendererImplTest : public ::testing::Test {
time_ += time;
}
+ void force_config_change() {
+ renderer_->OnConfigChange();
+ }
+
+ int converter_input_frames_left() const {
+ return renderer_->buffer_converter_->input_frames_left_for_testing();
+ }
+
+ bool splicer_has_next_buffer() const {
+ return renderer_->splicer_->HasNextBuffer();
+ }
+
// Fixture members.
base::MessageLoop message_loop_;
scoped_ptr<AudioRendererImpl> renderer_;
@@ -612,16 +629,19 @@ TEST_F(AudioRendererImplTest, Underflow_EndOfStream) {
SatisfyPendingRead(kDataSize);
WaitForPendingRead();
- // Verify we're getting muted audio during underflow.
+ // Verify we're getting muted audio during underflow. Note: Since resampling
+ // is active, the number of frames_buffered() won't always match kDataSize.
bool muted = false;
- EXPECT_EQ(kDataSize, frames_buffered());
- EXPECT_FALSE(ConsumeBufferedData(kDataSize, &muted));
+ const int kInitialFramesBuffered = 1114;
+ EXPECT_EQ(kInitialFramesBuffered, frames_buffered());
+ EXPECT_FALSE(ConsumeBufferedData(kInitialFramesBuffered, &muted));
EXPECT_TRUE(muted);
// Now deliver end of stream, we should get our little bit of data back.
DeliverEndOfStream();
- EXPECT_EQ(kDataSize, frames_buffered());
- EXPECT_TRUE(ConsumeBufferedData(kDataSize, &muted));
+ const int kNextFramesBuffered = 1408;
+ EXPECT_EQ(kNextFramesBuffered, frames_buffered());
+ EXPECT_TRUE(ConsumeBufferedData(kNextFramesBuffered, &muted));
EXPECT_FALSE(muted);
// Attempt to read to make sure we're truly at the end of stream.
@@ -907,4 +927,26 @@ TEST_F(AudioRendererImplTest, InitializeThenStopDuringDecoderInit) {
InitializeAndStopDuringDecoderInit();
}
+TEST_F(AudioRendererImplTest, ConfigChangeDrainsConverter) {
+ Initialize();
+ Preroll();
+ Play();
+
+ // Drain internal buffer, we should have a pending read.
+ EXPECT_TRUE(ConsumeBufferedData(frames_buffered(), NULL));
+ WaitForPendingRead();
+
+ // Deliver a little bit of data. Use an odd data size to ensure there is data
+ // left in the AudioBufferConverter. Ensure no buffers are in the splicer.
+ SatisfyPendingRead(2053);
+ EXPECT_FALSE(splicer_has_next_buffer());
+ EXPECT_GT(converter_input_frames_left(), 0);
+
+ // Force a config change and then ensure all buffered data has been put into
+ // the splicer.
+ force_config_change();
+ EXPECT_TRUE(splicer_has_next_buffer());
+ EXPECT_EQ(0, converter_input_frames_left());
+}
+
} // namespace media
« no previous file with comments | « media/filters/audio_renderer_impl.cc ('k') | media/filters/decoder_stream.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698