X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fmedia%2Ffilters%2Fframe_processor_base.cc;h=09b1b86c3b39011ce2d0a6cc406ebc80af98ef15;hb=004985e17e624662a4c85c76a7654039dc83f028;hp=3e088ed5dc2966926443e23717ddb7086d636a52;hpb=2f108dbacb161091e42a3479f4e171339b7e7623;p=platform%2Fframework%2Fweb%2Fcrosswalk.git diff --git a/src/media/filters/frame_processor_base.cc b/src/media/filters/frame_processor_base.cc index 3e088ed..09b1b86 100644 --- a/src/media/filters/frame_processor_base.cc +++ b/src/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