From patchwork Sat Jan 30 09:19:06 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christophe Gisquet X-Patchwork-Id: 25276 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 AB8D044B05A for ; Sat, 30 Jan 2021 12:18:33 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 87B6468A6F0; Sat, 30 Jan 2021 12:18:33 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f50.google.com (mail-wr1-f50.google.com [209.85.221.50]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id EED866880C4 for ; Sat, 30 Jan 2021 12:18:26 +0200 (EET) Received: by mail-wr1-f50.google.com with SMTP id 7so11320135wrz.0 for ; Sat, 30 Jan 2021 02:18:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=KEI6wcI/cwp9F2ZWMN/xS+UXmxuwcbkUgvW12kd/aFM=; b=LOfK9EcCQRntdZnCj14b+C0OsyScS2imwVZ6IjSFMfzzpU5adHaMny5U8vJ0tZEWMy Kof5QFRNWI5181m7lqzxaf2vRdx9Tt+4d17yj3q4L79X10P7ymEzcWjPzyMPgmmOk/oL IjOP29a7gQr7N90eeJ1rf3tNZ7a1JCM9JNp987ZKfNXGJWfqZzn7Dy+kSZYHijp9wnyJ ZRJjEpnh9ybl59T5apQlAgO+5TRH0OUp6QUAnHIi6mvnzHcUshwSylwDjPkgSfbHQGqi dvL2a74WY8Z9jKvKQfcIK+hAISv0niaTN3eFCod7Ef3xu/xQnG3knH7pZ7Az2zVPphZ7 NUag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=KEI6wcI/cwp9F2ZWMN/xS+UXmxuwcbkUgvW12kd/aFM=; b=lgcWwrVlUSsJGeVhwYd2sWWXanccSpWjNKWPJYOJa+C0TWmacPMzaKf1FFI0ouH74X TBsUFVN2ou4rbwH5NJxPmFAbaqD16sBZvMaL3WHBuLcKyookfU5p2dQZtasw4/Sq0Rv8 hyia3KxuLwNE08SN7zjJxClME8NtGibKQg8xo52ccYqLnIBAQ4E4CDpssPEqy/+Cl24m 3VtcdcE13udkX3b0RiTURHzAhDsnIhL6UfSOQ5ujEl6AIECDS9vGRSVC4s/8jFnCR06g E4Il+ITzr+g0sQ8EPwSRWdVxZevADcie8LL2cH3R7vlc7kI7+k+4l+qTnEC6YkVtAMlT 4NQg== X-Gm-Message-State: AOAM531hsdtp4LC1QAt79OAtQmYbvJcmrF15Ruc15a8TlXSftXuBO8l/ oR5zAL8UbvpsBETyNg7tiLo7MzTaDg== X-Google-Smtp-Source: ABdhPJwXFOw3be1NWBrpPebVNl+sqmIVjL1sgeD2ApzgEVnM7dUuZpGrjj53pFfAibVCRf4aLTMtGQ== X-Received: by 2002:a05:6000:1543:: with SMTP id 3mr8799203wry.254.1611998422324; Sat, 30 Jan 2021 01:20:22 -0800 (PST) Received: from localhost.localdomain (lfbn-ren-1-785-160.w83-197.abo.wanadoo.fr. [83.197.112.160]) by smtp.gmail.com with ESMTPSA id w14sm16657582wro.86.2021.01.30.01.20.21 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 30 Jan 2021 01:20:21 -0800 (PST) From: Christophe Gisquet To: ffmpeg-devel@ffmpeg.org Date: Sat, 30 Jan 2021 09:19:06 +0000 Message-Id: <20210130091906.312-5-christophe.gisquet@gmail.com> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210130091906.312-1-christophe.gisquet@gmail.com> References: <20210130091906.312-1-christophe.gisquet@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 4/4] dnxhddec: partial alpha support 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Christophe Gisquet This consists in just ignoring the alpha at the end of the bitstream --- libavcodec/dnxhddec.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/libavcodec/dnxhddec.c b/libavcodec/dnxhddec.c index 11da1c286c..1de95996cf 100644 --- a/libavcodec/dnxhddec.c +++ b/libavcodec/dnxhddec.c @@ -202,7 +202,7 @@ static int dnxhd_decode_header(DNXHDContext *ctx, AVFrame *frame, ctx->cur_field = 0; } ctx->mbaff = (buf[0x6] >> 5) & 1; - ctx->alpha = buf[0x7] & 1; + ctx->alpha = buf[0x7] & 5; ctx->lla = (buf[0x7] >> 1) & 1; if (ctx->alpha) avpriv_request_sample(ctx->avctx, "alpha"); @@ -249,10 +249,14 @@ static int dnxhd_decode_header(DNXHDContext *ctx, AVFrame *frame, return AVERROR_INVALIDDATA; } else if (bitdepth == 10) { ctx->decode_dct_block = dnxhd_decode_dct_block_10_444; - ctx->pix_fmt = ctx->act ? AV_PIX_FMT_GBRP10 : AV_PIX_FMT_YUV444P10; + ctx->pix_fmt = ctx->act + ? (/*ctx->alpha ? AV_PIX_FMT_GBRAP10LE :*/ AV_PIX_FMT_GBRP10) + : (/*ctx->alpha ? AV_PIX_FMT_YUVA444P10LE :*/ AV_PIX_FMT_YUV444P10); } else { ctx->decode_dct_block = dnxhd_decode_dct_block_12_444; - ctx->pix_fmt = ctx->act ? AV_PIX_FMT_GBRP12 : AV_PIX_FMT_YUV444P12; + ctx->pix_fmt = ctx->act + ? (/*ctx->alpha ? AV_PIX_FMT_GBRAP12LE :*/ AV_PIX_FMT_GBRP12) + : (/*ctx->alpha ? AV_PIX_FMT_YUVA444P12LE :*/ AV_PIX_FMT_YUV444P12); } } else if (bitdepth == 12) { ctx->decode_dct_block = dnxhd_decode_dct_block_12; @@ -337,7 +341,7 @@ static int dnxhd_decode_header(DNXHDContext *ctx, AVFrame *frame, i, 0x170 + (i << 2), ctx->mb_scan_index[i]); if (buf_size - ctx->data_offset < ctx->mb_scan_index[i]) { av_log(ctx->avctx, AV_LOG_ERROR, - "invalid mb scan index (%"PRIu32" vs %u).\n", + "invalid mb %i scan index (%"PRIu32" vs %u).\n", i, ctx->mb_scan_index[i], buf_size - ctx->data_offset); return AVERROR_INVALIDDATA; } @@ -642,6 +646,12 @@ static int dnxhd_decode_row(AVCodecContext *avctx, void *data, } } + /* alpha decoding goes there */ + if (ctx->alpha) { + ff_dlog(ctx->avctx, "Row %d: %d left\n", rownb, + ((rownb < ctx->mb_height-1 ? ctx->mb_scan_index[rownb+1] : ctx->buf_size) - offset) * 8 - get_bits_count(&row->gb)); + } + return 0; } @@ -735,11 +745,13 @@ decode_coding_unit: case -1: case 0: ctx->pix_fmt = ctx->bit_depth==10 - ? AV_PIX_FMT_GBRP10 : AV_PIX_FMT_GBRP12; + ? (/*ctx->alpha ? AV_PIX_FMT_GBRAP10 :*/ AV_PIX_FMT_GBRP10) + : (/*ctx->alpha ? AV_PIX_FMT_GBRAP12 :*/ AV_PIX_FMT_GBRP12); break; case 1: ctx->pix_fmt = ctx->bit_depth==10 - ? AV_PIX_FMT_YUV444P10 : AV_PIX_FMT_YUV444P12; + ? (/*ctx->alpha ? AV_PIX_FMT_YUVA444P10 :*/ AV_PIX_FMT_YUV444P10) + : (/*ctx->alpha ? AV_PIX_FMT_YUVA444P12 :*/ AV_PIX_FMT_YUV444P12); break; } }