From patchwork Sun May 2 13:59:05 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Niedermayer X-Patchwork-Id: 27555 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a11:cc:0:0:0:0 with SMTP id m12csp1250295pxt; Sun, 2 May 2021 07:00:24 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyv+pFnx1QovDPLAt63CsSpPlifE6bp6LWcoitv/9sIyIfjUlHNzt/TFP5txsFdJTFnYzwi X-Received: by 2002:a17:906:b156:: with SMTP id bt22mr12823832ejb.181.1619964024614; Sun, 02 May 2021 07:00:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1619964024; cv=none; d=google.com; s=arc-20160816; b=gVyRsXftNe7+oNZuWtxR42xLbDlQUGmcbnNGfMb41rzZcGFihsMdRbkoRDRbi72Oz4 +SFtpWECVEh73sDBEV6IgV/ywmK63x5KBCMjpRKmuOA75Z6PfkS3oYwVS9RxhztOXO3I Q3Wv2YAnhVoLf1MkGX11Ak8n5lOZ1HjoWlU5Yohw1we79NOJoZpJsKWR7yenFwJJtFMC dwLHKXdDvhQBWH4qPGOt3ugPRur3o9DNAmb/85Pw8ocH4UT/5Qqt2pjAm1ckQ8WUyzo+ xuNR6WjB5Sca6sthopAtax8zU7wcuCoLaZrM92ec/C7orwRAlnzXHV+NDkFmANj75MLV LFZQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:references:in-reply-to:message-id:date :to:from:delivered-to; bh=G9+U6TMh+jHj5r4sns7epse0ZkvS+2qob2/1AEKJX5E=; b=YnJuRecFmAsv5LET4evAb6ESqBWfIq6eKGAHsVE3o4Yh2KKC8LCeRMfHxC9oEDfazx NOIIXgmeQF907/x0uGMv2ODOudfd3y7LXE3AfVAV3jpHmfT10DbhoxoGtbJtD89fU9Zw TL1sJnbN1cUQLRZtPaFSw/KdHiJ8mDnEMwLgZ9e+Z9QYKGK9ipGn0hwCeo8J0IFoVsbq +aFYRbSb3NqJ/2oZFruPKKIbQiYzjf5G3kmpwZPDpPE7QY3tQPDGwXUszp305vccFVPJ pI+SnCqhFWDlVZkJeNHG72c7sup8tvooWjXlnf9DmTeUrXI443wdz/KQqip+ONYLUuhj kvAw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id e12si8222197ejz.266.2021.05.02.07.00.24; Sun, 02 May 2021 07:00:24 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 019CB6897DE; Sun, 2 May 2021 17:00:15 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from vie01a-dmta-pe03-1.mx.upcmail.net (vie01a-dmta-pe03-1.mx.upcmail.net [62.179.121.160]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 89F3668805F for ; Sun, 2 May 2021 17:00:07 +0300 (EEST) Received: from [172.31.216.235] (helo=vie01a-pemc-psmtp-pe12.mail.upcmail.net) by vie01a-dmta-pe03.mx.upcmail.net with esmtp (Exim 4.92) (envelope-from ) id 1ldCdj-00AwyN-0I for ffmpeg-devel@ffmpeg.org; Sun, 02 May 2021 16:00:07 +0200 Received: from localhost ([213.47.68.29]) by vie01a-pemc-psmtp-pe12.mail.upcmail.net with ESMTP id dCclleYfOljeHdCcllCfh5; Sun, 02 May 2021 15:59:07 +0200 X-Env-Mailfrom: michael@niedermayer.cc X-Env-Rcptto: ffmpeg-devel@ffmpeg.org X-SourceIP: 213.47.68.29 X-CNFS-Analysis: v=2.3 cv=BoHjPrf5 c=1 sm=1 tr=0 a=2hcxjKEKjp0CzLx6oWAm4g==:117 a=2hcxjKEKjp0CzLx6oWAm4g==:17 a=MKtGQD3n3ToA:10 a=1oJP67jkp3AA:10 a=GEAsPZ9sns4A:10 a=ZZnuYtJkoWoA:10 a=9GHDQ7sCeqCSBFeNCJEA:9 a=pHzHmUro8NiASowvMSCR:22 a=Ew2E2A-JSTLzCXPT_086:22 From: Michael Niedermayer To: FFmpeg development discussions and patches Date: Sun, 2 May 2021 15:59:05 +0200 Message-Id: <20210502135906.12288-3-michael@niedermayer.cc> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210502135906.12288-1-michael@niedermayer.cc> References: <20210502135906.12288-1-michael@niedermayer.cc> X-CMAE-Envelope: MS4wfLEjznkJP89Ee2LVuKwi4XEdFTiwqTlBGhX6YORoOps1LBepz5uJscnGt9UNO0YwKL/zLALQzMHv2Zvma24K7zsLPkz6wQyLfzjrGhSA/EAYVBlqhV74 AgGOfP7oy4nNwLmljczZ0K0+mUwyhRDrXL49wWmMwEzcXPiuXYuU82Sa Subject: [FFmpeg-devel] [PATCH 3/4] avcodec/mjpegdec: Decode to PAL8 independant of the location of LSE X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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 MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 9oD5EyCBcRya This simply performs a 2nd pass if a LSE is encountered with GRAY8 Fixes: tickets/3933/128.jls Signed-off-by: Michael Niedermayer --- libavcodec/jpeglsdec.c | 6 ++++-- libavcodec/mjpegdec.c | 10 +++++++--- libavcodec/mjpegdec.h | 1 + 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/libavcodec/jpeglsdec.c b/libavcodec/jpeglsdec.c index d79bbe1ee3..bd9224d97d 100644 --- a/libavcodec/jpeglsdec.c +++ b/libavcodec/jpeglsdec.c @@ -118,8 +118,10 @@ int ff_jpegls_decode_lse(MJpegDecodeContext *s) shift = 8 - s->avctx->bits_per_raw_sample; } - s->picture_ptr->format = - s->avctx->pix_fmt = AV_PIX_FMT_PAL8; + s->force_pal8 = 1; + if (!pal) + return 1; + for (i=s->palette_index; i<=maxtab; i++) { uint8_t k = i << shift; pal[k] = 0; diff --git a/libavcodec/mjpegdec.c b/libavcodec/mjpegdec.c index 7c66ff8637..0691148027 100644 --- a/libavcodec/mjpegdec.c +++ b/libavcodec/mjpegdec.c @@ -582,7 +582,7 @@ int ff_mjpeg_decode_sof(MJpegDecodeContext *s) case 0x43000000: case 0x44000000: if(s->bits <= 8) - s->avctx->pix_fmt = AV_PIX_FMT_GRAY8; + s->avctx->pix_fmt = s->force_pal8 ? AV_PIX_FMT_PAL8 : AV_PIX_FMT_GRAY8; else s->avctx->pix_fmt = AV_PIX_FMT_GRAY16; break; @@ -681,7 +681,7 @@ int ff_mjpeg_decode_sof(MJpegDecodeContext *s) } else if (s->nb_components != 1) { av_log(s->avctx, AV_LOG_ERROR, "Unsupported number of components %d\n", s->nb_components); return AVERROR_PATCHWELCOME; - } else if (s->palette_index && s->bits <= 8) + } else if (s->palette_index && s->bits <= 8 || s->force_pal8) s->avctx->pix_fmt = AV_PIX_FMT_PAL8; else if (s->bits <= 8) s->avctx->pix_fmt = AV_PIX_FMT_GRAY8; @@ -2398,6 +2398,8 @@ int ff_mjpeg_receive_frame(AVCodecContext *avctx, AVFrame *frame) int ret = 0; int is16bit; + s->force_pal8 = 0; + if (avctx->codec_id == AV_CODEC_ID_SMVJPEG && s->smv_next_frame > 0) return smv_process_frame(avctx, frame); @@ -2411,7 +2413,7 @@ int ff_mjpeg_receive_frame(AVCodecContext *avctx, AVFrame *frame) ret = mjpeg_get_packet(avctx); if (ret < 0) return ret; - +redo_for_pal8: buf_ptr = s->pkt->data; buf_end = s->pkt->data + s->pkt->size; while (buf_ptr < buf_end) { @@ -2542,6 +2544,8 @@ int ff_mjpeg_receive_frame(AVCodecContext *avctx, AVFrame *frame) if (!CONFIG_JPEGLS_DECODER || (ret = ff_jpegls_decode_lse(s)) < 0) goto fail; + if (ret == 1) + goto redo_for_pal8; break; case EOI: eoi_parser: diff --git a/libavcodec/mjpegdec.h b/libavcodec/mjpegdec.h index 2400a179f1..648dd714e1 100644 --- a/libavcodec/mjpegdec.h +++ b/libavcodec/mjpegdec.h @@ -117,6 +117,7 @@ typedef struct MJpegDecodeContext { uint8_t *last_nnz[MAX_COMPONENTS]; uint64_t coefs_finished[MAX_COMPONENTS]; ///< bitmask of which coefs have been completely decoded (progressive mode) int palette_index; + int force_pal8; ScanTable scantable; BlockDSPContext bdsp; HpelDSPContext hdsp;