Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(275)

Unified Diff: media/filters/chunk_demuxer.cc

Issue 13419002: Media Source dispatches inband text tracks (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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());

Powered by Google App Engine
This is Rietveld 408576698