Index: media/audio/android/audio_android_unittest.cc |
diff --git a/media/audio/android/audio_android_unittest.cc b/media/audio/android/audio_android_unittest.cc |
index a8d66a6900a09c1dc91072195ca8da7a24e39fcd..21028520172eedd0d322f74e1ab44fa53360b86e 100644 |
--- a/media/audio/android/audio_android_unittest.cc |
+++ b/media/audio/android/audio_android_unittest.cc |
@@ -8,6 +8,7 @@ |
#include "base/memory/scoped_ptr.h" |
#include "base/message_loop/message_loop.h" |
#include "base/path_service.h" |
+#include "base/run_loop.h" |
#include "base/strings/stringprintf.h" |
#include "base/synchronization/lock.h" |
#include "base/synchronization/waitable_event.h" |
@@ -410,21 +411,76 @@ class FullDuplexAudioSinkSource |
// Test fixture class for tests which only exercise the output path. |
class AudioAndroidOutputTest : public testing::Test { |
public: |
- AudioAndroidOutputTest() {} |
- |
- protected: |
- virtual void SetUp() { |
- audio_manager_.reset(AudioManager::CreateForTesting()); |
- loop_.reset(new base::MessageLoopForUI()); |
+ AudioAndroidOutputTest() |
+ : loop_(new base::MessageLoopForUI()), |
+ audio_manager_(AudioManager::CreateForTesting()), |
+ audio_output_stream_(NULL) { |
} |
- virtual void TearDown() {} |
+ virtual ~AudioAndroidOutputTest() { |
+ } |
+ protected: |
AudioManager* audio_manager() { return audio_manager_.get(); } |
base::MessageLoopForUI* loop() { return loop_.get(); } |
+ const AudioParameters& audio_output_parameters() { |
+ return audio_output_parameters_; |
+ } |
+ |
+ // Synchronously runs the provided callback/closure on the audio thread. |
+ void RunOnAudioThread(const base::Closure& closure) { |
+ if (!audio_manager()->GetTaskRunner()->BelongsToCurrentThread()) { |
+ base::WaitableEvent event(false, false); |
+ audio_manager()->GetTaskRunner()->PostTask( |
+ FROM_HERE, |
+ base::Bind(&AudioAndroidOutputTest::RunOnAudioThreadImpl, |
+ base::Unretained(this), |
+ closure, |
+ &event)); |
+ event.Wait(); |
+ } else { |
+ closure.Run(); |
+ } |
+ } |
+ |
+ void RunOnAudioThreadImpl(const base::Closure& closure, |
+ base::WaitableEvent* event) { |
+ DCHECK(audio_manager()->GetTaskRunner()->BelongsToCurrentThread()); |
+ closure.Run(); |
+ event->Signal(); |
+ } |
+ |
+ void GetDefaultOutputStreamParametersOnAudioThread() { |
+ RunOnAudioThread( |
+ base::Bind(&AudioAndroidOutputTest::GetDefaultOutputStreamParameters, |
+ base::Unretained(this))); |
+ } |
+ |
+ void MakeAudioOutputStreamOnAudioThread(const AudioParameters& params) { |
+ RunOnAudioThread( |
+ base::Bind(&AudioAndroidOutputTest::MakeOutputStream, |
+ base::Unretained(this), |
+ params)); |
+ } |
- AudioParameters GetDefaultOutputStreamParameters() { |
- return audio_manager()->GetDefaultOutputStreamParameters(); |
+ void OpenAndCloseAudioOutputStreamOnAudioThread() { |
+ RunOnAudioThread( |
+ base::Bind(&AudioAndroidOutputTest::OpenAndClose, |
+ base::Unretained(this))); |
+ } |
+ |
+ void OpenAndStartAudioOutputStreamOnAudioThread( |
+ AudioOutputStream::AudioSourceCallback* source) { |
+ RunOnAudioThread( |
+ base::Bind(&AudioAndroidOutputTest::OpenAndStart, |
+ base::Unretained(this), |
+ source)); |
+ } |
+ |
+ void StopAndCloseAudioOutputStreamOnAudioThread() { |
+ RunOnAudioThread( |
+ base::Bind(&AudioAndroidOutputTest::StopAndClose, |
+ base::Unretained(this))); |
} |
double AverageTimeBetweenCallbacks(int num_callbacks) const { |
@@ -437,9 +493,7 @@ class AudioAndroidOutputTest : public testing::Test { |
ExpectedTimeBetweenCallbacks(params); |
const int num_callbacks = |
(kCallbackTestTimeMs / expected_time_between_callbacks_ms); |
- AudioOutputStream* stream = audio_manager()->MakeAudioOutputStream( |
- params, std::string()); |
- EXPECT_TRUE(stream); |
+ MakeAudioOutputStreamOnAudioThread(params); |
int count = 0; |
MockAudioSourceCallback source; |
@@ -449,16 +503,16 @@ class AudioAndroidOutputTest : public testing::Test { |
.WillRepeatedly( |
DoAll(CheckCountAndPostQuitTask(&count, num_callbacks, loop()), |
Invoke(RealOnMoreData))); |
- EXPECT_CALL(source, OnError(stream)).Times(0); |
+ EXPECT_CALL(source, OnError(audio_output_stream_)).Times(0); |
EXPECT_CALL(source, OnMoreIOData(_, _, _)).Times(0); |
- EXPECT_TRUE(stream->Open()); |
- stream->Start(&source); |
+ OpenAndStartAudioOutputStreamOnAudioThread(&source); |
+ |
start_time_ = base::TimeTicks::Now(); |
loop()->Run(); |
end_time_ = base::TimeTicks::Now(); |
- stream->Stop(); |
- stream->Close(); |
+ |
+ StopAndCloseAudioOutputStreamOnAudioThread(); |
double average_time_between_callbacks_ms = |
AverageTimeBetweenCallbacks(num_callbacks); |
@@ -472,8 +526,44 @@ class AudioAndroidOutputTest : public testing::Test { |
1.30 * expected_time_between_callbacks_ms); |
} |
+ void GetDefaultOutputStreamParameters() { |
+ DCHECK(audio_manager()->GetTaskRunner()->BelongsToCurrentThread()); |
+ audio_output_parameters_ = |
+ audio_manager()->GetDefaultOutputStreamParameters(); |
+ EXPECT_TRUE(audio_output_parameters_.IsValid()); |
+ } |
+ |
+ void MakeOutputStream(const AudioParameters& params) { |
+ DCHECK(audio_manager()->GetTaskRunner()->BelongsToCurrentThread()); |
+ audio_output_stream_ = audio_manager()->MakeAudioOutputStream( |
+ params, std::string()); |
+ EXPECT_TRUE(audio_output_stream_); |
+ } |
+ |
+ void OpenAndClose() { |
+ DCHECK(audio_manager()->GetTaskRunner()->BelongsToCurrentThread()); |
+ EXPECT_TRUE(audio_output_stream_->Open()); |
+ audio_output_stream_->Close(); |
+ audio_output_stream_ = NULL; |
+ } |
+ |
+ void OpenAndStart(AudioOutputStream::AudioSourceCallback* source) { |
+ DCHECK(audio_manager()->GetTaskRunner()->BelongsToCurrentThread()); |
+ EXPECT_TRUE(audio_output_stream_->Open()); |
+ audio_output_stream_->Start(source); |
+ } |
+ |
+ void StopAndClose() { |
+ DCHECK(audio_manager()->GetTaskRunner()->BelongsToCurrentThread()); |
+ audio_output_stream_->Stop(); |
+ audio_output_stream_->Close(); |
+ audio_output_stream_ = NULL; |
+ } |
+ |
scoped_ptr<base::MessageLoopForUI> loop_; |
scoped_ptr<AudioManager> audio_manager_; |
+ AudioParameters audio_output_parameters_; |
+ AudioOutputStream* audio_output_stream_; |
base::TimeTicks start_time_; |
base::TimeTicks end_time_; |
@@ -497,52 +587,91 @@ std::vector<bool> RunAudioRecordInputPathTests() { |
class AudioAndroidInputTest : public AudioAndroidOutputTest, |
public testing::WithParamInterface<bool> { |
public: |
- AudioAndroidInputTest() {} |
+ AudioAndroidInputTest() : audio_input_stream_(NULL) {} |
protected: |
+ const AudioParameters& audio_input_parameters() { |
+ return audio_input_parameters_; |
+ } |
+ |
AudioParameters GetInputStreamParameters() { |
- AudioParameters input_params = audio_manager()->GetInputStreamParameters( |
- AudioManagerBase::kDefaultDeviceId); |
+ GetDefaultInputStreamParametersOnAudioThread(); |
+ |
// Override the platform effects setting to use the AudioRecord or OpenSLES |
// path as requested. |
int effects = GetParam() ? AudioParameters::ECHO_CANCELLER : |
AudioParameters::NO_EFFECTS; |
- AudioParameters params(input_params.format(), |
- input_params.channel_layout(), |
- input_params.input_channels(), |
- input_params.sample_rate(), |
- input_params.bits_per_sample(), |
- input_params.frames_per_buffer(), |
+ AudioParameters params(audio_input_parameters().format(), |
+ audio_input_parameters().channel_layout(), |
+ audio_input_parameters().input_channels(), |
+ audio_input_parameters().sample_rate(), |
+ audio_input_parameters().bits_per_sample(), |
+ audio_input_parameters().frames_per_buffer(), |
effects); |
return params; |
} |
+ void GetDefaultInputStreamParametersOnAudioThread() { |
+ RunOnAudioThread( |
+ base::Bind(&AudioAndroidInputTest::GetDefaultInputStreamParameters, |
+ base::Unretained(this))); |
+ } |
+ |
+ void MakeAudioInputStreamOnAudioThread(const AudioParameters& params) { |
+ RunOnAudioThread( |
+ base::Bind(&AudioAndroidInputTest::MakeInputStream, |
+ base::Unretained(this), |
+ params)); |
+ } |
+ |
+ void OpenAndCloseAudioInputStreamOnAudioThread() { |
+ RunOnAudioThread( |
+ base::Bind(&AudioAndroidInputTest::OpenAndClose, |
+ base::Unretained(this))); |
+ } |
+ |
+ void OpenAndStartAudioInputStreamOnAudioThread( |
+ AudioInputStream::AudioInputCallback* sink) { |
+ RunOnAudioThread( |
+ base::Bind(&AudioAndroidInputTest::OpenAndStart, |
+ base::Unretained(this), |
+ sink)); |
+ } |
+ |
+ void StopAndCloseAudioInputStreamOnAudioThread() { |
+ RunOnAudioThread( |
+ base::Bind(&AudioAndroidInputTest::StopAndClose, |
+ base::Unretained(this))); |
+ } |
+ |
void StartInputStreamCallbacks(const AudioParameters& params) { |
double expected_time_between_callbacks_ms = |
ExpectedTimeBetweenCallbacks(params); |
const int num_callbacks = |
(kCallbackTestTimeMs / expected_time_between_callbacks_ms); |
- AudioInputStream* stream = audio_manager()->MakeAudioInputStream( |
- params, AudioManagerBase::kDefaultDeviceId); |
- EXPECT_TRUE(stream); |
+ |
+ MakeAudioInputStreamOnAudioThread(params); |
int count = 0; |
MockAudioInputCallback sink; |
EXPECT_CALL(sink, |
- OnData(stream, NotNull(), params.GetBytesPerBuffer(), _, _)) |
+ OnData(audio_input_stream_, |
+ NotNull(), |
+ params. |
+ GetBytesPerBuffer(), _, _)) |
.Times(AtLeast(num_callbacks)) |
.WillRepeatedly( |
CheckCountAndPostQuitTask(&count, num_callbacks, loop())); |
- EXPECT_CALL(sink, OnError(stream)).Times(0); |
+ EXPECT_CALL(sink, OnError(audio_input_stream_)).Times(0); |
+ |
+ OpenAndStartAudioInputStreamOnAudioThread(&sink); |
- EXPECT_TRUE(stream->Open()); |
- stream->Start(&sink); |
start_time_ = base::TimeTicks::Now(); |
loop()->Run(); |
end_time_ = base::TimeTicks::Now(); |
- stream->Stop(); |
- stream->Close(); |
+ |
+ StopAndCloseAudioInputStreamOnAudioThread(); |
double average_time_between_callbacks_ms = |
AverageTimeBetweenCallbacks(num_callbacks); |
@@ -556,6 +685,41 @@ class AudioAndroidInputTest : public AudioAndroidOutputTest, |
1.30 * expected_time_between_callbacks_ms); |
} |
+ void GetDefaultInputStreamParameters() { |
+ DCHECK(audio_manager()->GetTaskRunner()->BelongsToCurrentThread()); |
+ audio_input_parameters_ = audio_manager()->GetInputStreamParameters( |
+ AudioManagerBase::kDefaultDeviceId); |
+ } |
+ |
+ void MakeInputStream(const AudioParameters& params) { |
+ DCHECK(audio_manager()->GetTaskRunner()->BelongsToCurrentThread()); |
+ audio_input_stream_ = audio_manager()->MakeAudioInputStream( |
+ params, AudioManagerBase::kDefaultDeviceId); |
+ EXPECT_TRUE(audio_input_stream_); |
+ } |
+ |
+ void OpenAndClose() { |
+ DCHECK(audio_manager()->GetTaskRunner()->BelongsToCurrentThread()); |
+ EXPECT_TRUE(audio_input_stream_->Open()); |
+ audio_input_stream_->Close(); |
+ audio_input_stream_ = NULL; |
+ } |
+ |
+ void OpenAndStart(AudioInputStream::AudioInputCallback* sink) { |
+ DCHECK(audio_manager()->GetTaskRunner()->BelongsToCurrentThread()); |
+ EXPECT_TRUE(audio_input_stream_->Open()); |
+ audio_input_stream_->Start(sink); |
+ } |
+ |
+ void StopAndClose() { |
+ DCHECK(audio_manager()->GetTaskRunner()->BelongsToCurrentThread()); |
+ audio_input_stream_->Stop(); |
+ audio_input_stream_->Close(); |
+ audio_input_stream_ = NULL; |
+ } |
+ |
+ AudioInputStream* audio_input_stream_; |
+ AudioParameters audio_input_parameters_; |
private: |
DISALLOW_COPY_AND_ASSIGN(AudioAndroidInputTest); |
@@ -565,26 +729,15 @@ class AudioAndroidInputTest : public AudioAndroidOutputTest, |
TEST_P(AudioAndroidInputTest, GetDefaultInputStreamParameters) { |
// We don't go through AudioAndroidInputTest::GetInputStreamParameters() here |
// so that we can log the real (non-overridden) values of the effects. |
- AudioParameters params = audio_manager()->GetInputStreamParameters( |
- AudioManagerBase::kDefaultDeviceId); |
- EXPECT_TRUE(params.IsValid()); |
- VLOG(1) << params; |
+ GetDefaultInputStreamParametersOnAudioThread(); |
+ EXPECT_TRUE(audio_input_parameters().IsValid()); |
+ VLOG(1) << audio_input_parameters(); |
} |
// Get the default audio output parameters and log the result. |
TEST_F(AudioAndroidOutputTest, GetDefaultOutputStreamParameters) { |
- AudioParameters params = GetDefaultOutputStreamParameters(); |
- EXPECT_TRUE(params.IsValid()); |
- VLOG(1) << params; |
-} |
- |
-// Check if low-latency output is supported and log the result as output. |
-TEST_F(AudioAndroidOutputTest, IsAudioLowLatencySupported) { |
- AudioManagerAndroid* manager = |
- static_cast<AudioManagerAndroid*>(audio_manager()); |
- bool low_latency = manager->IsAudioLowLatencySupported(); |
- low_latency ? VLOG(0) << "Low latency output is supported" |
- : VLOG(0) << "Low latency output is *not* supported"; |
+ GetDefaultOutputStreamParametersOnAudioThread(); |
+ VLOG(1) << audio_output_parameters(); |
} |
// Verify input device enumeration. |
@@ -592,7 +745,10 @@ TEST_F(AudioAndroidInputTest, GetAudioInputDeviceNames) { |
if (!audio_manager()->HasAudioInputDevices()) |
return; |
AudioDeviceNames devices; |
- audio_manager()->GetAudioInputDeviceNames(&devices); |
+ RunOnAudioThread( |
+ base::Bind(&AudioManager::GetAudioInputDeviceNames, |
+ base::Unretained(audio_manager()), |
+ &devices)); |
CheckDeviceNames(devices); |
} |
@@ -601,17 +757,20 @@ TEST_F(AudioAndroidOutputTest, GetAudioOutputDeviceNames) { |
if (!audio_manager()->HasAudioOutputDevices()) |
return; |
AudioDeviceNames devices; |
- audio_manager()->GetAudioOutputDeviceNames(&devices); |
+ RunOnAudioThread( |
+ base::Bind(&AudioManager::GetAudioOutputDeviceNames, |
+ base::Unretained(audio_manager()), |
+ &devices)); |
CheckDeviceNames(devices); |
} |
// Ensure that a default input stream can be created and closed. |
TEST_P(AudioAndroidInputTest, CreateAndCloseInputStream) { |
AudioParameters params = GetInputStreamParameters(); |
- AudioInputStream* ais = audio_manager()->MakeAudioInputStream( |
- params, AudioManagerBase::kDefaultDeviceId); |
- EXPECT_TRUE(ais); |
- ais->Close(); |
+ MakeAudioInputStreamOnAudioThread(params); |
+ RunOnAudioThread( |
+ base::Bind(&AudioInputStream::Close, |
+ base::Unretained(audio_input_stream_))); |
} |
// Ensure that a default output stream can be created and closed. |
@@ -619,47 +778,39 @@ TEST_P(AudioAndroidInputTest, CreateAndCloseInputStream) { |
// to communication mode, and calls RegisterHeadsetReceiver, the first time |
// it is called? |
TEST_F(AudioAndroidOutputTest, CreateAndCloseOutputStream) { |
- AudioParameters params = GetDefaultOutputStreamParameters(); |
- AudioOutputStream* aos = audio_manager()->MakeAudioOutputStream( |
- params, std::string()); |
- EXPECT_TRUE(aos); |
- aos->Close(); |
+ GetDefaultOutputStreamParametersOnAudioThread(); |
+ MakeAudioOutputStreamOnAudioThread(audio_output_parameters()); |
+ RunOnAudioThread( |
+ base::Bind(&AudioOutputStream::Close, |
+ base::Unretained(audio_output_stream_))); |
} |
// Ensure that a default input stream can be opened and closed. |
TEST_P(AudioAndroidInputTest, OpenAndCloseInputStream) { |
AudioParameters params = GetInputStreamParameters(); |
- AudioInputStream* ais = audio_manager()->MakeAudioInputStream( |
- params, AudioManagerBase::kDefaultDeviceId); |
- EXPECT_TRUE(ais); |
- EXPECT_TRUE(ais->Open()); |
- ais->Close(); |
+ MakeAudioInputStreamOnAudioThread(params); |
+ OpenAndCloseAudioInputStreamOnAudioThread(); |
} |
// Ensure that a default output stream can be opened and closed. |
TEST_F(AudioAndroidOutputTest, OpenAndCloseOutputStream) { |
- AudioParameters params = GetDefaultOutputStreamParameters(); |
- AudioOutputStream* aos = audio_manager()->MakeAudioOutputStream( |
- params, std::string()); |
- EXPECT_TRUE(aos); |
- EXPECT_TRUE(aos->Open()); |
- aos->Close(); |
+ GetDefaultOutputStreamParametersOnAudioThread(); |
+ MakeAudioOutputStreamOnAudioThread(audio_output_parameters()); |
+ OpenAndCloseAudioOutputStreamOnAudioThread(); |
} |
// Start input streaming using default input parameters and ensure that the |
// callback sequence is sane. |
-// Disabled per crbug/337867 |
TEST_P(AudioAndroidInputTest, DISABLED_StartInputStreamCallbacks) { |
- AudioParameters params = GetInputStreamParameters(); |
- StartInputStreamCallbacks(params); |
+ AudioParameters native_params = GetInputStreamParameters(); |
+ StartInputStreamCallbacks(native_params); |
} |
// Start input streaming using non default input parameters and ensure that the |
// callback sequence is sane. The only change we make in this test is to select |
// a 10ms buffer size instead of the default size. |
-// TODO(henrika): possibly add support for more variations. |
-// Disabled per crbug/337867 |
-TEST_P(AudioAndroidInputTest, DISABLED_StartInputStreamCallbacksNonDefaultParameters) { |
+TEST_P(AudioAndroidInputTest, |
+ DISABLED_StartInputStreamCallbacksNonDefaultParameters) { |
AudioParameters native_params = GetInputStreamParameters(); |
AudioParameters params(native_params.format(), |
native_params.channel_layout(), |
@@ -674,8 +825,8 @@ TEST_P(AudioAndroidInputTest, DISABLED_StartInputStreamCallbacksNonDefaultParame |
// Start output streaming using default output parameters and ensure that the |
// callback sequence is sane. |
TEST_F(AudioAndroidOutputTest, StartOutputStreamCallbacks) { |
- AudioParameters params = GetDefaultOutputStreamParameters(); |
- StartOutputStreamCallbacks(params); |
+ GetDefaultOutputStreamParametersOnAudioThread(); |
+ StartOutputStreamCallbacks(audio_output_parameters()); |
} |
// Start output streaming using non default output parameters and ensure that |
@@ -684,12 +835,12 @@ TEST_F(AudioAndroidOutputTest, StartOutputStreamCallbacks) { |
// device in mono. |
// TODO(henrika): possibly add support for more variations. |
TEST_F(AudioAndroidOutputTest, StartOutputStreamCallbacksNonDefaultParameters) { |
- AudioParameters native_params = GetDefaultOutputStreamParameters(); |
- AudioParameters params(native_params.format(), |
+ GetDefaultOutputStreamParametersOnAudioThread(); |
+ AudioParameters params(audio_output_parameters().format(), |
CHANNEL_LAYOUT_MONO, |
- native_params.sample_rate(), |
- native_params.bits_per_sample(), |
- native_params.sample_rate() / 100); |
+ audio_output_parameters().sample_rate(), |
+ audio_output_parameters().bits_per_sample(), |
+ audio_output_parameters().sample_rate() / 100); |
StartOutputStreamCallbacks(params); |
} |
@@ -698,13 +849,12 @@ TEST_F(AudioAndroidOutputTest, StartOutputStreamCallbacksNonDefaultParameters) { |
// NOTE: this test requires user interaction and is not designed to run as an |
// automatized test on bots. |
TEST_F(AudioAndroidOutputTest, DISABLED_RunOutputStreamWithFileAsSource) { |
- AudioParameters params = GetDefaultOutputStreamParameters(); |
- VLOG(1) << params; |
- AudioOutputStream* aos = audio_manager()->MakeAudioOutputStream( |
- params, std::string()); |
- EXPECT_TRUE(aos); |
+ GetDefaultOutputStreamParametersOnAudioThread(); |
+ VLOG(1) << audio_output_parameters(); |
+ MakeAudioOutputStreamOnAudioThread(audio_output_parameters()); |
std::string file_name; |
+ const AudioParameters params = audio_output_parameters(); |
if (params.sample_rate() == 48000 && params.channels() == 2) { |
file_name = kSpeechFile_16b_s_48k; |
} else if (params.sample_rate() == 48000 && params.channels() == 1) { |
@@ -721,13 +871,10 @@ TEST_F(AudioAndroidOutputTest, DISABLED_RunOutputStreamWithFileAsSource) { |
base::WaitableEvent event(false, false); |
FileAudioSource source(&event, file_name); |
- EXPECT_TRUE(aos->Open()); |
- aos->SetVolume(1.0); |
- aos->Start(&source); |
+ OpenAndStartAudioOutputStreamOnAudioThread(&source); |
VLOG(0) << ">> Verify that the file is played out correctly..."; |
EXPECT_TRUE(event.TimedWait(TestTimeouts::action_max_timeout())); |
- aos->Stop(); |
- aos->Close(); |
+ StopAndCloseAudioOutputStreamOnAudioThread(); |
} |
// Start input streaming and run it for ten seconds while recording to a |
@@ -737,9 +884,7 @@ TEST_F(AudioAndroidOutputTest, DISABLED_RunOutputStreamWithFileAsSource) { |
TEST_P(AudioAndroidInputTest, DISABLED_RunSimplexInputStreamWithFileAsSink) { |
AudioParameters params = GetInputStreamParameters(); |
VLOG(1) << params; |
- AudioInputStream* ais = audio_manager()->MakeAudioInputStream( |
- params, AudioManagerBase::kDefaultDeviceId); |
- EXPECT_TRUE(ais); |
+ MakeAudioInputStreamOnAudioThread(params); |
std::string file_name = base::StringPrintf("out_simplex_%d_%d_%d.pcm", |
params.sample_rate(), |
@@ -749,12 +894,10 @@ TEST_P(AudioAndroidInputTest, DISABLED_RunSimplexInputStreamWithFileAsSink) { |
base::WaitableEvent event(false, false); |
FileAudioSink sink(&event, params, file_name); |
- EXPECT_TRUE(ais->Open()); |
- ais->Start(&sink); |
+ OpenAndStartAudioInputStreamOnAudioThread(&sink); |
VLOG(0) << ">> Speak into the microphone to record audio..."; |
EXPECT_TRUE(event.TimedWait(TestTimeouts::action_max_timeout())); |
- ais->Stop(); |
- ais->Close(); |
+ StopAndCloseAudioInputStreamOnAudioThread(); |
} |
// Same test as RunSimplexInputStreamWithFileAsSink but this time output |
@@ -763,15 +906,12 @@ TEST_P(AudioAndroidInputTest, DISABLED_RunSimplexInputStreamWithFileAsSink) { |
// automatized test on bots. |
TEST_P(AudioAndroidInputTest, DISABLED_RunDuplexInputStreamWithFileAsSink) { |
AudioParameters in_params = GetInputStreamParameters(); |
- AudioInputStream* ais = audio_manager()->MakeAudioInputStream( |
- in_params, AudioManagerBase::kDefaultDeviceId); |
- EXPECT_TRUE(ais); |
+ VLOG(1) << in_params; |
+ MakeAudioInputStreamOnAudioThread(in_params); |
- AudioParameters out_params = |
- audio_manager()->GetDefaultOutputStreamParameters(); |
- AudioOutputStream* aos = audio_manager()->MakeAudioOutputStream( |
- out_params, std::string()); |
- EXPECT_TRUE(aos); |
+ GetDefaultOutputStreamParametersOnAudioThread(); |
+ VLOG(1) << audio_output_parameters(); |
+ MakeAudioOutputStreamOnAudioThread(audio_output_parameters()); |
std::string file_name = base::StringPrintf("out_duplex_%d_%d_%d.pcm", |
in_params.sample_rate(), |
@@ -784,19 +924,15 @@ TEST_P(AudioAndroidInputTest, DISABLED_RunDuplexInputStreamWithFileAsSink) { |
EXPECT_CALL(source, OnMoreData(NotNull(), _)) |
.WillRepeatedly(Invoke(RealOnMoreData)); |
- EXPECT_CALL(source, OnError(aos)).Times(0); |
+ EXPECT_CALL(source, OnError(audio_output_stream_)).Times(0); |
EXPECT_CALL(source, OnMoreIOData(_, _, _)).Times(0); |
- EXPECT_TRUE(ais->Open()); |
- EXPECT_TRUE(aos->Open()); |
- ais->Start(&sink); |
- aos->Start(&source); |
+ OpenAndStartAudioInputStreamOnAudioThread(&sink); |
+ OpenAndStartAudioOutputStreamOnAudioThread(&source); |
VLOG(0) << ">> Speak into the microphone to record audio"; |
EXPECT_TRUE(event.TimedWait(TestTimeouts::action_max_timeout())); |
- aos->Stop(); |
- ais->Stop(); |
- aos->Close(); |
- ais->Close(); |
+ StopAndCloseAudioOutputStreamOnAudioThread(); |
+ StopAndCloseAudioInputStreamOnAudioThread(); |
} |
// Start audio in both directions while feeding captured data into a FIFO so |
@@ -825,12 +961,8 @@ TEST_P(AudioAndroidInputTest, |
VLOG(1) << io_params; |
// Create input and output streams using the common audio parameters. |
- AudioInputStream* ais = audio_manager()->MakeAudioInputStream( |
- io_params, AudioManagerBase::kDefaultDeviceId); |
- EXPECT_TRUE(ais); |
- AudioOutputStream* aos = audio_manager()->MakeAudioOutputStream( |
- io_params, std::string()); |
- EXPECT_TRUE(aos); |
+ MakeAudioInputStreamOnAudioThread(io_params); |
+ MakeAudioOutputStreamOnAudioThread(io_params); |
FullDuplexAudioSinkSource full_duplex(io_params); |
@@ -838,20 +970,16 @@ TEST_P(AudioAndroidInputTest, |
// delay we should expect from the FIFO. If real-time delay measurements are |
// performed, the result should be reduced by this extra delay since it is |
// something that has been added by the test. |
- EXPECT_TRUE(ais->Open()); |
- EXPECT_TRUE(aos->Open()); |
- ais->Start(&full_duplex); |
- aos->Start(&full_duplex); |
+ OpenAndStartAudioInputStreamOnAudioThread(&full_duplex); |
+ OpenAndStartAudioOutputStreamOnAudioThread(&full_duplex); |
VLOG(1) << "HINT: an estimate of the extra FIFO delay will be updated " |
<< "once per second during this test."; |
VLOG(0) << ">> Speak into the mic and listen to the audio in loopback..."; |
fflush(stdout); |
base::PlatformThread::Sleep(base::TimeDelta::FromSeconds(20)); |
printf("\n"); |
- aos->Stop(); |
- ais->Stop(); |
- aos->Close(); |
- ais->Close(); |
+ StopAndCloseAudioOutputStreamOnAudioThread(); |
+ StopAndCloseAudioInputStreamOnAudioThread(); |
} |
INSTANTIATE_TEST_CASE_P(AudioAndroidInputTest, AudioAndroidInputTest, |