Index: media/audio/pulse/pulse_output.cc |
diff --git a/media/audio/pulse/pulse_output.cc b/media/audio/pulse/pulse_output.cc |
index 98f1f58391cd3faf615da999affe4d29a56876c8..6af4520a89ad590db4e6dae95aa512dfd0815097 100644 |
--- a/media/audio/pulse/pulse_output.cc |
+++ b/media/audio/pulse/pulse_output.cc |
@@ -310,10 +310,14 @@ bool PulseAudioOutputStream::BufferPacketFromSource() { |
// to happen in practice though. |
scoped_refptr<media::DataBuffer> packet = |
new media::DataBuffer(packet_size_); |
- size_t packet_size = RunDataCallback(packet->GetWritableData(), |
- packet->GetBufferSize(), |
- AudioBuffersState(buffer_delay, |
- hardware_delay)); |
+ int frames_filled = RunDataCallback( |
+ audio_bus_.get(), AudioBuffersState(buffer_delay, hardware_delay)); |
+ size_t packet_size = frames_filled * bytes_per_frame_; |
+ |
+ DCHECK_LE(packet_size, packet_size_); |
+ audio_bus_->ToInterleaved( |
+ frames_filled, bytes_per_frame_ / channel_count_, |
+ packet->GetWritableData()); |
if (packet_size == 0) |
return false; |
@@ -421,10 +425,10 @@ void PulseAudioOutputStream::GetVolume(double* volume) { |
*volume = volume_; |
} |
-uint32 PulseAudioOutputStream::RunDataCallback( |
- uint8* dest, uint32 max_size, AudioBuffersState buffers_state) { |
+int PulseAudioOutputStream::RunDataCallback( |
+ AudioBus* audio_bus, AudioBuffersState buffers_state) { |
if (source_callback_) |
- return source_callback_->OnMoreData(dest, max_size, buffers_state); |
+ return source_callback_->OnMoreData(audio_bus, buffers_state); |
return 0; |
} |