From patchwork Sun Sep 20 17:12:12 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: 22540 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 A66E044A2AA for ; Sun, 20 Sep 2020 20:12:21 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 872DB68B989; Sun, 20 Sep 2020 20:12:21 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lj1-f193.google.com (mail-lj1-f193.google.com [209.85.208.193]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 76F5E68B887 for ; Sun, 20 Sep 2020 20:12:14 +0300 (EEST) Received: by mail-lj1-f193.google.com with SMTP id u21so9143560ljl.6 for ; Sun, 20 Sep 2020 10:12:14 -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=EA9eJlb1+m+Oq3bMtlyT2LyITBXkB9ylfMts6lYhiGk=; b=ucRFb8hkwuYq2wHXViAtFyiMLdxKy2KL/xxVX3gGq8KbpIVL6v09PYu89WqHH/wOqL ek0ALQzaI8XxKPbZ52O2I0GmgiYcOehjR0BYp3RIoEAktmmeytuCyjJ8zxnhia7g4nvZ e2Fe/mnC/UgUNrizwDO98cxEt/H1VEU470bce2eTY9CQ8y9/7PRjghjfRjI/daDht6hp eG5jCY4LhTqvjE2QI6/8METO7cYB6bXBaJa0dSl/XjtujIWKb+SwKo9g6pZsEDmbPlKl o9kLZgbFRts36q85xWSmhgujIz1jhd0gSSacWhHzeQTP5IMKMicdMrlJFEbc9Rc1j65a MNfQ== 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=EA9eJlb1+m+Oq3bMtlyT2LyITBXkB9ylfMts6lYhiGk=; b=VHT2cVBZoYs4Hll/zzfI4BQgNSueRkYeVr+7GpL3nQz6gt6PmqMHAnwD16fABPAUZM jbmaMpWvx0aqAkgxlIYdIqTVkboCwUN3i6QcbnWCRPkNLnspukr8MLVLh2R7YLEC4anO D1RD6q92AvESG6DAW0NkLmL0ppXmAVLvlyWC+DKOqOSDfKIy7hUmA3OqNGR1+TXrFtaO hbxO5PwSfXAMtCD3PG4eAx4rYQOiorI+vf2jkmRofMtGAtdO3jz4Qv98YBywC9MxGiVD T24zW0YCavZEHXRr9q7rDnbkK3u1hbSFruaMBI53dPOAOfORTp9zGOXY25SSWjPKQwxS dtAA== X-Gm-Message-State: AOAM533oFe8mhX/3vNM6kkRFEDss56Z1nGkePiQZ0H2+goEbrljxouDd ZmcH4VHRgQrU2FYez610apxKa6uMfQ0= X-Google-Smtp-Source: ABdhPJzipy9Q15G9nqHQMmlHvw0uzk7f2kDPT7JMPIqWar/SC/JH52TpKIu7uSH9IenxeJZpyRuIAw== X-Received: by 2002:a2e:a590:: with SMTP id m16mr15459592ljp.166.1600621933558; Sun, 20 Sep 2020 10:12:13 -0700 (PDT) Received: from localhost.localdomain (91-159-194-103.elisa-laajakaista.fi. [91.159.194.103]) by smtp.gmail.com with ESMTPSA id u4sm1930557lfg.247.2020.09.20.10.12.12 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 20 Sep 2020 10:12:12 -0700 (PDT) From: =?utf-8?q?Jan_Ekstr=C3=B6m?= To: ffmpeg-devel@ffmpeg.org Date: Sun, 20 Sep 2020 20:12:12 +0300 Message-Id: <20200920171212.26998-1-jeebjp@gmail.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200919114201.23764-1-jeebjp@gmail.com> References: <20200919114201.23764-1-jeebjp@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3] 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..46ef211add 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 RGB and 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 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 };