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

Unified Diff: media/filters/chunk_demuxer.cc

Issue 231283005: Add live mode detection in WebM MediaSource parser. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 8 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 0c5608943725b41383b8aa278b056c792dbecf60..1cc7acbab7686dbe4990a6f59d76097fa8830e55 100644
--- a/media/filters/chunk_demuxer.cc
+++ b/media/filters/chunk_demuxer.cc
@@ -93,16 +93,17 @@ class SourceState {
typedef base::Callback<void(
ChunkDemuxerStream*, const TextTrackConfig&)> NewTextTrackCB;
- // First parameter - Indicates initialization success. Set to true if
- // initialization was successful. False if an error
- // occurred.
- // Second parameter - Indicates the stream duration. Only contains a valid
- // value if the first parameter is true.
- // Third parameter - Indicates the source Time associated with
+ // success - True if initialization was successful, false otherwise.
+ // duration - Stream duration. Only valid if |success| is true.
+ // timeline_offset - Indicates the source Time associated with
// presentation timestamp 0. A null Time is returned if
// no mapping to Time exists. Only contains a
- // valid value if the first parameter is true.
- typedef base::Callback<void(bool, TimeDelta, base::Time)> InitCB;
+ // valid value if |success| is true.
+ // live_mode - True when the stream is a live stream.
+ typedef base::Callback<void(bool success,
+ TimeDelta duration,
+ base::Time timeline_offset,
+ bool live_mode)> InitCB;
SourceState(
scoped_ptr<StreamParser> stream_parser,
@@ -195,7 +196,8 @@ class SourceState {
void OnSourceInitDone(bool success,
TimeDelta duration,
base::Time timeline_offset,
- bool auto_update_timestamp_offset);
+ bool auto_update_timestamp_offset,
+ bool live_mode);
CreateDemuxerStreamCB create_demuxer_stream_cb_;
NewTextTrackCB new_text_track_cb_;
@@ -703,10 +705,11 @@ bool SourceState::OnNewBuffers(
void SourceState::OnSourceInitDone(bool success,
TimeDelta duration,
base::Time timeline_offset,
- bool auto_update_timestamp_offset) {
+ bool auto_update_timestamp_offset,
+ bool live_mode) {
auto_update_timestamp_offset_ = auto_update_timestamp_offset;
base::ResetAndReturn(&init_cb_).Run(
- success, duration, timeline_offset);
+ success, duration, timeline_offset, live_mode);
}
ChunkDemuxerStream::ChunkDemuxerStream(Type type, bool splice_frames_enabled)
@@ -990,6 +993,7 @@ ChunkDemuxer::ChunkDemuxer(const base::Closure& open_cb,
log_cb_(log_cb),
duration_(kNoTimestamp()),
user_specified_duration_(-1),
+ live_mode_(false),
splice_frames_enabled_(splice_frames_enabled) {
DCHECK(!open_cb_.is_null());
DCHECK(!need_key_cb_.is_null());
@@ -1080,6 +1084,10 @@ base::Time ChunkDemuxer::GetTimelineOffset() const {
return timeline_offset_;
}
+bool ChunkDemuxer::IsLiveMode() const {
+ return live_mode_;
+}
+
void ChunkDemuxer::StartWaitingForSeek(TimeDelta seek_time) {
DVLOG(1) << "StartWaitingForSeek()";
base::AutoLock auto_lock(lock_);
@@ -1497,8 +1505,10 @@ bool ChunkDemuxer::IsSeekWaitingForData_Locked() const {
return false;
}
-void ChunkDemuxer::OnSourceInitDone(bool success, TimeDelta duration,
- base::Time timeline_offset) {
+void ChunkDemuxer::OnSourceInitDone(bool success,
+ TimeDelta duration,
+ base::Time timeline_offset,
+ bool live_mode) {
DVLOG(1) << "OnSourceInitDone(" << success << ", "
<< duration.InSecondsF() << ")";
lock_.AssertAcquired();
@@ -1523,10 +1533,13 @@ void ChunkDemuxer::OnSourceInitDone(bool success, TimeDelta duration,
timeline_offset_ = timeline_offset;
}
+ live_mode_ |= live_mode;
+
// Wait until all streams have initialized.
if ((!source_id_audio_.empty() && !audio_) ||
- (!source_id_video_.empty() && !video_))
+ (!source_id_video_.empty() && !video_)) {
return;
+ }
SeekAllSources(GetStartTime());
StartReturningData();

Powered by Google App Engine
This is Rietveld 408576698