diff options
author | strobe@google.com <strobe@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-07-30 18:16:58 +0000 |
---|---|---|
committer | strobe@google.com <strobe@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-07-30 18:16:58 +0000 |
commit | 9ee0310ae24b23c4fd1df698ba74a3d8bcd57155 (patch) | |
tree | f06a535a8f77e09db5e408b548f978171783f77b /media/mp4 | |
parent | 0a2603c234d1a1a341a0b80172f59e544f16592a (diff) | |
download | chromium_src-9ee0310ae24b23c4fd1df698ba74a3d8bcd57155.zip chromium_src-9ee0310ae24b23c4fd1df698ba74a3d8bcd57155.tar.gz chromium_src-9ee0310ae24b23c4fd1df698ba74a3d8bcd57155.tar.bz2 |
Move 'mdat' advancement logic to make more sense.
This defers the change from kEmittingSamples to kParsingBoxes until after the
current 'mdat' atom has been cleared in MP4StreamParser.
BUG=
TEST=MP4StreamParserTest
Review URL: https://chromiumcodereview.appspot.com/10821081
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@148977 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media/mp4')
-rw-r--r-- | media/mp4/mp4_stream_parser.cc | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/media/mp4/mp4_stream_parser.cc b/media/mp4/mp4_stream_parser.cc index 9d51959..2b5eea3 100644 --- a/media/mp4/mp4_stream_parser.cc +++ b/media/mp4/mp4_stream_parser.cc @@ -80,11 +80,7 @@ bool MP4StreamParser::Parse(const uint8* buf, int size) { do { if (state_ == kParsingBoxes) { - if (mdat_tail_ > queue_.head()) { - result = queue_.Trim(mdat_tail_); - } else { - result = ParseBox(&err); - } + result = ParseBox(&err); } else { DCHECK_EQ(kEmittingSamples, state_); result = EnqueueSample(&audio_buffers, &video_buffers, &err); @@ -322,6 +318,11 @@ bool MP4StreamParser::EnqueueSample(BufferQueue* audio_buffers, if (*err) return false; + // Remain in kEnqueueingSamples state, discarding data, until the end of + // the current 'mdat' box has been appended to the queue. + if (!queue_.Trim(mdat_tail_)) + return false; + ChangeState(kParsingBoxes); end_of_segment_cb_.Run(); return true; |