summaryrefslogtreecommitdiffstats
path: root/media/mp4
diff options
context:
space:
mode:
authorstrobe@google.com <strobe@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2012-07-30 18:16:58 +0000
committerstrobe@google.com <strobe@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2012-07-30 18:16:58 +0000
commit9ee0310ae24b23c4fd1df698ba74a3d8bcd57155 (patch)
treef06a535a8f77e09db5e408b548f978171783f77b /media/mp4
parent0a2603c234d1a1a341a0b80172f59e544f16592a (diff)
downloadchromium_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.cc11
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;