| Index: media/filters/chunk_demuxer.cc
|
| diff --git a/media/filters/chunk_demuxer.cc b/media/filters/chunk_demuxer.cc
|
| index fdd47e7fcf8cb4f2e3871fb82b03658d519bec51..bebd44388aa58d6a2cb4989c36fe9a166906cc3c 100644
|
| --- a/media/filters/chunk_demuxer.cc
|
| +++ b/media/filters/chunk_demuxer.cc
|
| @@ -406,11 +406,15 @@ bool ChunkDemuxerStream::GetNextBuffer_Locked(
|
|
|
| ChunkDemuxer::ChunkDemuxer(const base::Closure& open_cb,
|
| const NeedKeyCB& need_key_cb,
|
| + const TextTrackCB& text_track_cb,
|
| + const TextCB& text_cb,
|
| const LogCB& log_cb)
|
| : state_(WAITING_FOR_INIT),
|
| host_(NULL),
|
| open_cb_(open_cb),
|
| need_key_cb_(need_key_cb),
|
| + text_track_cb_(text_track_cb),
|
| + text_cb_(text_cb),
|
| log_cb_(log_cb),
|
| duration_(kNoTimestamp()),
|
| user_specified_duration_(-1) {
|
| @@ -565,6 +569,11 @@ ChunkDemuxer::Status ChunkDemuxer::AddId(const std::string& id,
|
| base::Unretained(this));
|
| }
|
|
|
| + // TODO(matthewjheaney): need a predicate here?
|
| + StreamParser::NewBuffersCB text_cb;
|
| + text_cb = base::Bind(&ChunkDemuxer::OnTextBuffers,
|
| + base::Unretained(this));
|
| +
|
| stream_parser->Init(
|
| base::Bind(&ChunkDemuxer::OnStreamParserInitDone, base::Unretained(this)),
|
| base::Bind(&ChunkDemuxer::OnNewConfigs, base::Unretained(this),
|
| @@ -572,6 +581,8 @@ ChunkDemuxer::Status ChunkDemuxer::AddId(const std::string& id,
|
| audio_cb,
|
| video_cb,
|
| base::Bind(&ChunkDemuxer::OnNeedKey, base::Unretained(this)),
|
| + text_track_cb_,
|
| + text_cb,
|
| base::Bind(&ChunkDemuxer::OnNewMediaSegment, base::Unretained(this), id),
|
| base::Bind(&ChunkDemuxer::OnEndOfMediaSegment,
|
| base::Unretained(this), id),
|
| @@ -1075,6 +1086,22 @@ bool ChunkDemuxer::OnNeedKey(const std::string& type,
|
| return true;
|
| }
|
|
|
| +bool ChunkDemuxer::OnTextBuffers(const StreamParser::BufferQueue& buffers) {
|
| + lock_.AssertAcquired();
|
| + DCHECK_NE(state_, SHUTDOWN);
|
| +
|
| + StreamParser::BufferQueue::const_iterator it = buffers.begin();
|
| + const StreamParser::BufferQueue::const_iterator it_end = buffers.end();
|
| +
|
| + while (it != it_end) {
|
| + const StreamParser::BufferQueue::value_type& buffer = *it++;
|
| + const base::TimeDelta time = buffer->GetDecodeTimestamp();
|
| + text_cb_.Run(time);
|
| + }
|
| +
|
| + return true;
|
| +}
|
| +
|
| void ChunkDemuxer::OnNewMediaSegment(const std::string& source_id,
|
| TimeDelta timestamp) {
|
| DCHECK(timestamp != kNoTimestamp());
|
|
|