mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-03-30 04:45:36 +00:00
mxfdemux: Adjust last_stop to the last keyframe when seeking
This commit is contained in:
parent
22cb259f19
commit
bb11522f1d
1 changed files with 9 additions and 3 deletions
|
@ -2827,7 +2827,7 @@ gst_mxf_demux_chain (GstPad * pad, GstBuffer * inbuf)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_mxf_demux_pad_set_position (GstMXFDemux * demux, GstMXFDemuxPad * p,
|
gst_mxf_demux_pad_set_last_stop (GstMXFDemux * demux, GstMXFDemuxPad * p,
|
||||||
GstClockTime start)
|
GstClockTime start)
|
||||||
{
|
{
|
||||||
guint i;
|
guint i;
|
||||||
|
@ -2958,7 +2958,7 @@ gst_mxf_demux_seek_push (GstMXFDemux * demux, GstEvent * event)
|
||||||
/* Reset EOS flag on all pads */
|
/* Reset EOS flag on all pads */
|
||||||
p->eos = FALSE;
|
p->eos = FALSE;
|
||||||
p->last_flow = GST_FLOW_OK;
|
p->last_flow = GST_FLOW_OK;
|
||||||
gst_mxf_demux_pad_set_position (demux, p, start);
|
gst_mxf_demux_pad_set_last_stop (demux, p, start);
|
||||||
|
|
||||||
position = p->current_essence_track_position;
|
position = p->current_essence_track_position;
|
||||||
off = gst_mxf_demux_find_essence_element (demux, p->current_essence_track,
|
off = gst_mxf_demux_find_essence_element (demux, p->current_essence_track,
|
||||||
|
@ -3106,7 +3106,7 @@ gst_mxf_demux_seek_pull (GstMXFDemux * demux, GstEvent * event)
|
||||||
/* Reset EOS flag on all pads */
|
/* Reset EOS flag on all pads */
|
||||||
p->eos = FALSE;
|
p->eos = FALSE;
|
||||||
p->last_flow = GST_FLOW_OK;
|
p->last_flow = GST_FLOW_OK;
|
||||||
gst_mxf_demux_pad_set_position (demux, p, start);
|
gst_mxf_demux_pad_set_last_stop (demux, p, start);
|
||||||
|
|
||||||
position = p->current_essence_track_position;
|
position = p->current_essence_track_position;
|
||||||
off =
|
off =
|
||||||
|
@ -3118,6 +3118,12 @@ gst_mxf_demux_seek_pull (GstMXFDemux * demux, GstEvent * event)
|
||||||
p->eos = TRUE;
|
p->eos = TRUE;
|
||||||
} else {
|
} else {
|
||||||
new_offset = MIN (off, new_offset);
|
new_offset = MIN (off, new_offset);
|
||||||
|
if (position != p->current_essence_track_position) {
|
||||||
|
p->last_flow -=
|
||||||
|
gst_util_uint64_scale (p->current_essence_track_position -
|
||||||
|
position, GST_SECOND * p->material_track->edit_rate.d,
|
||||||
|
p->material_track->edit_rate.d);
|
||||||
|
}
|
||||||
p->current_essence_track_position = position;
|
p->current_essence_track_position = position;
|
||||||
}
|
}
|
||||||
p->discont = TRUE;
|
p->discont = TRUE;
|
||||||
|
|
Loading…
Reference in a new issue