Index: media/base/audio_buffer_unittest.cc |
diff --git a/media/base/audio_buffer_unittest.cc b/media/base/audio_buffer_unittest.cc |
index 039dc0af3cde049bb05c10e3f27d9f60636b07ff..f7cc8f9b44a02d9bafc25a6d65e7dc827e1c94a7 100644 |
--- a/media/base/audio_buffer_unittest.cc |
+++ b/media/base/audio_buffer_unittest.cc |
@@ -451,4 +451,91 @@ TEST(AudioBufferTest, TrimRangeInterleaved) { |
TrimRangeTest(kSampleFormatF32); |
} |
+static scoped_refptr<AudioBuffer> MakeReadFramesInterleavedTestBuffer( |
+ SampleFormat sample_format, |
+ int sample_rate, |
+ ChannelLayout channel_layout, |
+ int channel_count, |
+ int frames) { |
+ switch (sample_format) { |
+ case kSampleFormatS16: |
+ case kSampleFormatPlanarS16: |
+ return MakeAudioBuffer<int16>(sample_format, |
+ channel_layout, |
+ channel_count, |
+ sample_rate, |
+ 0, |
+ 1, |
+ frames, |
+ base::TimeDelta::FromSeconds(0)); |
+ case kSampleFormatS32: |
+ return MakeAudioBuffer<int32>(kSampleFormatS32, |
+ channel_layout, |
+ channel_count, |
+ sample_rate, |
+ 0, |
+ 65536, |
+ frames, |
+ base::TimeDelta::FromSeconds(0)); |
+ case kSampleFormatF32: |
+ case kSampleFormatPlanarF32: |
+ return MakeAudioBuffer<float>( |
+ sample_format, |
+ channel_layout, |
+ channel_count, |
+ sample_rate, |
+ 0.0f, |
+ 65536.0f / std::numeric_limits<int32>::max(), |
+ frames, |
+ base::TimeDelta::FromSeconds(0)); |
+ case kSampleFormatU8: |
+ case kUnknownSampleFormat: |
+ EXPECT_FALSE(true); |
+ break; |
+ } |
+ return AudioBuffer::CreateEOSBuffer(); |
+} |
+ |
+static void ReadFramesInterleavedS32Test(SampleFormat sample_format) { |
+ const ChannelLayout channel_layout = CHANNEL_LAYOUT_4_0; |
+ const int channels = ChannelLayoutToChannelCount(channel_layout); |
+ const int frames = kSampleRate / 10; |
+ const base::TimeDelta duration = base::TimeDelta::FromMilliseconds(100); |
+ scoped_refptr<AudioBuffer> buffer = MakeReadFramesInterleavedTestBuffer( |
+ sample_format, kSampleRate, channel_layout, channels, frames); |
+ EXPECT_EQ(frames, buffer->frame_count()); |
+ EXPECT_EQ(duration, buffer->duration()); |
+ |
+ int32* dest = new int32[frames * channels]; |
+ buffer->ReadFramesInterleavedS32(frames * channels, dest); |
+ |
+ int count = 0; |
+ for (int i = 0; i < frames; ++i) { |
+ for (int ch = 0; ch < channels; ++ch) { |
+ EXPECT_EQ(dest[count++], (frames * ch + i) << 16); |
+ } |
+ } |
+ delete[] dest; |
+} |
+ |
+TEST(AudioBufferTest, ReadFramesInterleavedS32FromS16) { |
+ ReadFramesInterleavedS32Test(kSampleFormatS16); |
+} |
+ |
+TEST(AudioBufferTest, ReadFramesInterleavedS32FromS32) { |
+ ReadFramesInterleavedS32Test(kSampleFormatS32); |
+} |
+ |
+TEST(AudioBufferTest, ReadFramesInterleavedS32FromF32) { |
+ ReadFramesInterleavedS32Test(kSampleFormatF32); |
+} |
+ |
+TEST(AudioBufferTest, ReadFramesInterleavedS32FromPlanarS16) { |
+ ReadFramesInterleavedS32Test(kSampleFormatPlanarS16); |
+} |
+ |
+TEST(AudioBufferTest, ReadFramesInterleavedS32FromPlanarF32) { |
+ ReadFramesInterleavedS32Test(kSampleFormatPlanarF32); |
+} |
+ |
} // namespace media |