[FFmpeg-devel] [PATCH v16 05/15] lavc/jpegtables: Handle multiple mappings to the same value
Michael Niedermayer
michael at niedermayer.cc
Thu Aug 29 16:00:15 EEST 2019
On Wed, Aug 28, 2019 at 03:27:13PM +0300, Nick Renieris wrote:
> From: Nick Renieris <velocityra at gmail.com>
>
> Some JPEGs [1] have incorrect DHT entries that map 2 codes to
> the same value.
>
> The second (last) mapping does not ever actually appear in the
> code stream, therefore ignoring any mappings after the first one
> fixes this.
>
> Without this, an "mjpeg_decode_dc: bad vlc: 0:0" error is thrown.
>
> In all known files, the 2 codes are mapped to symbol 0 so only
> that case is checked.
>
> [1]: Embedded JPEGs in "X7 RAW" and "X7 CinemaDNG" samples here:
> https://www.dji.com/gr/zenmuse-x7/info#downloads
>
> Signed-off-by: Nick Renieris <velocityra at gmail.com>
> ---
> libavcodec/jpegtables.c | 17 ++++++++++++++---
> libavcodec/tiff.c | 6 +++---
> 2 files changed, 17 insertions(+), 6 deletions(-)
>
> diff --git a/libavcodec/jpegtables.c b/libavcodec/jpegtables.c
> index cbe5523cb4..fa5c6f9fc5 100644
> --- a/libavcodec/jpegtables.c
> +++ b/libavcodec/jpegtables.c
> @@ -130,14 +130,25 @@ void ff_mjpeg_build_huffman_codes(uint8_t *huff_size, uint16_t *huff_code,
> {
> int i, j, k,nb, code, sym;
>
> - code = 0;
> + /* Some badly encoded files [1] map 2 different codes to symbol 0.
> + Only the first one is valid, so we zero-initialize this here and
> + make sure we only set it once (the first time) in the loop below.
> +
> + [1]: Embedded JPEGs in "X7 RAW" and "X7 CinemaDNG" samples here:
> + https://www.dji.com/gr/zenmuse-x7/info#downloads
> + */
> + huff_size[0] = 0;
> +
> k = 0;
> + code = 0;
> for(i=1;i<=16;i++) {
> nb = bits_table[i];
> for(j=0;j<nb;j++) {
> sym = val_table[k++];
> - huff_size[sym] = i;
> - huff_code[sym] = code;
> + if (sym != 0 || huff_size[sym] == 0) { /* see comment above */
> + huff_size[sym] = i;
> + huff_code[sym] = code;
> + }
> code++;
> }
> code <<= 1;
> diff --git a/libavcodec/tiff.c b/libavcodec/tiff.c
> index dd1295fad6..78b4bd5301 100644
> --- a/libavcodec/tiff.c
> +++ b/libavcodec/tiff.c
> @@ -754,10 +754,10 @@ static int tiff_unpack_strip(TiffContext *s, AVFrame *p, uint8_t *dst, int strid
> }
>
> static float av_always_inline linear_to_srgb(float value) {
> - if (value <= 0.0031308)
> - return value * 12.92;
> + if (value <= 0.0031308f)
> + return value * 12.92f;
> else
> - return pow(value * 1.055, 1.0 / 2.4) - 0.055;
> + return powf(value * 1.055f, 1.0f / 2.4f) - 0.055f;
> }
This looks unrelated
[...]
--
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
Opposition brings concord. Out of discord comes the fairest harmony.
-- Heraclitus
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: not available
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20190829/cde6c1f8/attachment.sig>
More information about the ffmpeg-devel
mailing list