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

Unified Diff: media/filters/audio_renderer_impl.cc

Issue 274443006: Revert of Rename AudioRenderer::Play/Pause() to Start/StopRendering(). (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 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
« no previous file with comments | « media/filters/audio_renderer_impl.h ('k') | media/filters/audio_renderer_impl_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/filters/audio_renderer_impl.cc
diff --git a/media/filters/audio_renderer_impl.cc b/media/filters/audio_renderer_impl.cc
index 48da818bc748cf89376396d292bdf78b6173f31c..e189c6134ceabe703aa4617bfbacdbdfb01fe4c7 100644
--- a/media/filters/audio_renderer_impl.cc
+++ b/media/filters/audio_renderer_impl.cc
@@ -54,7 +54,6 @@
hardware_config_(hardware_config),
now_cb_(base::Bind(&base::TimeTicks::Now)),
state_(kUninitialized),
- rendering_(false),
sink_playing_(false),
pending_read_(false),
received_end_of_stream_(false),
@@ -74,72 +73,65 @@
DCHECK(!algorithm_.get());
}
-void AudioRendererImpl::StartRendering() {
- DVLOG(1) << __FUNCTION__;
- DCHECK(task_runner_->BelongsToCurrentThread());
- DCHECK(!rendering_);
- rendering_ = true;
-
- base::AutoLock auto_lock(lock_);
- // Wait for an eventual call to SetPlaybackRate() to start rendering.
- if (algorithm_->playback_rate() == 0) {
+void AudioRendererImpl::Play() {
+ DCHECK(task_runner_->BelongsToCurrentThread());
+
+ base::AutoLock auto_lock(lock_);
+ DCHECK_EQ(state_, kPaused);
+ ChangeState_Locked(kPlaying);
+ earliest_end_time_ = now_cb_.Run();
+
+ if (algorithm_->playback_rate() != 0)
+ DoPlay_Locked();
+ else
DCHECK(!sink_playing_);
- return;
- }
-
- StartRendering_Locked();
-}
-
-void AudioRendererImpl::StartRendering_Locked() {
- DVLOG(1) << __FUNCTION__;
- DCHECK(task_runner_->BelongsToCurrentThread());
- DCHECK(state_ == kPlaying || state_ == kRebuffering || state_ == kUnderflow)
- << "state_=" << state_;
- DCHECK(!sink_playing_);
- DCHECK_NE(algorithm_->playback_rate(), 0);
+}
+
+void AudioRendererImpl::DoPlay_Locked() {
+ DCHECK(task_runner_->BelongsToCurrentThread());
lock_.AssertAcquired();
-
earliest_end_time_ = now_cb_.Run();
- sink_playing_ = true;
-
- base::AutoUnlock auto_unlock(lock_);
- sink_->Play();
-}
-
-void AudioRendererImpl::StopRendering() {
- DVLOG(1) << __FUNCTION__;
- DCHECK(task_runner_->BelongsToCurrentThread());
- DCHECK(rendering_);
- rendering_ = false;
-
- base::AutoLock auto_lock(lock_);
- // Rendering should have already been stopped with a zero playback rate.
- if (algorithm_->playback_rate() == 0) {
- DCHECK(!sink_playing_);
- return;
- }
-
- StopRendering_Locked();
-}
-
-void AudioRendererImpl::StopRendering_Locked() {
- DCHECK(task_runner_->BelongsToCurrentThread());
- DCHECK(state_ == kPlaying || state_ == kRebuffering || state_ == kUnderflow)
- << "state_=" << state_;
- DCHECK(sink_playing_);
+
+ if ((state_ == kPlaying || state_ == kRebuffering || state_ == kUnderflow) &&
+ !sink_playing_) {
+ {
+ base::AutoUnlock auto_unlock(lock_);
+ sink_->Play();
+ }
+
+ sink_playing_ = true;
+ }
+}
+
+void AudioRendererImpl::Pause() {
+ DCHECK(task_runner_->BelongsToCurrentThread());
+
+ base::AutoLock auto_lock(lock_);
+ DCHECK(state_ == kPlaying || state_ == kUnderflow ||
+ state_ == kRebuffering) << "state_ == " << state_;
+ ChangeState_Locked(kPaused);
+
+ DoPause_Locked();
+}
+
+void AudioRendererImpl::DoPause_Locked() {
+ DCHECK(task_runner_->BelongsToCurrentThread());
lock_.AssertAcquired();
- sink_playing_ = false;
-
- base::AutoUnlock auto_unlock(lock_);
- sink_->Pause();
+ if (sink_playing_) {
+ {
+ base::AutoUnlock auto_unlock(lock_);
+ sink_->Pause();
+ }
+ sink_playing_ = false;
+ }
}
void AudioRendererImpl::Flush(const base::Closure& callback) {
DCHECK(task_runner_->BelongsToCurrentThread());
base::AutoLock auto_lock(lock_);
- DCHECK_EQ(state_, kPlaying);
+ DCHECK_EQ(state_, kPaused);
DCHECK(flush_cb_.is_null());
flush_cb_ = callback;
@@ -149,7 +141,6 @@
return;
}
- ChangeState_Locked(kFlushed);
DoFlush_Locked();
}
@@ -158,7 +149,7 @@
lock_.AssertAcquired();
DCHECK(!pending_read_);
- DCHECK_EQ(state_, kFlushed);
+ DCHECK_EQ(state_, kPaused);
audio_buffer_stream_.Reset(base::Bind(&AudioRendererImpl::ResetDecoderDone,
weak_factory_.GetWeakPtr()));
@@ -171,7 +162,7 @@
if (state_ == kStopped)
return;
- DCHECK_EQ(state_, kFlushed);
+ DCHECK_EQ(state_, kPaused);
DCHECK(!flush_cb_.is_null());
audio_clock_.reset(new AudioClock(audio_parameters_.sample_rate()));
@@ -224,7 +215,7 @@
base::AutoLock auto_lock(lock_);
DCHECK(!sink_playing_);
- DCHECK_EQ(state_, kFlushed);
+ DCHECK_EQ(state_, kPaused);
DCHECK(!pending_read_) << "Pending read must complete before seeking";
DCHECK(preroll_cb_.is_null());
@@ -330,7 +321,7 @@
algorithm_.reset(new AudioRendererAlgorithm());
algorithm_->Initialize(0, audio_parameters_);
- ChangeState_Locked(kFlushed);
+ ChangeState_Locked(kPaused);
HistogramRendererEvent(INITIALIZED);
@@ -374,7 +365,7 @@
void AudioRendererImpl::DecodedAudioReady(
AudioBufferStream::Status status,
const scoped_refptr<AudioBuffer>& buffer) {
- DVLOG(2) << __FUNCTION__ << "(" << status << ")";
+ DVLOG(1) << __FUNCTION__ << "(" << status << ")";
DCHECK(task_runner_->BelongsToCurrentThread());
base::AutoLock auto_lock(lock_);
@@ -398,7 +389,7 @@
DCHECK(buffer.get());
if (state_ == kFlushing) {
- ChangeState_Locked(kFlushed);
+ ChangeState_Locked(kPaused);
DoFlush_Locked();
return;
}
@@ -472,14 +463,14 @@
NOTREACHED();
return false;
- case kFlushed:
+ case kPaused:
DCHECK(!pending_read_);
return false;
case kPrerolling:
if (!buffer->end_of_stream() && !algorithm_->IsQueueFull())
return true;
- ChangeState_Locked(kPlaying);
+ ChangeState_Locked(kPaused);
base::ResetAndReturn(&preroll_cb_).Run(PIPELINE_OK);
return false;
@@ -522,7 +513,7 @@
switch (state_) {
case kUninitialized:
case kInitializing:
- case kFlushed:
+ case kPaused:
case kFlushing:
case kStopped:
return false;
@@ -550,20 +541,12 @@
// Play: current_playback_rate == 0 && playback_rate != 0
// Pause: current_playback_rate != 0 && playback_rate == 0
float current_playback_rate = algorithm_->playback_rate();
+ if (current_playback_rate == 0 && playback_rate != 0)
+ DoPlay_Locked();
+ else if (current_playback_rate != 0 && playback_rate == 0)
+ DoPause_Locked();
+
algorithm_->SetPlaybackRate(playback_rate);
-
- if (!rendering_)
- return;
-
- if (current_playback_rate == 0 && playback_rate != 0) {
- StartRendering_Locked();
- return;
- }
-
- if (current_playback_rate != 0 && playback_rate == 0) {
- StopRendering_Locked();
- return;
- }
}
bool AudioRendererImpl::IsBeforePrerollTime(
@@ -714,8 +697,12 @@
case kInitializing:
NOTREACHED();
return;
+ case kPaused:
+ if (status != PIPELINE_OK)
+ error_cb_.Run(status);
+ return;
case kFlushing:
- ChangeState_Locked(kFlushed);
+ ChangeState_Locked(kPaused);
if (status == PIPELINE_OK) {
DoFlush_Locked();
@@ -728,10 +715,9 @@
case kPrerolling:
// This is a signal for abort if it's not an error.
preroll_aborted_ = !is_decode_error;
- ChangeState_Locked(kPlaying);
+ ChangeState_Locked(kPaused);
base::ResetAndReturn(&preroll_cb_).Run(status);
return;
- case kFlushed:
case kPlaying:
case kUnderflow:
case kRebuffering:
« no previous file with comments | « media/filters/audio_renderer_impl.h ('k') | media/filters/audio_renderer_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698