From patchwork Sat Sep 19 11:42:01 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Jan_Ekstr=C3=B6m?= X-Patchwork-Id: 22481 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 330A244B680 for ; Sat, 19 Sep 2020 14:42:11 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0B40568B6CF; Sat, 19 Sep 2020 14:42:11 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lj1-f196.google.com (mail-lj1-f196.google.com [209.85.208.196]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0647F68B698 for ; Sat, 19 Sep 2020 14:42:05 +0300 (EEST) Received: by mail-lj1-f196.google.com with SMTP id a15so7193437ljk.2 for ; Sat, 19 Sep 2020 04:42:04 -0700 (PDT) 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=JGqDNzp7cXr1R3m4s4qG1THULIkaua+n+ZPGHMRWmL4=; b=JpN1DZirASsy4tpk6Td2qkEEQ1a8yPycmpzlzcsgch11JosOFL+zTV4AuWZqh8Ma7g kpkGMD6Z+k9+FbKMj6XdPyCpRfgYEsuN8DgjH5cgkwcQqVBrPxhHV3hZOemXhi8WcYzs tEeKVgW0ky/4Ufp0EwgoxP3xbiPFPTy+AvwgfcyEw+2tAxOVKEnRM2XAgKaFl927vAST jkn7oHr4Qoo74lMxvHGlWQqZq72YFAr/XQdMukcoVpXFCSoJhEkT4E9PlsWs42ll3Zgr 0ZavwFqAcJEoWOHNbwJTanxf5/CHeSYKoLUX0p4cOcJzBuWNPQv+vK9WWo0F6hnK06Qd R+fA== 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=JGqDNzp7cXr1R3m4s4qG1THULIkaua+n+ZPGHMRWmL4=; b=nXQjcyvHMotpiktTo2dF9SJM87v/0kRrw1lageD/DUReADtZ6LxD68RrIbemAEvIFl SFGmuB6izh/bjSTyvhMlzdCafnALRxjnS1bzgqcwbE7pMQkdObO+IOayquwjw2r2jRwr CFB/lS/kt+yE1ON/ID29JTuZZZnyenrBsMdWRwuyVrg7CB2NW3GhTZ7vCDCLpvRFQtyb YPlrxRzu/sdUCBVipg71OLIv9zLb9C4Xop+HhCfU1jj4M26bhtL3mTXkkg2QBA6GIJeZ BIL2MeVy1Jqt76ja3HeQ5NRDpKVgeQwR+U5Q04Q+ltOW6DAcCVxS+KxtqNmEB4HCXLuP euqg== X-Gm-Message-State: AOAM531yCY5rzTmGWQBmTO7b7utlIQkzE/PnZkUR9S5EaT4I+ZIaATt0 N12DCOpAm4K9gF1Bl76WUb3hn1ND550= X-Google-Smtp-Source: ABdhPJzSpqYY84DPDVwU0mhDUXHh/YxUB71VELGrSrGx0LbT/YFcIl/4Sqyv2oZNEKJ/fXw016DKrg== X-Received: by 2002:a2e:545:: with SMTP id 66mr13921094ljf.469.1600515723261; Sat, 19 Sep 2020 04:42:03 -0700 (PDT) Received: from localhost.localdomain (91-159-194-103.elisa-laajakaista.fi. [91.159.194.103]) by smtp.gmail.com with ESMTPSA id m19sm562358lji.112.2020.09.19.04.42.02 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Sep 2020 04:42:02 -0700 (PDT) From: =?utf-8?q?Jan_Ekstr=C3=B6m?= To: ffmpeg-devel@ffmpeg.org Date: Sat, 19 Sep 2020 14:42:01 +0300 Message-Id: <20200919114201.23764-1-jeebjp@gmail.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200918210522.12311-1-jeebjp@gmail.com> References: <20200918210522.12311-1-jeebjp@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2] avutil/pixfmt: improve definition of AVColorRange 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" As it was brought up that the current documentation leaves things as specific to YCbCr only, ICtCp and RGB are now mentioned. Additionally, the specifications on which these definitions of narrow and full range are defined are mentioned. This way, the documentation of AVColorRange should now match how most people seem to read interpret it at this point, and thus flagging RGB AVFrames as full range is valid not only according to common sense, but also the enum definition. --- libavutil/pixfmt.h | 54 +++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 51 insertions(+), 3 deletions(-) diff --git a/libavutil/pixfmt.h b/libavutil/pixfmt.h index a46acf3c5e..480ac9bb42 100644 --- a/libavutil/pixfmt.h +++ b/libavutil/pixfmt.h @@ -530,12 +530,60 @@ enum AVColorSpace { }; /** - * MPEG vs JPEG YUV range. + * Visual content value range. + * + * These values are based on definitions that can be found in multiple + * specifications, such as ITU-T BT.709 (3.4 - Quantization of RGB, luminance + * and colour-difference signals), ITU-T BT.2020 (Table 5 - Digital + * Representation) as well as ITU-T BT.2100 (Table 9 - Digital 10- and 12-bit + * integer representation). At the time of writing, the BT.2100 one is + * recommended, as it also defines the full range representation. + * + * Common definitions: + * - For luminance planes such as Y in YCbCr and I in ICtCp, 'E' is the + * original value in range of 0.0 to 1.0. + * - For chrominance planes such as Cb,Cr and Ct,Cp, 'E' is the original + * value in range of -0.5 to 0.5. + * - 'n' is the output bit depth. + * - For additional definitions such as rounding and clipping to valid n + * bit unsigned integer range, please refer to BT.2100 (Table 9). */ enum AVColorRange { AVCOL_RANGE_UNSPECIFIED = 0, - AVCOL_RANGE_MPEG = 1, ///< the normal 219*2^(n-8) "MPEG" YUV ranges - AVCOL_RANGE_JPEG = 2, ///< the normal 2^n-1 "JPEG" YUV ranges + + /** + * Narrow or limited range content. + * + * - For RGB and luminance planes: + * + * (219 * E + 16) * 2^(n-8) + * + * F.ex. the range of 16-235 for 8 bits + * + * - For chrominance planes: + * + * (224 * E + 128) * 2^(n-8) + * + * F.ex. the range of 16-240 for 8 bits + */ + AVCOL_RANGE_MPEG = 1, + + /** + * Full range content. + * + * - For RGB and luminance planes: + * + * (2^n - 1) * E + * + * F.ex. the range of 0-255 for 8 bits + * + * - For chrominance planes: + * + * (2^n - 1) * E + 2^(n - 1) + * + * F.ex. the range of 1-255 for 8 bits + */ + AVCOL_RANGE_JPEG = 2, AVCOL_RANGE_NB ///< Not part of ABI };