| OLD | NEW |
| 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 "base/macros.h" | 8 #include "base/macros.h" |
| 9 #include "base/time/time.h" |
| 9 #include "media/audio/cras/audio_manager_cras.h" | 10 #include "media/audio/cras/audio_manager_cras.h" |
| 10 | 11 |
| 11 namespace media { | 12 namespace media { |
| 12 | 13 |
| 13 // Overview of operation: | 14 // Overview of operation: |
| 14 // 1) An object of CrasUnifiedStream is created by the AudioManager | 15 // 1) An object of CrasUnifiedStream is created by the AudioManager |
| 15 // factory: audio_man->MakeAudioStream(). | 16 // factory: audio_man->MakeAudioStream(). |
| 16 // 2) Next some thread will call Open(), at that point a client is created and | 17 // 2) Next some thread will call Open(), at that point a client is created and |
| 17 // configured for the correct format and sample rate. | 18 // configured for the correct format and sample rate. |
| 18 // 3) Then Start(source) is called and a stream is added to the CRAS client | 19 // 3) Then Start(source) is called and a stream is added to the CRAS client |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 54 : client_(NULL), | 55 : client_(NULL), |
| 55 stream_id_(0), | 56 stream_id_(0), |
| 56 params_(params), | 57 params_(params), |
| 57 bytes_per_frame_(0), | 58 bytes_per_frame_(0), |
| 58 is_playing_(false), | 59 is_playing_(false), |
| 59 volume_(1.0), | 60 volume_(1.0), |
| 60 manager_(manager), | 61 manager_(manager), |
| 61 source_callback_(NULL), | 62 source_callback_(NULL), |
| 62 stream_direction_(CRAS_STREAM_OUTPUT) { | 63 stream_direction_(CRAS_STREAM_OUTPUT) { |
| 63 DCHECK(manager_); | 64 DCHECK(manager_); |
| 64 DCHECK(params_.channels() > 0); | 65 DCHECK_GT(params_.channels(), 0); |
| 65 | 66 |
| 66 output_bus_ = AudioBus::Create(params); | 67 output_bus_ = AudioBus::Create(params); |
| 67 } | 68 } |
| 68 | 69 |
| 69 CrasUnifiedStream::~CrasUnifiedStream() { | 70 CrasUnifiedStream::~CrasUnifiedStream() { |
| 70 DCHECK(!is_playing_); | 71 DCHECK(!is_playing_); |
| 71 } | 72 } |
| 72 | 73 |
| 73 bool CrasUnifiedStream::Open() { | 74 bool CrasUnifiedStream::Open() { |
| 74 // Sanity check input values. | 75 // Sanity check input values. |
| (...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 299 uint32_t CrasUnifiedStream::WriteAudio(size_t frames, | 300 uint32_t CrasUnifiedStream::WriteAudio(size_t frames, |
| 300 uint8_t* buffer, | 301 uint8_t* buffer, |
| 301 const timespec* sample_ts) { | 302 const timespec* sample_ts) { |
| 302 DCHECK_EQ(frames, static_cast<size_t>(output_bus_->frames())); | 303 DCHECK_EQ(frames, static_cast<size_t>(output_bus_->frames())); |
| 303 | 304 |
| 304 // Determine latency and pass that on to the source. | 305 // Determine latency and pass that on to the source. |
| 305 timespec latency_ts = {0, 0}; | 306 timespec latency_ts = {0, 0}; |
| 306 cras_client_calc_playback_latency(sample_ts, &latency_ts); | 307 cras_client_calc_playback_latency(sample_ts, &latency_ts); |
| 307 | 308 |
| 308 int frames_filled = source_callback_->OnMoreData( | 309 int frames_filled = source_callback_->OnMoreData( |
| 309 output_bus_.get(), GetBytesLatency(latency_ts), 0); | 310 output_bus_.get(), GetBytesLatency(latency_ts), base::TimeDelta(), 0); |
| 310 | 311 |
| 311 // Note: If this ever changes to output raw float the data must be clipped and | 312 // 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. | 313 // sanitized since it may come from an untrusted source such as NaCl. |
| 313 output_bus_->ToInterleaved( | 314 output_bus_->ToInterleaved( |
| 314 frames_filled, bytes_per_frame_ / params_.channels(), buffer); | 315 frames_filled, bytes_per_frame_ / params_.channels(), buffer); |
| 315 | 316 |
| 316 return frames_filled; | 317 return frames_filled; |
| 317 } | 318 } |
| 318 | 319 |
| 319 void CrasUnifiedStream::NotifyStreamError(int err) { | 320 void CrasUnifiedStream::NotifyStreamError(int err) { |
| 320 // This will remove the stream from the client. | 321 // This will remove the stream from the client. |
| 321 if (source_callback_) | 322 if (source_callback_) |
| 322 source_callback_->OnError(this); | 323 source_callback_->OnError(this); |
| 323 } | 324 } |
| 324 | 325 |
| 325 } // namespace media | 326 } // namespace media |
| OLD | NEW |