| Index: media/filters/frame_processor_base.h
|
| diff --git a/media/filters/frame_processor_base.h b/media/filters/frame_processor_base.h
|
| index 8841998885dea83a44db041cee6885baa40a01df..cc143e29d5d3e14dac963c521a8dc0d0ba7f4e7c 100644
|
| --- a/media/filters/frame_processor_base.h
|
| +++ b/media/filters/frame_processor_base.h
|
| @@ -25,6 +25,27 @@ class MseTrackBuffer {
|
| explicit MseTrackBuffer(ChunkDemuxerStream* stream);
|
| ~MseTrackBuffer();
|
|
|
| + // Get/set |last_decode_timestamp_|.
|
| + base::TimeDelta last_decode_timestamp() const {
|
| + return last_decode_timestamp_;
|
| + }
|
| + void set_last_decode_timestamp(base::TimeDelta timestamp) {
|
| + last_decode_timestamp_ = timestamp;
|
| + }
|
| +
|
| + // Get/set |last_frame_duration_|.
|
| + base::TimeDelta last_frame_duration() const {
|
| + return last_frame_duration_;
|
| + }
|
| + void set_last_frame_duration(base::TimeDelta duration) {
|
| + last_frame_duration_ = duration;
|
| + }
|
| +
|
| + // Gets |highest_presentation_timestamp_|.
|
| + base::TimeDelta highest_presentation_timestamp() const {
|
| + return highest_presentation_timestamp_;
|
| + }
|
| +
|
| // Get/set |needs_random_access_point_|.
|
| bool needs_random_access_point() const {
|
| return needs_random_access_point_;
|
| @@ -36,12 +57,33 @@ class MseTrackBuffer {
|
| // Gets a pointer to this track's ChunkDemuxerStream.
|
| ChunkDemuxerStream* stream() const { return stream_; }
|
|
|
| - // Sets |needs_random_access_point_| to true.
|
| - // TODO(wolenetz): Add the rest of the new coded frame processing algorithm
|
| - // track buffer attributes and reset them here. See http://crbug.com/249422.
|
| + // Unsets |last_decode_timestamp_|, unsets |last_frame_duration_|,
|
| + // unsets |highest_presentation_timestamp_|, and sets
|
| + // |needs_random_access_point_| to true.
|
| void Reset();
|
|
|
| + // If |highest_presentation_timestamp_| is unset or |timestamp| is greater
|
| + // than |highest_presentation_timestamp_|, sets
|
| + // |highest_presentation_timestamp_| to |timestamp|. Note that bidirectional
|
| + // prediction between coded frames can cause |timestamp| to not be
|
| + // monotonically increasing even though the decode timestamps are
|
| + // monotonically increasing.
|
| + void SetHighestPresentationTimestampIfIncreased(base::TimeDelta timestamp);
|
| +
|
| private:
|
| + // The decode timestamp of the last coded frame appended in the current coded
|
| + // frame group. Initially kNoTimestamp(), meaning "unset".
|
| + base::TimeDelta last_decode_timestamp_;
|
| +
|
| + // The coded frame duration of the last coded frame appended in the current
|
| + // coded frame group. Initially kNoTimestamp(), meaning "unset".
|
| + base::TimeDelta last_frame_duration_;
|
| +
|
| + // The highest presentation timestamp encountered in a coded frame appended
|
| + // in the current coded frame group. Initially kNoTimestamp(), meaning
|
| + // "unset".
|
| + base::TimeDelta highest_presentation_timestamp_;
|
| +
|
| // Keeps track of whether the track buffer is waiting for a random access
|
| // point coded frame. Initially set to true to indicate that a random access
|
| // point coded frame is needed before anything can be added to the track
|
| @@ -97,6 +139,10 @@ class MEDIA_EXPORT FrameProcessorBase {
|
| bool* new_media_segment,
|
| base::TimeDelta* timestamp_offset) = 0;
|
|
|
| + // Signals the frame processor to update its group start timestamp to be
|
| + // |timestamp_offset| if it is in sequence append mode.
|
| + void SetGroupStartTimestampIfInSequenceMode(base::TimeDelta timestamp_offset);
|
| +
|
| // Adds a new track with unique track ID |id|.
|
| // If |id| has previously been added, returns false to indicate error.
|
| // Otherwise, returns true, indicating future ProcessFrames() will emit
|
| @@ -117,6 +163,10 @@ class MEDIA_EXPORT FrameProcessorBase {
|
| // MseTrackBuffer. Otherwise, returns NULL.
|
| MseTrackBuffer* FindTrack(StreamParser::TrackId id);
|
|
|
| + // Signals all track buffers' streams that a new media segment is starting
|
| + // with timestamp |segment_timestamp|.
|
| + void NotifyNewMediaSegmentStarting(base::TimeDelta segment_timestamp);
|
| +
|
| // The AppendMode of the associated SourceBuffer.
|
| // See SetSequenceMode() for interpretation of |sequence_mode_|.
|
| // Per http://www.w3.org/TR/media-source/#widl-SourceBuffer-mode:
|
| @@ -126,6 +176,13 @@ class MEDIA_EXPORT FrameProcessorBase {
|
|
|
| // TrackId-indexed map of each track's stream.
|
| TrackBufferMap track_buffers_;
|
| +
|
| + // Tracks the MSE coded frame processing variable of same name.
|
| + // Initially kNoTimestamp(), meaning "unset".
|
| + // Note: LegacyFrameProcessor does not use this member; it's here to reduce
|
| + // short-term plumbing of SetGroupStartTimestampIfInSequenceMode() until
|
| + // LegacyFrameProcessor is removed.
|
| + base::TimeDelta group_start_timestamp_;
|
| };
|
|
|
| } // namespace media
|
|
|