From patchwork Fri Sep 18 21:05:22 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: 22479 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 F0D8844B6B3 for ; Sat, 19 Sep 2020 00:31:34 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id CA2AF68B84B; Sat, 19 Sep 2020 00:31:34 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lf1-f66.google.com (mail-lf1-f66.google.com [209.85.167.66]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 090FB68B7CA for ; Sat, 19 Sep 2020 00:31:28 +0300 (EEST) Received: by mail-lf1-f66.google.com with SMTP id b12so7598858lfp.9 for ; Fri, 18 Sep 2020 14:31:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=yPsnn9d0K3FP7PZXZ2vIZ2cAJR0zZ9QuoWIjaDuq0ps=; b=t7YUr7s9oDutJ1IiXjB1Od7nA159BlfTKrJu4qt9d7D3fkAspHHMVmbdEVC8QhHg9g 2j4axVDPHlOopsni5RDxiKq1N3Hq4crk+9fvMJZRJBI6cR+3A6OJC0oWTNi2SELM5XFx CCot+knC2dabXkzXMlrnpkebgPHlRqEVdjXzs9Qq89bzzzejWYQhRF612LrN8CzaJch6 ZEZVozsDCOGZXc4bvVAOcaruuGs4U3DDqNQS5p0gNKHean+ErLgdauH0ijWK9B69DjOC fMvKMXo6IiaBT5rWlCwhS2/VRK7t8qJX/OHJvuIrH59clLjWTVrlOyBb61BHe3z/Va87 YCQQ== 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:mime-version :content-transfer-encoding; bh=yPsnn9d0K3FP7PZXZ2vIZ2cAJR0zZ9QuoWIjaDuq0ps=; b=Zvm9wH+97EGrE3J3+/NqF+Mj7RdOHHgqjKAajL20QQd0euLwvjj56llurGD3yZ06Hj Vp+N/SmuKfd8vPVwO84Gn3/GaKquASAxyMaJZw9wFbFg0PGxzVPimiG/2HwlIGtWfBS1 2jWjAXKOCpxiWHqIm48MrNr3tG7vGJqeBXpVKnHSM7meWRlbgs2rIg/MbWV4azsS8k4B O1YgsbSo50XnwMZnq6+EPHNiihAar7DoNM8dVInRl7NnwVXMTMv3TzUXxfFo8uQ3c07A xBwgS6M2J0Y7MvStyYiAaL0ZvDcS1zECilsZXo1s8J3Dxjgkl0LBeOnW3JvMsJK4lW9P 46YA== X-Gm-Message-State: AOAM531LalQMsdPMgnhEe3166w6MGrFPZn05CStmspiPJ2aQ1xQiqDoX j/EqnGYGYS2PbG5lPims4JtUdQ5wXHY= X-Google-Smtp-Source: ABdhPJxtXUUVDPpoOsbET0rvtmOA/Zer5NYY0J09L+x5HVaFTaAqrd5IZr5KkbWdKqLg9rQkYp2X/Q== X-Received: by 2002:a2e:8645:: with SMTP id i5mr11598317ljj.209.1600463124737; Fri, 18 Sep 2020 14:05:24 -0700 (PDT) Received: from localhost.localdomain (91-159-194-103.elisa-laajakaista.fi. [91.159.194.103]) by smtp.gmail.com with ESMTPSA id p10sm804832lfh.294.2020.09.18.14.05.23 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 18 Sep 2020 14:05:23 -0700 (PDT) From: =?utf-8?q?Jan_Ekstr=C3=B6m?= To: ffmpeg-devel@ffmpeg.org Date: Sat, 19 Sep 2020 00:05:22 +0300 Message-Id: <20200918210522.12311-1-jeebjp@gmail.com> X-Mailer: git-send-email 2.26.2 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] 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 | 40 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 3 deletions(-) diff --git a/libavutil/pixfmt.h b/libavutil/pixfmt.h index a46acf3c5e..68051bf4b9 100644 --- a/libavutil/pixfmt.h +++ b/libavutil/pixfmt.h @@ -530,12 +530,46 @@ 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 + AVCOL_RANGE_MPEG = 1, ///< 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_JPEG = 2, ///< 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_NB ///< Not part of ABI };