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

Side by Side Diff: media/base/audio_bus.cc

Issue 10909185: Add Mac OS X synchronized audio I/O back-end (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 3 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
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/base/audio_bus.h" 5 #include "media/base/audio_bus.h"
6 6
7 #include <limits> 7 #include <limits>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "media/audio/audio_parameters.h" 10 #include "media/audio/audio_parameters.h"
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 AudioBus::AudioBus(int frames, const std::vector<float*>& channel_data) 130 AudioBus::AudioBus(int frames, const std::vector<float*>& channel_data)
131 : channel_data_(channel_data), 131 : channel_data_(channel_data),
132 frames_(frames) { 132 frames_(frames) {
133 ValidateConfig(channel_data_.size(), frames_); 133 ValidateConfig(channel_data_.size(), frames_);
134 134
135 // Sanity check wrapped vector for alignment and channel count. 135 // Sanity check wrapped vector for alignment and channel count.
136 for (size_t i = 0; i < channel_data_.size(); ++i) 136 for (size_t i = 0; i < channel_data_.size(); ++i)
137 DCHECK(IsAligned(channel_data_[i])); 137 DCHECK(IsAligned(channel_data_[i]));
138 } 138 }
139 139
140 AudioBus::AudioBus(int channels)
141 : channel_data_(channels),
142 frames_(0) {
143 for (size_t i = 0; i < channel_data_.size(); ++i)
144 channel_data_[i] = NULL;
145 }
146
140 AudioBus::~AudioBus() {} 147 AudioBus::~AudioBus() {}
141 148
142 scoped_ptr<AudioBus> AudioBus::Create(int channels, int frames) { 149 scoped_ptr<AudioBus> AudioBus::Create(int channels, int frames) {
143 return scoped_ptr<AudioBus>(new AudioBus(channels, frames)); 150 return scoped_ptr<AudioBus>(new AudioBus(channels, frames));
144 } 151 }
145 152
146 scoped_ptr<AudioBus> AudioBus::Create(const AudioParameters& params) { 153 scoped_ptr<AudioBus> AudioBus::Create(const AudioParameters& params) {
147 return scoped_ptr<AudioBus>(new AudioBus( 154 return scoped_ptr<AudioBus>(new AudioBus(
148 params.channels(), params.frames_per_buffer())); 155 params.channels(), params.frames_per_buffer()));
149 } 156 }
150 157
158 scoped_ptr<AudioBus> AudioBus::Create(int channels) {
159 return scoped_ptr<AudioBus>(new AudioBus(channels));
160 }
161
151 scoped_ptr<AudioBus> AudioBus::WrapVector( 162 scoped_ptr<AudioBus> AudioBus::WrapVector(
152 int frames, const std::vector<float*>& channel_data) { 163 int frames, const std::vector<float*>& channel_data) {
153 return scoped_ptr<AudioBus>(new AudioBus(frames, channel_data)); 164 return scoped_ptr<AudioBus>(new AudioBus(frames, channel_data));
154 } 165 }
155 166
156 scoped_ptr<AudioBus> AudioBus::WrapMemory(int channels, int frames, 167 scoped_ptr<AudioBus> AudioBus::WrapMemory(int channels, int frames,
157 void* data) { 168 void* data) {
158 // |data| must be aligned by AudioBus::kChannelAlignment. 169 // |data| must be aligned by AudioBus::kChannelAlignment.
159 CHECK(IsAligned(data)); 170 CHECK(IsAligned(data));
160 return scoped_ptr<AudioBus>(new AudioBus( 171 return scoped_ptr<AudioBus>(new AudioBus(
161 channels, frames, static_cast<float*>(data))); 172 channels, frames, static_cast<float*>(data)));
162 } 173 }
163 174
164 scoped_ptr<AudioBus> AudioBus::WrapMemory(const AudioParameters& params, 175 scoped_ptr<AudioBus> AudioBus::WrapMemory(const AudioParameters& params,
165 void* data) { 176 void* data) {
166 // |data| must be aligned by AudioBus::kChannelAlignment. 177 // |data| must be aligned by AudioBus::kChannelAlignment.
167 CHECK(IsAligned(data)); 178 CHECK(IsAligned(data));
168 return scoped_ptr<AudioBus>(new AudioBus( 179 return scoped_ptr<AudioBus>(new AudioBus(
169 params.channels(), params.frames_per_buffer(), 180 params.channels(), params.frames_per_buffer(),
170 static_cast<float*>(data))); 181 static_cast<float*>(data)));
171 } 182 }
172 183
184 void AudioBus::SetChannelData(int channel, float* data) {
DaleCurtis 2012/09/17 21:17:36 This can lead to some pretty confusing situations:
Chris Rogers 2012/09/17 22:00:42 We can discuss offline...
185 CHECK_GE(channel, 0);
186 CHECK_LT(static_cast<size_t>(channel), channel_data_.size());
187 DCHECK(IsAligned(data));
188 channel_data_[channel] = data;
189 }
190
173 void AudioBus::ZeroFramesPartial(int start_frame, int frames) { 191 void AudioBus::ZeroFramesPartial(int start_frame, int frames) {
174 CheckOverflow(start_frame, frames, frames_); 192 CheckOverflow(start_frame, frames, frames_);
175 193
176 if (frames <= 0) 194 if (frames <= 0)
177 return; 195 return;
178 196
179 for (size_t i = 0; i < channel_data_.size(); ++i) { 197 for (size_t i = 0; i < channel_data_.size(); ++i) {
180 memset(channel_data_[i] + start_frame, 0, 198 memset(channel_data_[i] + start_frame, 0,
181 frames * sizeof(*channel_data_[i])); 199 frames * sizeof(*channel_data_[i]));
182 } 200 }
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
265 DCHECK_EQ(channels(), dest->channels()); 283 DCHECK_EQ(channels(), dest->channels());
266 DCHECK_EQ(frames(), dest->frames()); 284 DCHECK_EQ(frames(), dest->frames());
267 285
268 // Since we don't know if the other AudioBus is wrapped or not (and we don't 286 // Since we don't know if the other AudioBus is wrapped or not (and we don't
269 // want to care), just copy using the public channel() accessors. 287 // want to care), just copy using the public channel() accessors.
270 for (int i = 0; i < channels(); ++i) 288 for (int i = 0; i < channels(); ++i)
271 memcpy(dest->channel(i), channel(i), sizeof(*channel(i)) * frames()); 289 memcpy(dest->channel(i), channel(i), sizeof(*channel(i)) * frames());
272 } 290 }
273 291
274 } // namespace media 292 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698