Chromium Code Reviews| Index: content/browser/renderer_host/media/audio_input_sync_writer.cc |
| diff --git a/content/browser/renderer_host/media/audio_input_sync_writer.cc b/content/browser/renderer_host/media/audio_input_sync_writer.cc |
| index 99b91b7b9f6b8fcf2e19c2df0504f593c16b2d21..0076f35839b51ec0e52f84dfef7b559a5af7bb8b 100644 |
| --- a/content/browser/renderer_host/media/audio_input_sync_writer.cc |
| +++ b/content/browser/renderer_host/media/audio_input_sync_writer.cc |
| @@ -5,23 +5,41 @@ |
| #include "content/browser/renderer_host/media/audio_input_sync_writer.h" |
| #include <algorithm> |
| +#include <algorithm> |
|
no longer working on chromium
2014/06/17 06:59:58
?? remove
henrika (OOO until Aug 14)
2014/06/17 11:39:44
Done.
|
| #include "base/memory/shared_memory.h" |
| #include "content/browser/renderer_host/media/media_stream_manager.h" |
| +using media::AudioBus; |
| + |
| namespace content { |
| -AudioInputSyncWriter::AudioInputSyncWriter( |
| - base::SharedMemory* shared_memory, |
| - int shared_memory_segment_count) |
| +AudioInputSyncWriter::AudioInputSyncWriter(base::SharedMemory* shared_memory, |
| + int shared_memory_segment_count, |
| + const media::AudioParameters& params) |
| : shared_memory_(shared_memory), |
| shared_memory_segment_count_(shared_memory_segment_count), |
| current_segment_id_(0), |
| - creation_time_(base::Time::Now()) { |
| + creation_time_(base::Time::Now()), |
| + audio_bus_memory_size_(AudioBus::CalculateMemorySize(params)) { |
| DCHECK_GT(shared_memory_segment_count, 0); |
| DCHECK_EQ(shared_memory->requested_size() % shared_memory_segment_count, 0u); |
| shared_memory_segment_size_ = |
| shared_memory->requested_size() / shared_memory_segment_count; |
| + DVLOG(1) << "SharedMemory::requested_size: " |
| + << shared_memory->requested_size(); |
| + DVLOG(1) << "shared_memory_segment_count: " << shared_memory_segment_count; |
| + |
| + // Create vector of audio buses by wrapping existing blocks of memory. |
| + uint8* ptr = static_cast<uint8*>(shared_memory_->memory()); |
| + for (int i = 0; i < shared_memory_segment_count; ++i) { |
| + media::AudioInputBuffer* buffer = |
| + reinterpret_cast<media::AudioInputBuffer*>(ptr); |
| + scoped_ptr<media::AudioBus> audio_bus = |
| + media::AudioBus::WrapMemory(params, buffer->audio); |
| + audio_buses_.push_back(audio_bus.release()); |
| + ptr += shared_memory_segment_size_; |
| + } |
| } |
| AudioInputSyncWriter::~AudioInputSyncWriter() {} |
| @@ -31,10 +49,9 @@ void AudioInputSyncWriter::UpdateRecordedBytes(uint32 bytes) { |
| socket_->Send(&bytes, sizeof(bytes)); |
| } |
| -uint32 AudioInputSyncWriter::Write(const void* data, |
| - uint32 size, |
| - double volume, |
| - bool key_pressed) { |
| +void AudioInputSyncWriter::Write(const media::AudioBus* data, |
|
no longer working on chromium
2014/06/17 06:59:58
you don't need to change it if you want to keep th
henrika (OOO until Aug 14)
2014/06/17 11:39:44
Discussed it with Dale and we decided to go for ex
|
| + double volume, |
| + bool key_pressed) { |
| #if !defined(OS_ANDROID) |
| static const base::TimeDelta kLogDelayThreadhold = |
| base::TimeDelta::FromMilliseconds(500); |
| @@ -59,19 +76,22 @@ uint32 AudioInputSyncWriter::Write(const void* data, |
| last_write_time_ = base::Time::Now(); |
| #endif |
| + // Write audio parameters to shared memory. |
| uint8* ptr = static_cast<uint8*>(shared_memory_->memory()); |
| ptr += current_segment_id_ * shared_memory_segment_size_; |
| media::AudioInputBuffer* buffer = |
| reinterpret_cast<media::AudioInputBuffer*>(ptr); |
| buffer->params.volume = volume; |
| - buffer->params.size = size; |
| + buffer->params.size = audio_bus_memory_size_; |
| buffer->params.key_pressed = key_pressed; |
| - memcpy(buffer->audio, data, size); |
| + |
| + // Copy data from the native audio layer into shared memory using pre- |
| + // allocated audio buses. |
| + media::AudioBus* audio_bus = audio_buses_[current_segment_id_]; |
| + data->CopyTo(audio_bus); |
| if (++current_segment_id_ >= shared_memory_segment_count_) |
| current_segment_id_ = 0; |
| - |
| - return size; |
| } |
| void AudioInputSyncWriter::Close() { |