| Index: media/audio/cras/cras_unified.cc
|
| diff --git a/media/audio/cras/cras_unified.cc b/media/audio/cras/cras_unified.cc
|
| index ccaf11c604eb06ffba91a91b5f3f9d97d6e52917..929854497c3987671e9c1f0a17147a7771055db8 100644
|
| --- a/media/audio/cras/cras_unified.cc
|
| +++ b/media/audio/cras/cras_unified.cc
|
| @@ -4,6 +4,8 @@
|
|
|
| #include "media/audio/cras/cras_unified.h"
|
|
|
| +#include <algorithm>
|
| +
|
| #include "base/logging.h"
|
| #include "base/macros.h"
|
| #include "media/audio/cras/audio_manager_cras.h"
|
| @@ -61,7 +63,7 @@ CrasUnifiedStream::CrasUnifiedStream(const AudioParameters& params,
|
| source_callback_(NULL),
|
| stream_direction_(CRAS_STREAM_OUTPUT) {
|
| DCHECK(manager_);
|
| - DCHECK(params_.channels() > 0);
|
| + DCHECK_GT(params_.channels(), 0);
|
|
|
| output_bus_ = AudioBus::Create(params);
|
| }
|
| @@ -233,23 +235,6 @@ void CrasUnifiedStream::GetVolume(double* volume) {
|
| *volume = volume_;
|
| }
|
|
|
| -uint32_t CrasUnifiedStream::GetBytesLatency(const struct timespec& latency_ts) {
|
| - uint32_t latency_usec;
|
| -
|
| - // Treat negative latency (if we are too slow to render) as 0.
|
| - if (latency_ts.tv_sec < 0 || latency_ts.tv_nsec < 0) {
|
| - latency_usec = 0;
|
| - } else {
|
| - latency_usec = (latency_ts.tv_sec * base::Time::kMicrosecondsPerSecond) +
|
| - latency_ts.tv_nsec / base::Time::kNanosecondsPerMicrosecond;
|
| - }
|
| -
|
| - double frames_latency =
|
| - latency_usec * params_.sample_rate() / base::Time::kMicrosecondsPerSecond;
|
| -
|
| - return static_cast<unsigned int>(frames_latency * bytes_per_frame_);
|
| -}
|
| -
|
| // Static callback asking for samples.
|
| int CrasUnifiedStream::UnifiedCallback(cras_client* client,
|
| cras_stream_id_t stream_id,
|
| @@ -305,8 +290,12 @@ uint32_t CrasUnifiedStream::WriteAudio(size_t frames,
|
| timespec latency_ts = {0, 0};
|
| cras_client_calc_playback_latency(sample_ts, &latency_ts);
|
|
|
| + // Treat negative latency (if we are too slow to render) as 0.
|
| + const base::TimeDelta delay =
|
| + std::max(base::TimeDelta::FromTimeSpec(latency_ts), base::TimeDelta());
|
| +
|
| int frames_filled = source_callback_->OnMoreData(
|
| - output_bus_.get(), GetBytesLatency(latency_ts), 0);
|
| + delay, base::TimeTicks::Now(), 0, output_bus_.get());
|
|
|
| // Note: If this ever changes to output raw float the data must be clipped and
|
| // sanitized since it may come from an untrusted source such as NaCl.
|
|
|