mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-25 17:50:36 +00:00
matroskademux: some more segment handling tweaking
This commit is contained in:
parent
e90c67b3a9
commit
dfda34ea24
1 changed files with 9 additions and 3 deletions
|
@ -3376,6 +3376,7 @@ gst_matroska_demux_parse_blockgroup_or_simpleblock (GstMatroskaDemux * demux,
|
||||||
/* need to refresh segment info ASAP */
|
/* need to refresh segment info ASAP */
|
||||||
if (GST_CLOCK_TIME_IS_VALID (lace_time) && demux->need_newsegment) {
|
if (GST_CLOCK_TIME_IS_VALID (lace_time) && demux->need_newsegment) {
|
||||||
guint64 clace_time, duration;
|
guint64 clace_time, duration;
|
||||||
|
gdouble rate;
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (demux,
|
GST_DEBUG_OBJECT (demux,
|
||||||
"generating segment starting at %" GST_TIME_FORMAT,
|
"generating segment starting at %" GST_TIME_FORMAT,
|
||||||
|
@ -3388,11 +3389,12 @@ gst_matroska_demux_parse_blockgroup_or_simpleblock (GstMatroskaDemux * demux,
|
||||||
}
|
}
|
||||||
clace_time = MAX (lace_time, demux->stream_start_time);
|
clace_time = MAX (lace_time, demux->stream_start_time);
|
||||||
duration = demux->common.segment.duration;
|
duration = demux->common.segment.duration;
|
||||||
|
rate = demux->common.segment.rate;
|
||||||
/* we really want to set, don't care much about previous state */
|
/* we really want to set, don't care much about previous state */
|
||||||
gst_segment_init (&demux->common.segment, GST_FORMAT_TIME);
|
gst_segment_init (&demux->common.segment, GST_FORMAT_TIME);
|
||||||
gst_segment_set_newsegment (&demux->common.segment, FALSE,
|
gst_segment_set_newsegment (&demux->common.segment, FALSE,
|
||||||
demux->common.segment.rate, GST_FORMAT_TIME, clace_time,
|
rate, GST_FORMAT_TIME, clace_time, GST_CLOCK_TIME_NONE,
|
||||||
GST_CLOCK_TIME_NONE, clace_time - demux->stream_start_time);
|
clace_time - demux->stream_start_time);
|
||||||
gst_segment_set_duration (&demux->common.segment, GST_FORMAT_TIME,
|
gst_segment_set_duration (&demux->common.segment, GST_FORMAT_TIME,
|
||||||
duration);
|
duration);
|
||||||
/* now convey our segment notion downstream */
|
/* now convey our segment notion downstream */
|
||||||
|
@ -4738,11 +4740,15 @@ gst_matroska_demux_handle_sink_event (GstPad * pad, GstEvent * event)
|
||||||
}
|
}
|
||||||
case GST_EVENT_FLUSH_STOP:
|
case GST_EVENT_FLUSH_STOP:
|
||||||
{
|
{
|
||||||
|
guint64 dur;
|
||||||
|
|
||||||
gst_adapter_clear (demux->common.adapter);
|
gst_adapter_clear (demux->common.adapter);
|
||||||
GST_OBJECT_LOCK (demux);
|
GST_OBJECT_LOCK (demux);
|
||||||
gst_matroska_read_common_reset_streams (&demux->common,
|
gst_matroska_read_common_reset_streams (&demux->common,
|
||||||
GST_CLOCK_TIME_NONE, TRUE);
|
GST_CLOCK_TIME_NONE, TRUE);
|
||||||
demux->common.segment.last_stop = GST_CLOCK_TIME_NONE;
|
dur = demux->common.segment.duration;
|
||||||
|
gst_segment_init (&demux->common.segment, GST_FORMAT_TIME);
|
||||||
|
demux->common.segment.duration = dur;
|
||||||
demux->cluster_time = GST_CLOCK_TIME_NONE;
|
demux->cluster_time = GST_CLOCK_TIME_NONE;
|
||||||
demux->cluster_offset = 0;
|
demux->cluster_offset = 0;
|
||||||
GST_OBJECT_UNLOCK (demux);
|
GST_OBJECT_UNLOCK (demux);
|
||||||
|
|
Loading…
Reference in a new issue