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

Side by Side Diff: media/audio/fake_audio_input_stream.cc

Issue 344583002: Modifies AudioInputCallback::OnData and use media::AudioBus instead of plain byte vector (Relanding) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Added extra non-pure OnData API 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « media/audio/fake_audio_input_stream.h ('k') | media/audio/mac/audio_input_mac.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/fake_audio_input_stream.h" 5 #include "media/audio/fake_audio_input_stream.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/lazy_instance.h" 8 #include "base/lazy_instance.h"
9 #include "media/audio/audio_manager_base.h" 9 #include "media/audio/audio_manager_base.h"
10 #include "media/base/audio_bus.h"
10 11
11 using base::TimeTicks; 12 using base::TimeTicks;
12 using base::TimeDelta; 13 using base::TimeDelta;
13 14
14 namespace media { 15 namespace media {
15 16
16 namespace { 17 namespace {
17 18
18 // These values are based on experiments for local-to-local 19 // These values are based on experiments for local-to-local
19 // PeerConnection to demonstrate audio/video synchronization. 20 // PeerConnection to demonstrate audio/video synchronization.
(...skipping 21 matching lines...) Expand all
41 AudioManagerBase* manager, 42 AudioManagerBase* manager,
42 const AudioParameters& params) { 43 const AudioParameters& params) {
43 return new FakeAudioInputStream(manager, params); 44 return new FakeAudioInputStream(manager, params);
44 } 45 }
45 46
46 FakeAudioInputStream::FakeAudioInputStream(AudioManagerBase* manager, 47 FakeAudioInputStream::FakeAudioInputStream(AudioManagerBase* manager,
47 const AudioParameters& params) 48 const AudioParameters& params)
48 : audio_manager_(manager), 49 : audio_manager_(manager),
49 callback_(NULL), 50 callback_(NULL),
50 buffer_size_((params.channels() * params.bits_per_sample() * 51 buffer_size_((params.channels() * params.bits_per_sample() *
51 params.frames_per_buffer()) / 8), 52 params.frames_per_buffer()) /
53 8),
52 params_(params), 54 params_(params),
53 thread_("FakeAudioRecordingThread"), 55 thread_("FakeAudioRecordingThread"),
54 callback_interval_(base::TimeDelta::FromMilliseconds( 56 callback_interval_(base::TimeDelta::FromMilliseconds(
55 (params.frames_per_buffer() * 1000) / params.sample_rate())), 57 (params.frames_per_buffer() * 1000) / params.sample_rate())),
56 beep_duration_in_buffers_( 58 beep_duration_in_buffers_(kBeepDurationMilliseconds *
57 kBeepDurationMilliseconds * params.sample_rate() / 59 params.sample_rate() /
58 params.frames_per_buffer() / 1000), 60 params.frames_per_buffer() /
61 1000),
59 beep_generated_in_buffers_(0), 62 beep_generated_in_buffers_(0),
60 beep_period_in_frames_(params.sample_rate() / kBeepFrequency), 63 beep_period_in_frames_(params.sample_rate() / kBeepFrequency),
61 frames_elapsed_(0) { 64 frames_elapsed_(0),
65 audio_bus_(AudioBus::Create(params)) {
62 } 66 }
63 67
64 FakeAudioInputStream::~FakeAudioInputStream() {} 68 FakeAudioInputStream::~FakeAudioInputStream() {}
65 69
66 bool FakeAudioInputStream::Open() { 70 bool FakeAudioInputStream::Open() {
67 buffer_.reset(new uint8[buffer_size_]); 71 buffer_.reset(new uint8[buffer_size_]);
68 memset(buffer_.get(), 0, buffer_size_); 72 memset(buffer_.get(), 0, buffer_size_);
73 audio_bus_->Zero();
69 return true; 74 return true;
70 } 75 }
71 76
72 void FakeAudioInputStream::Start(AudioInputCallback* callback) { 77 void FakeAudioInputStream::Start(AudioInputCallback* callback) {
73 DCHECK(!thread_.IsRunning()); 78 DCHECK(!thread_.IsRunning());
74 DCHECK(!callback_); 79 DCHECK(!callback_);
75 callback_ = callback; 80 callback_ = callback;
76 last_callback_time_ = TimeTicks::Now(); 81 last_callback_time_ = TimeTicks::Now();
77 thread_.Start(); 82 thread_.Start();
78 thread_.message_loop()->PostDelayedTask( 83 thread_.message_loop()->PostDelayedTask(
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
134 memset(buffer_.get() + position, 128, high_bytes); 139 memset(buffer_.get() + position, 128, high_bytes);
135 // Then leave low values in the buffer with |high_bytes|. 140 // Then leave low values in the buffer with |high_bytes|.
136 position += high_bytes * 2; 141 position += high_bytes * 2;
137 } 142 }
138 143
139 ++beep_generated_in_buffers_; 144 ++beep_generated_in_buffers_;
140 if (beep_generated_in_buffers_ >= beep_duration_in_buffers_) 145 if (beep_generated_in_buffers_ >= beep_duration_in_buffers_)
141 beep_generated_in_buffers_ = 0; 146 beep_generated_in_buffers_ = 0;
142 } 147 }
143 148
144 callback_->OnData(this, buffer_.get(), buffer_size_, buffer_size_, 1.0); 149 audio_bus_->FromInterleaved(
150 buffer_.get(), audio_bus_->frames(), params_.bits_per_sample() / 8);
151 callback_->OnData(this, audio_bus_.get(), buffer_size_, 1.0);
145 frames_elapsed_ += params_.frames_per_buffer(); 152 frames_elapsed_ += params_.frames_per_buffer();
146 153
147 thread_.message_loop()->PostDelayedTask( 154 thread_.message_loop()->PostDelayedTask(
148 FROM_HERE, 155 FROM_HERE,
149 base::Bind(&FakeAudioInputStream::DoCallback, base::Unretained(this)), 156 base::Bind(&FakeAudioInputStream::DoCallback, base::Unretained(this)),
150 next_callback_time); 157 next_callback_time);
151 } 158 }
152 159
153 void FakeAudioInputStream::Stop() { 160 void FakeAudioInputStream::Stop() {
154 thread_.Stop(); 161 thread_.Stop();
(...skipping 23 matching lines...) Expand all
178 185
179 // static 186 // static
180 void FakeAudioInputStream::BeepOnce() { 187 void FakeAudioInputStream::BeepOnce() {
181 BeepContext* beep_context = g_beep_context.Pointer(); 188 BeepContext* beep_context = g_beep_context.Pointer();
182 base::AutoLock auto_lock(beep_context->beep_lock); 189 base::AutoLock auto_lock(beep_context->beep_lock);
183 beep_context->beep_once = true; 190 beep_context->beep_once = true;
184 beep_context->automatic = false; 191 beep_context->automatic = false;
185 } 192 }
186 193
187 } // namespace media 194 } // namespace media
OLDNEW
« no previous file with comments | « media/audio/fake_audio_input_stream.h ('k') | media/audio/mac/audio_input_mac.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698