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

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

Issue 10857066: Don't use an unretained read callback when calling AudioDecoder::Read(). (Closed) Base URL: svn://chrome-svn/chrome/trunk/src
Patch Set: Created 8 years, 4 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
« no previous file with comments | « media/filters/audio_renderer_impl.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_impl.h" 5 #include "media/filters/audio_renderer_impl.h"
6 6
7 #include <math.h> 7 #include <math.h>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/callback.h" 10 #include "base/callback.h"
11 #include "base/callback_helpers.h" 11 #include "base/callback_helpers.h"
12 #include "base/logging.h" 12 #include "base/logging.h"
13 #include "media/audio/audio_util.h" 13 #include "media/audio/audio_util.h"
14 14
15 namespace media { 15 namespace media {
16 16
17 AudioRendererImpl::AudioRendererImpl(media::AudioRendererSink* sink) 17 AudioRendererImpl::AudioRendererImpl(media::AudioRendererSink* sink)
18 : state_(kUninitialized), 18 : state_(kUninitialized),
19 pending_read_(false), 19 pending_read_(false),
20 received_end_of_stream_(false), 20 received_end_of_stream_(false),
21 rendered_end_of_stream_(false), 21 rendered_end_of_stream_(false),
22 audio_time_buffered_(kNoTimestamp()), 22 audio_time_buffered_(kNoTimestamp()),
23 current_time_(kNoTimestamp()), 23 current_time_(kNoTimestamp()),
24 bytes_per_frame_(0), 24 bytes_per_frame_(0),
25 bytes_per_second_(0), 25 bytes_per_second_(0),
26 stopped_(false), 26 stopped_(false),
27 sink_(sink), 27 sink_(sink),
28 is_initialized_(false), 28 is_initialized_(false),
29 underflow_disabled_(false), 29 underflow_disabled_(false) {
30 read_cb_(base::Bind(&AudioRendererImpl::DecodedAudioReady,
31 base::Unretained(this))) {
Ami GONE FROM CHROMIUM 2012/08/17 23:46:03 Unretained(this) for *speed*.
scherkus (not reviewing) 2012/08/17 23:51:54 I don't know why I did this. Must have been smokin
32 } 30 }
33 31
34 void AudioRendererImpl::Play(const base::Closure& callback) { 32 void AudioRendererImpl::Play(const base::Closure& callback) {
35 { 33 {
36 base::AutoLock auto_lock(lock_); 34 base::AutoLock auto_lock(lock_);
37 DCHECK_EQ(kPaused, state_); 35 DCHECK_EQ(kPaused, state_);
38 state_ = kPlaying; 36 state_ = kPlaying;
39 callback.Run(); 37 callback.Run();
40 } 38 }
41 39
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after
285 case kStopped: 283 case kStopped:
286 return; 284 return;
287 } 285 }
288 } 286 }
289 287
290 void AudioRendererImpl::ScheduleRead_Locked() { 288 void AudioRendererImpl::ScheduleRead_Locked() {
291 lock_.AssertAcquired(); 289 lock_.AssertAcquired();
292 if (pending_read_ || state_ == kPaused) 290 if (pending_read_ || state_ == kPaused)
293 return; 291 return;
294 pending_read_ = true; 292 pending_read_ = true;
295 decoder_->Read(read_cb_); 293 decoder_->Read(base::Bind(&AudioRendererImpl::DecodedAudioReady, this));
296 } 294 }
297 295
298 void AudioRendererImpl::SetPlaybackRate(float playback_rate) { 296 void AudioRendererImpl::SetPlaybackRate(float playback_rate) {
299 DCHECK_LE(0.0f, playback_rate); 297 DCHECK_LE(0.0f, playback_rate);
300 298
301 if (!stopped_) { 299 if (!stopped_) {
302 // We have two cases here: 300 // We have two cases here:
303 // Play: GetPlaybackRate() == 0.0 && playback_rate != 0.0 301 // Play: GetPlaybackRate() == 0.0 && playback_rate != 0.0
304 // Pause: GetPlaybackRate() != 0.0 && playback_rate == 0.0 302 // Pause: GetPlaybackRate() != 0.0 && playback_rate == 0.0
305 if (GetPlaybackRate() == 0.0f && playback_rate != 0.0f) { 303 if (GetPlaybackRate() == 0.0f && playback_rate != 0.0f) {
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
531 case kUnderflow: 529 case kUnderflow:
532 case kRebuffering: 530 case kRebuffering:
533 case kStopped: 531 case kStopped:
534 if (status != PIPELINE_OK) 532 if (status != PIPELINE_OK)
535 error_cb_.Run(status); 533 error_cb_.Run(status);
536 return; 534 return;
537 } 535 }
538 } 536 }
539 537
540 } // namespace media 538 } // namespace media
OLDNEW
« no previous file with comments | « media/filters/audio_renderer_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698