| OLD | NEW |
| 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/filters/audio_renderer_base.h" | 5 #include "media/filters/audio_renderer_base.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 265 audio_time_cb_.Run(new_current_time, last_fill_buffer_time); | 265 audio_time_cb_.Run(new_current_time, last_fill_buffer_time); |
| 266 } | 266 } |
| 267 | 267 |
| 268 if (!underflow_cb.is_null()) | 268 if (!underflow_cb.is_null()) |
| 269 underflow_cb.Run(); | 269 underflow_cb.Run(); |
| 270 | 270 |
| 271 return dest_written; | 271 return dest_written; |
| 272 } | 272 } |
| 273 | 273 |
| 274 void AudioRendererBase::SignalEndOfStream() { | 274 void AudioRendererBase::SignalEndOfStream() { |
| 275 DCHECK(recieved_end_of_stream_); | 275 // Lock, there is potential race condition on |
| 276 if (!rendered_end_of_stream_) { | 276 // |recieved_end_of_stream_| and |rendered_end_of_stream_|. |
| 277 base::AutoLock auto_lock(lock_); |
| 278 if (recieved_end_of_stream_ && !rendered_end_of_stream_) { |
| 277 rendered_end_of_stream_ = true; | 279 rendered_end_of_stream_ = true; |
| 278 host()->NotifyEnded(); | 280 host()->NotifyEnded(); |
| 279 } | 281 } |
| 280 } | 282 } |
| 281 | 283 |
| 282 void AudioRendererBase::ScheduleRead_Locked() { | 284 void AudioRendererBase::ScheduleRead_Locked() { |
| 283 lock_.AssertAcquired(); | 285 lock_.AssertAcquired(); |
| 284 if (pending_read_ || state_ == kPaused) | 286 if (pending_read_ || state_ == kPaused) |
| 285 return; | 287 return; |
| 286 pending_read_ = true; | 288 pending_read_ = true; |
| 287 decoder_->Read(read_cb_); | 289 decoder_->Read(read_cb_); |
| 288 } | 290 } |
| 289 | 291 |
| 290 void AudioRendererBase::SetPlaybackRate(float playback_rate) { | 292 void AudioRendererBase::SetPlaybackRate(float playback_rate) { |
| 291 base::AutoLock auto_lock(lock_); | 293 base::AutoLock auto_lock(lock_); |
| 292 algorithm_->SetPlaybackRate(playback_rate); | 294 algorithm_->SetPlaybackRate(playback_rate); |
| 293 } | 295 } |
| 294 | 296 |
| 295 float AudioRendererBase::GetPlaybackRate() { | 297 float AudioRendererBase::GetPlaybackRate() { |
| 296 base::AutoLock auto_lock(lock_); | 298 base::AutoLock auto_lock(lock_); |
| 297 return algorithm_->playback_rate(); | 299 return algorithm_->playback_rate(); |
| 298 } | 300 } |
| 299 | 301 |
| 300 bool AudioRendererBase::IsBeforeSeekTime(const scoped_refptr<Buffer>& buffer) { | 302 bool AudioRendererBase::IsBeforeSeekTime(const scoped_refptr<Buffer>& buffer) { |
| 301 return (state_ == kSeeking) && buffer && !buffer->IsEndOfStream() && | 303 return (state_ == kSeeking) && buffer && !buffer->IsEndOfStream() && |
| 302 (buffer->GetTimestamp() + buffer->GetDuration()) < seek_timestamp_; | 304 (buffer->GetTimestamp() + buffer->GetDuration()) < seek_timestamp_; |
| 303 } | 305 } |
| 304 | 306 |
| 305 } // namespace media | 307 } // namespace media |
| OLD | NEW |