mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-05 15:08:48 +00:00
qtdemux: Skip zero-sized boxes instead of stopping to look at further boxes
A zero-sized box is not really a problem and can be skipped to look at any possibly following ones. BMD ATEM devices specifically write a zero-sized bmdc box in the sample description, followed by the avcC box in case of h264. Previously the avcC box would simply not be read at all and the file would be unplayable. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7565>
This commit is contained in:
parent
bcf16055aa
commit
c9d1a1d53c
1 changed files with 36 additions and 18 deletions
|
@ -12219,9 +12219,12 @@ qtdemux_parse_trak (GstQTDemux * qtdemux, GNode * trak)
|
|||
else
|
||||
size = len - 0x8;
|
||||
|
||||
if (size < 1)
|
||||
/* No real data, so break out */
|
||||
break;
|
||||
/* No real data, so skip */
|
||||
if (size < 1) {
|
||||
len -= 8;
|
||||
avc_data += 8;
|
||||
continue;
|
||||
}
|
||||
|
||||
switch (QT_FOURCC (avc_data + 0x4)) {
|
||||
case FOURCC_avcC:
|
||||
|
@ -12336,9 +12339,12 @@ qtdemux_parse_trak (GstQTDemux * qtdemux, GNode * trak)
|
|||
else
|
||||
size = len - 0x8;
|
||||
|
||||
if (size < 1)
|
||||
/* No real data, so break out */
|
||||
break;
|
||||
/* No real data, so skip */
|
||||
if (size < 1) {
|
||||
len -= 8;
|
||||
hevc_data += 8;
|
||||
continue;
|
||||
}
|
||||
|
||||
switch (QT_FOURCC (hevc_data + 0x4)) {
|
||||
case FOURCC_hvcC:
|
||||
|
@ -12760,9 +12766,12 @@ qtdemux_parse_trak (GstQTDemux * qtdemux, GNode * trak)
|
|||
else
|
||||
size = len - 8;
|
||||
|
||||
if (size < 1)
|
||||
/* No real data, so break out */
|
||||
break;
|
||||
/* No real data, so skip */
|
||||
if (size < 1) {
|
||||
len -= 8;
|
||||
vc1_data += 8;
|
||||
continue;
|
||||
}
|
||||
|
||||
switch (QT_FOURCC (vc1_data + 0x4)) {
|
||||
case GST_MAKE_FOURCC ('d', 'v', 'c', '1'):
|
||||
|
@ -12802,9 +12811,12 @@ qtdemux_parse_trak (GstQTDemux * qtdemux, GNode * trak)
|
|||
else
|
||||
size = len - 0x8;
|
||||
|
||||
if (size < 1)
|
||||
/* No real data, so break out */
|
||||
break;
|
||||
/* No real data, so skip */
|
||||
if (size < 1) {
|
||||
len -= 8;
|
||||
av1_data += 8;
|
||||
continue;
|
||||
}
|
||||
|
||||
switch (QT_FOURCC (av1_data + 0x4)) {
|
||||
case FOURCC_av1C:
|
||||
|
@ -12912,9 +12924,12 @@ qtdemux_parse_trak (GstQTDemux * qtdemux, GNode * trak)
|
|||
else
|
||||
size = len - 0x8;
|
||||
|
||||
if (size < 1)
|
||||
/* No real data, so break out */
|
||||
break;
|
||||
/* No real data, so skip */
|
||||
if (size < 1) {
|
||||
len -= 8;
|
||||
vpcc_data += 8;
|
||||
continue;
|
||||
}
|
||||
|
||||
switch (QT_FOURCC (vpcc_data + 0x4)) {
|
||||
case FOURCC_vpcC:
|
||||
|
@ -13414,9 +13429,12 @@ qtdemux_parse_trak (GstQTDemux * qtdemux, GNode * trak)
|
|||
else
|
||||
size = len - 8;
|
||||
|
||||
if (size < 1)
|
||||
/* No real data, so break out */
|
||||
break;
|
||||
/* No real data, so skip */
|
||||
if (size < 1) {
|
||||
len -= 8;
|
||||
wfex_data += 8;
|
||||
continue;
|
||||
}
|
||||
|
||||
switch (QT_FOURCC (wfex_data + 4)) {
|
||||
case GST_MAKE_FOURCC ('w', 'f', 'e', 'x'):
|
||||
|
|
Loading…
Reference in a new issue