mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-23 07:38:16 +00:00
mpegdemux: Fix backward timestamp scan on small files.
When the file size is smaller than the configured 4MB scan limit for timestamps, don't underflow the guard variable when checking if it's time to stop. Limit the backward SCR scan to the same 4MB as the PTS scan. Add some comments.
This commit is contained in:
parent
d520e25db3
commit
e3b554f0e6
1 changed files with 7 additions and 2 deletions
|
@ -2597,9 +2597,11 @@ gst_ps_demux_scan_forward_ts (GstPsDemux * demux, guint64 * pos,
|
|||
GstMapInfo map;
|
||||
|
||||
do {
|
||||
/* Check we can get at least scan_sz bytes */
|
||||
if (offset + scan_sz > demux->sink_segment.stop)
|
||||
return FALSE;
|
||||
|
||||
/* Don't go further than 'limit' bytes */
|
||||
if (limit && offset > *pos + limit)
|
||||
return FALSE;
|
||||
|
||||
|
@ -2658,10 +2660,12 @@ gst_ps_demux_scan_backward_ts (GstPsDemux * demux, guint64 * pos,
|
|||
GstMapInfo map;
|
||||
|
||||
do {
|
||||
/* Check we have at least scan_sz bytes available */
|
||||
if (offset < scan_sz - 1)
|
||||
return FALSE;
|
||||
|
||||
if (limit && offset < *pos - limit)
|
||||
/* Don't go backward past the start or 'limit' bytes */
|
||||
if (limit && offset + limit < *pos)
|
||||
return FALSE;
|
||||
|
||||
if (offset > BLOCK_SZ)
|
||||
|
@ -2750,7 +2754,8 @@ gst_ps_sink_get_duration (GstPsDemux * demux)
|
|||
demux->first_scr_offset = offset;
|
||||
/* scan for last SCR in the stream */
|
||||
offset = demux->sink_segment.stop;
|
||||
gst_ps_demux_scan_backward_ts (demux, &offset, SCAN_SCR, &demux->last_scr, 0);
|
||||
gst_ps_demux_scan_backward_ts (demux, &offset, SCAN_SCR, &demux->last_scr,
|
||||
DURATION_SCAN_LIMIT);
|
||||
GST_DEBUG_OBJECT (demux, "Last SCR: %" G_GINT64_FORMAT " %" GST_TIME_FORMAT
|
||||
" in packet starting at %" G_GUINT64_FORMAT,
|
||||
demux->last_scr, GST_TIME_ARGS (MPEGTIME_TO_GSTTIME (demux->last_scr)),
|
||||
|
|
Loading…
Reference in a new issue