| Index: media/filters/frame_processor_base.cc | 
| diff --git a/media/filters/frame_processor_base.cc b/media/filters/frame_processor_base.cc | 
| index 3e088ed5dc2966926443e23717ddb7086d636a52..09b1b86c3b39011ce2d0a6cc406ebc80af98ef15 100644 | 
| --- a/media/filters/frame_processor_base.cc | 
| +++ b/media/filters/frame_processor_base.cc | 
| @@ -10,7 +10,10 @@ | 
| namespace media { | 
|  | 
| MseTrackBuffer::MseTrackBuffer(ChunkDemuxerStream* stream) | 
| -    : needs_random_access_point_(true), | 
| +    : last_decode_timestamp_(kNoTimestamp()), | 
| +      last_frame_duration_(kNoTimestamp()), | 
| +      highest_presentation_timestamp_(kNoTimestamp()), | 
| +      needs_random_access_point_(true), | 
| stream_(stream) { | 
| DCHECK(stream_); | 
| } | 
| @@ -22,11 +25,23 @@ MseTrackBuffer::~MseTrackBuffer() { | 
| void MseTrackBuffer::Reset() { | 
| DVLOG(2) << __FUNCTION__ << "()"; | 
|  | 
| +  last_decode_timestamp_ = kNoTimestamp(); | 
| +  last_frame_duration_ = kNoTimestamp(); | 
| +  highest_presentation_timestamp_ = kNoTimestamp(); | 
| needs_random_access_point_ = true; | 
| } | 
|  | 
| +void MseTrackBuffer::SetHighestPresentationTimestampIfIncreased( | 
| +    base::TimeDelta timestamp) { | 
| +  if (highest_presentation_timestamp_ == kNoTimestamp() || | 
| +      timestamp > highest_presentation_timestamp_) { | 
| +    highest_presentation_timestamp_ = timestamp; | 
| +  } | 
| +} | 
| + | 
| FrameProcessorBase::FrameProcessorBase() | 
| -    : sequence_mode_(false) {} | 
| +    : sequence_mode_(false), | 
| +      group_start_timestamp_(kNoTimestamp()) {} | 
|  | 
| FrameProcessorBase::~FrameProcessorBase() { | 
| DVLOG(2) << __FUNCTION__ << "()"; | 
| @@ -34,6 +49,14 @@ FrameProcessorBase::~FrameProcessorBase() { | 
| STLDeleteValues(&track_buffers_); | 
| } | 
|  | 
| +void FrameProcessorBase::SetGroupStartTimestampIfInSequenceMode( | 
| +    base::TimeDelta timestamp_offset) { | 
| +  DVLOG(2) << __FUNCTION__ << "(" << timestamp_offset.InSecondsF() << ")"; | 
| +  DCHECK(kNoTimestamp() != timestamp_offset); | 
| +  if (sequence_mode_) | 
| +    group_start_timestamp_ = timestamp_offset; | 
| +} | 
| + | 
| bool FrameProcessorBase::AddTrack(StreamParser::TrackId id, | 
| ChunkDemuxerStream* stream) { | 
| DVLOG(2) << __FUNCTION__ << "(): id=" << id; | 
| @@ -63,4 +86,15 @@ MseTrackBuffer* FrameProcessorBase::FindTrack(StreamParser::TrackId id) { | 
| return itr->second; | 
| } | 
|  | 
| +void FrameProcessorBase::NotifyNewMediaSegmentStarting( | 
| +    base::TimeDelta segment_timestamp) { | 
| +  DVLOG(2) << __FUNCTION__ << "(" << segment_timestamp.InSecondsF() << ")"; | 
| + | 
| +  for (TrackBufferMap::iterator itr = track_buffers_.begin(); | 
| +       itr != track_buffers_.end(); | 
| +       ++itr) { | 
| +    itr->second->stream()->OnNewMediaSegment(segment_timestamp); | 
| +  } | 
| +} | 
| + | 
| }  // namespace media | 
|  |