Index: media/audio/simple_sources_unittest.cc |
=================================================================== |
--- media/audio/simple_sources_unittest.cc (revision 20503) |
+++ media/audio/simple_sources_unittest.cc (working copy) |
@@ -6,6 +6,7 @@ |
#include "base/basictypes.h" |
#include "base/scoped_ptr.h" |
#include "base/time.h" |
+#include "media/audio/fake_audio_output_stream.h" |
#include "media/audio/simple_sources.h" |
#include "testing/gtest/include/gtest/gtest.h" |
@@ -60,3 +61,48 @@ |
push_source.OnClose(NULL); |
} |
+ |
+// Validate that the SineWaveAudioSource writes the expected values for |
+// the FORMAT_16BIT_MONO. The values are carefully selected so rounding issues |
+// do not affect the result. We also test that AudioManager::GetLastMockBuffer |
+// works. |
+TEST(SimpleSources, SineWaveAudio16MonoTest) { |
+ const size_t samples = 1024; |
+ const size_t bytes_per_sample = 2; |
+ const int freq = 200; |
+ |
+ SineWaveAudioSource source(SineWaveAudioSource::FORMAT_16BIT_LINEAR_PCM, 1, |
+ freq, AudioManager::kTelephoneSampleRate); |
+ |
+ AudioManager* audio_man = AudioManager::GetAudioManager(); |
+ ASSERT_TRUE(NULL != audio_man); |
+ AudioOutputStream* oas = |
+ audio_man->MakeAudioStream(AudioManager::AUDIO_MOCK, 1, |
+ AudioManager::kTelephoneSampleRate, |
+ bytes_per_sample * 2); |
+ ASSERT_TRUE(NULL != oas); |
+ EXPECT_TRUE(oas->Open(samples * bytes_per_sample)); |
+ |
+ oas->Start(&source); |
+ oas->Stop(); |
+ oas->Close(); |
+ |
+ ASSERT_TRUE(FakeAudioOutputStream::GetLastFakeStream()); |
+ const int16* last_buffer = |
+ reinterpret_cast<int16*>( |
+ FakeAudioOutputStream::GetLastFakeStream()->buffer()); |
+ ASSERT_TRUE(NULL != last_buffer); |
+ |
+ size_t half_period = AudioManager::kTelephoneSampleRate / (freq * 2); |
+ |
+ // Spot test positive incursion of sine wave. |
+ EXPECT_EQ(0, last_buffer[0]); |
+ EXPECT_EQ(5126, last_buffer[1]); |
+ EXPECT_TRUE(last_buffer[1] < last_buffer[2]); |
+ EXPECT_TRUE(last_buffer[2] < last_buffer[3]); |
+ // Spot test negative incursion of sine wave. |
+ EXPECT_EQ(0, last_buffer[half_period]); |
+ EXPECT_EQ(-5126, last_buffer[half_period + 1]); |
+ EXPECT_TRUE(last_buffer[half_period + 1] > last_buffer[half_period + 2]); |
+ EXPECT_TRUE(last_buffer[half_period + 2] > last_buffer[half_period + 3]); |
+} |