Message ID | 20220525161012.1077373-1-leo.izen@gmail.com |
---|---|
State | New |
Headers | show |
Series | [FFmpeg-devel,v2] avformat/jpegxl_probe: fix incorrect cw_mask and extensions probing | expand |
Context | Check | Description |
---|---|---|
yinshiyou/make_loongarch64 | success | Make finished |
yinshiyou/make_fate_loongarch64 | success | Make fate finished |
andriy/make_x86 | success | Make finished |
andriy/make_fate_x86 | success | Make fate finished |
andriy/make_armv7_RPi4 | success | Make finished |
andriy/make_fate_armv7_RPi4 | success | Make fate finished |
On 5/25/22 12:10, Leo Izen wrote: > - Fix incorrectly skipping over the upX_weights > if the cw_mask is present and it is not a multiple of 4. > > - Fix not skipping over the extensions payload if an extension > is present. > --- > libavformat/jpegxl_probe.c | 15 +++++++++++---- > 1 file changed, 11 insertions(+), 4 deletions(-) > > diff --git a/libavformat/jpegxl_probe.c b/libavformat/jpegxl_probe.c > index 9cd00da194..b5aac4869b 100644 > --- a/libavformat/jpegxl_probe.c > +++ b/libavformat/jpegxl_probe.c > @@ -359,24 +359,31 @@ int ff_jpegxl_verify_codestream_header(const uint8_t *buf, int buflen) > > extensions = jxl_u64(); > if (extensions) { > + uint64_t extensions_len = 0; > for (int i = 0; i < 64; i++) { > if (extensions & (UINT64_C(1) << i)) > - jxl_u64(); > + extensions_len += jxl_u64(); > } > + if (extensions_len) > + jxl_bits_skip(extensions_len); > } > } > > /* default transform */ > if (!jxl_bits(1)) { > + uint32_t cw_mask; > + > /* opsin inverse matrix */ > if (xyb_encoded && !jxl_bits(1)) > jxl_bits_skip(16 * 16); > + > /* cw_mask and default weights */ > - if (jxl_bits(1)) > + cw_mask = jxl_bits(3); > + if (cw_mask & 1) > jxl_bits_skip(16 * 15); > - if (jxl_bits(1)) > + if (cw_mask & 2) > jxl_bits_skip(16 * 55); > - if (jxl_bits(1)) > + if (cw_mask & 4) > jxl_bits_skip(16 * 210); > } > Bumping for review. - Leo Izen (thebombzen)
diff --git a/libavformat/jpegxl_probe.c b/libavformat/jpegxl_probe.c index 9cd00da194..b5aac4869b 100644 --- a/libavformat/jpegxl_probe.c +++ b/libavformat/jpegxl_probe.c @@ -359,24 +359,31 @@ int ff_jpegxl_verify_codestream_header(const uint8_t *buf, int buflen) extensions = jxl_u64(); if (extensions) { + uint64_t extensions_len = 0; for (int i = 0; i < 64; i++) { if (extensions & (UINT64_C(1) << i)) - jxl_u64(); + extensions_len += jxl_u64(); } + if (extensions_len) + jxl_bits_skip(extensions_len); } } /* default transform */ if (!jxl_bits(1)) { + uint32_t cw_mask; + /* opsin inverse matrix */ if (xyb_encoded && !jxl_bits(1)) jxl_bits_skip(16 * 16); + /* cw_mask and default weights */ - if (jxl_bits(1)) + cw_mask = jxl_bits(3); + if (cw_mask & 1) jxl_bits_skip(16 * 15); - if (jxl_bits(1)) + if (cw_mask & 2) jxl_bits_skip(16 * 55); - if (jxl_bits(1)) + if (cw_mask & 4) jxl_bits_skip(16 * 210); }