Index: media/filters/chunk_demuxer.h |
diff --git a/media/filters/chunk_demuxer.h b/media/filters/chunk_demuxer.h |
index 1ef8d263755e695e4f7f344eeb4bc039a2cb0e54..dd76bc210dd0b82e5ed6f6385ee08bc72d0886a0 100644 |
--- a/media/filters/chunk_demuxer.h |
+++ b/media/filters/chunk_demuxer.h |
@@ -56,6 +56,13 @@ class MEDIA_EXPORT ChunkDemuxerStream : public DemuxerStream { |
void Remove(base::TimeDelta start, base::TimeDelta end, |
base::TimeDelta duration); |
+ // If the buffer is full, runs Frame Removal to try to free up space, as |
+ // specified in the "Coded Frame Eviction Algorithm" in the Media Source |
+ // Extensions Spec. Returns false iff buffer is still full after running |
+ // eviction |
+ // https://w3c.github.io/media-source/#sourcebuffer-coded-frame-eviction |
+ bool EvictFrames(DecodeTimestamp media_time); |
+ |
// Signal to the stream that duration has changed to |duration|. |
void OnSetDuration(base::TimeDelta duration); |
@@ -145,6 +152,8 @@ class MEDIA_EXPORT ChunkDemuxer : public Demuxer { |
typedef base::Closure InitSegmentReceivedCB; |
+ typedef base::Callback<base::TimeDelta(void)> GetMediaTimeCB; |
+ |
// |open_cb| Run when Initialize() is called to signal that the demuxer |
// is ready to receive media data via AppenData(). |
// |encrypted_media_init_data_cb| Run when the demuxer determines that an |
@@ -152,12 +161,15 @@ class MEDIA_EXPORT ChunkDemuxer : public Demuxer { |
// |enable_text| Process inband text tracks in the normal way when true, |
// otherwise ignore them. |
// |log_cb| Run when the demuxer needs to emit MediaLog messages. |
+ // |get_media_time_cb| Should return current media playback time, which |
+ // is used to ensure unconsumed data in not garbage collected. |
wolenetz
2015/06/04 00:38:57
nit: s/in/is
servolk
2015/06/04 03:03:01
Done.
|
// |splice_frames_enabled| Indicates that it's okay to generate splice frames |
// per the MSE specification. Renderers must understand DecoderBuffer's |
// splice_timestamp() field. |
ChunkDemuxer(const base::Closure& open_cb, |
const EncryptedMediaInitDataCB& encrypted_media_init_data_cb, |
const LogCB& log_cb, |
+ const GetMediaTimeCB& get_media_time_cb, |
const scoped_refptr<MediaLog>& media_log, |
bool splice_frames_enabled); |
~ChunkDemuxer() override; |
@@ -241,6 +253,8 @@ class MEDIA_EXPORT ChunkDemuxer : public Demuxer { |
void Remove(const std::string& id, base::TimeDelta start, |
base::TimeDelta end); |
+ bool EvictFrames(); |
+ |
// Returns the current presentation duration. |
double GetDuration(); |
double GetDuration_Locked(); |
@@ -362,6 +376,7 @@ class MEDIA_EXPORT ChunkDemuxer : public Demuxer { |
// Callback used to report log messages that can help the web developer |
// figure out what is wrong with the content. |
LogCB log_cb_; |
+ GetMediaTimeCB get_media_time_cb_; |
scoped_refptr<MediaLog> media_log_; |
PipelineStatusCB init_cb_; |