| Index: media/audio/audio_manager_unittest.cc
|
| diff --git a/media/audio/audio_manager_unittest.cc b/media/audio/audio_manager_unittest.cc
|
| index 904ee12fd9847dffdbf3527025e3a8dd1cb09a87..8e45f5e20da13fbe0fb921723daabf6b5665c644 100644
|
| --- a/media/audio/audio_manager_unittest.cc
|
| +++ b/media/audio/audio_manager_unittest.cc
|
| @@ -26,6 +26,7 @@
|
| #include "media/audio/fake_audio_log_factory.h"
|
| #include "media/audio/fake_audio_manager.h"
|
| #include "media/audio/test_audio_thread.h"
|
| +#include "media/base/limits.h"
|
| #include "testing/gmock/include/gmock/gmock.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| @@ -33,6 +34,11 @@
|
| #include "media/audio/alsa/audio_manager_alsa.h"
|
| #endif // defined(USE_ALSA)
|
|
|
| +#if defined(OS_MACOSX)
|
| +#include "media/audio/mac/audio_manager_mac.h"
|
| +#include "media/base/mac/audio_latency_mac.h"
|
| +#endif
|
| +
|
| #if defined(OS_WIN)
|
| #include "base/win/scoped_com_initializer.h"
|
| #include "media/audio/win/audio_manager_win.h"
|
| @@ -677,4 +683,97 @@ TEST_F(AudioManagerTest, AudioDebugRecording) {
|
| audio_manager_->DisableOutputDebugRecording();
|
| }
|
|
|
| +#if defined(OS_MACOSX) || defined(USE_CRAS)
|
| +class TestAudioSourceCallback : public AudioOutputStream::AudioSourceCallback {
|
| + public:
|
| + TestAudioSourceCallback(int expected_frames_per_buffer,
|
| + base::WaitableEvent* event)
|
| + : expected_frames_per_buffer_(expected_frames_per_buffer),
|
| + event_(event){};
|
| + ~TestAudioSourceCallback() override{};
|
| +
|
| + int OnMoreData(base::TimeDelta,
|
| + base::TimeTicks,
|
| + int,
|
| + AudioBus* dest) override {
|
| + EXPECT_EQ(dest->frames(), expected_frames_per_buffer_);
|
| + event_->Signal();
|
| + return 0;
|
| + }
|
| +
|
| + void OnError() override { FAIL(); }
|
| +
|
| + private:
|
| + DISALLOW_COPY_AND_ASSIGN(TestAudioSourceCallback);
|
| +
|
| + const int expected_frames_per_buffer_;
|
| + base::WaitableEvent* event_;
|
| +};
|
| +
|
| +// Test that we can create an AudioOutputStream with kMinAudioBufferSize and
|
| +// kMaxAudioBufferSize and that the callback AudioBus is the expected size.
|
| +TEST_F(AudioManagerTest, CheckMinMaxAudioBufferSizeCallbacks) {
|
| + ABORT_AUDIO_TEST_IF_NOT(OutputDevicesAvailable());
|
| +
|
| +#if defined(OS_MACOSX)
|
| + CreateAudioManagerForTesting<AudioManagerMac>();
|
| +#elif defined(USE_CRAS)
|
| + CreateAudioManagerForTesting<AudioManagerCras>();
|
| +#endif
|
| +
|
| + DCHECK(audio_manager_);
|
| +
|
| + AudioParameters default_params;
|
| + GetDefaultOutputStreamParameters(&default_params);
|
| + ASSERT_LT(default_params.frames_per_buffer(),
|
| + media::limits::kMaxAudioBufferSize);
|
| +
|
| +#if defined(OS_MACOSX)
|
| + // On OSX the preferred output buffer size is higher than the minimum
|
| + // but users may request the minimum size explicitly.
|
| + ASSERT_GT(default_params.frames_per_buffer(),
|
| + GetMinAudioBufferSizeMacOS(media::limits::kMinAudioBufferSize,
|
| + default_params.sample_rate()));
|
| +#elif defined(USE_CRAS)
|
| + // On CRAS the preferred output buffer size varies per board and may be as low
|
| + // as the minimum for some boards.
|
| + ASSERT_GE(default_params.frames_per_buffer(),
|
| + media::limits::kMinAudioBufferSize);
|
| +#else
|
| + NOTREACHED();
|
| +#endif
|
| +
|
| + AudioOutputStream* stream;
|
| + base::WaitableEvent event(base::WaitableEvent::ResetPolicy::AUTOMATIC,
|
| + base::WaitableEvent::InitialState::NOT_SIGNALED);
|
| +
|
| + // Create an output stream with the minimum buffer size parameters and ensure
|
| + // that no errors are returned.
|
| + AudioParameters min_params = default_params;
|
| + min_params.set_frames_per_buffer(media::limits::kMinAudioBufferSize);
|
| + stream = audio_manager_->MakeAudioOutputStreamProxy(min_params, "");
|
| + ASSERT_TRUE(stream);
|
| + EXPECT_TRUE(stream->Open());
|
| + event.Reset();
|
| + TestAudioSourceCallback min_source(min_params.frames_per_buffer(), &event);
|
| + stream->Start(&min_source);
|
| + event.Wait();
|
| + stream->Stop();
|
| + stream->Close();
|
| +
|
| + // Verify the same for the maximum buffer size.
|
| + AudioParameters max_params = default_params;
|
| + max_params.set_frames_per_buffer(media::limits::kMaxAudioBufferSize);
|
| + stream = audio_manager_->MakeAudioOutputStreamProxy(max_params, "");
|
| + ASSERT_TRUE(stream);
|
| + EXPECT_TRUE(stream->Open());
|
| + event.Reset();
|
| + TestAudioSourceCallback max_source(max_params.frames_per_buffer(), &event);
|
| + stream->Start(&max_source);
|
| + event.Wait();
|
| + stream->Stop();
|
| + stream->Close();
|
| +}
|
| +#endif
|
| +
|
| } // namespace media
|
|
|