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

Side by Side Diff: media/audio/cras/cras_unified.cc

Issue 1534273002: Switch to standard integer types in media/. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: more Created 5 years 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
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/cras/cras_unified.h" 5 #include "media/audio/cras/cras_unified.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "media/audio/cras/audio_manager_cras.h" 8 #include "media/audio/cras/audio_manager_cras.h"
9 9
10 namespace media { 10 namespace media {
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
151 params_.sample_rate(), 151 params_.sample_rate(),
152 params_.channels()); 152 params_.channels());
153 if (!audio_format) { 153 if (!audio_format) {
154 LOG(WARNING) << "Error setting up audio parameters."; 154 LOG(WARNING) << "Error setting up audio parameters.";
155 callback->OnError(this); 155 callback->OnError(this);
156 return; 156 return;
157 } 157 }
158 158
159 // Initialize channel layout to all -1 to indicate that none of 159 // Initialize channel layout to all -1 to indicate that none of
160 // the channels is set in the layout. 160 // the channels is set in the layout.
161 int8 layout[CRAS_CH_MAX] = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }; 161 int8_t layout[CRAS_CH_MAX] = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1};
162 162
163 // Converts to CRAS defined channels. ChannelOrder will return -1 163 // Converts to CRAS defined channels. ChannelOrder will return -1
164 // for channels that does not present in params_.channel_layout(). 164 // for channels that does not present in params_.channel_layout().
165 for (size_t i = 0; i < arraysize(kChannelMap); ++i) 165 for (size_t i = 0; i < arraysize(kChannelMap); ++i)
166 layout[kChannelMap[i]] = ChannelOrder(params_.channel_layout(), 166 layout[kChannelMap[i]] = ChannelOrder(params_.channel_layout(),
167 static_cast<Channels>(i)); 167 static_cast<Channels>(i));
168 168
169 if (cras_audio_format_set_channel_layout(audio_format, layout)) { 169 if (cras_audio_format_set_channel_layout(audio_format, layout)) {
170 LOG(WARNING) << "Error setting channel layout."; 170 LOG(WARNING) << "Error setting channel layout.";
171 callback->OnError(this); 171 callback->OnError(this);
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
225 if (!client_) 225 if (!client_)
226 return; 226 return;
227 volume_ = static_cast<float>(volume); 227 volume_ = static_cast<float>(volume);
228 cras_client_set_stream_volume(client_, stream_id_, volume_); 228 cras_client_set_stream_volume(client_, stream_id_, volume_);
229 } 229 }
230 230
231 void CrasUnifiedStream::GetVolume(double* volume) { 231 void CrasUnifiedStream::GetVolume(double* volume) {
232 *volume = volume_; 232 *volume = volume_;
233 } 233 }
234 234
235 uint32 CrasUnifiedStream::GetBytesLatency( 235 uint32_t CrasUnifiedStream::GetBytesLatency(const struct timespec& latency_ts) {
236 const struct timespec& latency_ts) { 236 uint32_t latency_usec;
237 uint32 latency_usec;
238 237
239 // Treat negative latency (if we are too slow to render) as 0. 238 // Treat negative latency (if we are too slow to render) as 0.
240 if (latency_ts.tv_sec < 0 || latency_ts.tv_nsec < 0) { 239 if (latency_ts.tv_sec < 0 || latency_ts.tv_nsec < 0) {
241 latency_usec = 0; 240 latency_usec = 0;
242 } else { 241 } else {
243 latency_usec = (latency_ts.tv_sec * base::Time::kMicrosecondsPerSecond) + 242 latency_usec = (latency_ts.tv_sec * base::Time::kMicrosecondsPerSecond) +
244 latency_ts.tv_nsec / base::Time::kNanosecondsPerMicrosecond; 243 latency_ts.tv_nsec / base::Time::kNanosecondsPerMicrosecond;
245 } 244 }
246 245
247 double frames_latency = 246 double frames_latency =
248 latency_usec * params_.sample_rate() / base::Time::kMicrosecondsPerSecond; 247 latency_usec * params_.sample_rate() / base::Time::kMicrosecondsPerSecond;
249 248
250 return static_cast<unsigned int>(frames_latency * bytes_per_frame_); 249 return static_cast<unsigned int>(frames_latency * bytes_per_frame_);
251 } 250 }
252 251
253 // Static callback asking for samples. 252 // Static callback asking for samples.
254 int CrasUnifiedStream::UnifiedCallback(cras_client* client, 253 int CrasUnifiedStream::UnifiedCallback(cras_client* client,
255 cras_stream_id_t stream_id, 254 cras_stream_id_t stream_id,
256 uint8* input_samples, 255 uint8_t* input_samples,
257 uint8* output_samples, 256 uint8_t* output_samples,
258 unsigned int frames, 257 unsigned int frames,
259 const timespec* input_ts, 258 const timespec* input_ts,
260 const timespec* output_ts, 259 const timespec* output_ts,
261 void* arg) { 260 void* arg) {
262 CrasUnifiedStream* me = static_cast<CrasUnifiedStream*>(arg); 261 CrasUnifiedStream* me = static_cast<CrasUnifiedStream*>(arg);
263 return me->DispatchCallback(frames, 262 return me->DispatchCallback(frames,
264 input_samples, 263 input_samples,
265 output_samples, 264 output_samples,
266 input_ts, 265 input_ts,
267 output_ts); 266 output_ts);
268 } 267 }
269 268
270 // Static callback for stream errors. 269 // Static callback for stream errors.
271 int CrasUnifiedStream::StreamError(cras_client* client, 270 int CrasUnifiedStream::StreamError(cras_client* client,
272 cras_stream_id_t stream_id, 271 cras_stream_id_t stream_id,
273 int err, 272 int err,
274 void* arg) { 273 void* arg) {
275 CrasUnifiedStream* me = static_cast<CrasUnifiedStream*>(arg); 274 CrasUnifiedStream* me = static_cast<CrasUnifiedStream*>(arg);
276 me->NotifyStreamError(err); 275 me->NotifyStreamError(err);
277 return 0; 276 return 0;
278 } 277 }
279 278
280 // Calls the appropriate rendering function for this type of stream. 279 // Calls the appropriate rendering function for this type of stream.
281 uint32 CrasUnifiedStream::DispatchCallback(size_t frames, 280 uint32_t CrasUnifiedStream::DispatchCallback(size_t frames,
282 uint8* input_samples, 281 uint8_t* input_samples,
283 uint8* output_samples, 282 uint8_t* output_samples,
284 const timespec* input_ts, 283 const timespec* input_ts,
285 const timespec* output_ts) { 284 const timespec* output_ts) {
286 switch (stream_direction_) { 285 switch (stream_direction_) {
287 case CRAS_STREAM_OUTPUT: 286 case CRAS_STREAM_OUTPUT:
288 return WriteAudio(frames, output_samples, output_ts); 287 return WriteAudio(frames, output_samples, output_ts);
289 case CRAS_STREAM_INPUT: 288 case CRAS_STREAM_INPUT:
290 NOTREACHED() << "CrasUnifiedStream doesn't support input streams."; 289 NOTREACHED() << "CrasUnifiedStream doesn't support input streams.";
291 return 0; 290 return 0;
292 default: 291 default:
293 break; 292 break;
294 } 293 }
295 294
296 return 0; 295 return 0;
297 } 296 }
298 297
299 uint32 CrasUnifiedStream::WriteAudio(size_t frames, 298 uint32_t CrasUnifiedStream::WriteAudio(size_t frames,
300 uint8* buffer, 299 uint8_t* buffer,
301 const timespec* sample_ts) { 300 const timespec* sample_ts) {
302 DCHECK_EQ(frames, static_cast<size_t>(output_bus_->frames())); 301 DCHECK_EQ(frames, static_cast<size_t>(output_bus_->frames()));
303 302
304 // Determine latency and pass that on to the source. 303 // Determine latency and pass that on to the source.
305 timespec latency_ts = {0, 0}; 304 timespec latency_ts = {0, 0};
306 cras_client_calc_playback_latency(sample_ts, &latency_ts); 305 cras_client_calc_playback_latency(sample_ts, &latency_ts);
307 306
308 int frames_filled = source_callback_->OnMoreData( 307 int frames_filled = source_callback_->OnMoreData(
309 output_bus_.get(), GetBytesLatency(latency_ts), 0); 308 output_bus_.get(), GetBytesLatency(latency_ts), 0);
310 309
311 // Note: If this ever changes to output raw float the data must be clipped and 310 // Note: If this ever changes to output raw float the data must be clipped and
312 // sanitized since it may come from an untrusted source such as NaCl. 311 // sanitized since it may come from an untrusted source such as NaCl.
313 output_bus_->ToInterleaved( 312 output_bus_->ToInterleaved(
314 frames_filled, bytes_per_frame_ / params_.channels(), buffer); 313 frames_filled, bytes_per_frame_ / params_.channels(), buffer);
315 314
316 return frames_filled; 315 return frames_filled;
317 } 316 }
318 317
319 void CrasUnifiedStream::NotifyStreamError(int err) { 318 void CrasUnifiedStream::NotifyStreamError(int err) {
320 // This will remove the stream from the client. 319 // This will remove the stream from the client.
321 if (source_callback_) 320 if (source_callback_)
322 source_callback_->OnError(this); 321 source_callback_->OnError(this);
323 } 322 }
324 323
325 } // namespace media 324 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698