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 |