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

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 259 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
OLDNEW
« content/renderer/media/audio_renderer_impl_unittest.cc ('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