[FFmpeg-devel] [PATCH v12 05/14] lavc/jpegtables: Handle multiple mappings to the same value

Michael Niedermayer michael at niedermayer.cc
Sat Aug 10 16:11:32 EEST 2019


On Fri, Aug 09, 2019 at 07:29:50PM +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.
> 
> ---
> 
> [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 | 19 ++++++++++++++++---
>  1 file changed, 16 insertions(+), 3 deletions(-)
> 
> diff --git a/libavcodec/jpegtables.c b/libavcodec/jpegtables.c
> index cbe5523cb4..6f596cfc92 100644
> --- a/libavcodec/jpegtables.c
> +++ b/libavcodec/jpegtables.c
> @@ -130,14 +130,27 @@ void ff_mjpeg_build_huffman_codes(uint8_t *huff_size, uint16_t *huff_code,
>  {
>      int i, j, k,nb, code, sym;
>  
> -    code = 0;
> +    /* Zero-initialize huff_size (needed for multiple mappings check below) */
> +    k = 0;
> +    for(i=1;i<=16;i++) {
> +        nb = bits_table[i];
> +        for(j=0;j<nb;j++) {
> +            sym = val_table[k++];
> +            huff_size[sym] = 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 there are multiple mappings to the same sym (bad files), keep the first code */
> +            if (huff_size[sym] == 0) {
> +                huff_size[sym] = i;
> +                huff_code[sym] = code;
> +            }

do these occur with sym different from 0 ?
if its just 0 then this can be simplified alot

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

I do not agree with what you have to say, but I'll defend to the death your
right to say it. -- Voltaire
-------------- 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/20190810/07ac2624/attachment.sig>


More information about the ffmpeg-devel mailing list