mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-02 20:42:30 +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;
|
GstMapInfo map;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
|
/* Check we can get at least scan_sz bytes */
|
||||||
if (offset + scan_sz > demux->sink_segment.stop)
|
if (offset + scan_sz > demux->sink_segment.stop)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
/* Don't go further than 'limit' bytes */
|
||||||
if (limit && offset > *pos + limit)
|
if (limit && offset > *pos + limit)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
@ -2658,10 +2660,12 @@ gst_ps_demux_scan_backward_ts (GstPsDemux * demux, guint64 * pos,
|
||||||
GstMapInfo map;
|
GstMapInfo map;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
|
/* Check we have at least scan_sz bytes available */
|
||||||
if (offset < scan_sz - 1)
|
if (offset < scan_sz - 1)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
if (limit && offset < *pos - limit)
|
/* Don't go backward past the start or 'limit' bytes */
|
||||||
|
if (limit && offset + limit < *pos)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
if (offset > BLOCK_SZ)
|
if (offset > BLOCK_SZ)
|
||||||
|
@ -2750,7 +2754,8 @@ gst_ps_sink_get_duration (GstPsDemux * demux)
|
||||||
demux->first_scr_offset = offset;
|
demux->first_scr_offset = offset;
|
||||||
/* scan for last SCR in the stream */
|
/* scan for last SCR in the stream */
|
||||||
offset = demux->sink_segment.stop;
|
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
|
GST_DEBUG_OBJECT (demux, "Last SCR: %" G_GINT64_FORMAT " %" GST_TIME_FORMAT
|
||||||
" in packet starting at %" G_GUINT64_FORMAT,
|
" in packet starting at %" G_GUINT64_FORMAT,
|
||||||
demux->last_scr, GST_TIME_ARGS (MPEGTIME_TO_GSTTIME (demux->last_scr)),
|
demux->last_scr, GST_TIME_ARGS (MPEGTIME_TO_GSTTIME (demux->last_scr)),
|
||||||
|
|
Loading…
Reference in a new issue