summaryrefslogtreecommitdiffstats
path: root/media/audio/simple_sources_unittest.cc
diff options
context:
space:
mode:
authordalecurtis@chromium.org <dalecurtis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-18 22:12:05 +0000
committerdalecurtis@chromium.org <dalecurtis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-18 22:12:05 +0000
commit2b392e59ab9a72858d224bad9e422fe40a696a69 (patch)
tree124296c1b0473baa88c55a66f95d22b3e4623f04 /media/audio/simple_sources_unittest.cc
parentc9b6e6a5b77de034a13c5d26b9084c40bb0e74c7 (diff)
downloadchromium_src-2b392e59ab9a72858d224bad9e422fe40a696a69.zip
chromium_src-2b392e59ab9a72858d224bad9e422fe40a696a69.tar.gz
chromium_src-2b392e59ab9a72858d224bad9e422fe40a696a69.tar.bz2
Simulate an audio output stream when a real one isn't available.
Upgrades FakeAudioOutputStream to fake OnMoreData calls using a PostDelayedTask approach similar to NullAudioSink. This is necessary for playback of HTML5 videos when a real audio device is not present. I.e. over remote desktop w/ remote audio disabled on on some of the Buildbot machines (this should allow us to remove --disable-audio from many of our tests). This is a two fold change: 1. AudioOutputResampler will now request an AUDIO_FAKE device when invalid output parameters are provided. 2. AudioManagerBase will check for AUDIO_FAKE as it always has but will additionally check if there are any output devices and if not return a fake stream. 2 is necessary for HTML5 audio since it doesn't use the low latency output path. BUG=120749 TEST=unittests. HTML5/Flash video playback over Remote Desktop w/o Remote Audio works. Review URL: https://chromiumcodereview.appspot.com/10987087 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@162810 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media/audio/simple_sources_unittest.cc')
-rw-r--r--media/audio/simple_sources_unittest.cc67
1 files changed, 33 insertions, 34 deletions
diff --git a/media/audio/simple_sources_unittest.cc b/media/audio/simple_sources_unittest.cc
index 47f18b4..cee5d8a 100644
--- a/media/audio/simple_sources_unittest.cc
+++ b/media/audio/simple_sources_unittest.cc
@@ -2,15 +2,12 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include <algorithm> // std::min
#include <limits>
#include "base/logging.h"
#include "base/basictypes.h"
#include "base/memory/scoped_ptr.h"
-#include "base/time.h"
-#include "media/audio/audio_manager.h"
-#include "media/audio/fake_audio_output_stream.h"
+#include "media/audio/audio_parameters.h"
#include "media/audio/simple_sources.h"
#include "media/base/audio_bus.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -19,46 +16,36 @@ namespace media {
// Validate that the SineWaveAudioSource writes the expected values.
TEST(SimpleSources, SineWaveAudioSource) {
- const uint32 samples = 1024;
- const uint32 bytes_per_sample = 2;
- const int freq = 200;
+ static const uint32 samples = 1024;
+ static const uint32 bytes_per_sample = 2;
+ static const int freq = 200;
- SineWaveAudioSource source(1, freq, AudioParameters::kTelephoneSampleRate);
-
- scoped_ptr<AudioManager> audio_man(AudioManager::Create());
AudioParameters params(
- AudioParameters::AUDIO_MOCK, CHANNEL_LAYOUT_MONO,
- AudioParameters::kTelephoneSampleRate, bytes_per_sample * 8, samples);
- AudioOutputStream* oas = audio_man->MakeAudioOutputStream(params);
- ASSERT_TRUE(NULL != oas);
- EXPECT_TRUE(oas->Open());
-
- oas->Start(&source);
- oas->Stop();
+ AudioParameters::AUDIO_PCM_LINEAR, CHANNEL_LAYOUT_MONO,
+ AudioParameters::kTelephoneSampleRate, bytes_per_sample * 8, samples);
- ASSERT_TRUE(FakeAudioOutputStream::GetCurrentFakeStream());
- const AudioBus* last_audio_bus =
- FakeAudioOutputStream::GetCurrentFakeStream()->audio_bus();
- ASSERT_TRUE(NULL != last_audio_bus);
+ SineWaveAudioSource source(1, freq, params.sample_rate());
+ scoped_ptr<AudioBus> audio_bus = AudioBus::Create(params);
+ source.OnMoreData(audio_bus.get(), AudioBuffersState());
+ EXPECT_EQ(1, source.callbacks());
+ EXPECT_EQ(0, source.errors());
uint32 half_period = AudioParameters::kTelephoneSampleRate / (freq * 2);
// Spot test positive incursion of sine wave.
- EXPECT_NEAR(0, last_audio_bus->channel(0)[0],
+ EXPECT_NEAR(0, audio_bus->channel(0)[0],
std::numeric_limits<float>::epsilon());
- EXPECT_FLOAT_EQ(0.15643446f, last_audio_bus->channel(0)[1]);
- EXPECT_LT(last_audio_bus->channel(0)[1], last_audio_bus->channel(0)[2]);
- EXPECT_LT(last_audio_bus->channel(0)[2], last_audio_bus->channel(0)[3]);
+ EXPECT_FLOAT_EQ(0.15643446f, audio_bus->channel(0)[1]);
+ EXPECT_LT(audio_bus->channel(0)[1], audio_bus->channel(0)[2]);
+ EXPECT_LT(audio_bus->channel(0)[2], audio_bus->channel(0)[3]);
// Spot test negative incursion of sine wave.
- EXPECT_NEAR(0, last_audio_bus->channel(0)[half_period],
+ EXPECT_NEAR(0, audio_bus->channel(0)[half_period],
std::numeric_limits<float>::epsilon());
- EXPECT_FLOAT_EQ(-0.15643446f, last_audio_bus->channel(0)[half_period + 1]);
- EXPECT_GT(last_audio_bus->channel(0)[half_period + 1],
- last_audio_bus->channel(0)[half_period + 2]);
- EXPECT_GT(last_audio_bus->channel(0)[half_period + 2],
- last_audio_bus->channel(0)[half_period + 3]);
-
- oas->Close();
+ EXPECT_FLOAT_EQ(-0.15643446f, audio_bus->channel(0)[half_period + 1]);
+ EXPECT_GT(audio_bus->channel(0)[half_period + 1],
+ audio_bus->channel(0)[half_period + 2]);
+ EXPECT_GT(audio_bus->channel(0)[half_period + 2],
+ audio_bus->channel(0)[half_period + 3]);
}
TEST(SimpleSources, SineWaveAudioCapped) {
@@ -70,10 +57,22 @@ TEST(SimpleSources, SineWaveAudioCapped) {
scoped_ptr<AudioBus> audio_bus = AudioBus::Create(1, 2 * kSampleCap);
EXPECT_EQ(source.OnMoreData(
audio_bus.get(), AudioBuffersState()), kSampleCap);
+ EXPECT_EQ(1, source.callbacks());
EXPECT_EQ(source.OnMoreData(audio_bus.get(), AudioBuffersState()), 0);
+ EXPECT_EQ(2, source.callbacks());
source.Reset();
EXPECT_EQ(source.OnMoreData(
audio_bus.get(), AudioBuffersState()), kSampleCap);
+ EXPECT_EQ(3, source.callbacks());
+ EXPECT_EQ(0, source.errors());
+}
+
+TEST(SimpleSources, OnError) {
+ SineWaveAudioSource source(1, 200, AudioParameters::kTelephoneSampleRate);
+ source.OnError(NULL, 0);
+ EXPECT_EQ(1, source.errors());
+ source.OnError(NULL, 0);
+ EXPECT_EQ(2, source.errors());
}
} // namespace media