OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "media/audio/audio_input_device.h" | 5 #include "media/audio/audio_input_device.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
11 #include "base/macros.h" | 11 #include "base/macros.h" |
12 #include "base/memory/scoped_vector.h" | |
13 #include "base/strings/stringprintf.h" | 12 #include "base/strings/stringprintf.h" |
14 #include "base/threading/thread_restrictions.h" | 13 #include "base/threading/thread_restrictions.h" |
15 #include "base/time/time.h" | 14 #include "base/time/time.h" |
16 #include "build/build_config.h" | 15 #include "build/build_config.h" |
17 #include "media/audio/audio_manager_base.h" | 16 #include "media/audio/audio_manager_base.h" |
18 #include "media/base/audio_bus.h" | 17 #include "media/base/audio_bus.h" |
19 | 18 |
20 namespace media { | 19 namespace media { |
21 | 20 |
22 // The number of shared memory buffer segments indicated to browser process | 21 // The number of shared memory buffer segments indicated to browser process |
(...skipping 17 matching lines...) Expand all Loading... |
40 | 39 |
41 void MapSharedMemory() override; | 40 void MapSharedMemory() override; |
42 | 41 |
43 // Called whenever we receive notifications about pending data. | 42 // Called whenever we receive notifications about pending data. |
44 void Process(uint32_t pending_data) override; | 43 void Process(uint32_t pending_data) override; |
45 | 44 |
46 private: | 45 private: |
47 const double bytes_per_ms_; | 46 const double bytes_per_ms_; |
48 int current_segment_id_; | 47 int current_segment_id_; |
49 uint32_t last_buffer_id_; | 48 uint32_t last_buffer_id_; |
50 ScopedVector<media::AudioBus> audio_buses_; | 49 std::vector<std::unique_ptr<media::AudioBus>> audio_buses_; |
51 CaptureCallback* capture_callback_; | 50 CaptureCallback* capture_callback_; |
52 | 51 |
53 DISALLOW_COPY_AND_ASSIGN(AudioThreadCallback); | 52 DISALLOW_COPY_AND_ASSIGN(AudioThreadCallback); |
54 }; | 53 }; |
55 | 54 |
56 AudioInputDevice::AudioInputDevice( | 55 AudioInputDevice::AudioInputDevice( |
57 std::unique_ptr<AudioInputIPC> ipc, | 56 std::unique_ptr<AudioInputIPC> ipc, |
58 const scoped_refptr<base::SingleThreadTaskRunner>& io_task_runner) | 57 const scoped_refptr<base::SingleThreadTaskRunner>& io_task_runner) |
59 : ScopedTaskRunnerObserver(io_task_runner), | 58 : ScopedTaskRunnerObserver(io_task_runner), |
60 callback_(NULL), | 59 callback_(NULL), |
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
290 } | 289 } |
291 | 290 |
292 void AudioInputDevice::AudioThreadCallback::MapSharedMemory() { | 291 void AudioInputDevice::AudioThreadCallback::MapSharedMemory() { |
293 shared_memory_.Map(memory_length_); | 292 shared_memory_.Map(memory_length_); |
294 | 293 |
295 // Create vector of audio buses by wrapping existing blocks of memory. | 294 // Create vector of audio buses by wrapping existing blocks of memory. |
296 uint8_t* ptr = static_cast<uint8_t*>(shared_memory_.memory()); | 295 uint8_t* ptr = static_cast<uint8_t*>(shared_memory_.memory()); |
297 for (int i = 0; i < total_segments_; ++i) { | 296 for (int i = 0; i < total_segments_; ++i) { |
298 media::AudioInputBuffer* buffer = | 297 media::AudioInputBuffer* buffer = |
299 reinterpret_cast<media::AudioInputBuffer*>(ptr); | 298 reinterpret_cast<media::AudioInputBuffer*>(ptr); |
300 std::unique_ptr<media::AudioBus> audio_bus = | 299 audio_buses_.push_back( |
301 media::AudioBus::WrapMemory(audio_parameters_, buffer->audio); | 300 media::AudioBus::WrapMemory(audio_parameters_, buffer->audio)); |
302 audio_buses_.push_back(std::move(audio_bus)); | |
303 ptr += segment_length_; | 301 ptr += segment_length_; |
304 } | 302 } |
305 | 303 |
306 // Indicate that browser side capture initialization has succeeded and IPC | 304 // Indicate that browser side capture initialization has succeeded and IPC |
307 // channel initialized. This effectively completes the | 305 // channel initialized. This effectively completes the |
308 // AudioCapturerSource::Start()' phase as far as the caller of that function | 306 // AudioCapturerSource::Start()' phase as far as the caller of that function |
309 // is concerned. | 307 // is concerned. |
310 capture_callback_->OnCaptureStarted(); | 308 capture_callback_->OnCaptureStarted(); |
311 } | 309 } |
312 | 310 |
(...skipping 21 matching lines...) Expand all Loading... |
334 if (current_segment_id_ != static_cast<int>(pending_data)) { | 332 if (current_segment_id_ != static_cast<int>(pending_data)) { |
335 std::string message = base::StringPrintf( | 333 std::string message = base::StringPrintf( |
336 "Segment id not matching. Remote = %u. Local = %d.", | 334 "Segment id not matching. Remote = %u. Local = %d.", |
337 pending_data, current_segment_id_); | 335 pending_data, current_segment_id_); |
338 LOG(ERROR) << message; | 336 LOG(ERROR) << message; |
339 capture_callback_->OnCaptureError(message); | 337 capture_callback_->OnCaptureError(message); |
340 } | 338 } |
341 last_buffer_id_ = buffer->params.id; | 339 last_buffer_id_ = buffer->params.id; |
342 | 340 |
343 // Use pre-allocated audio bus wrapping existing block of shared memory. | 341 // Use pre-allocated audio bus wrapping existing block of shared memory. |
344 media::AudioBus* audio_bus = audio_buses_[current_segment_id_]; | 342 media::AudioBus* audio_bus = audio_buses_[current_segment_id_].get(); |
345 | 343 |
346 // Deliver captured data to the client in floating point format and update | 344 // Deliver captured data to the client in floating point format and update |
347 // the audio delay measurement. | 345 // the audio delay measurement. |
348 capture_callback_->Capture( | 346 capture_callback_->Capture( |
349 audio_bus, | 347 audio_bus, |
350 buffer->params.hardware_delay_bytes / bytes_per_ms_, // Delay in ms | 348 buffer->params.hardware_delay_bytes / bytes_per_ms_, // Delay in ms |
351 buffer->params.volume, buffer->params.key_pressed); | 349 buffer->params.volume, buffer->params.key_pressed); |
352 | 350 |
353 if (++current_segment_id_ >= total_segments_) | 351 if (++current_segment_id_ >= total_segments_) |
354 current_segment_id_ = 0; | 352 current_segment_id_ = 0; |
355 } | 353 } |
356 | 354 |
357 } // namespace media | 355 } // namespace media |
OLD | NEW |