Index: media/formats/mp4/mp4_stream_parser.cc |
diff --git a/media/formats/mp4/mp4_stream_parser.cc b/media/formats/mp4/mp4_stream_parser.cc |
index af8485b17f9e3f564f32e3619da882e62c9760ef..bd95afce5790351a7f3778a66ed082af8cd04460 100644 |
--- a/media/formats/mp4/mp4_stream_parser.cc |
+++ b/media/formats/mp4/mp4_stream_parser.cc |
@@ -101,8 +101,7 @@ bool MP4StreamParser::Parse(const uint8_t* buf, int size) { |
queue_.Push(buf, size); |
- BufferQueue audio_buffers; |
- BufferQueue video_buffers; |
+ BufferQueueMap buffers; |
bool result = false; |
bool err = false; |
@@ -125,7 +124,7 @@ bool MP4StreamParser::Parse(const uint8_t* buf, int size) { |
break; |
case kEmittingSamples: |
- result = EnqueueSample(&audio_buffers, &video_buffers, &err); |
+ result = EnqueueSample(&buffers, &err); |
if (result) { |
int64_t max_clear = runs_->GetMaxClearOffset() + moof_head_; |
err = !ReadAndDiscardMDATsUntil(max_clear); |
@@ -135,7 +134,7 @@ bool MP4StreamParser::Parse(const uint8_t* buf, int size) { |
} while (result && !err); |
if (!err) |
- err = !SendAndFlushSamples(&audio_buffers, &video_buffers); |
+ err = !SendAndFlushSamples(&buffers); |
if (err) { |
DLOG(ERROR) << "Error while parsing MP4"; |
@@ -200,9 +199,6 @@ bool MP4StreamParser::ParseMoov(BoxReader* reader) { |
for (std::vector<Track>::const_iterator track = moov_->tracks.begin(); |
track != moov_->tracks.end(); ++track) { |
- // TODO(strobe): Only the first audio and video track present in a file are |
- // used. (Track selection is better accomplished via Source IDs, though, so |
- // adding support for track selection within a stream is low-priority.) |
const SampleDescription& samp_descr = |
track->media.information.sample_table.description; |
@@ -486,15 +482,13 @@ bool MP4StreamParser::PrepareAACBuffer( |
return true; |
} |
-bool MP4StreamParser::EnqueueSample(BufferQueue* audio_buffers, |
- BufferQueue* video_buffers, |
- bool* err) { |
+bool MP4StreamParser::EnqueueSample(BufferQueueMap* buffers, bool* err) { |
DCHECK_EQ(state_, kEmittingSamples); |
if (!runs_->IsRunValid()) { |
// Flush any buffers we've gotten in this chunk so that buffers don't |
// cross |new_segment_cb_| calls |
- *err = !SendAndFlushSamples(audio_buffers, video_buffers); |
+ *err = !SendAndFlushSamples(buffers); |
if (*err) |
return false; |
@@ -623,27 +617,16 @@ bool MP4StreamParser::EnqueueSample(BufferQueue* audio_buffers, |
<< ", cts=" << runs_->cts().InMilliseconds() |
<< ", size=" << runs_->sample_size(); |
- if (audio) { |
- audio_buffers->push_back(stream_buf); |
- } else { |
- video_buffers->push_back(stream_buf); |
- } |
- |
+ (*buffers)[runs_->track_id()].push_back(stream_buf); |
runs_->AdvanceSample(); |
return true; |
} |
-bool MP4StreamParser::SendAndFlushSamples(BufferQueue* audio_buffers, |
- BufferQueue* video_buffers) { |
- if (audio_buffers->empty() && video_buffers->empty()) |
+bool MP4StreamParser::SendAndFlushSamples(BufferQueueMap* buffers) { |
+ if (buffers->empty()) |
return true; |
- |
- TextBufferQueueMap empty_text_map; |
- bool success = new_buffers_cb_.Run(*audio_buffers, |
- *video_buffers, |
- empty_text_map); |
- audio_buffers->clear(); |
- video_buffers->clear(); |
+ bool success = new_buffers_cb_.Run(*buffers); |
+ buffers->clear(); |
return success; |
} |