| 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;
|
| }
|
|
|
|
|