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

Unified Diff: media/filters/audio_renderer_impl.cc

Issue 10669022: Add status parameter to DemuxerStream::ReadCB (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 8 years, 5 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 c8841cdc339793ad06ea545b205fdb65f9dedb8a..1fa0d387ea7f981299c5719d35a850f357ed2931 100644
--- a/media/filters/audio_renderer_impl.cc
+++ b/media/filters/audio_renderer_impl.cc
@@ -72,10 +72,8 @@ void AudioRendererImpl::Pause(const base::Closure& callback) {
state_ = kPaused;
// Pause only when we've completed our pending read.
- if (!pending_read_) {
- pause_cb_.Run();
- pause_cb_.Reset();
- }
+ if (!pending_read_)
+ base::ResetAndReturn(&pause_cb_).Run();
}
if (stopped_)
@@ -234,7 +232,8 @@ AudioRendererImpl::~AudioRendererImpl() {
DCHECK(!algorithm_.get());
}
-void AudioRendererImpl::DecodedAudioReady(scoped_refptr<Buffer> buffer) {
+void AudioRendererImpl::DecodedAudioReady(AudioDecoder::Status status,
+ const scoped_refptr<Buffer>& buffer) {
base::AutoLock auto_lock(lock_);
DCHECK(state_ == kPaused || state_ == kSeeking || state_ == kPlaying ||
state_ == kUnderflow || state_ == kRebuffering || state_ == kStopped);
@@ -242,7 +241,20 @@ void AudioRendererImpl::DecodedAudioReady(scoped_refptr<Buffer> buffer) {
CHECK(pending_read_);
pending_read_ = false;
- if (buffer && buffer->IsEndOfStream()) {
+ if (status == AudioDecoder::kAborted) {
+ HandleAbortedReadOrDecodeError(false);
+ return;
+ }
+
+ if (status == AudioDecoder::kDecodeError) {
+ HandleAbortedReadOrDecodeError(true);
+ return;
+ }
+
+ DCHECK_EQ(status, AudioDecoder::kOk);
+ DCHECK(buffer);
+
+ if (buffer->IsEndOfStream()) {
received_end_of_stream_ = true;
// Transition to kPlaying if we are currently handling an underflow since
@@ -256,7 +268,7 @@ void AudioRendererImpl::DecodedAudioReady(scoped_refptr<Buffer> buffer) {
NOTREACHED();
return;
case kPaused:
- if (buffer && !buffer->IsEndOfStream())
+ if (!buffer->IsEndOfStream())
algorithm_->EnqueueBuffer(buffer);
DCHECK(!pending_read_);
base::ResetAndReturn(&pause_cb_).Run();
@@ -266,7 +278,7 @@ void AudioRendererImpl::DecodedAudioReady(scoped_refptr<Buffer> buffer) {
ScheduleRead_Locked();
return;
}
- if (buffer && !buffer->IsEndOfStream()) {
+ if (!buffer->IsEndOfStream()) {
algorithm_->EnqueueBuffer(buffer);
if (!algorithm_->IsQueueFull())
return;
@@ -277,7 +289,7 @@ void AudioRendererImpl::DecodedAudioReady(scoped_refptr<Buffer> buffer) {
case kPlaying:
case kUnderflow:
case kRebuffering:
- if (buffer && !buffer->IsEndOfStream())
+ if (!buffer->IsEndOfStream())
algorithm_->EnqueueBuffer(buffer);
return;
case kStopped:
@@ -515,4 +527,29 @@ void AudioRendererImpl::DisableUnderflowForTesting() {
underflow_disabled_ = true;
}
+void AudioRendererImpl::HandleAbortedReadOrDecodeError(bool is_decode_error) {
+ PipelineStatus status = is_decode_error ? PIPELINE_ERROR_DECODE : PIPELINE_OK;
+ switch (state_) {
+ case kUninitialized:
+ NOTREACHED();
+ return;
+ case kPaused:
+ if (status != PIPELINE_OK)
+ host_->SetError(status);
+ base::ResetAndReturn(&pause_cb_).Run();
+ return;
+ case kSeeking:
+ state_ = kPaused;
+ base::ResetAndReturn(&seek_cb_).Run(status);
+ return;
+ case kPlaying:
+ case kUnderflow:
+ case kRebuffering:
+ case kStopped:
+ if (status != PIPELINE_OK)
+ host_->SetError(status);
+ return;
+ }
+}
+
} // namespace media
« 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