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

Unified Diff: media/filters/ffmpeg_audio_decoder.cc

Issue 113611: Handle end of stream for media... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 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
Index: media/filters/ffmpeg_audio_decoder.cc
===================================================================
--- media/filters/ffmpeg_audio_decoder.cc (revision 17376)
+++ media/filters/ffmpeg_audio_decoder.cc (working copy)
@@ -99,10 +99,11 @@
output_buffer_size < 0 ||
static_cast<size_t>(output_buffer_size) > kOutputBufferSize) {
host_->Error(PIPELINE_ERROR_DECODE);
- } else if (result == 0) {
- // TODO(scherkus): does this mark EOS? Do we want to fulfill a read request
- // with zero size?
- } else {
+ return;
+ }
+
+ // If we have decoded something, enqueue the result.
+ if (output_buffer_size) {
DataBuffer* result_buffer = new DataBuffer();
memcpy(result_buffer->GetWritableData(output_buffer_size),
output_buffer, output_buffer_size);
@@ -119,7 +120,19 @@
result_buffer->SetTimestamp(input->GetTimestamp());
EnqueueResult(result_buffer);
+ return;
}
+
+ // Three conditions to meet to declare end of stream for this decoder:
+ // 1. FFmpeg didn't read anything.
+ // 2. FFmpeg didn't output anything.
+ // 3. An end of stream buffer is received.
+ if (result == 0 && output_buffer_size == 0 && input->IsEndOfStream()) {
+ DataBuffer* result_buffer = new DataBuffer();
+ result_buffer->SetTimestamp(input->GetTimestamp());
+ result_buffer->SetDuration(input->GetDuration());
+ EnqueueResult(result_buffer);
+ }
}
base::TimeDelta FFmpegAudioDecoder::CalculateDuration(size_t size) {

Powered by Google App Engine
This is Rietveld 408576698