| Index: trunk/src/media/audio/audio_input_device.cc
|
| ===================================================================
|
| --- trunk/src/media/audio/audio_input_device.cc (revision 277811)
|
| +++ trunk/src/media/audio/audio_input_device.cc (working copy)
|
| @@ -6,7 +6,6 @@
|
|
|
| #include "base/basictypes.h"
|
| #include "base/bind.h"
|
| -#include "base/memory/scoped_vector.h"
|
| #include "base/threading/thread_restrictions.h"
|
| #include "base/time/time.h"
|
| #include "media/audio/audio_manager_base.h"
|
| @@ -40,9 +39,8 @@
|
|
|
| private:
|
| int current_segment_id_;
|
| - ScopedVector<media::AudioBus> audio_buses_;
|
| CaptureCallback* capture_callback_;
|
| -
|
| + scoped_ptr<AudioBus> audio_bus_;
|
| DISALLOW_COPY_AND_ASSIGN(AudioThreadCallback);
|
| };
|
|
|
| @@ -275,6 +273,7 @@
|
| total_segments),
|
| current_segment_id_(0),
|
| capture_callback_(capture_callback) {
|
| + audio_bus_ = AudioBus::Create(audio_parameters_);
|
| }
|
|
|
| AudioInputDevice::AudioThreadCallback::~AudioThreadCallback() {
|
| @@ -282,17 +281,6 @@
|
|
|
| void AudioInputDevice::AudioThreadCallback::MapSharedMemory() {
|
| shared_memory_.Map(memory_length_);
|
| -
|
| - // Create vector of audio buses by wrapping existing blocks of memory.
|
| - uint8* ptr = static_cast<uint8*>(shared_memory_.memory());
|
| - for (int i = 0; i < total_segments_; ++i) {
|
| - media::AudioInputBuffer* buffer =
|
| - reinterpret_cast<media::AudioInputBuffer*>(ptr);
|
| - scoped_ptr<media::AudioBus> audio_bus =
|
| - media::AudioBus::WrapMemory(audio_parameters_, buffer->audio);
|
| - audio_buses_.push_back(audio_bus.release());
|
| - ptr += segment_length_;
|
| - }
|
| }
|
|
|
| void AudioInputDevice::AudioThreadCallback::Process(int pending_data) {
|
| @@ -309,17 +297,21 @@
|
| double volume = buffer->params.volume;
|
| bool key_pressed = buffer->params.key_pressed;
|
|
|
| - // Use pre-allocated audio bus wrapping existing block of shared memory.
|
| - media::AudioBus* audio_bus = audio_buses_[current_segment_id_];
|
| -
|
| - // Deliver captured data to the client in floating point format
|
| - // and update the audio-delay measurement.
|
| int audio_delay_milliseconds = pending_data / bytes_per_ms_;
|
| - capture_callback_->Capture(
|
| - audio_bus, audio_delay_milliseconds, volume, key_pressed);
|
| + int16* memory = reinterpret_cast<int16*>(&buffer->audio[0]);
|
| + const int bytes_per_sample = sizeof(memory[0]);
|
|
|
| if (++current_segment_id_ >= total_segments_)
|
| current_segment_id_ = 0;
|
| +
|
| + // Deinterleave each channel and convert to 32-bit floating-point
|
| + // with nominal range -1.0 -> +1.0.
|
| + audio_bus_->FromInterleaved(memory, audio_bus_->frames(), bytes_per_sample);
|
| +
|
| + // Deliver captured data to the client in floating point format
|
| + // and update the audio-delay measurement.
|
| + capture_callback_->Capture(
|
| + audio_bus_.get(), audio_delay_milliseconds, volume, key_pressed);
|
| }
|
|
|
| } // namespace media
|
|
|