From patchwork Tue Apr 9 12:57:26 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 47977 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:9c8d:b0:1a7:a0dc:8de5 with SMTP id mj13csp333139pzb; Tue, 9 Apr 2024 06:00:44 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCUlN7FlJsl7JD3oWaulD3bU5y4z8jfeDSXwRHZGmX0LZyeRPbzwJ1kjpAZhpKAs8sdmy3ijtIHjdIqSTeJjaY83FxPjW2NaSjIQ8A== X-Google-Smtp-Source: AGHT+IHse/36bj5jzIxnl63l8rVUQeLHaDrAvLzkSNfAgLCJLcvI/7L62QGv5RYGN5eIcq5qA9ZM X-Received: by 2002:a17:906:4144:b0:a51:ce1f:21b2 with SMTP id l4-20020a170906414400b00a51ce1f21b2mr4158484ejk.6.1712667644514; Tue, 09 Apr 2024 06:00:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1712667644; cv=none; d=google.com; s=arc-20160816; b=xshR7ChQLIavj4aSogf68V+BBOyT4sR82lHA9PwOG9ol0TQilDAE2AHnxan5V1gADd 2AaPfjFhNt5tXsY/KLwke6+H61B3c6sl/Dx4vlNia6wCKmAWqaOazoayq5oTKRPOJfGz 9FS7/4MEAr/+4OQeOeKcjZeeL3hOwBnfDfoGMltzF84kigoueoN5ion5Zmn2jvUmWG+n PHJ1gfB61qKapCSB9TwVmE1PWDY7zhIKtI0trKoB96jNcflUL1eAR1q5fGF8DRDK+3ur oVRJhBqTuftSpc7FPDhHp2KT6dWHyWOZlu4OiXYZQlO5ysjpaan5waD9Nm1Zw4vZhR3r XrBw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=S1Z3j8+4vCqAAxa9Xnrjn/etMC6HQrDrcMqK6pZ17gU=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=fi+rsb4LSpNjajVOPcWTHBin5w2aCyWdJ+iybrIdhEVqlnUq/l3gSM72InuwjTbBR/ nBr3CyBa/ZfhmQlFU+3JQRB1MfBMc+K8gtcCDvip4erGtyPK9nrQ1gz9BV/W91lRNBeC GcucRx/OaueHYHUu/A4ywtJ9LKv24RBXWHjmqUEcOhr8syIjuArxjO0N9vq/Ip6/jEkR ATY0JAY8Dlnb9Tu0tg0p3d0cvfa0t0dVENaMkUbHSc9nI6t81DMuOjDqj7+h+Hjw3PLE VdI/oc2PW9Rgm+RlXHe+kjGWJZ9rfQoZ9QzKS4QKGK22hXPusKYRFkuqUSAXagFbudb1 I/Yg==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=VVg9sxUR; 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 qk20-20020a1709077f9400b00a46a9425fd0si4696862ejc.627.2024.04.09.06.00.38; Tue, 09 Apr 2024 06:00:44 -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; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=VVg9sxUR; 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 0F6D168D18D; Tue, 9 Apr 2024 15:59:30 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D788568D180 for ; Tue, 9 Apr 2024 15:59:21 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1712667557; bh=rNULlvuFK9xeMtZfgFTffJsJSf/9BVVZ2dJqJEUvJas=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=VVg9sxURIcPu+7LnG141Zt5YFGTDRLiJjCAdSbwQDQ4CCCE58EDadBthKdw7mrmBT pLE+f9ORk72h5UGMkod4in5EokQK82IBZ7YaTwMWFjg0XSXRtQvl+BL0MZEc2GOyjz cHnMBSmr4Mf/8ITdy//KdkdsxyIDs3DC0IkHsMp8= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id AEA1142B27; Tue, 9 Apr 2024 14:59:17 +0200 (CEST) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Tue, 9 Apr 2024 14:57:26 +0200 Message-ID: <20240409125914.61149-7-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240409125914.61149-1-ffmpeg@haasn.xyz> References: <20240409125914.61149-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 06/11] avcodec/dovi_rpu: make `enable` also affect decoding 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 Cc: Niklas Haas Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: zLwPZ4SxU7IP From: Niklas Haas This could be used by codecs to selectively disable parsing Dolby Vision RPUs, and is cheap to support. --- libavcodec/av1dec.c | 1 + libavcodec/dovi_rpu.c | 6 ++++++ libavcodec/dovi_rpu.h | 2 ++ libavcodec/hevcdec.c | 1 + libavcodec/libdav1d.c | 1 + 5 files changed, 11 insertions(+) diff --git a/libavcodec/av1dec.c b/libavcodec/av1dec.c index 4c1405df779..20865b4f129 100644 --- a/libavcodec/av1dec.c +++ b/libavcodec/av1dec.c @@ -1551,6 +1551,7 @@ static void av1_decode_flush(AVCodecContext *avctx) static const AVOption av1_options[] = { { "operating_point", "Select an operating point of the scalable bitstream", OFFSET(operating_point), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, AV1_MAX_OPERATING_POINTS - 1, VD }, + { "dolbyvision", "Decode Dolby Vision RPUs", OFFSET(dovi.enable), AV_OPT_TYPE_BOOL, {.i64 = 1 }, 0, 1, VD }, { NULL } }; diff --git a/libavcodec/dovi_rpu.c b/libavcodec/dovi_rpu.c index d3a284c150d..54994188a96 100644 --- a/libavcodec/dovi_rpu.c +++ b/libavcodec/dovi_rpu.c @@ -90,6 +90,9 @@ int ff_dovi_attach_side_data(DOVIContext *s, AVFrame *frame) AVDOVIMetadata *dovi; size_t dovi_size, ext_sz; + if (!s->enable) + return 0; + if (!s->mapping || !s->color) return 0; /* incomplete dovi metadata */ @@ -558,6 +561,9 @@ int ff_dovi_rpu_parse(DOVIContext *s, const uint8_t *rpu, size_t rpu_size, uint8_t use_nlq; uint8_t profile; + if (!s->enable) + return 0; + if (rpu_size < 5) goto fail; diff --git a/libavcodec/dovi_rpu.h b/libavcodec/dovi_rpu.h index 56395707369..8dc69a2733d 100644 --- a/libavcodec/dovi_rpu.h +++ b/libavcodec/dovi_rpu.h @@ -37,6 +37,8 @@ typedef struct DOVIContext { * * For encoding, FF_DOVI_AUTOMATIC enables Dolby Vision only if * avctx->decoded_side_data contains an AVDOVIMetadata. + * + * For decoding, FF_DOVI_AUTOMATIC has the same meaning as 1. */ #define FF_DOVI_AUTOMATIC -1 int enable; diff --git a/libavcodec/hevcdec.c b/libavcodec/hevcdec.c index 4bc9e2afc1d..651773260e3 100644 --- a/libavcodec/hevcdec.c +++ b/libavcodec/hevcdec.c @@ -3689,6 +3689,7 @@ static const AVOption options[] = { AV_OPT_TYPE_BOOL, {.i64 = 0}, 0, 1, PAR }, { "strict-displaywin", "stricly apply default display window size", OFFSET(apply_defdispwin), AV_OPT_TYPE_BOOL, {.i64 = 0}, 0, 1, PAR }, + { "dolbyvision", "Decode Dolby Vision RPUs", OFFSET(dovi_ctx.enable), AV_OPT_TYPE_BOOL, {.i64 = 1 }, 0, 1, PAR }, { NULL }, }; diff --git a/libavcodec/libdav1d.c b/libavcodec/libdav1d.c index 09fe767fb86..f9e1a181fc3 100644 --- a/libavcodec/libdav1d.c +++ b/libavcodec/libdav1d.c @@ -674,6 +674,7 @@ static const AVOption libdav1d_options[] = { { "filmgrain", "Apply Film Grain", OFFSET(apply_grain), AV_OPT_TYPE_BOOL, { .i64 = -1 }, -1, 1, VD | AV_OPT_FLAG_DEPRECATED }, { "oppoint", "Select an operating point of the scalable bitstream", OFFSET(operating_point), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 31, VD }, { "alllayers", "Output all spatial layers", OFFSET(all_layers), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VD }, + { "dolbyvision", "Decode Dolby Vision RPUs", OFFSET(dovi.enable), AV_OPT_TYPE_BOOL, {.i64 = 1 }, 0, 1, VD }, { NULL } };