Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3)

Unified Diff: media/audio/audio_input_device.cc

Issue 314713002: Modifies AudioInputCallback::OnData and use media::AudioBus instead of plain byte vector (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed fake input stream as well Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: media/audio/audio_input_device.cc
diff --git a/media/audio/audio_input_device.cc b/media/audio/audio_input_device.cc
index f57284c187f7af16f1b0167a404dca3e4bc9c4c1..bf140cbad4e83b42d152a8556be0d72fc59922d6 100644
--- a/media/audio/audio_input_device.cc
+++ b/media/audio/audio_input_device.cc
@@ -6,6 +6,7 @@
#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"
@@ -39,8 +40,9 @@ class AudioInputDevice::AudioThreadCallback
private:
int current_segment_id_;
+ ScopedVector<media::AudioBus> audio_buses_;
CaptureCallback* capture_callback_;
- scoped_ptr<AudioBus> audio_bus_;
+
DISALLOW_COPY_AND_ASSIGN(AudioThreadCallback);
};
@@ -273,7 +275,6 @@ AudioInputDevice::AudioThreadCallback::AudioThreadCallback(
total_segments),
current_segment_id_(0),
capture_callback_(capture_callback) {
- audio_bus_ = AudioBus::Create(audio_parameters_);
}
AudioInputDevice::AudioThreadCallback::~AudioThreadCallback() {
@@ -281,6 +282,17 @@ AudioInputDevice::AudioThreadCallback::~AudioThreadCallback() {
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) {
@@ -297,21 +309,17 @@ void AudioInputDevice::AudioThreadCallback::Process(int pending_data) {
double volume = buffer->params.volume;
bool key_pressed = buffer->params.key_pressed;
- int audio_delay_milliseconds = pending_data / bytes_per_ms_;
- 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);
+ // 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_.get(), audio_delay_milliseconds, volume, key_pressed);
+ audio_bus, audio_delay_milliseconds, volume, key_pressed);
+
+ if (++current_segment_id_ >= total_segments_)
+ current_segment_id_ = 0;
}
} // namespace media

Powered by Google App Engine
This is Rietveld 408576698