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

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: . 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
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 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
169 } 169 }
170 170
171 switch (state_) { 171 switch (state_) {
172 case kUninitialized: 172 case kUninitialized:
173 NOTREACHED(); 173 NOTREACHED();
174 return; 174 return;
175 case kPaused: 175 case kPaused:
176 if (buffer && !buffer->IsEndOfStream()) 176 if (buffer && !buffer->IsEndOfStream())
177 algorithm_->EnqueueBuffer(buffer); 177 algorithm_->EnqueueBuffer(buffer);
178 DCHECK(!pending_read_); 178 DCHECK(!pending_read_);
179 ResetAndRunCB(&pause_cb_); 179 pause_cb_.ResetAndRun();
180 return; 180 return;
181 case kSeeking: 181 case kSeeking:
182 if (IsBeforeSeekTime(buffer)) { 182 if (IsBeforeSeekTime(buffer)) {
183 ScheduleRead_Locked(); 183 ScheduleRead_Locked();
184 return; 184 return;
185 } 185 }
186 if (buffer && !buffer->IsEndOfStream()) { 186 if (buffer && !buffer->IsEndOfStream()) {
187 algorithm_->EnqueueBuffer(buffer); 187 algorithm_->EnqueueBuffer(buffer);
188 if (!algorithm_->IsQueueFull()) 188 if (!algorithm_->IsQueueFull())
189 return; 189 return;
190 } 190 }
191 state_ = kPaused; 191 state_ = kPaused;
192 ResetAndRunCB(&seek_cb_, PIPELINE_OK); 192 seek_cb_.ResetAndRun(PIPELINE_OK);
193 return; 193 return;
194 case kPlaying: 194 case kPlaying:
195 case kUnderflow: 195 case kUnderflow:
196 case kRebuffering: 196 case kRebuffering:
197 if (buffer && !buffer->IsEndOfStream()) 197 if (buffer && !buffer->IsEndOfStream())
198 algorithm_->EnqueueBuffer(buffer); 198 algorithm_->EnqueueBuffer(buffer);
199 return; 199 return;
200 case kStopped: 200 case kStopped:
201 return; 201 return;
202 } 202 }
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
303 base::AutoLock auto_lock(lock_); 303 base::AutoLock auto_lock(lock_);
304 return algorithm_->playback_rate(); 304 return algorithm_->playback_rate();
305 } 305 }
306 306
307 bool AudioRendererBase::IsBeforeSeekTime(const scoped_refptr<Buffer>& buffer) { 307 bool AudioRendererBase::IsBeforeSeekTime(const scoped_refptr<Buffer>& buffer) {
308 return (state_ == kSeeking) && buffer && !buffer->IsEndOfStream() && 308 return (state_ == kSeeking) && buffer && !buffer->IsEndOfStream() &&
309 (buffer->GetTimestamp() + buffer->GetDuration()) < seek_timestamp_; 309 (buffer->GetTimestamp() + buffer->GetDuration()) < seek_timestamp_;
310 } 310 }
311 311
312 } // namespace media 312 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698