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

Unified Diff: media/filters/audio_renderer_algorithm_unittest.cc

Issue 11573023: Protect AudioRendererAlgorithm from invalid step sizes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Amend test expectations. Comments. Created 8 years 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_algorithm.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
« no previous file with comments | « media/filters/audio_renderer_algorithm.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698