| Index: trunk/src/media/audio/android/audio_android_unittest.cc
|
| ===================================================================
|
| --- trunk/src/media/audio/android/audio_android_unittest.cc (revision 240588)
|
| +++ trunk/src/media/audio/android/audio_android_unittest.cc (working copy)
|
| @@ -2,7 +2,6 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -#include "base/android/build_info.h"
|
| #include "base/basictypes.h"
|
| #include "base/file_util.h"
|
| #include "base/memory/scoped_ptr.h"
|
| @@ -96,9 +95,7 @@
|
| << "bytes per buffer: " << params.GetBytesPerBuffer() << endl
|
| << "bytes per second: " << params.GetBytesPerSecond() << endl
|
| << "bytes per frame: " << params.GetBytesPerFrame() << endl
|
| - << "chunk size in ms: " << ExpectedTimeBetweenCallbacks(params) << endl
|
| - << "echo_canceller: "
|
| - << (params.effects() & AudioParameters::ECHO_CANCELLER);
|
| + << "frame size in ms: " << ExpectedTimeBetweenCallbacks(params);
|
| return os;
|
| }
|
|
|
| @@ -386,10 +383,10 @@
|
| DISALLOW_COPY_AND_ASSIGN(FullDuplexAudioSinkSource);
|
| };
|
|
|
| -// Test fixture class for tests which only exercise the output path.
|
| -class AudioAndroidOutputTest : public testing::Test {
|
| +// Test fixture class.
|
| +class AudioAndroidTest : public testing::Test {
|
| public:
|
| - AudioAndroidOutputTest() {}
|
| + AudioAndroidTest() {}
|
|
|
| protected:
|
| virtual void SetUp() {
|
| @@ -402,6 +399,11 @@
|
| AudioManager* audio_manager() { return audio_manager_.get(); }
|
| base::MessageLoopForUI* loop() { return loop_.get(); }
|
|
|
| + AudioParameters GetDefaultInputStreamParameters() {
|
| + return audio_manager()->GetInputStreamParameters(
|
| + AudioManagerBase::kDefaultDeviceId);
|
| + }
|
| +
|
| AudioParameters GetDefaultOutputStreamParameters() {
|
| return audio_manager()->GetDefaultOutputStreamParameters();
|
| }
|
| @@ -411,28 +413,28 @@
|
| .InMillisecondsF();
|
| }
|
|
|
| - void StartOutputStreamCallbacks(const AudioParameters& params) {
|
| + void StartInputStreamCallbacks(const AudioParameters& params) {
|
| double expected_time_between_callbacks_ms =
|
| ExpectedTimeBetweenCallbacks(params);
|
| const int num_callbacks =
|
| (kCallbackTestTimeMs / expected_time_between_callbacks_ms);
|
| - AudioOutputStream* stream = audio_manager()->MakeAudioOutputStream(
|
| - params, std::string(), std::string());
|
| + AudioInputStream* stream = audio_manager()->MakeAudioInputStream(
|
| + params, AudioManagerBase::kDefaultDeviceId);
|
| EXPECT_TRUE(stream);
|
|
|
| int count = 0;
|
| - MockAudioOutputCallback source;
|
| + MockAudioInputCallback sink;
|
|
|
| - EXPECT_CALL(source, OnMoreData(NotNull(), _))
|
| + EXPECT_CALL(sink,
|
| + OnData(stream, NotNull(), params.GetBytesPerBuffer(), _, _))
|
| .Times(AtLeast(num_callbacks))
|
| .WillRepeatedly(
|
| - DoAll(CheckCountAndPostQuitTask(&count, num_callbacks, loop()),
|
| - Invoke(&source, &MockAudioOutputCallback::RealOnMoreData)));
|
| - EXPECT_CALL(source, OnError(stream)).Times(0);
|
| - EXPECT_CALL(source, OnMoreIOData(_, _, _)).Times(0);
|
| + CheckCountAndPostQuitTask(&count, num_callbacks, loop()));
|
| + EXPECT_CALL(sink, OnError(stream)).Times(0);
|
| + EXPECT_CALL(sink, OnClose(stream)).Times(1);
|
|
|
| EXPECT_TRUE(stream->Open());
|
| - stream->Start(&source);
|
| + stream->Start(&sink);
|
| start_time_ = base::TimeTicks::Now();
|
| loop()->Run();
|
| end_time_ = base::TimeTicks::Now();
|
| @@ -451,73 +453,28 @@
|
| 1.30 * expected_time_between_callbacks_ms);
|
| }
|
|
|
| - scoped_ptr<base::MessageLoopForUI> loop_;
|
| - scoped_ptr<AudioManager> audio_manager_;
|
| - base::TimeTicks start_time_;
|
| - base::TimeTicks end_time_;
|
| -
|
| - private:
|
| - DISALLOW_COPY_AND_ASSIGN(AudioAndroidOutputTest);
|
| -};
|
| -
|
| -// AudioRecordInputStream should only be created on Jelly Bean and higher. This
|
| -// ensures we only test against the AudioRecord path when that is satisfied.
|
| -std::vector<bool> RunAudioRecordInputPathTests() {
|
| - std::vector<bool> tests;
|
| - tests.push_back(false);
|
| - if (base::android::BuildInfo::GetInstance()->sdk_int() >= 16)
|
| - tests.push_back(true);
|
| - return tests;
|
| -}
|
| -
|
| -// Test fixture class for tests which exercise the input path, or both input and
|
| -// output paths. It is value-parameterized to test against both the Java
|
| -// AudioRecord (when true) and native OpenSLES (when false) input paths.
|
| -class AudioAndroidInputTest : public AudioAndroidOutputTest,
|
| - public testing::WithParamInterface<bool> {
|
| - public:
|
| - AudioAndroidInputTest() {}
|
| -
|
| - protected:
|
| - AudioParameters GetInputStreamParameters() {
|
| - AudioParameters input_params = audio_manager()->GetInputStreamParameters(
|
| - AudioManagerBase::kDefaultDeviceId);
|
| - // 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(),
|
| - effects);
|
| - return params;
|
| - }
|
| -
|
| - void StartInputStreamCallbacks(const AudioParameters& params) {
|
| + void StartOutputStreamCallbacks(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);
|
| + AudioOutputStream* stream = audio_manager()->MakeAudioOutputStream(
|
| + params, std::string(), std::string());
|
| EXPECT_TRUE(stream);
|
|
|
| int count = 0;
|
| - MockAudioInputCallback sink;
|
| + MockAudioOutputCallback source;
|
|
|
| - EXPECT_CALL(sink,
|
| - OnData(stream, NotNull(), params.GetBytesPerBuffer(), _, _))
|
| + EXPECT_CALL(source, OnMoreData(NotNull(), _))
|
| .Times(AtLeast(num_callbacks))
|
| .WillRepeatedly(
|
| - CheckCountAndPostQuitTask(&count, num_callbacks, loop()));
|
| - EXPECT_CALL(sink, OnError(stream)).Times(0);
|
| - EXPECT_CALL(sink, OnClose(stream)).Times(1);
|
| + DoAll(CheckCountAndPostQuitTask(&count, num_callbacks, loop()),
|
| + Invoke(&source, &MockAudioOutputCallback::RealOnMoreData)));
|
| + EXPECT_CALL(source, OnError(stream)).Times(0);
|
| + EXPECT_CALL(source, OnMoreIOData(_, _, _)).Times(0);
|
|
|
| EXPECT_TRUE(stream->Open());
|
| - stream->Start(&sink);
|
| + stream->Start(&source);
|
| start_time_ = base::TimeTicks::Now();
|
| loop()->Run();
|
| end_time_ = base::TimeTicks::Now();
|
| @@ -536,30 +493,30 @@
|
| 1.30 * expected_time_between_callbacks_ms);
|
| }
|
|
|
| + scoped_ptr<base::MessageLoopForUI> loop_;
|
| + scoped_ptr<AudioManager> audio_manager_;
|
| + base::TimeTicks start_time_;
|
| + base::TimeTicks end_time_;
|
|
|
| - private:
|
| - DISALLOW_COPY_AND_ASSIGN(AudioAndroidInputTest);
|
| + DISALLOW_COPY_AND_ASSIGN(AudioAndroidTest);
|
| };
|
|
|
| // Get the default audio input parameters and log the result.
|
| -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);
|
| +TEST_F(AudioAndroidTest, GetInputStreamParameters) {
|
| + AudioParameters params = GetDefaultInputStreamParameters();
|
| EXPECT_TRUE(params.IsValid());
|
| VLOG(1) << params;
|
| }
|
|
|
| // Get the default audio output parameters and log the result.
|
| -TEST_F(AudioAndroidOutputTest, GetDefaultOutputStreamParameters) {
|
| +TEST_F(AudioAndroidTest, 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) {
|
| +TEST_F(AudioAndroidTest, IsAudioLowLatencySupported) {
|
| AudioManagerAndroid* manager =
|
| static_cast<AudioManagerAndroid*>(audio_manager());
|
| bool low_latency = manager->IsAudioLowLatencySupported();
|
| @@ -568,8 +525,8 @@
|
| }
|
|
|
| // Ensure that a default input stream can be created and closed.
|
| -TEST_P(AudioAndroidInputTest, CreateAndCloseInputStream) {
|
| - AudioParameters params = GetInputStreamParameters();
|
| +TEST_F(AudioAndroidTest, CreateAndCloseInputStream) {
|
| + AudioParameters params = GetDefaultInputStreamParameters();
|
| AudioInputStream* ais = audio_manager()->MakeAudioInputStream(
|
| params, AudioManagerBase::kDefaultDeviceId);
|
| EXPECT_TRUE(ais);
|
| @@ -580,7 +537,7 @@
|
| // TODO(henrika): should we also verify that this API changes the audio mode
|
| // to communication mode, and calls RegisterHeadsetReceiver, the first time
|
| // it is called?
|
| -TEST_F(AudioAndroidOutputTest, CreateAndCloseOutputStream) {
|
| +TEST_F(AudioAndroidTest, CreateAndCloseOutputStream) {
|
| AudioParameters params = GetDefaultOutputStreamParameters();
|
| AudioOutputStream* aos = audio_manager()->MakeAudioOutputStream(
|
| params, std::string(), std::string());
|
| @@ -589,8 +546,8 @@
|
| }
|
|
|
| // Ensure that a default input stream can be opened and closed.
|
| -TEST_P(AudioAndroidInputTest, OpenAndCloseInputStream) {
|
| - AudioParameters params = GetInputStreamParameters();
|
| +TEST_F(AudioAndroidTest, OpenAndCloseInputStream) {
|
| + AudioParameters params = GetDefaultInputStreamParameters();
|
| AudioInputStream* ais = audio_manager()->MakeAudioInputStream(
|
| params, AudioManagerBase::kDefaultDeviceId);
|
| EXPECT_TRUE(ais);
|
| @@ -599,7 +556,7 @@
|
| }
|
|
|
| // Ensure that a default output stream can be opened and closed.
|
| -TEST_F(AudioAndroidOutputTest, OpenAndCloseOutputStream) {
|
| +TEST_F(AudioAndroidTest, OpenAndCloseOutputStream) {
|
| AudioParameters params = GetDefaultOutputStreamParameters();
|
| AudioOutputStream* aos = audio_manager()->MakeAudioOutputStream(
|
| params, std::string(), std::string());
|
| @@ -610,8 +567,8 @@
|
|
|
| // Start input streaming using default input parameters and ensure that the
|
| // callback sequence is sane.
|
| -TEST_P(AudioAndroidInputTest, StartInputStreamCallbacks) {
|
| - AudioParameters params = GetInputStreamParameters();
|
| +TEST_F(AudioAndroidTest, StartInputStreamCallbacks) {
|
| + AudioParameters params = GetDefaultInputStreamParameters();
|
| StartInputStreamCallbacks(params);
|
| }
|
|
|
| @@ -619,21 +576,19 @@
|
| // 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.
|
| -TEST_P(AudioAndroidInputTest, StartInputStreamCallbacksNonDefaultParameters) {
|
| - AudioParameters native_params = GetInputStreamParameters();
|
| +TEST_F(AudioAndroidTest, StartInputStreamCallbacksNonDefaultParameters) {
|
| + AudioParameters native_params = GetDefaultInputStreamParameters();
|
| AudioParameters params(native_params.format(),
|
| native_params.channel_layout(),
|
| - native_params.input_channels(),
|
| native_params.sample_rate(),
|
| native_params.bits_per_sample(),
|
| - native_params.sample_rate() / 100,
|
| - native_params.effects());
|
| + native_params.sample_rate() / 100);
|
| StartInputStreamCallbacks(params);
|
| }
|
|
|
| // Start output streaming using default output parameters and ensure that the
|
| // callback sequence is sane.
|
| -TEST_F(AudioAndroidOutputTest, StartOutputStreamCallbacks) {
|
| +TEST_F(AudioAndroidTest, StartOutputStreamCallbacks) {
|
| AudioParameters params = GetDefaultOutputStreamParameters();
|
| StartOutputStreamCallbacks(params);
|
| }
|
| @@ -643,7 +598,7 @@
|
| // select a 10ms buffer size instead of the default size and to open up the
|
| // device in mono.
|
| // TODO(henrika): possibly add support for more variations.
|
| -TEST_F(AudioAndroidOutputTest, StartOutputStreamCallbacksNonDefaultParameters) {
|
| +TEST_F(AudioAndroidTest, StartOutputStreamCallbacksNonDefaultParameters) {
|
| AudioParameters native_params = GetDefaultOutputStreamParameters();
|
| AudioParameters params(native_params.format(),
|
| CHANNEL_LAYOUT_MONO,
|
| @@ -657,7 +612,7 @@
|
| // the rendered audio sounds OK.
|
| // NOTE: this test requires user interaction and is not designed to run as an
|
| // automatized test on bots.
|
| -TEST_F(AudioAndroidOutputTest, DISABLED_RunOutputStreamWithFileAsSource) {
|
| +TEST_F(AudioAndroidTest, DISABLED_RunOutputStreamWithFileAsSource) {
|
| AudioParameters params = GetDefaultOutputStreamParameters();
|
| VLOG(1) << params;
|
| AudioOutputStream* aos = audio_manager()->MakeAudioOutputStream(
|
| @@ -694,8 +649,8 @@
|
| // local audio file.
|
| // NOTE: this test requires user interaction and is not designed to run as an
|
| // automatized test on bots.
|
| -TEST_P(AudioAndroidInputTest, DISABLED_RunSimplexInputStreamWithFileAsSink) {
|
| - AudioParameters params = GetInputStreamParameters();
|
| +TEST_F(AudioAndroidTest, DISABLED_RunSimplexInputStreamWithFileAsSink) {
|
| + AudioParameters params = GetDefaultInputStreamParameters();
|
| VLOG(1) << params;
|
| AudioInputStream* ais = audio_manager()->MakeAudioInputStream(
|
| params, AudioManagerBase::kDefaultDeviceId);
|
| @@ -721,8 +676,8 @@
|
| // streaming is active as well (reads zeros only).
|
| // NOTE: this test requires user interaction and is not designed to run as an
|
| // automatized test on bots.
|
| -TEST_P(AudioAndroidInputTest, DISABLED_RunDuplexInputStreamWithFileAsSink) {
|
| - AudioParameters in_params = GetInputStreamParameters();
|
| +TEST_F(AudioAndroidTest, DISABLED_RunDuplexInputStreamWithFileAsSink) {
|
| + AudioParameters in_params = GetDefaultInputStreamParameters();
|
| AudioInputStream* ais = audio_manager()->MakeAudioInputStream(
|
| in_params, AudioManagerBase::kDefaultDeviceId);
|
| EXPECT_TRUE(ais);
|
| @@ -765,10 +720,10 @@
|
| // printed out during the test.
|
| // NOTE: this test requires user interaction and is not designed to run as an
|
| // automatized test on bots.
|
| -TEST_P(AudioAndroidInputTest,
|
| +TEST_F(AudioAndroidTest,
|
| DISABLED_RunSymmetricInputAndOutputStreamsInFullDuplex) {
|
| // Get native audio parameters for the input side.
|
| - AudioParameters default_input_params = GetInputStreamParameters();
|
| + AudioParameters default_input_params = GetDefaultInputStreamParameters();
|
|
|
| // Modify the parameters so that both input and output can use the same
|
| // parameters by selecting 10ms as buffer size. This will also ensure that
|
| @@ -811,7 +766,4 @@
|
| ais->Close();
|
| }
|
|
|
| -INSTANTIATE_TEST_CASE_P(AudioAndroidInputTest, AudioAndroidInputTest,
|
| - testing::ValuesIn(RunAudioRecordInputPathTests()));
|
| -
|
| } // namespace media
|
|
|