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

Side by Side Diff: media/filters/audio_renderer_base.cc

Issue 9347029: Decouple 'give me more data' and 'rendered end of stream' audio callbacks. (Closed) Base URL: http://src.chromium.org/svn/trunk/src/
Patch Set: '' Created 8 years, 10 months 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 | Annotate | Revision Log
OLDNEW
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
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
OLDNEW
« content/renderer/media/audio_renderer_impl.h ('K') | « media/filters/audio_renderer_base.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698