mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-22 16:26:39 +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/7564>
This commit is contained in:
parent
66f1c9fd13
commit
d4bab55077
1 changed files with 36 additions and 18 deletions
|
@ -12226,9 +12226,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:
|
||||
|
@ -12343,9 +12346,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:
|
||||
|
@ -12767,9 +12773,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'):
|
||||
|
@ -12809,9 +12818,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:
|
||||
|
@ -12919,9 +12931,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:
|
||||
|
@ -13421,9 +13436,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