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

Unified Diff: media/filters/audio_renderer_impl.cc

Issue 126793002: Add Stop() to AudioDecoder. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: remove blank lines Created 6 years, 11 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 side-by-side diff with in-line comments
Download patch
Index: media/filters/audio_renderer_impl.cc
diff --git a/media/filters/audio_renderer_impl.cc b/media/filters/audio_renderer_impl.cc
index f9b314d2ec2536ff43b18fd15ae2db222f61a4a0..00157a6b82b7b46fd8f857e4b9da3813da5befee 100644
--- a/media/filters/audio_renderer_impl.cc
+++ b/media/filters/audio_renderer_impl.cc
@@ -182,6 +182,29 @@ void AudioRendererImpl::ResetDecoderDone() {
base::ResetAndReturn(&flush_cb_).Run();
}
+void AudioRendererImpl::StopDecoder() {
+ DCHECK(task_runner_->BelongsToCurrentThread());
+ decoder_->Stop(BindToCurrentLoop(
+ base::Bind(&AudioRendererImpl::StopDecoderDone, weak_this_)));
+}
+
+void AudioRendererImpl::StopDecoderDone() {
+ base::AutoLock auto_lock(lock_);
DaleCurtis 2014/01/08 00:30:54 Previous method doesn't run this under lock. It m
rileya (GONE FROM CHROMIUM) 2014/01/08 21:05:50 Which previous method do you mean?
DaleCurtis 2014/01/08 21:51:45 See line 236 in Stop() below. callback.Run() occur
rileya (GONE FROM CHROMIUM) 2014/01/08 22:02:55 Ahh, gotcha. Looks like ResetDecoderDone also call
DaleCurtis 2014/01/08 23:56:14 sgtm
+ if (state_ == kStopped)
+ return;
+
+ DCHECK(!stop_cb_.is_null());
+
+ ChangeState_Locked(kStopped);
+ algorithm_.reset(NULL);
DaleCurtis 2014/01/08 00:30:54 drop NULL.
+ init_cb_.Reset();
+ underflow_cb_.Reset();
+ time_cb_.Reset();
+ flush_cb_.Reset();
xhwang 2014/01/08 01:33:37 Wrap 199-203 in a helper function so it can be sha
rileya (GONE FROM CHROMIUM) 2014/01/08 21:05:50 StopDecoderDone was already basically this, so per
+
+ base::ResetAndReturn(&stop_cb_).Run();
+}
+
void AudioRendererImpl::Stop(const base::Closure& callback) {
DCHECK(task_runner_->BelongsToCurrentThread());
DCHECK(!callback.is_null());
@@ -194,6 +217,12 @@ void AudioRendererImpl::Stop(const base::Closure& callback) {
sink_ = NULL;
}
+ if (decoder_) {
+ stop_cb_ = callback;
+ StopDecoder();
DaleCurtis 2014/01/08 00:30:54 You can probably drop the StopDecoder() method in
rileya (GONE FROM CHROMIUM) 2014/01/08 21:05:50 Done.
+ return;
+ }
+
{
DaleCurtis 2014/01/08 00:30:54 Just call StopDecoderDone here?
rileya (GONE FROM CHROMIUM) 2014/01/08 21:05:50 Makes sense, done.
base::AutoLock auto_lock(lock_);
ChangeState_Locked(kStopped);

Powered by Google App Engine
This is Rietveld 408576698