mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-12 02:15:31 +00:00
qtdemux: Ignore corrupted CTTS box
If ctts (CompositionOffsetBox) has larger sample_offset (offset between PTS and DTS) than (2 * duration) of the stream, assume the ctts box to be corrupted and ignore the box. https://bugzilla.gnome.org/show_bug.cgi?id=797262
This commit is contained in:
parent
a03d29420b
commit
5d542030db
1 changed files with 12 additions and 0 deletions
|
@ -8999,6 +8999,18 @@ qtdemux_stbl_init (GstQTDemux * qtdemux, QtDemuxStream * stream, GNode * stbl)
|
||||||
|
|
||||||
gst_byte_reader_skip_unchecked (&stream->ctts, 4);
|
gst_byte_reader_skip_unchecked (&stream->ctts, 4);
|
||||||
offset = gst_byte_reader_get_int32_be_unchecked (&stream->ctts);
|
offset = gst_byte_reader_get_int32_be_unchecked (&stream->ctts);
|
||||||
|
/* HACK: if sample_offset is larger than 2 * duration, ignore the box.
|
||||||
|
* slightly inaccurate PTS could be more usable than corrupted one */
|
||||||
|
if (G_UNLIKELY ((ABS (offset) / 2) > stream->duration)) {
|
||||||
|
GST_WARNING_OBJECT (qtdemux,
|
||||||
|
"Ignore corrupted ctts, sample_offset %" G_GINT32_FORMAT
|
||||||
|
" larger than duration %" G_GUINT64_FORMAT,
|
||||||
|
offset, stream->duration);
|
||||||
|
|
||||||
|
stream->cslg_shift = 0;
|
||||||
|
stream->ctts_present = FALSE;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
if (offset < cslg_least)
|
if (offset < cslg_least)
|
||||||
cslg_least = offset;
|
cslg_least = offset;
|
||||||
|
|
Loading…
Reference in a new issue