[{"id":25142,"web_url":"https://patchwork.libcamera.org/comment/25142/","msgid":"<20220928062527.jforzw5rmgazxxyp@uno.localdomain>","date":"2022-09-28T06:25:27","subject":"Re: [libcamera-devel] [PATCH] utils: rkisp1: gen-csc-table: Add\n\tsupport for inverting the CSC","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi Laurent\n\nOn Wed, Sep 28, 2022 at 02:27:07AM +0300, Laurent Pinchart via libcamera-devel wrote:\n> Add a -i/--invert command line argument to invert the YCbCr encoding and\n> output a YCbCr to RGB matrix.\n>\n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\nReviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n\nThanks\n  j\n\n> ---\n>  utils/rkisp1/gen-csc-table.py | 15 ++++++++++++---\n>  1 file changed, 12 insertions(+), 3 deletions(-)\n>\n> diff --git a/utils/rkisp1/gen-csc-table.py b/utils/rkisp1/gen-csc-table.py\n> index 2fb702746421..83aea357966a 100755\n> --- a/utils/rkisp1/gen-csc-table.py\n> +++ b/utils/rkisp1/gen-csc-table.py\n> @@ -7,6 +7,7 @@\n>\n>  import argparse\n>  import enum\n> +import numpy as np\n>  import sys\n>\n>\n> @@ -63,7 +64,7 @@ class Quantization(enum.Enum):\n>      LIMITED = 1\n>\n>\n> -def scale_coeff(coeff, quantization, luma, precision):\n> +def scale_coeff(coeff, quantization, luma, precision, invert):\n>      \"\"\"Scale a coefficient to the output range dictated by the quantization and\n>      the precision.\n>\n> @@ -91,6 +92,9 @@ def scale_coeff(coeff, quantization, luma, precision):\n>      else:\n>          out_range = 240 - 16\n>\n> +    if invert:\n> +        in_range, out_range = out_range, in_range\n> +\n>      return coeff * out_range / in_range * (1 << precision)\n>\n>\n> @@ -150,6 +154,8 @@ def main(argv):\n>          description='Generate color space conversion table coefficients with '\n>          'configurable fixed-point precision.'\n>      )\n> +    parser.add_argument('--invert', '-i', action='store_true',\n> +                        help='Invert the color space conversion (YUV -> RGB)')\n>      parser.add_argument('--precision', '-p', default='Q1.7',\n>                          help='The output fixed point precision in Q notation (sign bit excluded)')\n>      parser.add_argument('--quantization', '-q', choices=['full', 'limited'],\n> @@ -166,12 +172,15 @@ def main(argv):\n>      encoding = encodings[args.encoding]\n>      quantization = Quantization[args.quantization.upper()]\n>\n> +    if args.invert:\n> +        encoding = np.linalg.inv(encoding)\n> +\n>      # Scale and round the encoding coefficients based on the precision and\n>      # quantization range.\n>      luma = True\n>      scaled_coeffs = []\n>      for line in encoding:\n> -        line = [scale_coeff(coeff, quantization, luma, precision.fractional) for coeff in line]\n> +        line = [scale_coeff(coeff, quantization, luma, precision.fractional, args.invert) for coeff in line]\n>          scaled_coeffs.append(line)\n>          luma = False\n>\n> @@ -188,7 +197,7 @@ def main(argv):\n>      # Print the result as C code.\n>      nbits = 1 << (precision.total - 1).bit_length()\n>      nbytes = nbits // 4\n> -    print(f'static const u{nbits} rgb2yuv_{args.encoding}_{quantization.name.lower()}_coeffs[] = {{')\n> +    print(f'static const u{nbits} {\"yuv2rgb\" if args.invert else \"rgb2yuv\"}_{args.encoding}_{quantization.name.lower()}_coeffs[] = {{')\n>\n>      for line in rounded_coeffs:\n>          line = [f'0x{coeff:0{nbytes}x}' for coeff in line]\n> --\n> Regards,\n>\n> Laurent Pinchart\n>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 21C51C0DA4\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 28 Sep 2022 06:25:33 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 4C93262286;\n\tWed, 28 Sep 2022 08:25:32 +0200 (CEST)","from relay5-d.mail.gandi.net (relay5-d.mail.gandi.net\n\t[217.70.183.197])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 6832A61F78\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 28 Sep 2022 08:25:30 +0200 (CEST)","(Authenticated sender: jacopo@jmondi.org)\n\tby mail.gandi.net (Postfix) with ESMTPSA id D62A01C0003;\n\tWed, 28 Sep 2022 06:25:29 +0000 (UTC)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1664346332;\n\tbh=D1WM6HpF4S7djBZ6SOpXQgr1KIt9xOZGaXu/8ckQm7s=;\n\th=Date:To:References:In-Reply-To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=x1/XZPSy3losSjpDFP4O9n/Q10Mwz/3tBpFXiXIvVONey9yWEKIG86kW3LPOJQaHk\n\taJbZw/SxelakLAavaATenaOO4kO7lg8cgo9rOhKkFFcPy8KgEJ+U7Y/evF6bVeBo5U\n\t9gK/Hz4zfqISDeIbwgKnZzymPR9wbcqfo663zqzkWesJRnWnV9iuNFm7JfP8aJxTFa\n\tL8nYMe0Oju1k2Kd2obIYdHqZQ0r2jvRyIYWRB8yYR8+d5S2eZWmi0tgH9Q4MJrm382\n\tvqEWwX1yPRLrT2IJA/M8CUJp+zmCnGNuxjOFpZPkwo4wY88HlFnss9ygs083Kwosxt\n\tMX5BQLv83rdSQ==","Date":"Wed, 28 Sep 2022 08:25:27 +0200","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Message-ID":"<20220928062527.jforzw5rmgazxxyp@uno.localdomain>","References":"<20220927232707.7596-1-laurent.pinchart@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20220927232707.7596-1-laurent.pinchart@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH] utils: rkisp1: gen-csc-table: Add\n\tsupport for inverting the CSC","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","From":"Jacopo Mondi via libcamera-devel <libcamera-devel@lists.libcamera.org>","Reply-To":"Jacopo Mondi <jacopo@jmondi.org>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]