[{"id":33185,"web_url":"https://patchwork.libcamera.org/comment/33185/","msgid":"<20250126230637.GH1133@pendragon.ideasonboard.com>","date":"2025-01-26T23:06:37","subject":"Re: [PATCH v4 4/9] libcamera: software_isp: Use common code to store\n\tdebayered pixels","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Milan,\n\nThank you for the patch.\n\nOn Mon, Jan 13, 2025 at 02:51:01PM +0100, Milan Zamazal wrote:\n> The debayering macros use the same pattern, let's extract it to a common\n> macro.  This reduces code duplication a bit now and it'll make changes\n> of debayering easier when color correction matrix is introduced.\n\nI would like if I said I like this, as the code gets hader to read in my\nopinion, but I also understand that efficiency is more important here.\n\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\n> Signed-off-by: Milan Zamazal <mzamazal@redhat.com>\n> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> ---\n>  src/libcamera/software_isp/debayer_cpu.cpp | 56 +++++++++++-----------\n>  1 file changed, 28 insertions(+), 28 deletions(-)\n> \n> diff --git a/src/libcamera/software_isp/debayer_cpu.cpp b/src/libcamera/software_isp/debayer_cpu.cpp\n> index 31ab96ab..0eabced2 100644\n> --- a/src/libcamera/software_isp/debayer_cpu.cpp\n> +++ b/src/libcamera/software_isp/debayer_cpu.cpp\n> @@ -62,57 +62,57 @@ DebayerCpu::~DebayerCpu() = default;\n>  \tconst pixel_t *curr = (const pixel_t *)src[1] + xShift_; \\\n>  \tconst pixel_t *next = (const pixel_t *)src[2] + xShift_;\n>  \n> +#define STORE_PIXEL(b, g, r)        \\\n> +\t*dst++ = blue_[b];          \\\n> +\t*dst++ = green_[g];         \\\n> +\t*dst++ = red_[r];           \\\n> +\tif constexpr (addAlphaByte) \\\n> +\t\t*dst++ = 255;       \\\n> +\tx++;\n> +\n>  /*\n>   * RGR\n>   * GBG\n>   * RGR\n>   */\n> -#define BGGR_BGR888(p, n, div)                                                                \\\n> -\t*dst++ = blue_[curr[x] / (div)];                                                      \\\n> -\t*dst++ = green_[(prev[x] + curr[x - p] + curr[x + n] + next[x]) / (4 * (div))];       \\\n> -\t*dst++ = red_[(prev[x - p] + prev[x + n] + next[x - p] + next[x + n]) / (4 * (div))]; \\\n> -\tif constexpr (addAlphaByte)                                                           \\\n> -\t\t*dst++ = 255;                                                                 \\\n> -\tx++;\n> +#define BGGR_BGR888(p, n, div)                                                 \\\n> +\tSTORE_PIXEL(                                                           \\\n> +\t\tcurr[x] / (div),                                               \\\n> +\t\t(prev[x] + curr[x - p] + curr[x + n] + next[x]) / (4 * (div)), \\\n> +\t\t(prev[x - p] + prev[x + n] + next[x - p] + next[x + n]) / (4 * (div)))\n>  \n>  /*\n>   * GBG\n>   * RGR\n>   * GBG\n>   */\n> -#define GRBG_BGR888(p, n, div)                                    \\\n> -\t*dst++ = blue_[(prev[x] + next[x]) / (2 * (div))];        \\\n> -\t*dst++ = green_[curr[x] / (div)];                         \\\n> -\t*dst++ = red_[(curr[x - p] + curr[x + n]) / (2 * (div))]; \\\n> -\tif constexpr (addAlphaByte)                               \\\n> -\t\t*dst++ = 255;                                     \\\n> -\tx++;\n> +#define GRBG_BGR888(p, n, div)                     \\\n> +\tSTORE_PIXEL(                               \\\n> +\t\t(prev[x] + next[x]) / (2 * (div)), \\\n> +\t\tcurr[x] / (div),                   \\\n> +\t\t(curr[x - p] + curr[x + n]) / (2 * (div)))\n>  \n>  /*\n>   * GRG\n>   * BGB\n>   * GRG\n>   */\n> -#define GBRG_BGR888(p, n, div)                                     \\\n> -\t*dst++ = blue_[(curr[x - p] + curr[x + n]) / (2 * (div))]; \\\n> -\t*dst++ = green_[curr[x] / (div)];                          \\\n> -\t*dst++ = red_[(prev[x] + next[x]) / (2 * (div))];          \\\n> -\tif constexpr (addAlphaByte)                                \\\n> -\t\t*dst++ = 255;                                      \\\n> -\tx++;\n> +#define GBRG_BGR888(p, n, div)                             \\\n> +\tSTORE_PIXEL(                                       \\\n> +\t\t(curr[x - p] + curr[x + n]) / (2 * (div)), \\\n> +\t\tcurr[x] / (div),                           \\\n> +\t\t(prev[x] + next[x]) / (2 * (div)))\n>  \n>  /*\n>   * BGB\n>   * GRG\n>   * BGB\n>   */\n> -#define RGGB_BGR888(p, n, div)                                                                 \\\n> -\t*dst++ = blue_[(prev[x - p] + prev[x + n] + next[x - p] + next[x + n]) / (4 * (div))]; \\\n> -\t*dst++ = green_[(prev[x] + curr[x - p] + curr[x + n] + next[x]) / (4 * (div))];        \\\n> -\t*dst++ = red_[curr[x] / (div)];                                                        \\\n> -\tif constexpr (addAlphaByte)                                                            \\\n> -\t\t*dst++ = 255;                                                                  \\\n> -\tx++;\n> +#define RGGB_BGR888(p, n, div)                                                         \\\n> +\tSTORE_PIXEL(                                                                   \\\n> +\t\t(prev[x - p] + prev[x + n] + next[x - p] + next[x + n]) / (4 * (div)), \\\n> +\t\t(prev[x] + curr[x - p] + curr[x + n] + next[x]) / (4 * (div)),         \\\n> +\t\tcurr[x] / (div))\n>  \n>  template<bool addAlphaByte>\n>  void DebayerCpu::debayer8_BGBG_BGR888(uint8_t *dst, const uint8_t *src[])","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 A15CCBEFBE\n\tfor <parsemail@patchwork.libcamera.org>;\n\tSun, 26 Jan 2025 23:06:51 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id C7EB26855D;\n\tMon, 27 Jan 2025 00:06:50 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 406D56187B\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 27 Jan 2025 00:06:48 +0100 (CET)","from pendragon.ideasonboard.com (81-175-209-231.bb.dnainternet.fi\n\t[81.175.209.231])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 08CCD6DF;\n\tMon, 27 Jan 2025 00:05:41 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"BTLMMJPi\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1737932742;\n\tbh=q+4krzmW7F/OyDsTOvhTvFYEkZRx4CCAOmmMl7uLCpM=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=BTLMMJPiHF9iVxdCAsIUJcJewt8QCvh+kbbVpmpaSnkUho/w51pUluvToQ8Lggr2b\n\tZfSwdnKclEf2vdDobX5/VmdsPTD+OMdu5Khqp2upNCvWDtbwDYrsdQHH4Xcw7hsAhb\n\tv1uguF8G7f3F8z+Rkzt6rEd9/Gy0VXQClYB4G0D4=","Date":"Mon, 27 Jan 2025 01:06:37 +0200","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Milan Zamazal <mzamazal@redhat.com>","Cc":"libcamera-devel@lists.libcamera.org,\n\tRobert Mader <robert.mader@collabora.com>,\n\tHans de Goede <hdegoede@redhat.com>,\n\tKieran Bingham <kieran.bingham@ideasonboard.com>","Subject":"Re: [PATCH v4 4/9] libcamera: software_isp: Use common code to store\n\tdebayered pixels","Message-ID":"<20250126230637.GH1133@pendragon.ideasonboard.com>","References":"<20250113135108.13924-1-mzamazal@redhat.com>\n\t<20250113135108.13924-5-mzamazal@redhat.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20250113135108.13924-5-mzamazal@redhat.com>","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>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]