Index: media/filters/audio_renderer_algorithm_unittest.cc |
diff --git a/media/filters/audio_renderer_algorithm_unittest.cc b/media/filters/audio_renderer_algorithm_unittest.cc |
index 6ef2447fdba579dc7a016884b0ff8ed64d6760b4..33e2fd001e83cf2ddf806896f497abc00c6a3caa 100644 |
--- a/media/filters/audio_renderer_algorithm_unittest.cc |
+++ b/media/filters/audio_renderer_algorithm_unittest.cc |
@@ -19,8 +19,8 @@ |
namespace media { |
-static const size_t kRawDataSize = 10 * 1024; |
-static const int kSamplesPerSecond = 44100; |
+static const size_t kRawDataSize = 2048; |
+static const int kSamplesPerSecond = 3000; |
static const ChannelLayout kDefaultChannelLayout = CHANNEL_LAYOUT_STEREO; |
static const int kDefaultSampleBits = 16; |
@@ -33,13 +33,16 @@ class AudioRendererAlgorithmTest : public testing::Test { |
~AudioRendererAlgorithmTest() {} |
void Initialize() { |
- Initialize(kDefaultChannelLayout, kDefaultSampleBits); |
+ Initialize(kDefaultChannelLayout, kDefaultSampleBits, kSamplesPerSecond); |
} |
- void Initialize(ChannelLayout channel_layout, int bits_per_channel) { |
+ void Initialize(ChannelLayout channel_layout, int bits_per_channel, |
+ int samples_per_second) { |
+ static const int kFrames = kRawDataSize / ((kDefaultSampleBits / 8) * |
+ ChannelLayoutToChannelCount(kDefaultChannelLayout)); |
AudioParameters params( |
media::AudioParameters::AUDIO_PCM_LINEAR, channel_layout, |
- kSamplesPerSecond, bits_per_channel, kRawDataSize); |
+ samples_per_second, bits_per_channel, kFrames); |
algorithm_.Initialize(1, params, base::Bind( |
&AudioRendererAlgorithmTest::EnqueueData, base::Unretained(this))); |
@@ -50,61 +53,22 @@ class AudioRendererAlgorithmTest : public testing::Test { |
scoped_array<uint8> audio_data(new uint8[kRawDataSize]); |
CHECK_EQ(kRawDataSize % algorithm_.bytes_per_channel(), 0u); |
CHECK_EQ(kRawDataSize % algorithm_.bytes_per_frame(), 0u); |
- size_t length = kRawDataSize / algorithm_.bytes_per_channel(); |
- switch (algorithm_.bytes_per_channel()) { |
- case 4: |
- WriteFakeData<int32>(audio_data.get(), length); |
- break; |
- case 2: |
- WriteFakeData<int16>(audio_data.get(), length); |
- break; |
- case 1: |
- WriteFakeData<uint8>(audio_data.get(), length); |
- break; |
- default: |
- NOTREACHED() << "Unsupported audio bit depth in crossfade."; |
- } |
+ // The value of the data is meaningless; we just want non-zero data to |
+ // differentiate it from muted data. |
+ memset(audio_data.get(), 1, kRawDataSize); |
algorithm_.EnqueueBuffer(new DataBuffer(audio_data.Pass(), kRawDataSize)); |
bytes_enqueued_ += kRawDataSize; |
} |
- template <class Type> |
- void WriteFakeData(uint8* audio_data, size_t length) { |
- Type* output = reinterpret_cast<Type*>(audio_data); |
- for (size_t i = 0; i < length; i++) { |
- // The value of the data is meaningless; we just want non-zero data to |
- // differentiate it from muted data. |
- output[i] = i % 5 + 10; |
- } |
- } |
+ void CheckFakeData(uint8* audio_data, int frames_written) { |
+ int sum = 0; |
+ for (int i = 0; i < frames_written * algorithm_.bytes_per_frame(); ++i) |
+ sum |= audio_data[i]; |
acolwell GONE FROM CHROMIUM
2012/12/14 22:01:13
nit: += so this is actually a sum?
DaleCurtis
2012/12/14 22:03:16
No, then we might have overflow. I can rename it t
|
- void CheckFakeData(uint8* audio_data, int frames_written, |
- double playback_rate) { |
- size_t length = |
- (frames_written * algorithm_.bytes_per_frame()) |
- / algorithm_.bytes_per_channel(); |
- |
- switch (algorithm_.bytes_per_channel()) { |
- case 4: |
- DoCheckFakeData<int32>(audio_data, length); |
- break; |
- case 2: |
- DoCheckFakeData<int16>(audio_data, length); |
- break; |
- case 1: |
- DoCheckFakeData<uint8>(audio_data, length); |
- break; |
- default: |
- NOTREACHED() << "Unsupported audio bit depth in crossfade."; |
- } |
- } |
- |
- template <class Type> |
- void DoCheckFakeData(uint8* audio_data, size_t length) { |
- Type* output = reinterpret_cast<Type*>(audio_data); |
- for (size_t i = 0; i < length; i++) { |
- EXPECT_TRUE(algorithm_.is_muted() || output[i] != 0); |
- } |
+ if (algorithm_.is_muted()) |
+ ASSERT_EQ(sum, 0); |
+ else |
+ ASSERT_NE(sum, 0); |
} |
int ComputeConsumedBytes(int initial_bytes_enqueued, |
@@ -117,8 +81,8 @@ class AudioRendererAlgorithmTest : public testing::Test { |
} |
void TestPlaybackRate(double playback_rate) { |
- static const int kDefaultBufferSize = kSamplesPerSecond / 10; |
- static const int kDefaultFramesRequested = 5 * kSamplesPerSecond; |
+ const int kDefaultBufferSize = algorithm_.samples_per_second() / 10; |
+ const int kDefaultFramesRequested = 2 * algorithm_.samples_per_second(); |
TestPlaybackRate(playback_rate, kDefaultBufferSize, |
kDefaultFramesRequested); |
@@ -147,8 +111,8 @@ class AudioRendererAlgorithmTest : public testing::Test { |
int frames_requested = std::min(buffer_size_in_frames, frames_remaining); |
int frames_written = |
algorithm_.FillBuffer(buffer.get(), frames_requested); |
- CHECK_GT(frames_written, 0); |
- CheckFakeData(buffer.get(), frames_written, playback_rate); |
+ ASSERT_GT(frames_written, 0); |
+ CheckFakeData(buffer.get(), frames_written); |
frames_remaining -= frames_written; |
} |
@@ -191,6 +155,16 @@ TEST_F(AudioRendererAlgorithmTest, FillBuffer_NormalRate) { |
TestPlaybackRate(1.0); |
} |
+TEST_F(AudioRendererAlgorithmTest, FillBuffer_NearlyNormalFasterRate) { |
+ Initialize(); |
+ TestPlaybackRate(1.0001); |
+} |
+ |
+TEST_F(AudioRendererAlgorithmTest, FillBuffer_NearlyNormalSlowerRate) { |
+ Initialize(); |
+ TestPlaybackRate(0.9999); |
+} |
+ |
TEST_F(AudioRendererAlgorithmTest, FillBuffer_OneAndAQuarterRate) { |
Initialize(); |
TestPlaybackRate(1.25); |
@@ -269,10 +243,17 @@ TEST_F(AudioRendererAlgorithmTest, FillBuffer_SmallBufferSize) { |
TestPlaybackRate(1.5, kBufferSizeInFrames, kFramesRequested); |
} |
+TEST_F(AudioRendererAlgorithmTest, FillBuffer_LargeBufferSize) { |
+ Initialize(kDefaultChannelLayout, kDefaultSampleBits, 44100); |
+ TestPlaybackRate(1.0); |
+ TestPlaybackRate(0.5); |
+ TestPlaybackRate(1.5); |
+} |
+ |
TEST_F(AudioRendererAlgorithmTest, FillBuffer_LowerQualityAudio) { |
static const ChannelLayout kChannelLayout = CHANNEL_LAYOUT_MONO; |
static const int kSampleBits = 8; |
- Initialize(kChannelLayout, kSampleBits); |
+ Initialize(kChannelLayout, kSampleBits, kSamplesPerSecond); |
TestPlaybackRate(1.0); |
TestPlaybackRate(0.5); |
TestPlaybackRate(1.5); |
@@ -281,7 +262,7 @@ TEST_F(AudioRendererAlgorithmTest, FillBuffer_LowerQualityAudio) { |
TEST_F(AudioRendererAlgorithmTest, FillBuffer_HigherQualityAudio) { |
static const ChannelLayout kChannelLayout = CHANNEL_LAYOUT_STEREO; |
static const int kSampleBits = 32; |
- Initialize(kChannelLayout, kSampleBits); |
+ Initialize(kChannelLayout, kSampleBits, kSamplesPerSecond); |
TestPlaybackRate(1.0); |
TestPlaybackRate(0.5); |
TestPlaybackRate(1.5); |