From patchwork Sat Oct 28 14:41:08 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 44405 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:dd83:b0:15d:8365:d4b8 with SMTP id kw3csp497842pzb; Sat, 28 Oct 2023 07:44:54 -0700 (PDT) X-Google-Smtp-Source: AGHT+IE6afbqpJ/oK18ghEaXu2loaZFyUk6T2za10lDsNArvRh9nQ5d0YG7AlvaxhWN4NtJ5DNTA X-Received: by 2002:ac2:5dea:0:b0:506:8e27:7ce9 with SMTP id z10-20020ac25dea000000b005068e277ce9mr3704853lfq.16.1698504294369; Sat, 28 Oct 2023 07:44:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698504294; cv=none; d=google.com; s=arc-20160816; b=IRDsYgNeONMLbVpqQBbKyqfoxydfGTZVDKnO8Mx71Jy0/2yjVz8CfBzyGEQK6MBIeS uYdBUHovzpu3LGSW3CDxKjVA8CAY76cKr+OQUoBE+YOu3wKqNHyjgfvehW89qRT2w5sf Nzg8ltdKN1tiJj6j2GVJsKs/i7GF5clwNSRubNOo1PKNvI6UdsaPXsmuVdOJt28yacBN bpv+U3Z87Opo8AhcqcGZke5uBDWF16iYGKkNAFSY8hPok/v82feTpKnc2ukIF59mfTfe YhksnLSIgEvoaT4HGQfjZTIFD/jduOOlc5WEKmOKLICdHq8F2U2W++/dztg/ubCFHstJ moEQ== 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=JcKBT1Xb5GZOLTb0yM/Qn91MGVAccOFvCj9yqH7GPx0=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=fhvsiafe9VnVTQHHM2rm2Q2qjCzDg6Vqw4VHiVTPD96/RU0524c8wUxsOmV/gXbLZc Duv2WSVDz8BXyv95b592DSEmNWPgbVtehq7HcNJ5/3OdzR9lj8U2FliuMhbAc41unmaM 4J7Od4v1Q2GnmlPrUmp8o4enh71oWlgNMjbjEyHGvICf5ZS4KxC+d7UiICWOKzaD7f6J B8/oDyzPmUKjGr4ENAFDO8vM06XzmbhvKXuc320ryWjFaEpCtL2sfxg83F8EgRTdJKfS O4apJ6RZONvDoMJaYSEmDoCcD0R6Yk2VV/Z9Dj/UaL9R9IaiskiQrgVB3eDLcCx3C+M1 AgRg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=O5WRZSLn; 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 ch15-20020a0564021bcf00b0053e1cb26246si420596edb.141.2023.10.28.07.44.53; Sat, 28 Oct 2023 07:44:54 -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=O5WRZSLn; 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 9553C68CA9B; Sat, 28 Oct 2023 17:44:42 +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 6E85C68C96A for ; Sat, 28 Oct 2023 17:44:35 +0300 (EEST) Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 28A9A41EC3; Sat, 28 Oct 2023 16:44:35 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1698504275; bh=dW2Yxi4RGVNynukmBkUaUCkNK04Q5h1fYm+SYEpeUtk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=O5WRZSLn/Z4y5qtraSokY3bAKjcJ2M6V2swLnBMovnkayQHYaHVQPCpNVy0uUuGPO 3FtlNWQHYOgUdTZZMc4ymnPByPKbx//3XlDyOe26cKwmAYbxgWWQxgpE1Lu9notI97 D/I/p1PxZzxwqfq9f+mEUB9pz/NaFROBIwd3+XxI= From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Sat, 28 Oct 2023 16:41:08 +0200 Message-ID: <20231028144430.60538-2-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20231028144430.60538-1-ffmpeg@haasn.xyz> References: <20231028144430.60538-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 01/10] swscale: fix sws_setColorspaceDetails after sws_init_context 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: /v3b05RJS6dD From: Niklas Haas More commonly, this fixes the case of sws_setColorspaceDetails after sws_getContext, since the latter implies sws_init_context. The problem here is that sws_init_context sets up the range conversion and fast path tables based on the values of srcRange/dstRange at init time. This may result in locking in a "wrong" path (either using unscaled fast path when range conversion later required, or using scaled slow path when range conversion becomes no longer required). There are two way outs: 1. Always initialize range conversion and unscaled converters, even if they will be unused, and extend the runtime check. 2. Re-do initialization if the values change after sws_setColorspaceDetails. I opted for approach 1 because it was simpler and easier to reason about. Reword the av_log message to make it clear that this special converter is not necessarily used, depending on whether or not there is range conversion or YUV matrix conversion going on. --- libswscale/swscale.c | 2 +- libswscale/utils.c | 10 +++------- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/libswscale/swscale.c b/libswscale/swscale.c index 90e5b299ab..46ba68fe6a 100644 --- a/libswscale/swscale.c +++ b/libswscale/swscale.c @@ -1016,7 +1016,7 @@ static int scale_internal(SwsContext *c, reset_ptr(src2, c->srcFormat); reset_ptr((void*)dst2, c->dstFormat); - if (c->convert_unscaled) { + if (c->convert_unscaled && !c->lumConvertRange && !c->chrConvertRange) { int offset = srcSliceY_internal; int slice_h = srcSliceH; diff --git a/libswscale/utils.c b/libswscale/utils.c index e1ad685972..0a55657800 100644 --- a/libswscale/utils.c +++ b/libswscale/utils.c @@ -1715,30 +1715,26 @@ static av_cold int sws_init_single_context(SwsContext *c, SwsFilter *srcFilter, if (unscaled && !usesHFilter && !usesVFilter && c->alphablend != SWS_ALPHA_BLEND_NONE && isALPHA(srcFormat) && - (c->srcRange == c->dstRange || isAnyRGB(dstFormat)) && alphaless_fmt(srcFormat) == dstFormat ) { c->convert_unscaled = ff_sws_alphablendaway; if (flags & SWS_PRINT_INFO) av_log(c, AV_LOG_INFO, - "using alpha blendaway %s -> %s special converter\n", + "alpha blendaway %s -> %s special converter is available\n", av_get_pix_fmt_name(srcFormat), av_get_pix_fmt_name(dstFormat)); return 0; } /* unscaled special cases */ - if (unscaled && !usesHFilter && !usesVFilter && - (c->srcRange == c->dstRange || isAnyRGB(dstFormat) || - isFloat(srcFormat) || isFloat(dstFormat))){ + if (unscaled && !usesHFilter && !usesVFilter) { ff_get_unscaled_swscale(c); if (c->convert_unscaled) { if (flags & SWS_PRINT_INFO) av_log(c, AV_LOG_INFO, - "using unscaled %s -> %s special converter\n", + "unscaled %s -> %s special converter is available\n", av_get_pix_fmt_name(srcFormat), av_get_pix_fmt_name(dstFormat)); - return 0; } } From patchwork Sat Oct 28 14:41:09 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 44406 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:dd83:b0:15d:8365:d4b8 with SMTP id kw3csp497892pzb; Sat, 28 Oct 2023 07:45:03 -0700 (PDT) X-Google-Smtp-Source: AGHT+IE5Ue2v4LFNgxA2GA5F9zdhqCVbCaddmhWY0dm+YgXbNf9JCgfh2oHXPYKYA7MCvEXhyR4f X-Received: by 2002:a17:907:7f90:b0:9ba:1d08:ad43 with SMTP id qk16-20020a1709077f9000b009ba1d08ad43mr5337148ejc.70.1698504303220; Sat, 28 Oct 2023 07:45:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698504303; cv=none; d=google.com; s=arc-20160816; b=ezEaSgZg9yef8OLwDP14W+CKh5cWPTCgv9ai+KBuRsSu1M+Fi7Sp6poSJEV6zq9wMF /VvUQIlgZawM3WgKnrdsY+MCd4V8mFmKckFxSlz6wIkokeVCnr6S14GAeHvq3NWNhQna kZ2/qd18qyIK4IzoRQ588T5rJcPilzNRExmajvH3YbzgmXEztyfVSeAsbc5wXfpggukX +BheSgZUoYzZiZBqRFO5pvAWPX9iD/I9YisBhAGBlQ08TFp5+bULxJ+/qJqtTvKEXfDP 0kkgpn3wL8SbbopZ6oaFiOZgdoCT1sTndGUpFxJBRLXh/26H6WdRGhKDaThkcomliJy0 rcPA== 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=0gxzmIE/FRpVsQstgjwnuqbLZnBKGiTUo6367rGfhXc=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=rVuQc/0R9plOx5DZaJI5D3x2MSv+IDhihT3H9iJH9t2Dqzp9m4p7yPY7eKFkS1BS4k IsPZ5mNMiUtsRlOoV/HgeHEcU/X1cB8xoapV/8RM5/Zo1otobMDE1t8VWqs4vyT0Oc53 K3FAEI60KasASgiq7Lj97BT9DS1pn8kjwnoXrdjDJoGAmC08/iqL9vk1qw08lUQmqXCv dAYEr6chI9j4xIscU/18rfn/3HfCyMOGr1fDTPYeUNU6kGTzx2vHKMs855non4f8MGLd C2Xy2u+6ZMoPfCxTEhWVNxBBcEFEmLlmlsH5A9zkbGV6BVXpmOX26O21tE8+MUCNUVVf R3nQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=VhESeKRJ; 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 xa6-20020a170906fd8600b0099e028b0201si1801449ejb.962.2023.10.28.07.45.02; Sat, 28 Oct 2023 07:45:03 -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=VhESeKRJ; 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 8673D68CBAB; Sat, 28 Oct 2023 17:44:43 +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 AFA1368C96A for ; Sat, 28 Oct 2023 17:44:35 +0300 (EEST) Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 6527648D04; Sat, 28 Oct 2023 16:44:35 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1698504275; bh=FtLuwViaguikU25UXM+4Y3gxeFPCCg+XFLVpu+tlnyA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=VhESeKRJCuQTwNjWCENyy4WqibEONQVN9Sz37UCzOhTvSv5TQDxmWSHSpsZzbURwn HU11AeKSKAtwBhZHmPH2k6FBcvvHcgnHh5RsjCh9vj612W0pPP5GkeQdqWBwCGJg6/ Im16uUSts4+pLgEMANrPa122XxN0/BDLWaIBGbuw= From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Sat, 28 Oct 2023 16:41:09 +0200 Message-ID: <20231028144430.60538-3-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20231028144430.60538-1-ffmpeg@haasn.xyz> References: <20231028144430.60538-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 02/10] swscale: don't omit ff_sws_init_range_convert for high-bit 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: jxY1ienlHIge From: Niklas Haas This was a complete hack seemingly designed to work around a different bug, which was fixed in the previous commit. As such, there is no more reason not to do this, as it simply breaks changing color range in sws_setColorspaceDetails for no reason. --- libswscale/utils.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/libswscale/utils.c b/libswscale/utils.c index 0a55657800..ec822ff5d9 100644 --- a/libswscale/utils.c +++ b/libswscale/utils.c @@ -1049,9 +1049,7 @@ int sws_setColorspaceDetails(struct SwsContext *c, const int inv_table[4], c->srcRange = srcRange; c->dstRange = dstRange; - //The srcBpc check is possibly wrong but we seem to lack a definitive reference to test this - //and what we have in ticket 2939 looks better with this check - if (need_reinit && (c->srcBpc == 8 || !isYUV(c->srcFormat))) + if (need_reinit) ff_sws_init_range_convert(c); c->dstFormatBpp = av_get_bits_per_pixel(desc_dst); From patchwork Sat Oct 28 14:41:10 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 44407 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:dd83:b0:15d:8365:d4b8 with SMTP id kw3csp497966pzb; Sat, 28 Oct 2023 07:45:12 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFJXLTLN9+1zbGdm+MPmZal5migoJOF/4lmKQ8agEDfgSW+IIIgFYejP+5DDbSZwOn6fpC1 X-Received: by 2002:a17:907:3eaa:b0:9c1:9b3a:4cd1 with SMTP id hs42-20020a1709073eaa00b009c19b3a4cd1mr5224684ejc.3.1698504311725; Sat, 28 Oct 2023 07:45:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698504311; cv=none; d=google.com; s=arc-20160816; b=c7TU97cKIU4zK57ygM42TIb08TxyW2cabD4p8Wse3LPCjQjjnrqHq1SixC9bkUau/3 BmpeWFn2Vw9GIE952DrRuTnUXe1PN3tVuDPW7jaCmrM4bzidUw+e4xjd0tL0iJ4uENAT nh8bFI2XRCzczsFiwxNuWfirg1Gz6KDPUQetXxRrAe7awnwnQnZzOt7VxXWMDkqNBr/q nAIHsMnNXMHmSIZFy+mMZhVN4bxu5cMP3PnimxhEyvV5Kjicjj1G7uHLqTvoi4pQpOxX hLHMCxz518aj9Gvbyvowbr2cVsqjTQXOLhHF6rd0D9VYPxVWX95D6hEhNrRRR+UcIxYb rm4w== 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=X333W7vAsj+U7wbvm+EcnCWoLQsjI+gntBCB51i8Uws=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=TxBe1JBhizgk2zWoKv8Gfor5cx2kIm3DQHzi+bu/kyj9cNCLFNeEWkwL2UJah7aFqI n+ck4VPIhUrdAVDQIuly6ZDgpSvieGMvoQydrqwj9qiU7fuRzHTkak7OAJQAWDOZCv14 /juq+ctmj/djD0LVJ3k2TeBJ49xwQgBlUnJKnIDwgb1wg8X2ONeONx1xoyIqmW8QSSwv QXFKU4G8mBJ5GwwFVTjn105OstcuG33y2TuVzW9EHAtzefxphweMe8JQ/MQCrvSw1pZj PrBbyPeyMY9fse8zCKlIQ6FxClLfifKg0y4Zmhptfy9D2LRY76cbDCkwoh0ooyWKbviU ANtQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=fK2UmXJj; 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 z26-20020a17090674da00b009be5c079196si1729653ejl.461.2023.10.28.07.45.11; Sat, 28 Oct 2023 07:45:11 -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=fK2UmXJj; 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 9481168CBB3; Sat, 28 Oct 2023 17:44:44 +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 DD31B68C96A for ; Sat, 28 Oct 2023 17:44:35 +0300 (EEST) Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id A12BE4B8AC; Sat, 28 Oct 2023 16:44:35 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1698504275; bh=uC4zSuPuu4RJxcCGYos+Sdc/5fAP8LQ8KM/YAShXyOE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=fK2UmXJjuri9EQmyeSqqDb+2sPlWDJvMH2dMWZ+kp1ja/+F+ExaXyAK80ELtUH7Zd ZQ2DEvrQgsjei+XP1OKD+Z2Yal6nWl4FOztwGQVL7UYQsbvlHvN/TtTvGRXa6QGQVa /rLc0bMhsVul8CFdZ6JNRAHBaOm8cONf4rBelcgU= From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Sat, 28 Oct 2023 16:41:10 +0200 Message-ID: <20231028144430.60538-4-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20231028144430.60538-1-ffmpeg@haasn.xyz> References: <20231028144430.60538-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 03/10] swscale/yuv2rgb: fix sws_getCoefficients for colorspace=0 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: e+FddqtdXd/i From: Niklas Haas The documentation states that invalid entries default to SWS_CS_DEFAULT. A value of 0 is not a valid SWS_CS_*, yet the code incorrectly hard-codes it to BT.709 coefficients instead of SWS_CS_DEFAULT. --- libswscale/yuv2rgb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libswscale/yuv2rgb.c b/libswscale/yuv2rgb.c index 9c3f5e23c6..0a84b662f9 100644 --- a/libswscale/yuv2rgb.c +++ b/libswscale/yuv2rgb.c @@ -46,7 +46,7 @@ * where Y = cr * R + cg * G + cb * B and cr + cg + cb = 1. */ const int32_t ff_yuv2rgb_coeffs[11][4] = { - { 117489, 138438, 13975, 34925 }, /* no sequence_display_extension */ + { 104597, 132201, 25675, 53279 }, /* no sequence_display_extension */ { 117489, 138438, 13975, 34925 }, /* ITU-R Rec. 709 (1990) */ { 104597, 132201, 25675, 53279 }, /* unspecified */ { 104597, 132201, 25675, 53279 }, /* reserved */ From patchwork Sat Oct 28 14:41:11 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 44408 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:dd83:b0:15d:8365:d4b8 with SMTP id kw3csp498020pzb; Sat, 28 Oct 2023 07:45:21 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHang0ynef7uMby+GEQToJQ8ck4Rg5ZYU4aFsRemupytSH0QVvmSced5mgmjgk82s1FyGEx X-Received: by 2002:a17:907:7e94:b0:9c7:4d51:af26 with SMTP id qb20-20020a1709077e9400b009c74d51af26mr4892972ejc.65.1698504320940; Sat, 28 Oct 2023 07:45:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698504320; cv=none; d=google.com; s=arc-20160816; b=AWM5YapcPHz58GxDWqayl8ZI/oG1cGUGqmf2jnX3qZ7nrJZ2/Yi+3Qx3Oh1SkESvrM Qtm5JANAF4RJd6406HXNKYIJy9VmHC+iFTNcahrhpt6rCWk2LK677pYH/A6dc9j5nd7q BIcrD2HQB9eg8AEkjIypd4ixagSFot6LwT4OONQ5MJVwR9QBJh5yJ8kQ4A8CcsMZPj1b ywgZX3/ndZm/qJX1v4GeBce5cx9YY7mSEtZo5xJAZQzEfL2QNCbCDvV7FwDYFNxyddP5 /G+KsL/LfAQOVyVppE7mk74kNfwTDSWSDyIi2pqEF6MPNjphtWRw9+HDaWwaycah1sZJ kyTA== 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=/9JyU1jyTheEED2JV7VTS2rg8GV1Ol7QIwDOVNsR9ow=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=jL2IpgwiB5NSPj05eNR3b5nw5jGB1eQ5pS2wB9yHEXRChqAw6WVauf/g1jyA6DVhoh Z15++4zY7nLIh0CbUl5XoWSnT4aCUKsrXbVi6RrcDQG5UHLW5qlyfWRhUCxhlAPieut4 X3bM8pWqlgzX9IRiCrfpsEeDPOUKOrCS6zKU6JO/5VUs7tMaecUCr0qYtCocVTVOR4y8 dDE++Be8A0kJTQWviJKEG8ARFXKSFzOR/sCaiinXwyq7C8PCM6qnP09OSJQ5vyhW1guc nH5rDqMWstnVAvwjEV+caS26kKyPfOhDFrzaHKzCB1mOQY9NrMOCuHV6WzBsSXpbYx0t RcaA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=ug5NzpCn; 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 wy14-20020a170906fe0e00b009d151e5f3f6si763945ejb.1043.2023.10.28.07.45.20; Sat, 28 Oct 2023 07:45:20 -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=ug5NzpCn; 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 6752468CBC8; Sat, 28 Oct 2023 17:44:45 +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 2DB0368C96A for ; Sat, 28 Oct 2023 17:44:36 +0300 (EEST) Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id DF4EA4BAC7; Sat, 28 Oct 2023 16:44:35 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1698504275; bh=TJLLbg8QaRC7CGgBaIsUa29dvus71ZQ4aaTY6q0nvIc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ug5NzpCnh3IeBUyHF6+hBNlef2MXN8/SzzZrVKgBKhk0bTP/sAJKUa38OAjWKCRKx equogCqKNJ34YkCdExVatJqvTFVgEppU7H3owy/MzOpGs/0M2qPB6GD2kQ9N+r7Rk2 JiLfF0Qow03YtTDGFmeWXntux4b39ijBgp+QosHI= From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Sat, 28 Oct 2023 16:41:11 +0200 Message-ID: <20231028144430.60538-5-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20231028144430.60538-1-ffmpeg@haasn.xyz> References: <20231028144430.60538-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 04/10] avfilter/vf_extractplanes: tag alpha plane as full range 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: eJ09i2x4GwjL From: Niklas Haas Alpha planes are explicitly full range, even for limited range YUVA formats. Mark them as such. --- libavfilter/vf_extractplanes.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libavfilter/vf_extractplanes.c b/libavfilter/vf_extractplanes.c index 7b7149ab24..ca406ff323 100644 --- a/libavfilter/vf_extractplanes.c +++ b/libavfilter/vf_extractplanes.c @@ -312,6 +312,8 @@ static int extract_plane(AVFilterLink *outlink, AVFrame *frame) if (!out) return AVERROR(ENOMEM); av_frame_copy_props(out, frame); + if (idx == 3 /* alpha */) + out->color_range = AVCOL_RANGE_JPEG; if (s->is_packed) { extract_from_packed(out->data[0], out->linesize[0], From patchwork Sat Oct 28 14:41:12 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 44409 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:dd83:b0:15d:8365:d4b8 with SMTP id kw3csp498080pzb; Sat, 28 Oct 2023 07:45:30 -0700 (PDT) X-Google-Smtp-Source: AGHT+IH0Dr3FbuHYNKmbq3F4K/00hbhLkBY18Ej5pRa27fG0DjNOca2DcVAgYCpjXh3prZOGmPgi X-Received: by 2002:aa7:d748:0:b0:540:ef98:39ae with SMTP id a8-20020aa7d748000000b00540ef9839aemr4955012eds.37.1698504330159; Sat, 28 Oct 2023 07:45:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698504330; cv=none; d=google.com; s=arc-20160816; b=iw3jbm2iwQmcrCGjCq15IvNjIVz2df4XA4CfDCVZlhsn/kQ/Bcq9AqFXB6wLIww0zB J6umGAA2aiaWCKdsAa1pm9tBx3UT+kfxY/iGxKlbRSzvulFUBD4S2jr4vSEzK1HTM1T1 9eL4XRWtwCnDpd204Pv9zhqdseaxp5tyPst7iIaGv576jYE523WXgUbO0lt7ounAMjqR RLjhsN9oyHnzkWm64J/Ad3mGpP9POSIsf2QUvJrS/lnU5A/5+QwSsyB3OQWBeMjt1tdF K0B3mQuzIzMXJIK6rKxl+wXFzQnrOjc57L0inPxYA3H8I7ORN0sw3xNIKy8VxSbbfoiN 77ww== 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=2uxYQ/B3tm66XxEVWJfQ8f72Gxhey5QZtaU5+8DuxfY=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=uEGFpcxliqNGr8tiQlLa/gWRu28wOJhJUJ6T88ngA4ITsl3L0yX5Qg3AD6Yjxwvnp4 pULT9OYCrz9fJ4aC0JxmaKPlSSFoeCVDjpyxcYKds3C+Hq94F+0v26O34juHSc/zHscL 1/z6GjtJhRfIPX7Mw8hU/z4gcH4kYpIQ/eOfPEEbZrWbk0YEDqcqxrN1zzW7cNoBIigy aJvgrXsi3T/PBpFcQo9PfaYkuyQN14hGc//fLy7z7o6NX21J14WjZFVJ3Q14XExTMnW7 NqdhnKmUDRw37OnQQijMOkRhOaBhRgrdeWOR5Jb5465MJhB4zX8oBJrSoY0fCbEMh6O0 2TxQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=ppDefDut; 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 d14-20020a50fe8e000000b0053eaecd645asi1805908edt.642.2023.10.28.07.45.29; Sat, 28 Oct 2023 07:45:30 -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=ppDefDut; 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 6939468CBDD; Sat, 28 Oct 2023 17:44:47 +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 6EACB68CBC9 for ; Sat, 28 Oct 2023 17:44:40 +0300 (EEST) Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 27FEE4BAFF; Sat, 28 Oct 2023 16:44:36 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1698504276; bh=Dy1B8wu+LOZGb9ULISspBdzc2tEncy3+IYWoTfn10/o=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ppDefDutO1mcmThYpafoLVhdd64DWKPYBAgMzBO2XChyzeE0P7GksJWg2Reg0swUY yzeuCBsxcX0ZHrTXJqDXvLBdpQuqyU4bSf3lVwB3IvUP6tU8HzbBrNvZ9GMugeE3CH aNE8XYz8Rzmg0sBt2NHsteu+vCTAdPI/ZKV7qP/g= From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Sat, 28 Oct 2023 16:41:12 +0200 Message-ID: <20231028144430.60538-6-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20231028144430.60538-1-ffmpeg@haasn.xyz> References: <20231028144430.60538-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 05/10] avfilter/vf_alphamerge: warn if input not full range 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: IWCipQQUX8wl From: Niklas Haas Alpha planes must always be full range, so complain loudly if fed limited range grayscale input. --- libavfilter/vf_alphamerge.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/libavfilter/vf_alphamerge.c b/libavfilter/vf_alphamerge.c index 4bbc06da36..a5f5baf77e 100644 --- a/libavfilter/vf_alphamerge.c +++ b/libavfilter/vf_alphamerge.c @@ -60,6 +60,12 @@ static int do_alphamerge(FFFrameSync *fs) if (!alpha_buf) return ff_filter_frame(ctx->outputs[0], main_buf); + if (alpha_buf->color_range == AVCOL_RANGE_MPEG) { + av_log(ctx, AV_LOG_WARNING, "alpha plane color range tagged as %s, " + "output will be wrong!\n", + av_color_range_name(alpha_buf->color_range)); + } + if (s->is_packed_rgb) { int x, y; uint8_t *pin, *pout; From patchwork Sat Oct 28 14:41:13 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 44410 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:dd83:b0:15d:8365:d4b8 with SMTP id kw3csp498156pzb; Sat, 28 Oct 2023 07:45:39 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEODmvIVQ5et8pmfY/qjjNd22WIrfz5C0E65vx6V8IVg7r5DhMGga6pVXx/O7p3sYK70i2f X-Received: by 2002:a05:6512:b9c:b0:507:9861:2be9 with SMTP id b28-20020a0565120b9c00b0050798612be9mr4041454lfv.6.1698504339436; Sat, 28 Oct 2023 07:45:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698504339; cv=none; d=google.com; s=arc-20160816; b=EPOk4IFIisAEawL4p0xUfzFiv49jMC/cNE7eehIj8jUcJvNtBn7H3oa2DUmCwhaxZ+ 17+V+KzBe1u6BInwFB3P1aO+w95fQB3UqVjNegjS6Qj/++VJ4SvuutzE9JN8mB4fYF3t M0m/7Jwh5PTP68Y+8GX2yTJG0te7KkUJVSkwxlgcDpe1M6DWCrp32UFGJ+LKESGOmduz Eo905HA2LYMC7pBemPbf7qgXOqzlu9gJkORh74lvmjnL9AHl4LEY/lSByYIkJgKAZNOI rnauCx1ZAlz2zpb5eDVTB3Hc72udOMP0D9RpGplMC48gWaULKJjgYtoM4BocnrahijIW Sbiw== 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=wQc46/83WPaep0QVh2BMUqxoWVFEQhnkvOfhORk5++Q=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=z+4YIKUaBeZQjOaiWkWxRdnrdPpKFNrbAaHhvRynwmOwsYrnxrvFF3PHJamrPOMG+o 9kSrUIG8nUiWQJsn1AxAOMbPQZnddhnnud4is22uLfKnWFwd5WIIKJzZF34ufdSPy14N 9J+DrdblQRMery3fNwTwFOAEu3RI0zacPvpqztESYRZAjmwAMGTGZRVxhWBnWwiE3p1L YZSeWcjOjxXnuQBEEa6XvAE8ZxLwmcZLUdqEgeT8EmGFv+iLGjiKBcWRIwAuyjnDEMeI eQPqiBZknZHBZ4Kz4hIn8dQKs1WUlx3+p2aqETII4VnJsg+xYSQd4MMpXqmDk8iZ5uDO Kxmg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=smN378Zs; 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 i4-20020a05640242c400b00540346c84b4si1794630edc.542.2023.10.28.07.45.39; Sat, 28 Oct 2023 07:45:39 -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=smN378Zs; 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 A9FAA68CBF0; Sat, 28 Oct 2023 17:44:48 +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 7B8A568CBCB for ; Sat, 28 Oct 2023 17:44:40 +0300 (EEST) Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 66CB44BB07; Sat, 28 Oct 2023 16:44:36 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1698504276; bh=NLV1tG6YIyW2ynchJR8f79MSRSGIESICMpGmP2xOuU4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=smN378ZsVdv4ZJtqbR6bBa61cUaPoIfzQlvDdvjxGMEMrlQNe0wNQxT+D0dCngaok vuutlmkWaIFT3+pvDuHwGf6wACRniArKz0p9zmtL1io2zcAhB35u3YhXa7LSWti5XF 8XjRHODnV1JfHbdsgLBuRb7euYijfB38o5WvHBC0= From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Sat, 28 Oct 2023 16:41:13 +0200 Message-ID: <20231028144430.60538-7-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20231028144430.60538-1-ffmpeg@haasn.xyz> References: <20231028144430.60538-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 06/10] avfilter/vf_scale: properly respect to input colorimetry 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: 6wdMaVXzQ5GF From: Niklas Haas This code, as written, skips sws_init_context if scale->in_range was not set, even if scale->in_frame_range is set to something. So this would hit the 'no sws context' fast path in scale_frame and skip color range conversion even where technically required. This had the effect of, in practice, effectively applying limited/full range conversion if and only if you set e.g. a nonzero yuv color matrix, which is obviously undesirable behavior. Second, the assignment of out->color_range inside the branch would fail to properly propagate tags for any actually applied conversion, for example on conversion to a forced full range format. Solve both of these problems and make the code much easier to understand and follow by doing the following: 1. Always initialize sws context on get_props 2. Always use sws_getColorspaceDetails + sws_setColorspaceDetails to fix the conversion matrices per-frame. 3. Rather than testing if the context exists, do the no-op test after settling the above values and deciding what conversion to actually perform. --- libavfilter/vf_scale.c | 186 +++++++++++++++++------------------------ 1 file changed, 76 insertions(+), 110 deletions(-) diff --git a/libavfilter/vf_scale.c b/libavfilter/vf_scale.c index 23335cef4b..3d58de0494 100644 --- a/libavfilter/vf_scale.c +++ b/libavfilter/vf_scale.c @@ -143,7 +143,6 @@ typedef struct ScaleContext { char *out_color_matrix; int in_range; - int in_frame_range; int out_range; int out_h_chr_pos; @@ -356,8 +355,6 @@ static av_cold int init(AVFilterContext *ctx) if (!threads) av_opt_set_int(scale->sws_opts, "threads", ff_filter_get_nb_threads(ctx), 0); - scale->in_frame_range = AVCOL_RANGE_UNSPECIFIED; - return 0; } @@ -520,6 +517,7 @@ static int config_props(AVFilterLink *outlink) const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(inlink->format); const AVPixFmtDescriptor *outdesc = av_pix_fmt_desc_get(outfmt); ScaleContext *scale = ctx->priv; + struct SwsContext **swscs[3] = {&scale->sws, &scale->isws[0], &scale->isws[1]}; uint8_t *flags_val = NULL; int ret; @@ -552,65 +550,46 @@ static int config_props(AVFilterLink *outlink) if (scale->isws[1]) sws_freeContext(scale->isws[1]); scale->isws[0] = scale->isws[1] = scale->sws = NULL; - if (inlink0->w == outlink->w && - inlink0->h == outlink->h && - !scale->out_color_matrix && - scale->in_range == scale->out_range && - inlink0->format == outlink->format) - ; - else { - struct SwsContext **swscs[3] = {&scale->sws, &scale->isws[0], &scale->isws[1]}; - int i; - - for (i = 0; i < 3; i++) { - int in_v_chr_pos = scale->in_v_chr_pos, out_v_chr_pos = scale->out_v_chr_pos; - struct SwsContext *const s = sws_alloc_context(); - if (!s) - return AVERROR(ENOMEM); - *swscs[i] = s; - - ret = av_opt_copy(s, scale->sws_opts); - if (ret < 0) - return ret; - av_opt_set_int(s, "srcw", inlink0 ->w, 0); - av_opt_set_int(s, "srch", inlink0 ->h >> !!i, 0); - av_opt_set_int(s, "src_format", inlink0->format, 0); - av_opt_set_int(s, "dstw", outlink->w, 0); - av_opt_set_int(s, "dsth", outlink->h >> !!i, 0); - av_opt_set_int(s, "dst_format", outfmt, 0); - if (scale->in_range != AVCOL_RANGE_UNSPECIFIED) - av_opt_set_int(s, "src_range", - scale->in_range == AVCOL_RANGE_JPEG, 0); - else if (scale->in_frame_range != AVCOL_RANGE_UNSPECIFIED) - av_opt_set_int(s, "src_range", - scale->in_frame_range == AVCOL_RANGE_JPEG, 0); - if (scale->out_range != AVCOL_RANGE_UNSPECIFIED) - av_opt_set_int(s, "dst_range", - scale->out_range == AVCOL_RANGE_JPEG, 0); - - /* Override chroma location default settings to have the correct - * chroma positions. MPEG chroma positions are used by convention. - * Note that this works for both MPEG-1/JPEG and MPEG-2/4 chroma - * locations, since they share a vertical alignment */ - if (desc->log2_chroma_h == 1 && scale->in_v_chr_pos == -513) { - in_v_chr_pos = (i == 0) ? 128 : (i == 1) ? 64 : 192; - } - - if (outdesc->log2_chroma_h == 1 && scale->out_v_chr_pos == -513) { - out_v_chr_pos = (i == 0) ? 128 : (i == 1) ? 64 : 192; - } - - av_opt_set_int(s, "src_h_chr_pos", scale->in_h_chr_pos, 0); - av_opt_set_int(s, "src_v_chr_pos", in_v_chr_pos, 0); - av_opt_set_int(s, "dst_h_chr_pos", scale->out_h_chr_pos, 0); - av_opt_set_int(s, "dst_v_chr_pos", out_v_chr_pos, 0); - - if ((ret = sws_init_context(s, NULL, NULL)) < 0) - return ret; - if (!scale->interlaced) - break; + for (int i = 0; i < 3; i++) { + int in_v_chr_pos = scale->in_v_chr_pos, out_v_chr_pos = scale->out_v_chr_pos; + struct SwsContext *const s = sws_alloc_context(); + if (!s) + return AVERROR(ENOMEM); + *swscs[i] = s; + + ret = av_opt_copy(s, scale->sws_opts); + if (ret < 0) + return ret; + + av_opt_set_int(s, "srcw", inlink0 ->w, 0); + av_opt_set_int(s, "srch", inlink0 ->h >> !!i, 0); + av_opt_set_int(s, "src_format", inlink0->format, 0); + av_opt_set_int(s, "dstw", outlink->w, 0); + av_opt_set_int(s, "dsth", outlink->h >> !!i, 0); + av_opt_set_int(s, "dst_format", outfmt, 0); + + /* Override chroma location default settings to have the correct + * chroma positions. MPEG chroma positions are used by convention. + * Note that this works for both MPEG-1/JPEG and MPEG-2/4 chroma + * locations, since they share a vertical alignment */ + if (desc->log2_chroma_h == 1 && scale->in_v_chr_pos == -513) { + in_v_chr_pos = (i == 0) ? 128 : (i == 1) ? 64 : 192; + } + + if (outdesc->log2_chroma_h == 1 && scale->out_v_chr_pos == -513) { + out_v_chr_pos = (i == 0) ? 128 : (i == 1) ? 64 : 192; } + + av_opt_set_int(s, "src_h_chr_pos", scale->in_h_chr_pos, 0); + av_opt_set_int(s, "src_v_chr_pos", in_v_chr_pos, 0); + av_opt_set_int(s, "dst_h_chr_pos", scale->out_h_chr_pos, 0); + av_opt_set_int(s, "dst_v_chr_pos", out_v_chr_pos, 0); + + if ((ret = sws_init_context(s, NULL, NULL)) < 0) + return ret; + if (!scale->interlaced) + break; } if (inlink0->sample_aspect_ratio.num){ @@ -716,9 +695,10 @@ static int scale_frame(AVFilterLink *link, AVFrame *in, AVFrame **frame_out) AVFrame *out; const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(link->format); char buf[32]; - int ret; - int in_range; + int in_full, out_full, brightness, contrast, saturation; + const int *inv_table, *table; int frame_changed; + int ret; *frame_out = NULL; if (in->colorspace == AVCOL_SPC_YCGCO) @@ -730,13 +710,6 @@ static int scale_frame(AVFilterLink *link, AVFrame *in, AVFrame **frame_out) in->sample_aspect_ratio.den != link->sample_aspect_ratio.den || in->sample_aspect_ratio.num != link->sample_aspect_ratio.num; - if (in->color_range != AVCOL_RANGE_UNSPECIFIED && - scale->in_range == AVCOL_RANGE_UNSPECIFIED && - in->color_range != scale->in_frame_range) { - scale->in_frame_range = in->color_range; - frame_changed = 1; - } - if (scale->eval_mode == EVAL_MODE_FRAME || frame_changed) { unsigned vars_w[VARS_NB] = { 0 }, vars_h[VARS_NB] = { 0 }; @@ -804,7 +777,30 @@ FF_ENABLE_DEPRECATION_WARNINGS } scale: - if (!scale->sws) { + sws_getColorspaceDetails(scale->sws, (int **)&inv_table, &in_full, + (int **)&table, &out_full, + &brightness, &contrast, &saturation); + + if (scale->in_color_matrix) + inv_table = parse_yuv_type(scale->in_color_matrix, in->colorspace); + if (scale->out_color_matrix) + table = parse_yuv_type(scale->out_color_matrix, AVCOL_SPC_UNSPECIFIED); + else if (scale->in_color_matrix) + table = inv_table; + + if (scale->in_range != AVCOL_RANGE_UNSPECIFIED) + in_full = scale->in_range == AVCOL_RANGE_JPEG; + else if (in->color_range != AVCOL_RANGE_UNSPECIFIED) + in_full = in->color_range == AVCOL_RANGE_JPEG; + if (scale->out_range != AVCOL_RANGE_UNSPECIFIED) + out_full = scale->out_range == AVCOL_RANGE_JPEG; + + if (in->width == outlink->w && + in->height == outlink->h && + in->format == outlink->format && + !memcmp(inv_table, table, sizeof(int) * 4) && + in_full == out_full) { + /* no conversion needed */ *frame_out = in; return 0; } @@ -822,6 +818,7 @@ scale: av_frame_copy_props(out, in); out->width = outlink->w; out->height = outlink->h; + out->color_range = out_full ? AVCOL_RANGE_JPEG : AVCOL_RANGE_MPEG; // Sanity checks: // 1. If the output is RGB, set the matrix coefficients to RGB. @@ -838,48 +835,17 @@ scale: if (scale->output_is_pal) avpriv_set_systematic_pal2((uint32_t*)out->data[1], outlink->format == AV_PIX_FMT_PAL8 ? AV_PIX_FMT_BGR8 : outlink->format); - in_range = in->color_range; - - if ( scale->in_color_matrix - || scale->out_color_matrix - || scale-> in_range != AVCOL_RANGE_UNSPECIFIED - || in_range != AVCOL_RANGE_UNSPECIFIED - || scale->out_range != AVCOL_RANGE_UNSPECIFIED) { - int in_full, out_full, brightness, contrast, saturation; - const int *inv_table, *table; - - sws_getColorspaceDetails(scale->sws, (int **)&inv_table, &in_full, - (int **)&table, &out_full, - &brightness, &contrast, &saturation); - - if (scale->in_color_matrix) - inv_table = parse_yuv_type(scale->in_color_matrix, in->colorspace); - if (scale->out_color_matrix) - table = parse_yuv_type(scale->out_color_matrix, AVCOL_SPC_UNSPECIFIED); - else if (scale->in_color_matrix) - table = inv_table; - - if (scale-> in_range != AVCOL_RANGE_UNSPECIFIED) - in_full = (scale-> in_range == AVCOL_RANGE_JPEG); - else if (in_range != AVCOL_RANGE_UNSPECIFIED) - in_full = (in_range == AVCOL_RANGE_JPEG); - if (scale->out_range != AVCOL_RANGE_UNSPECIFIED) - out_full = (scale->out_range == AVCOL_RANGE_JPEG); - - sws_setColorspaceDetails(scale->sws, inv_table, in_full, + sws_setColorspaceDetails(scale->sws, inv_table, in_full, + table, out_full, + brightness, contrast, saturation); + if (scale->isws[0]) + sws_setColorspaceDetails(scale->isws[0], inv_table, in_full, + table, out_full, + brightness, contrast, saturation); + if (scale->isws[1]) + sws_setColorspaceDetails(scale->isws[1], inv_table, in_full, table, out_full, brightness, contrast, saturation); - if (scale->isws[0]) - sws_setColorspaceDetails(scale->isws[0], inv_table, in_full, - table, out_full, - brightness, contrast, saturation); - if (scale->isws[1]) - sws_setColorspaceDetails(scale->isws[1], inv_table, in_full, - table, out_full, - brightness, contrast, saturation); - - out->color_range = out_full ? AVCOL_RANGE_JPEG : AVCOL_RANGE_MPEG; - } av_reduce(&out->sample_aspect_ratio.num, &out->sample_aspect_ratio.den, (int64_t)in->sample_aspect_ratio.num * outlink->h * link->w, From patchwork Sat Oct 28 14:41:14 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 44411 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:dd83:b0:15d:8365:d4b8 with SMTP id kw3csp498228pzb; Sat, 28 Oct 2023 07:45:49 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHweEtbEi7DwfLjys5P6gkD9G6/2uh4JG1dwijPuLRBWJtuV8l3mXJRL7SitQGO57jaxAzq X-Received: by 2002:a17:906:da8b:b0:9cc:97b:5a15 with SMTP id xh11-20020a170906da8b00b009cc097b5a15mr4346688ejb.64.1698504349287; Sat, 28 Oct 2023 07:45:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698504349; cv=none; d=google.com; s=arc-20160816; b=kNBH94VG5IBEHA6794s4xZZNb1ahiCB5TQtDAbb/8rw7EgL11dtYdZnBjitD9sph87 ++/RC6UqMkEEnBmV/a5XA1neRDZLH/xHevIiAGPNHwGHRD9KCun6Lm6/bEHnOUl9U80+ AcyRgW9mQDdHWfk9Fp7HBzRLVm9D9eki1fUDwJaRUDbAHbAHdOvLy+ctXAOhDlyDGRlf qUgncCuBEWhTvDyj65Yvzh//9M2UblzUKDAH0OE/4aC7NQypPOFwm0CZbx0THLFII9RZ uheqLaaouqIC5JP8cWNbmm9BhOl1QC3YBU+S1cC3mW+Spih9k3euGwRh/iVnZ7fQafLS fkew== 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=Na2EytXGaaaTVsheuDzEV5XHmOlXRT3BVA/M0VTzANo=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=GwfPDesDAPFyQ5yEYpuj91/lHQZ8oAENUWrmxQzGZUhah4/8cNchdSH87MyIHVkuNP kdjsXvoRSHA1sH+BAdGW6SGTnkzUqOdZYn1/uni2DM9YNpBcI17L982RyrUiajjdjybv QFD6GktLcQs6GDztsC8qFvUCz55LduwM1WE6ZcHM1JClfiBUyzrn4yyFnglhtFQJADQn 0UW+C7iRV5ZdFDkYXViLHH6G6esI8fR3P8bbc87mLHZS1tb2fcEvg3FpTDJOq1Z5/wdu ZHY6eCbde2J/eAyLE0Woq5tu3BmeI0z7HU93mm6do40kIMegjeiBmAUMkUf/9S2vImnl 7/Xg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=u+7RPLRq; 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 30-20020a170906009e00b0099cb1ff44bcsi453139ejc.613.2023.10.28.07.45.48; Sat, 28 Oct 2023 07:45:49 -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=u+7RPLRq; 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 B2A9068CBDC; Sat, 28 Oct 2023 17:44:49 +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 9555468CBC9 for ; Sat, 28 Oct 2023 17:44:40 +0300 (EEST) Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id A1C314BB1A; Sat, 28 Oct 2023 16:44:36 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1698504276; bh=IK0BmDwSurKpHhEJgtfbeZrjMGeXjiZ2DOvKKrw2T4Y=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=u+7RPLRqSDlS2ONZEsFpkV1YkzoWPqz+MxM/M7NvDlxaXqwQF564ov3eOqxyPOCID m1pkPaj5MT64r+TRNNLXX3HKbaP6c1z30cSY9nJIvyC4W8cg3enXFH8C09sM+zIX7Y IFUk9SE/5aZfThgcD2i8ubsoxafX1h0wIbtfSllE= From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Sat, 28 Oct 2023 16:41:14 +0200 Message-ID: <20231028144430.60538-8-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20231028144430.60538-1-ffmpeg@haasn.xyz> References: <20231028144430.60538-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 07/10] avfilter/vf_scale: preserve YUV range by default 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: dsRoL5EW1mWK From: Niklas Haas YUV->YUV conversions should preserve input range, if the output range is unspecified. Ensures full-range YUV input comes out as full-range YUV output by default, even through YUV->YUV pixel format conversions. --- libavfilter/vf_scale.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/libavfilter/vf_scale.c b/libavfilter/vf_scale.c index 3d58de0494..cde6f52169 100644 --- a/libavfilter/vf_scale.c +++ b/libavfilter/vf_scale.c @@ -687,6 +687,27 @@ static int scale_field(ScaleContext *scale, AVFrame *dst, AVFrame *src, return 0; } +static int is_regular_yuv(enum AVPixelFormat fmt) +{ + const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(fmt); + if (desc->flags & (AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_PAL)) + return 0; + if (desc->name && av_strstart(desc->name, "xyz", NULL)) + return 0; + if (desc->nb_components < 3) + return 0; /* grayscale is forced full range inside libswscale */ + switch (fmt) { + case AV_PIX_FMT_YUVJ420P: + case AV_PIX_FMT_YUVJ422P: + case AV_PIX_FMT_YUVJ444P: + case AV_PIX_FMT_YUVJ440P: + case AV_PIX_FMT_YUVJ411P: + return 0; + default: + return 1; + } +} + static int scale_frame(AVFilterLink *link, AVFrame *in, AVFrame **frame_out) { AVFilterContext *ctx = link->dst; @@ -794,6 +815,8 @@ scale: in_full = in->color_range == AVCOL_RANGE_JPEG; if (scale->out_range != AVCOL_RANGE_UNSPECIFIED) out_full = scale->out_range == AVCOL_RANGE_JPEG; + else if (is_regular_yuv(in->format) && is_regular_yuv(outlink->format)) + out_full = in_full; /* preserve pixel range by default */ if (in->width == outlink->w && in->height == outlink->h && From patchwork Sat Oct 28 14:41:15 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 44412 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:dd83:b0:15d:8365:d4b8 with SMTP id kw3csp498302pzb; Sat, 28 Oct 2023 07:45:58 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGUhN4NicJw4xdMdCNdDVdeTpA++GjejQGMU0c5He1g3E0PEChXWRUmmOBF/3m80csRikl7 X-Received: by 2002:a17:906:7310:b0:9be:e153:3b82 with SMTP id di16-20020a170906731000b009bee1533b82mr4320923ejc.17.1698504358201; Sat, 28 Oct 2023 07:45:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698504358; cv=none; d=google.com; s=arc-20160816; b=lsNj5Ww5ibzu2AgtcnnX1AvMJnfZg+iLU8omotdZJ0i8yzQk3AgD++KdKVN0+NyqMj xhI/9JpPF1z8jgGqXkf4cHdooGJCNkfmG3RAEATHr5c480oeLGFpHCm90U8gAogyaZ/Z KtEwtbFYG3x/wRuIu7ieZgXyd+e7OWLPMBW3pb77jwj2lyFi9qF9YqmJYH6onuZ7KpaZ MI1ZVaP9L5zjQwrT8LJIUpUscNp6wNw6eDFMGG4GnYRRM2YD+wNm/R2Saw2yeZHyp5v9 ZiaDmLC1L4+uNjsYMdyeMz4V0+lN6sUAWX70m1WI5SwFG1Z3+G31XKsY7cD0fQUhy3Hh Jrdw== 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=2TNnWnUAatRiPLNg+qFiNvDrr18RKE9HsEyDA6nhwoA=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=v4KJ2at8P28qg+9Lm1SFanjhFywwztZlE40HO9LL0CX9fDlwVVKd5lwPWHSiRrWcV4 aEcJ1R6A65DCMQzXhZ8akwgPxkJjGwH3WRhoxdtII+akX2uBnhQ2mRGDPzab9ebslCKI LuoVHS5WjjMOD5B6Q4YS6tjboT7Ixg+9OFZCNy5Rr03zreipzWkd0cwNss1o7tqT5zzu XV1/+kMMjv6Anac3+jRex2P/J44jjrSOEJsJF4VVDBhzIKJOIsjipB0WzfuYw5W9TJO1 nJSI3XweZrPvVDF6wrBxTX7bSLipZ2884TJjCi4KSimyQWKUSuIXfjz9B7J1f63ARaRy 1IFA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=VyAh8LGm; 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 sh35-20020a1709076ea300b009ad84cca643si1861454ejc.808.2023.10.28.07.45.57; Sat, 28 Oct 2023 07:45:58 -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=VyAh8LGm; 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 8BC5A68CBFC; Sat, 28 Oct 2023 17:44:50 +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 9E82968CB9D for ; Sat, 28 Oct 2023 17:44:40 +0300 (EEST) Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id DFD614BBC9; Sat, 28 Oct 2023 16:44:36 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1698504277; bh=oT9+KIvsSacAFctM4PBCEZBkpantgQLd5I3k2X6QlJI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=VyAh8LGmWYhdOoLe+pwKaPsDi94CT2CCc9fWCkpm7aOsqyIM583zpNls2C/yznIUI mS/8DJv+TLpn8W/eogf9Ph/c9kDHmRd+dYN7a9+M4w6cPJlwK9PLsx7yASshcBh4g6 Pg/MdZfMp2T7EUvt5FUw3OW1KPTLu2KhVTGQNwhM= From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Sat, 28 Oct 2023 16:41:15 +0200 Message-ID: <20231028144430.60538-9-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20231028144430.60538-1-ffmpeg@haasn.xyz> References: <20231028144430.60538-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 08/10] avfilter/vf_scale: simplify color matrix parsing logic 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: e7X5kCEZ4/2O From: Niklas Haas No need to write a custom string parser when we can just use an integer option with preset values. The various bits of fallback logic are wholly redundant with equivalent logic already inside sws_getCoefficients. Note: I disallowed setting 'out_color_matrix=auto', because this does not do anything meaningful in the current code (just hard-codes AVCOL_SPC_BT470BG fallback). --- libavfilter/vf_scale.c | 60 +++++++++++++----------------------------- 1 file changed, 19 insertions(+), 41 deletions(-) diff --git a/libavfilter/vf_scale.c b/libavfilter/vf_scale.c index cde6f52169..21cac60779 100644 --- a/libavfilter/vf_scale.c +++ b/libavfilter/vf_scale.c @@ -139,8 +139,8 @@ typedef struct ScaleContext { char *flags_str; - char *in_color_matrix; - char *out_color_matrix; + int in_color_matrix; + int out_color_matrix; int in_range; int out_range; @@ -407,30 +407,6 @@ static int query_formats(AVFilterContext *ctx) return 0; } -static const int *parse_yuv_type(const char *s, enum AVColorSpace colorspace) -{ - if (!s) - s = "bt601"; - - if (s && strstr(s, "bt709")) { - colorspace = AVCOL_SPC_BT709; - } else if (s && strstr(s, "fcc")) { - colorspace = AVCOL_SPC_FCC; - } else if (s && strstr(s, "smpte240m")) { - colorspace = AVCOL_SPC_SMPTE240M; - } else if (s && (strstr(s, "bt601") || strstr(s, "bt470") || strstr(s, "smpte170m"))) { - colorspace = AVCOL_SPC_BT470BG; - } else if (s && strstr(s, "bt2020")) { - colorspace = AVCOL_SPC_BT2020_NCL; - } - - if (colorspace < 1 || colorspace > 10 || colorspace == 8) { - colorspace = AVCOL_SPC_BT470BG; - } - - return sws_getCoefficients(colorspace); -} - static int scale_eval_dimensions(AVFilterContext *ctx) { ScaleContext *scale = ctx->priv; @@ -802,11 +778,13 @@ scale: (int **)&table, &out_full, &brightness, &contrast, &saturation); - if (scale->in_color_matrix) - inv_table = parse_yuv_type(scale->in_color_matrix, in->colorspace); - if (scale->out_color_matrix) - table = parse_yuv_type(scale->out_color_matrix, AVCOL_SPC_UNSPECIFIED); - else if (scale->in_color_matrix) + if (scale->in_color_matrix == -1 /* auto */) + inv_table = sws_getCoefficients(in->colorspace); + else if (scale->in_color_matrix != AVCOL_SPC_UNSPECIFIED) + inv_table = sws_getCoefficients(scale->in_color_matrix); + if (scale->out_color_matrix != AVCOL_SPC_UNSPECIFIED) + table = sws_getCoefficients(scale->out_color_matrix); + else if (scale->in_color_matrix != AVCOL_SPC_UNSPECIFIED) table = inv_table; if (scale->in_range != AVCOL_RANGE_UNSPECIFIED) @@ -992,16 +970,16 @@ static const AVOption scale_options[] = { { "interl", "set interlacing", OFFSET(interlaced), AV_OPT_TYPE_BOOL, {.i64 = 0 }, -1, 1, FLAGS }, { "size", "set video size", OFFSET(size_str), AV_OPT_TYPE_STRING, {.str = NULL}, 0, FLAGS }, { "s", "set video size", OFFSET(size_str), AV_OPT_TYPE_STRING, {.str = NULL}, 0, FLAGS }, - { "in_color_matrix", "set input YCbCr type", OFFSET(in_color_matrix), AV_OPT_TYPE_STRING, { .str = "auto" }, .flags = FLAGS, "color" }, - { "out_color_matrix", "set output YCbCr type", OFFSET(out_color_matrix), AV_OPT_TYPE_STRING, { .str = NULL }, .flags = FLAGS, "color"}, - { "auto", NULL, 0, AV_OPT_TYPE_CONST, { .str = "auto" }, 0, 0, FLAGS, "color" }, - { "bt601", NULL, 0, AV_OPT_TYPE_CONST, { .str = "bt601" }, 0, 0, FLAGS, "color" }, - { "bt470", NULL, 0, AV_OPT_TYPE_CONST, { .str = "bt470" }, 0, 0, FLAGS, "color" }, - { "smpte170m", NULL, 0, AV_OPT_TYPE_CONST, { .str = "smpte170m" }, 0, 0, FLAGS, "color" }, - { "bt709", NULL, 0, AV_OPT_TYPE_CONST, { .str = "bt709" }, 0, 0, FLAGS, "color" }, - { "fcc", NULL, 0, AV_OPT_TYPE_CONST, { .str = "fcc" }, 0, 0, FLAGS, "color" }, - { "smpte240m", NULL, 0, AV_OPT_TYPE_CONST, { .str = "smpte240m" }, 0, 0, FLAGS, "color" }, - { "bt2020", NULL, 0, AV_OPT_TYPE_CONST, { .str = "bt2020" }, 0, 0, FLAGS, "color" }, + { "in_color_matrix", "set input YCbCr type", OFFSET(in_color_matrix), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, AVCOL_SPC_NB-1, .flags = FLAGS, "color" }, + { "out_color_matrix", "set output YCbCr type", OFFSET(out_color_matrix), AV_OPT_TYPE_INT, { .i64 = AVCOL_SPC_UNSPECIFIED }, 0, AVCOL_SPC_NB-1, .flags = FLAGS, "color"}, + { "auto", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = -1 }, 0, 0, FLAGS, "color" }, + { "bt601", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AVCOL_SPC_BT470BG }, 0, 0, FLAGS, "color" }, + { "bt470", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AVCOL_SPC_BT470BG }, 0, 0, FLAGS, "color" }, + { "smpte170m", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AVCOL_SPC_BT470BG }, 0, 0, FLAGS, "color" }, + { "bt709", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AVCOL_SPC_BT709 }, 0, 0, FLAGS, "color" }, + { "fcc", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AVCOL_SPC_FCC }, 0, 0, FLAGS, "color" }, + { "smpte240m", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AVCOL_SPC_SMPTE240M }, 0, 0, FLAGS, "color" }, + { "bt2020", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AVCOL_SPC_BT2020_NCL }, 0, 0, FLAGS, "color" }, { "in_range", "set input color range", OFFSET( in_range), AV_OPT_TYPE_INT, {.i64 = AVCOL_RANGE_UNSPECIFIED }, 0, 2, FLAGS, "range" }, { "out_range", "set output color range", OFFSET(out_range), AV_OPT_TYPE_INT, {.i64 = AVCOL_RANGE_UNSPECIFIED }, 0, 2, FLAGS, "range" }, { "auto", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_RANGE_UNSPECIFIED }, 0, 0, FLAGS, "range" }, From patchwork Sat Oct 28 14:41:16 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 44413 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:dd83:b0:15d:8365:d4b8 with SMTP id kw3csp498363pzb; Sat, 28 Oct 2023 07:46:07 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFqjpbj9JivDneNvp0MAV6xzkqm/m8I2yrgGUIbkfDLW+tjKWNNTMOamQJKy/KhcIdtPZ6n X-Received: by 2002:a17:907:1c25:b0:9ae:50e3:7e40 with SMTP id nc37-20020a1709071c2500b009ae50e37e40mr4393826ejc.52.1698504367160; Sat, 28 Oct 2023 07:46:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698504367; cv=none; d=google.com; s=arc-20160816; b=DajhzjmzPvsMtZwFs/34ibtmORn4dSaKICOqj/rmmwW22C6taC8pd6S97qOgvPEKHC eb3Qe5wcHWSaUUVRVgNMqJXeR2maZMufNfggpe2mUnNgsLpMF8hOdsBzAni5LVc5TJsu 49y46kbq8SNhPBp010N644homuA2Gcvm8U9LGbdULg7ZZLvxz4kr5afC2U/mcavmPE/i c/imPjPpi+hxI7rU7XhhIZ0YJKrkTGxd/G8s3kqGawkgDSbhRfaZLOBFuQFmegzbvjrt iWQPEmG2Y6OSX4Pm/R9VUQfGWk3ID9FMfL+k7fiL8gox9uDAiutTFF7jL0Y+Bc32VNYd g7pw== 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=4t3FFnxqQvlenQszRFeXR7WuTMz/uzG1YiYurV5MjzI=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=fy0irhTpT3bHJ0jR3lrwi2WKLSN0mVeYEuKwcyOOoQbRmPDV+scnK18Ed7zd+dhg+d PPVxd9fCq7rFU1V/wyAaJ/Y1UlF7aC0QiSRFewlBeXa89ORYp2xg0KlyIWxjzax52hvx hM1PA35SjDf73mbWR59e/iyupKUFuiMOfNO/U5F9ONzwCmWKcW7tBiHJbaps8mB2wlsk uwhAIeiQzMs9hTvUGaufgjRBAwGXZdzVmHVDF0STv7ODPcfP43LsIbKz9PMNs+3eYQ6M Z56cFYK4Yyz7dygOtP9DDZm3WxZ4hMa3GfE2qBqLcfMjYX4KwNoPeIsvpkQdQFMRl9yl cPfQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=FAPttxWN; 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 14-20020a170906004e00b009d23c9b1d6dsi221965ejg.56.2023.10.28.07.46.06; Sat, 28 Oct 2023 07:46:07 -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=FAPttxWN; 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 7099268CC00; Sat, 28 Oct 2023 17:44:51 +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 DBF4B68CBDC for ; Sat, 28 Oct 2023 17:44:40 +0300 (EEST) Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 27DD64BBCC; Sat, 28 Oct 2023 16:44:37 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1698504277; bh=YQS0avJzovaQd/NhSeDmpuBn1BttYISHrz/dplJOh9Q=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=FAPttxWNQrApoTsV5GLrTwMwG9/KKerQcIemdrO47A9+Dcmq/vpFejNt5O0lKCsCM EikThBRWjvfmz8bfbSyOW3414j7x4vfkH4P58ahh4XTo+h8/AHJdJ6Gt2ffz4VTmiZ CPwQONeVRg8y95UhNKn00FE7dcpsdgicq6QlsOdA= From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Sat, 28 Oct 2023 16:41:16 +0200 Message-ID: <20231028144430.60538-10-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20231028144430.60538-1-ffmpeg@haasn.xyz> References: <20231028144430.60538-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 09/10] avfilter/vf_scale: tag output color space 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: GL0H1UHu8lRi From: Niklas Haas When using vf_scale to force a specific output color space, also tag this on the AVFrame. (Mirroring existing logic for output range) --- libavfilter/vf_scale.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libavfilter/vf_scale.c b/libavfilter/vf_scale.c index 21cac60779..e3154fcd0a 100644 --- a/libavfilter/vf_scale.c +++ b/libavfilter/vf_scale.c @@ -820,6 +820,9 @@ scale: out->width = outlink->w; out->height = outlink->h; out->color_range = out_full ? AVCOL_RANGE_JPEG : AVCOL_RANGE_MPEG; + if (scale->out_color_matrix >= 0 && + scale->out_color_matrix != AVCOL_SPC_UNSPECIFIED) + out->colorspace = scale->out_color_matrix; // Sanity checks: // 1. If the output is RGB, set the matrix coefficients to RGB. From patchwork Sat Oct 28 14:41:17 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 44414 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:dd83:b0:15d:8365:d4b8 with SMTP id kw3csp498431pzb; Sat, 28 Oct 2023 07:46:16 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEt5PIED+frMkxHtu6bRbdAn6HtP2JGIpFpwyC8q3iciBddumPBAykIiEoHhlVp5UGJbLfv X-Received: by 2002:a17:906:da84:b0:9be:7de2:927c with SMTP id xh4-20020a170906da8400b009be7de2927cmr4201322ejb.70.1698504375893; Sat, 28 Oct 2023 07:46:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698504375; cv=none; d=google.com; s=arc-20160816; b=ibJRSP04wOJyivAW3w8ia0Ruc8MawBBmkRLsscquYvNrE67jTKw/Qm0W6JPOv1b/zM 76OkYbWYtfqE2rFPqPHb0+A4tJVc652pZPANpCn5fe4dBWFHFXucCmwxLkb0Iot5OCYu aFfoCNi5ODX8whkbCr/a+O95qF0Ou9Lw94CLW7gpprhRPA+kc/tWKnsiFxhpPTBfEK/6 TvJNdEud6D6VGThvW6Kp+t0iTK+qPCl4I33NmaiIyBvyuqcVoOIxFiWqqxQ9U9EOYQwc AHmmaxfFhJaREqRiwcTt1YwWQKOMFTZuk9JA2gO5eX3whxTVwa9pgFHqJNTXNgIkJZlm 9/lw== 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=/+f4FpsrFd/oHHlkFgct7uzlT3qo+PDQ60shcy7a7TA=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=unk1zTF4v5OJLPuwdAKtwVbhTRMcLyUcnlnBfm/gByi9IPP+ynSofEW+ARdrhMK9LX 4k4wuhqTT7Z+aYLZPTm79k4c6PfqBYNUASEcANCGDmdIK3XlOBzrJZ/0pJz2o7QilgrT Yvr5bA4f5PJXuDa5iyTJo/+Q0wFvfoubK7BbPyIQ8OMi/ApI7LkgjWCP1HwsMvZs1lQo D8CSaJ023wVSMIguYvbY2C1xTbEs4YOdcA2OoFkjfqdzXkxZf5tv0yxCuiOPL/YLT1uM t635s+/mppVEEdw3GMHQ2TsT2A5XVGqsDKaWQjnXPsbB77JTLkfKhnIdMdnXA9iLk5qC 5UsA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=sGAIzyEZ; 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 qb18-20020a1709077e9200b009c75c46398dsi1790182ejc.266.2023.10.28.07.46.15; Sat, 28 Oct 2023 07:46:15 -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=sGAIzyEZ; 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 69D5F68CC09; Sat, 28 Oct 2023 17:44:52 +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 E3B9A68CBDD for ; Sat, 28 Oct 2023 17:44:40 +0300 (EEST) Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 62F654BBEF; Sat, 28 Oct 2023 16:44:37 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1698504277; bh=S9pq/2udzr9vwC449Lo3pFNywIERroRaOklQdfGxDuo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=sGAIzyEZ3wOdQvUGVRegYakqu52+oqWk2Swlju0wTcusWBdcaLlNlcx2sKoSfKMTa C/Bx1YMuJvLbNpuLAvw11HU/bFUWkGl6GwQSTKSBpM++CEPcT0e1EorDd8rqAqvszl ky2cyk5+6zE7xUPOAucy7msW89dhhwstJE6gC49U= From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Sat, 28 Oct 2023 16:41:17 +0200 Message-ID: <20231028144430.60538-11-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20231028144430.60538-1-ffmpeg@haasn.xyz> References: <20231028144430.60538-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 10/10] avcodec/pnm: explicitly tag color range 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: JR/KdGf/8DUx From: Niklas Haas PGMYUV seems to be always limited range. This was a format originally invented by FFmpeg at a time when YUVJ distinguished limited from full range YUV, and this codec never appeared to output YUVJ in any circumstance, so hard-coding limited range preserves the status quo. The other formats are explicitly documented to be full range RGB/gray formats. That said, don't tag them yet, due to outstanding bugs w.r.t grayscale formats and color range handling. This change in behavior updates a bunch of FATE tests in trivial ways (added tagging being the only difference). --- libavcodec/pnm.c | 7 ++++-- tests/ref/lavf/mkv | 4 ++-- tests/ref/lavf/mkv_attachment | 4 ++-- tests/ref/lavf/mxf | 6 ++--- tests/ref/lavf/y4m | 4 ++-- tests/ref/seek/lavf-mkv | 44 +++++++++++++++++------------------ tests/ref/seek/lavf-y4m | 22 +++++++++--------- 7 files changed, 47 insertions(+), 44 deletions(-) diff --git a/libavcodec/pnm.c b/libavcodec/pnm.c index 77d24eeaf7..796807da23 100644 --- a/libavcodec/pnm.c +++ b/libavcodec/pnm.c @@ -97,10 +97,12 @@ int ff_pnm_decode_header(AVCodecContext *avctx, PNMContext * const s) } else if (s->type==1 || s->type==4) { avctx->pix_fmt = AV_PIX_FMT_MONOWHITE; } else if (s->type==2 || s->type==5) { - if (avctx->codec_id == AV_CODEC_ID_PGMYUV) + if (avctx->codec_id == AV_CODEC_ID_PGMYUV) { avctx->pix_fmt = AV_PIX_FMT_YUV420P; - else + avctx->color_range = AVCOL_RANGE_MPEG; + } else { avctx->pix_fmt = AV_PIX_FMT_GRAY8; + } } else if (s->type==3 || s->type==6) { avctx->pix_fmt = AV_PIX_FMT_RGB24; } else if (s->type==7) { @@ -240,5 +242,6 @@ int ff_pnm_decode_header(AVCodecContext *avctx, PNMContext * const s) h /= 3; avctx->height = h; } + return 0; } diff --git a/tests/ref/lavf/mkv b/tests/ref/lavf/mkv index a8c3fd13e8..5a3c3b931e 100644 --- a/tests/ref/lavf/mkv +++ b/tests/ref/lavf/mkv @@ -1,3 +1,3 @@ -6224bc0893bd0bb8a789e74bbd38c9c7 *tests/data/lavf/lavf.mkv -320440 tests/data/lavf/lavf.mkv +dd709c2b5e173eaca39cdd4a10aac3ec *tests/data/lavf/lavf.mkv +320447 tests/data/lavf/lavf.mkv tests/data/lavf/lavf.mkv CRC=0xec6c3c68 diff --git a/tests/ref/lavf/mkv_attachment b/tests/ref/lavf/mkv_attachment index 4c958af162..1a086a4f24 100644 --- a/tests/ref/lavf/mkv_attachment +++ b/tests/ref/lavf/mkv_attachment @@ -1,3 +1,3 @@ -05132b99d16128e552c1a6f1619be8b7 *tests/data/lavf/lavf.mkv_attachment -472590 tests/data/lavf/lavf.mkv_attachment +7cd7b06892b74d66da217c8dda90bfac *tests/data/lavf/lavf.mkv_attachment +472597 tests/data/lavf/lavf.mkv_attachment tests/data/lavf/lavf.mkv_attachment CRC=0xec6c3c68 diff --git a/tests/ref/lavf/mxf b/tests/ref/lavf/mxf index fdd1ef5c9c..4cf3388afa 100644 --- a/tests/ref/lavf/mxf +++ b/tests/ref/lavf/mxf @@ -1,9 +1,9 @@ -9ec1ad83b3400de11ca2f70b3b2d4c4d *tests/data/lavf/lavf.mxf +fac1fb467168a374e96ea12755558869 *tests/data/lavf/lavf.mxf 526393 tests/data/lavf/lavf.mxf tests/data/lavf/lavf.mxf CRC=0x8dddfaab -3edfabe839a29f5902969c15ebac6d8d *tests/data/lavf/lavf.mxf +d711481c4f81f6466fd92bdc7ed6c968 *tests/data/lavf/lavf.mxf 551481 tests/data/lavf/lavf.mxf tests/data/lavf/lavf.mxf CRC=0xf091e687 -5bd0ce691510e6fae969886c32ad7a14 *tests/data/lavf/lavf.mxf +7f4f8048c4f2d714e45947d4f39b8ea3 *tests/data/lavf/lavf.mxf 526393 tests/data/lavf/lavf.mxf tests/data/lavf/lavf.mxf CRC=0x8dddfaab diff --git a/tests/ref/lavf/y4m b/tests/ref/lavf/y4m index 82c7087673..3c3fa830ad 100644 --- a/tests/ref/lavf/y4m +++ b/tests/ref/lavf/y4m @@ -1,3 +1,3 @@ -ec8178cb152f9cdbfd9cb724d977db2e *tests/data/lavf/lavf.y4m -3801808 tests/data/lavf/lavf.y4m +54f4ebcffedc886835444bb9d6aba3fb *tests/data/lavf/lavf.y4m +3801828 tests/data/lavf/lavf.y4m tests/data/lavf/lavf.y4m CRC=0x0a941f26 diff --git a/tests/ref/seek/lavf-mkv b/tests/ref/seek/lavf-mkv index b8028dd075..e327959058 100644 --- a/tests/ref/seek/lavf-mkv +++ b/tests/ref/seek/lavf-mkv @@ -1,48 +1,48 @@ -ret: 0 st: 1 flags:1 dts:-0.011000 pts:-0.011000 pos: 682 size: 208 +ret: 0 st: 1 flags:1 dts:-0.011000 pts:-0.011000 pos: 689 size: 208 ret: 0 st:-1 flags:0 ts:-1.000000 -ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 898 size: 27837 +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 905 size: 27837 ret: 0 st:-1 flags:1 ts: 1.894167 -ret: 0 st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos: 292314 size: 27834 +ret: 0 st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos: 292321 size: 27834 ret: 0 st: 0 flags:0 ts: 0.788000 -ret: 0 st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos: 292314 size: 27834 +ret: 0 st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos: 292321 size: 27834 ret: 0 st: 0 flags:1 ts:-0.317000 -ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 898 size: 27837 +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 905 size: 27837 ret:-1 st: 1 flags:0 ts: 2.577000 ret: 0 st: 1 flags:1 ts: 1.471000 -ret: 0 st: 1 flags:1 dts: 0.982000 pts: 0.982000 pos: 320158 size: 209 +ret: 0 st: 1 flags:1 dts: 0.982000 pts: 0.982000 pos: 320165 size: 209 ret: 0 st:-1 flags:0 ts: 0.365002 -ret: 0 st: 0 flags:1 dts: 0.480000 pts: 0.480000 pos: 146866 size: 27925 +ret: 0 st: 0 flags:1 dts: 0.480000 pts: 0.480000 pos: 146873 size: 27925 ret: 0 st:-1 flags:1 ts:-0.740831 -ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 898 size: 27837 +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 905 size: 27837 ret:-1 st: 0 flags:0 ts: 2.153000 ret: 0 st: 0 flags:1 ts: 1.048000 -ret: 0 st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos: 292314 size: 27834 +ret: 0 st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos: 292321 size: 27834 ret: 0 st: 1 flags:0 ts:-0.058000 -ret: 0 st: 1 flags:1 dts:-0.011000 pts:-0.011000 pos: 682 size: 208 +ret: 0 st: 1 flags:1 dts:-0.011000 pts:-0.011000 pos: 689 size: 208 ret: 0 st: 1 flags:1 ts: 2.836000 -ret: 0 st: 1 flags:1 dts: 0.982000 pts: 0.982000 pos: 320158 size: 209 +ret: 0 st: 1 flags:1 dts: 0.982000 pts: 0.982000 pos: 320165 size: 209 ret:-1 st:-1 flags:0 ts: 1.730004 ret: 0 st:-1 flags:1 ts: 0.624171 -ret: 0 st: 0 flags:1 dts: 0.480000 pts: 0.480000 pos: 146866 size: 27925 +ret: 0 st: 0 flags:1 dts: 0.480000 pts: 0.480000 pos: 146873 size: 27925 ret: 0 st: 0 flags:0 ts:-0.482000 -ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 898 size: 27837 +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 905 size: 27837 ret: 0 st: 0 flags:1 ts: 2.413000 -ret: 0 st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos: 292314 size: 27834 +ret: 0 st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos: 292321 size: 27834 ret:-1 st: 1 flags:0 ts: 1.307000 ret: 0 st: 1 flags:1 ts: 0.201000 -ret: 0 st: 1 flags:1 dts:-0.011000 pts:-0.011000 pos: 682 size: 208 +ret: 0 st: 1 flags:1 dts:-0.011000 pts:-0.011000 pos: 689 size: 208 ret: 0 st:-1 flags:0 ts:-0.904994 -ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 898 size: 27837 +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 905 size: 27837 ret: 0 st:-1 flags:1 ts: 1.989173 -ret: 0 st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos: 292314 size: 27834 +ret: 0 st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos: 292321 size: 27834 ret: 0 st: 0 flags:0 ts: 0.883000 -ret: 0 st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos: 292314 size: 27834 +ret: 0 st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos: 292321 size: 27834 ret: 0 st: 0 flags:1 ts:-0.222000 -ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 898 size: 27837 +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 905 size: 27837 ret:-1 st: 1 flags:0 ts: 2.672000 ret: 0 st: 1 flags:1 ts: 1.566000 -ret: 0 st: 1 flags:1 dts: 0.982000 pts: 0.982000 pos: 320158 size: 209 +ret: 0 st: 1 flags:1 dts: 0.982000 pts: 0.982000 pos: 320165 size: 209 ret: 0 st:-1 flags:0 ts: 0.460008 -ret: 0 st: 0 flags:1 dts: 0.480000 pts: 0.480000 pos: 146866 size: 27925 +ret: 0 st: 0 flags:1 dts: 0.480000 pts: 0.480000 pos: 146873 size: 27925 ret: 0 st:-1 flags:1 ts:-0.645825 -ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 898 size: 27837 +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 905 size: 27837 diff --git a/tests/ref/seek/lavf-y4m b/tests/ref/seek/lavf-y4m index c416b4657b..67793ea40c 100644 --- a/tests/ref/seek/lavf-y4m +++ b/tests/ref/seek/lavf-y4m @@ -1,19 +1,19 @@ -ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 64 size:152064 +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 84 size:152064 ret:-1 st:-1 flags:0 ts:-1.000000 ret: 0 st:-1 flags:1 ts: 1.894167 ret:-EOF ret: 0 st: 0 flags:0 ts: 0.800000 -ret: 0 st: 0 flags:1 dts: 0.800000 pts: 0.800000 pos:3041464 size:152064 +ret: 0 st: 0 flags:1 dts: 0.800000 pts: 0.800000 pos:3041484 size:152064 ret: 0 st: 0 flags:1 ts:-0.320000 -ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 64 size:152064 +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 84 size:152064 ret: 0 st:-1 flags:0 ts: 2.576668 ret:-EOF ret: 0 st:-1 flags:1 ts: 1.470835 ret:-EOF ret: 0 st: 0 flags:0 ts: 0.360000 -ret: 0 st: 0 flags:1 dts: 0.360000 pts: 0.360000 pos:1368694 size:152064 +ret: 0 st: 0 flags:1 dts: 0.360000 pts: 0.360000 pos:1368714 size:152064 ret: 0 st: 0 flags:1 ts:-0.760000 -ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 64 size:152064 +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 84 size:152064 ret: 0 st:-1 flags:0 ts: 2.153336 ret:-EOF ret: 0 st:-1 flags:1 ts: 1.047503 @@ -24,26 +24,26 @@ ret:-EOF ret: 0 st:-1 flags:0 ts: 1.730004 ret:-EOF ret: 0 st:-1 flags:1 ts: 0.624171 -ret: 0 st: 0 flags:1 dts: 0.600000 pts: 0.600000 pos:2281114 size:152064 +ret: 0 st: 0 flags:1 dts: 0.600000 pts: 0.600000 pos:2281134 size:152064 ret:-1 st: 0 flags:0 ts:-0.480000 ret: 0 st: 0 flags:1 ts: 2.400000 ret:-EOF ret: 0 st:-1 flags:0 ts: 1.306672 ret:-EOF ret: 0 st:-1 flags:1 ts: 0.200839 -ret: 0 st: 0 flags:1 dts: 0.160000 pts: 0.160000 pos: 608344 size:152064 +ret: 0 st: 0 flags:1 dts: 0.160000 pts: 0.160000 pos: 608364 size:152064 ret:-1 st: 0 flags:0 ts:-0.920000 ret: 0 st: 0 flags:1 ts: 2.000000 ret:-EOF ret: 0 st:-1 flags:0 ts: 0.883340 -ret: 0 st: 0 flags:1 dts: 0.880000 pts: 0.880000 pos:3345604 size:152064 +ret: 0 st: 0 flags:1 dts: 0.880000 pts: 0.880000 pos:3345624 size:152064 ret: 0 st:-1 flags:1 ts:-0.222493 -ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 64 size:152064 +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 84 size:152064 ret: 0 st: 0 flags:0 ts: 2.680000 ret:-EOF ret: 0 st: 0 flags:1 ts: 1.560000 ret:-EOF ret: 0 st:-1 flags:0 ts: 0.460008 -ret: 0 st: 0 flags:1 dts: 0.480000 pts: 0.480000 pos:1824904 size:152064 +ret: 0 st: 0 flags:1 dts: 0.480000 pts: 0.480000 pos:1824924 size:152064 ret: 0 st:-1 flags:1 ts:-0.645825 -ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 64 size:152064 +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 84 size:152064