summaryrefslogtreecommitdiffstats
path: root/media/filters
diff options
context:
space:
mode:
authorscherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-01-24 18:21:01 +0000
committerscherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-01-24 18:21:01 +0000
commit110785be2414b3f041bf502368bb44e212a3c975 (patch)
tree6ee12a45979c6cecb659454e60a94c0a826e601e /media/filters
parent8b6911d9e06c1215901ec3316f9da58723301733 (diff)
downloadchromium_src-110785be2414b3f041bf502368bb44e212a3c975.zip
chromium_src-110785be2414b3f041bf502368bb44e212a3c975.tar.gz
chromium_src-110785be2414b3f041bf502368bb44e212a3c975.tar.bz2
Return 0 instead of AVERROR_EOF for reads at or past the end of a file.
I'm not sure if it's because the files listed in the bug report were improperly muxed, but FFmpeg was attempting to read past the end of the file and apparently returning AVERROR_EOF instead of 0 makes a huge difference. BUG=47489 TEST=media_unittests, files linked in bug report Review URL: http://codereview.chromium.org/6249013 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@72350 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media/filters')
-rw-r--r--media/filters/ffmpeg_demuxer.cc6
-rw-r--r--media/filters/ffmpeg_demuxer_unittest.cc4
2 files changed, 5 insertions, 5 deletions
diff --git a/media/filters/ffmpeg_demuxer.cc b/media/filters/ffmpeg_demuxer.cc
index 17248c6..413ff5a 100644
--- a/media/filters/ffmpeg_demuxer.cc
+++ b/media/filters/ffmpeg_demuxer.cc
@@ -336,11 +336,11 @@ int FFmpegDemuxer::Read(int size, uint8* data) {
if (read_has_failed_)
return AVERROR_IO;
- // If the read position exceeds the size of the data source. We should return
- // end-of-file directly.
+ // Even though FFmpeg defines AVERROR_EOF, it's not to be used with I/O
+ // routines. Instead return 0 for any read at or past EOF.
int64 file_size;
if (data_source_->GetSize(&file_size) && read_position_ >= file_size)
- return AVERROR_EOF;
+ return 0;
// Asynchronous read from data source.
data_source_->Read(read_position_, size, data,
diff --git a/media/filters/ffmpeg_demuxer_unittest.cc b/media/filters/ffmpeg_demuxer_unittest.cc
index 5ba6fd3..aec72ea 100644
--- a/media/filters/ffmpeg_demuxer_unittest.cc
+++ b/media/filters/ffmpeg_demuxer_unittest.cc
@@ -682,8 +682,8 @@ TEST_F(FFmpegDemuxerTest, ProtocolRead) {
EXPECT_TRUE(demuxer->GetPosition(&position));
EXPECT_EQ(1024, position);
- // Third read will get an end-of-file error.
- EXPECT_EQ(AVERROR_EOF, demuxer->Read(512, kBuffer));
+ // Third read will get an end-of-file error, which is represented as zero.
+ EXPECT_EQ(0, demuxer->Read(512, kBuffer));
// This read complete signal is generated when demuxer is stopped.
EXPECT_CALL(*demuxer, SignalReadCompleted(DataSource::kReadError));