From patchwork Tue Aug 20 13:37:37 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: velocityra@gmail.com X-Patchwork-Id: 14626 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 3B7CF447FAE for ; Tue, 20 Aug 2019 16:46:54 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2540068AAC2; Tue, 20 Aug 2019 16:46:54 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f43.google.com (mail-wr1-f43.google.com [209.85.221.43]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D60AD68A297 for ; Tue, 20 Aug 2019 16:46:47 +0300 (EEST) Received: by mail-wr1-f43.google.com with SMTP id q12so12464986wrj.12 for ; Tue, 20 Aug 2019 06:46:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=nrrnt6ZZsyBy2WhvS5VqghWmV/TjdApMa1+fNgjkXMM=; b=A0zrrdhRZEUG5TdM8ezfUKPB0VBX3XJ34WU5VyfFFxh5hf89n+2qYwJlylYklChNCD eW29e9cS0WY17wVTXeQLGmu08Qh63M2p3Pp+Z5dYp5bsT0ftOtosD+oznw7TP6FCyzhA JBuCdH+XEkMNGrM4GUe18rVMVbRVqw4XRNXOSlmTxAQXdPxeU5SBsM/+NFmjpdoqd29A XzP1ChCa07T+/ULw3qor+A2TW9lCL8Nw9t8ZKpagMoFcgSWDVOiuuJnGoOhZs8klnhUt 6ir4afiLfCuk+PSA8vpXTiIRwQecOLsolDIlx11XRFSlTQJDHz/ZKmWBFFkb7hTd7HEI INiQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=nrrnt6ZZsyBy2WhvS5VqghWmV/TjdApMa1+fNgjkXMM=; b=WW+CT9kFRvAVzpVTkAF049couIoDXWQmb3xpgVwAeKqH066S//zu/0tiJskcw8gC7S svPKOg4WlkU6O3H2KswaWFymz7mn3BY47lMCCnLJCZl85YG0uowizpXuDWqXYuA6Z2Ff wVH5P9V8LmV4tbSw7k1q0Ua49jo/JRRZ+AuIZltHVz2ssDvt9815iKGlIkC7SGJJJokT XqviO5uN5cuuffFSBL5fWUNKvEpnATfkkkp3rGGFxTlq63AM7uZyA54nnH/ygPDvXkbP VbJEh4Mek5WBxaBYJQCsEvL1RnbXNB8SJmR4PHRALxJ19b8XnhBfgZ7L9q2Sh8M9ffMf afVg== X-Gm-Message-State: APjAAAVt4xKqcpUz962Za83WxCR2zKXwPulpnW3GnHOrZ+FWtYqJm2DJ +u++DsPK/kA7zhuxh3tKDwfH1E1X X-Google-Smtp-Source: APXvYqz04K4F5afp663AY86SBei5tF2394n97bs1nz1Khxfci4cWlSyQpO2gdSxneB+s4zo+v8k24w== X-Received: by 2002:a5d:5041:: with SMTP id h1mr36450404wrt.30.1566308301536; Tue, 20 Aug 2019 06:38:21 -0700 (PDT) Received: from localhost.localdomain (ppp-94-66-223-133.home.otenet.gr. [94.66.223.133]) by smtp.gmail.com with ESMTPSA id t14sm11545882wrs.58.2019.08.20.06.38.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 20 Aug 2019 06:38:21 -0700 (PDT) From: Nick Renieris To: ffmpeg-devel@ffmpeg.org Date: Tue, 20 Aug 2019 16:37:37 +0300 Message-Id: <20190820133747.30983-5-velocityra@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190820133747.30983-1-velocityra@gmail.com> References: <20190811144542.11704-13-velocityra@gmail.com> <20190820133747.30983-1-velocityra@gmail.com> Subject: [FFmpeg-devel] [PATCH v15 05/15] lavc/jpegtables: Handle multiple mappings to the same value X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Nick Renieris MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" 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 --- libavcodec/jpegtables.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 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