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 06df7f09aebff1710f76834257fb12b5e212263d..a356d9c25deb6f7e174a9177365c45a4c06c0f53 100644 |
--- a/media/audio/android/audio_android_unittest.cc |
+++ b/media/audio/android/audio_android_unittest.cc |
@@ -148,10 +148,9 @@ std::ostream& operator<<(std::ostream& os, const AudioParameters& params) { |
// Gmock implementation of AudioInputStream::AudioInputCallback. |
class MockAudioInputCallback : public AudioInputStream::AudioInputCallback { |
public: |
- MOCK_METHOD5(OnData, |
+ MOCK_METHOD4(OnData, |
void(AudioInputStream* stream, |
- const uint8* src, |
- uint32 size, |
+ const AudioBus* src, |
uint32 hardware_delay_bytes, |
double volume)); |
MOCK_METHOD1(OnError, void(AudioInputStream* stream)); |
@@ -264,14 +263,19 @@ class FileAudioSink : public AudioInputStream::AudioInputCallback { |
// AudioInputStream::AudioInputCallback implementation. |
virtual void OnData(AudioInputStream* stream, |
- const uint8* src, |
- uint32 size, |
+ const AudioBus* src, |
uint32 hardware_delay_bytes, |
double volume) OVERRIDE { |
+ const int num_samples = src->frames() * src->channels(); |
+ scoped_ptr<int16> interleaved(new int16[num_samples]); |
+ const int bytes_per_sample = sizeof(*interleaved); |
+ src->ToInterleaved(src->frames(), bytes_per_sample, interleaved.get()); |
+ |
// Store data data in a temporary buffer to avoid making blocking |
// fwrite() calls in the audio callback. The complete buffer will be |
// written to file in the destructor. |
- if (!buffer_->Append(src, size)) |
+ const int size = bytes_per_sample * num_samples; |
+ if (!buffer_->Append((const uint8*)interleaved.get(), size)) |
event_->Signal(); |
} |
@@ -307,13 +311,19 @@ class FullDuplexAudioSinkSource |
// AudioInputStream::AudioInputCallback implementation |
virtual void OnData(AudioInputStream* stream, |
- const uint8* src, |
- uint32 size, |
+ const AudioBus* src, |
uint32 hardware_delay_bytes, |
double volume) OVERRIDE { |
const base::TimeTicks now_time = base::TimeTicks::Now(); |
const int diff = (now_time - previous_time_).InMilliseconds(); |
+ EXPECT_EQ(params_.bits_per_sample(), 16); |
+ const int num_samples = src->frames() * src->channels(); |
+ scoped_ptr<int16> interleaved(new int16[num_samples]); |
+ const int bytes_per_sample = sizeof(*interleaved); |
+ src->ToInterleaved(src->frames(), bytes_per_sample, interleaved.get()); |
+ const int size = bytes_per_sample * num_samples; |
+ |
base::AutoLock lock(lock_); |
if (diff > 1000) { |
started_ = true; |
@@ -334,7 +344,7 @@ class FullDuplexAudioSinkSource |
// Append new data to the FIFO and extend the size if the max capacity |
// was exceeded. Flush the FIFO when extended just in case. |
- if (!fifo_->Append(src, size)) { |
+ if (!fifo_->Append((const uint8*)interleaved.get(), size)) { |
fifo_->set_forward_capacity(2 * fifo_->forward_capacity()); |
fifo_->Clear(); |
} |
@@ -640,14 +650,10 @@ class AudioAndroidInputTest : public AudioAndroidOutputTest, |
int count = 0; |
MockAudioInputCallback sink; |
- EXPECT_CALL(sink, |
- OnData(audio_input_stream_, |
- NotNull(), |
- params. |
- GetBytesPerBuffer(), _, _)) |
+ EXPECT_CALL(sink, OnData(audio_input_stream_, NotNull(), _, _)) |
.Times(AtLeast(num_callbacks)) |
.WillRepeatedly( |
- CheckCountAndPostQuitTask(&count, num_callbacks, loop())); |
+ CheckCountAndPostQuitTask(&count, num_callbacks, loop())); |
EXPECT_CALL(sink, OnError(audio_input_stream_)).Times(0); |
OpenAndStartAudioInputStreamOnAudioThread(&sink); |