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