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

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

Issue 9717021: Make Callback::Reset() return a copy to support use-cases where Run() ends up modifying |*this|. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: no base:: Created 8 years, 9 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/base/filters.cc ('k') | media/filters/gpu_video_decoder.cc » ('j') | 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_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"
11 #include "base/callback.h" 11 #include "base/callback.h"
12 #include "base/callback_helpers.h"
12 #include "base/logging.h" 13 #include "base/logging.h"
13 #include "media/base/filter_host.h" 14 #include "media/base/filter_host.h"
14 15
15 namespace media { 16 namespace media {
16 17
17 AudioRendererBase::AudioRendererBase() 18 AudioRendererBase::AudioRendererBase()
18 : state_(kUninitialized), 19 : state_(kUninitialized),
19 pending_read_(false), 20 pending_read_(false),
20 received_end_of_stream_(false), 21 received_end_of_stream_(false),
21 rendered_end_of_stream_(false), 22 rendered_end_of_stream_(false),
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
169 } 170 }
170 171
171 switch (state_) { 172 switch (state_) {
172 case kUninitialized: 173 case kUninitialized:
173 NOTREACHED(); 174 NOTREACHED();
174 return; 175 return;
175 case kPaused: 176 case kPaused:
176 if (buffer && !buffer->IsEndOfStream()) 177 if (buffer && !buffer->IsEndOfStream())
177 algorithm_->EnqueueBuffer(buffer); 178 algorithm_->EnqueueBuffer(buffer);
178 DCHECK(!pending_read_); 179 DCHECK(!pending_read_);
179 ResetAndRunCB(&pause_cb_); 180 base::ResetAndReturn(&pause_cb_).Run();
180 return; 181 return;
181 case kSeeking: 182 case kSeeking:
182 if (IsBeforeSeekTime(buffer)) { 183 if (IsBeforeSeekTime(buffer)) {
183 ScheduleRead_Locked(); 184 ScheduleRead_Locked();
184 return; 185 return;
185 } 186 }
186 if (buffer && !buffer->IsEndOfStream()) { 187 if (buffer && !buffer->IsEndOfStream()) {
187 algorithm_->EnqueueBuffer(buffer); 188 algorithm_->EnqueueBuffer(buffer);
188 if (!algorithm_->IsQueueFull()) 189 if (!algorithm_->IsQueueFull())
189 return; 190 return;
190 } 191 }
191 state_ = kPaused; 192 state_ = kPaused;
192 ResetAndRunCB(&seek_cb_, PIPELINE_OK); 193 base::ResetAndReturn(&seek_cb_).Run(PIPELINE_OK);
193 return; 194 return;
194 case kPlaying: 195 case kPlaying:
195 case kUnderflow: 196 case kUnderflow:
196 case kRebuffering: 197 case kRebuffering:
197 if (buffer && !buffer->IsEndOfStream()) 198 if (buffer && !buffer->IsEndOfStream())
198 algorithm_->EnqueueBuffer(buffer); 199 algorithm_->EnqueueBuffer(buffer);
199 return; 200 return;
200 case kStopped: 201 case kStopped:
201 return; 202 return;
202 } 203 }
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
303 base::AutoLock auto_lock(lock_); 304 base::AutoLock auto_lock(lock_);
304 return algorithm_->playback_rate(); 305 return algorithm_->playback_rate();
305 } 306 }
306 307
307 bool AudioRendererBase::IsBeforeSeekTime(const scoped_refptr<Buffer>& buffer) { 308 bool AudioRendererBase::IsBeforeSeekTime(const scoped_refptr<Buffer>& buffer) {
308 return (state_ == kSeeking) && buffer && !buffer->IsEndOfStream() && 309 return (state_ == kSeeking) && buffer && !buffer->IsEndOfStream() &&
309 (buffer->GetTimestamp() + buffer->GetDuration()) < seek_timestamp_; 310 (buffer->GetTimestamp() + buffer->GetDuration()) < seek_timestamp_;
310 } 311 }
311 312
312 } // namespace media 313 } // namespace media
OLDNEW
« no previous file with comments | « media/base/filters.cc ('k') | media/filters/gpu_video_decoder.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698