| Index: webrtc/modules/audio_device/fine_audio_buffer_unittest.cc
|
| diff --git a/webrtc/modules/audio_device/android/fine_audio_buffer_unittest.cc b/webrtc/modules/audio_device/fine_audio_buffer_unittest.cc
|
| similarity index 59%
|
| rename from webrtc/modules/audio_device/android/fine_audio_buffer_unittest.cc
|
| rename to webrtc/modules/audio_device/fine_audio_buffer_unittest.cc
|
| index 4cff883129f18ec8c2735cca9292929891315bd1..6666364c9e38180d9ce95e1d9972a4e3e4738cc6 100644
|
| --- a/webrtc/modules/audio_device/android/fine_audio_buffer_unittest.cc
|
| +++ b/webrtc/modules/audio_device/fine_audio_buffer_unittest.cc
|
| @@ -8,7 +8,7 @@
|
| * be found in the AUTHORS file in the root of the source tree.
|
| */
|
|
|
| -#include "webrtc/modules/audio_device/android/fine_audio_buffer.h"
|
| +#include "webrtc/modules/audio_device/fine_audio_buffer.h"
|
|
|
| #include <limits.h>
|
| #include <memory>
|
| @@ -19,6 +19,7 @@
|
| #include "webrtc/modules/audio_device/mock_audio_device_buffer.h"
|
|
|
| using ::testing::_;
|
| +using ::testing::AtLeast;
|
| using ::testing::InSequence;
|
| using ::testing::Return;
|
|
|
| @@ -40,10 +41,10 @@ bool VerifyBuffer(const int8_t* buffer, int buffer_number, int size) {
|
| return true;
|
| }
|
|
|
| -// This function replaces GetPlayoutData when it's called (which is done
|
| -// implicitly when calling GetBufferData). It writes the sequence
|
| -// 0,1,..SCHAR_MAX-1,0,1,... to the buffer. Note that this is likely a buffer of
|
| -// different size than the one VerifyBuffer verifies.
|
| +// This function replaces the real AudioDeviceBuffer::GetPlayoutData when it's
|
| +// called (which is done implicitly when calling GetBufferData). It writes the
|
| +// sequence 0,1,..SCHAR_MAX-1,0,1,... to the buffer. Note that this is likely a
|
| +// buffer of different size than the one VerifyBuffer verifies.
|
| // |iteration| is the number of calls made to UpdateBuffer prior to this call.
|
| // |samples_per_10_ms| is the number of samples that should be written to the
|
| // buffer (|arg0|).
|
| @@ -57,10 +58,33 @@ ACTION_P2(UpdateBuffer, iteration, samples_per_10_ms) {
|
| return samples_per_10_ms;
|
| }
|
|
|
| +// Writes a periodic ramp pattern to the supplied |buffer|. See UpdateBuffer()
|
| +// for details.
|
| +void UpdateInputBuffer(int8_t* buffer, int iteration, int size) {
|
| + int start_value = (iteration * size) % SCHAR_MAX;
|
| + for (int i = 0; i < size; ++i) {
|
| + buffer[i] = (i + start_value) % SCHAR_MAX;
|
| + }
|
| +}
|
| +
|
| +// Action macro which verifies that the recorded 10ms chunk of audio data
|
| +// (in |arg0|) contains the correct reference values even if they have been
|
| +// supplied using a buffer size that is smaller or larger than 10ms.
|
| +// See VerifyBuffer() for details.
|
| +ACTION_P2(VerifyInputBuffer, iteration, samples_per_10_ms) {
|
| + const int8_t* buffer = static_cast<const int8_t*>(arg0);
|
| + int bytes_per_10_ms = samples_per_10_ms * static_cast<int>(sizeof(int16_t));
|
| + int start_value = (iteration * bytes_per_10_ms) % SCHAR_MAX;
|
| + for (int i = 0; i < bytes_per_10_ms; ++i) {
|
| + EXPECT_EQ(buffer[i], (i + start_value) % SCHAR_MAX);
|
| + }
|
| + return 0;
|
| +}
|
| +
|
| void RunFineBufferTest(int sample_rate, int frame_size_in_samples) {
|
| const int kSamplesPer10Ms = sample_rate * 10 / 1000;
|
| - const int kFrameSizeBytes = frame_size_in_samples *
|
| - static_cast<int>(sizeof(int16_t));
|
| + const int kFrameSizeBytes =
|
| + frame_size_in_samples * static_cast<int>(sizeof(int16_t));
|
| const int kNumberOfFrames = 5;
|
| // Ceiling of integer division: 1 + ((x - 1) / y)
|
| const int kNumberOfUpdateBufferCalls =
|
| @@ -77,15 +101,32 @@ void RunFineBufferTest(int sample_rate, int frame_size_in_samples) {
|
| .RetiresOnSaturation();
|
| }
|
| }
|
| + {
|
| + InSequence s;
|
| + for (int j = 0; j < kNumberOfUpdateBufferCalls - 1; ++j) {
|
| + EXPECT_CALL(audio_device_buffer, SetRecordedBuffer(_, kSamplesPer10Ms))
|
| + .WillOnce(VerifyInputBuffer(j, kSamplesPer10Ms))
|
| + .RetiresOnSaturation();
|
| + }
|
| + }
|
| + EXPECT_CALL(audio_device_buffer, SetVQEData(_, _, _))
|
| + .Times(kNumberOfUpdateBufferCalls - 1);
|
| + EXPECT_CALL(audio_device_buffer, DeliverRecordedData())
|
| + .Times(kNumberOfUpdateBufferCalls - 1)
|
| + .WillRepeatedly(Return(kSamplesPer10Ms));
|
| +
|
| FineAudioBuffer fine_buffer(&audio_device_buffer, kFrameSizeBytes,
|
| sample_rate);
|
|
|
| rtc::scoped_ptr<int8_t[]> out_buffer;
|
| - out_buffer.reset(
|
| - new int8_t[fine_buffer.RequiredBufferSizeBytes()]);
|
| + out_buffer.reset(new int8_t[fine_buffer.RequiredPlayoutBufferSizeBytes()]);
|
| + rtc::scoped_ptr<int8_t[]> in_buffer;
|
| + in_buffer.reset(new int8_t[kFrameSizeBytes]);
|
| for (int i = 0; i < kNumberOfFrames; ++i) {
|
| - fine_buffer.GetBufferData(out_buffer.get());
|
| + fine_buffer.GetPlayoutData(out_buffer.get());
|
| EXPECT_TRUE(VerifyBuffer(out_buffer.get(), i, kFrameSizeBytes));
|
| + UpdateInputBuffer(in_buffer.get(), i, kFrameSizeBytes);
|
| + fine_buffer.DeliverRecordedData(in_buffer.get(), kFrameSizeBytes, 0, 0);
|
| }
|
| }
|
|
|
|
|