From patchwork Mon Oct 21 19:57:22 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: martin schitter X-Patchwork-Id: 52433 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:612c:143:b0:48e:c0f8:d0de with SMTP id h3csp2921339vqi; Mon, 21 Oct 2024 13:19:07 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCUn3i2J3Ort1lfeYSiifwq7RVsoP4tFZAIp/0zQi64PDHnApRrDrXf6zqceRYEfpUJeTLYAGN5X1t+Cb6nthQJE@gmail.com X-Google-Smtp-Source: AGHT+IEOSqPcxiOPLf/o4N7Y5htdAGKKcGSi5pGH5YqpUpdHMP5aA5y27Mj+yyjuqqwaWGY9X+zv X-Received: by 2002:a2e:a9a2:0:b0:2fb:6465:3183 with SMTP id 38308e7fff4ca-2fc9044130emr8682001fa.3.1729541947050; Mon, 21 Oct 2024 13:19:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1729541947; cv=none; d=google.com; s=arc-20240605; b=Qbzy/dEf2/RuWrE8H4nLtKwJans2hRJ+KNqxBfitEhm0nv8Ckdh3o4JiKptxcKNtfQ 79HoVDsrVN10ZYIPVP9G5DcZ545HA0P0Y7RRc7C2OmuQf8JpEvLCr1KXBYdbk/9jDUce t8VVXQ9xyMB4a2BcFSCgsPULr0vAcVKHoS7786NVq4HumPVDS8KgY23gp5De5ow1HTlp OoIDgJVDdb505iGzsXBI6tA7+1rn5P/Ykve7dtgpO0d6vDniLMjlq8CMwnVsSF9+J/7U hRLyBRqfDP8xC4OO6r0zbKp0kVYfA+Xqu4ZmqrzNmAt7urChQdbMfuVJ/VVPhefu60q8 1nyw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=OqeFLEpHnIW6YoDF264nrHjC2sr5T+a6Aqm01/TvNA0=; fh=igg3JDwkSkAbPTwY6V0OsEq0RUkG4DKWC8fVJg4GhMY=; b=HKu7qiDQgozijr8z/lH27f8sjFbUPEIrHB2c4VMyerOCcnqEmfzFRcinwWEHjXLc2J ux4f3JSVOxYc6K6P0+eTgkQixrZ8jSbaRpb2G8+BiElawdsuhyNBwEWK8RYX0RwG2+uA M59Gokrl5HGl+RaA2Ww6mvO6NDo31UYnn9OOyouTWgZ6RlBEtCtyyjVLkLrif3Keg373 5FYzasEKf3PKyC3M6pftN6g86OKfCrKVGw3nRI02/9lR5pJXXFxvQzLA4eEnFldLpEWu I5b2iUV0u+TYcEbK/XXh0oh0fPmhaT2kPo8B5h8lniCuY8fssGtuk25XQO7wWyYW3AbC 8yZQ==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@mur.at header.s=dkim2 header.b=QPgsXrnc; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=mur.at Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id 38308e7fff4ca-2fb9ae8c2easi12948741fa.445.2024.10.21.13.19.06; Mon, 21 Oct 2024 13:19:07 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@mur.at header.s=dkim2 header.b=QPgsXrnc; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=mur.at Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id F05BC68DE0D; Mon, 21 Oct 2024 23:18:13 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from efeu.mur.at (efeu.mur.at [89.106.208.42]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 63A2168DA3F for ; Mon, 21 Oct 2024 23:18:06 +0300 (EEST) Received: from localhost.localdomain (lan1.raspi.ma39.ffgraz.net [10.12.1.243]) by efeu.mur.at (Postfix) with ESMTPSA id 68962462EF; Mon, 21 Oct 2024 22:18:01 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=mur.at; s=dkim2; t=1729541881; bh=CrpELF7lM8AQ9eWWTwvtiupDgd+zJL1cSXglkTdAl4c=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=QPgsXrnc9CiPozsN5Y0EzjuyYyCgWQMjNyGy2BCND5MbXL250giZJwKgLPrZm+hS6 PGx93FA36/KiBQWVZhgfxMeb+DJ1vg/IYeZrXBnQYrr7Z45Ip4vN1rj70gUODgtplP n7X0rgv5rbSImXoxejGMMqUf8KZSjh3t98QSNhhnQ/V7v8R6J/FFSP3Xyvbom4Hzmn knljXwOlSkQ7T6JXqwdK4kppBvWb8VMLaHWMw/yyl4rcKQR/91XMzdtFjDWuSVD5os hB+Kj9BbfcffFokhxgLsxXjYvdxhmQvE0+Kya8O5i5ILpP9gp8w4jJmErHUSSmu0nI xhZCgROnU5wdTFHmIVKhYwYJJcuu8acP+q5/PtoeA3jIbJl2EC93ZT270Tey9x2Oqw TT2eje6sMe+CwAYmHL7mckl00FsLlhtsLHQ+rqVEFRkPWNm9tiDsD4UimI6UF5Mbze zjUoEaei22iYGcRXPR6KQbCdnbYZROqJGtkZUJHG25gf7tRbbL1 From: Martin Schitter To: ffmpeg-devel@ffmpeg.org Date: Mon, 21 Oct 2024 21:57:22 +0200 Message-ID: <20241021195721.892544-11-ms+git@mur.at> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20241021195721.892544-2-ms+git@mur.at> References: <20241021195721.892544-2-ms+git@mur.at> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v12 9/9] swscale/input: color subsampling input support for RGBF32 X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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 Cc: Martin Schitter Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: TcfjzORXCIPc --- libswscale/input.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/libswscale/input.c b/libswscale/input.c index f9d7c39..ba7e3c4 100644 --- a/libswscale/input.c +++ b/libswscale/input.c @@ -1447,6 +1447,30 @@ static av_always_inline void planar_rgbf32_to_y(uint8_t *_dst, const uint8_t *_s } } +static av_always_inline void rgbf32_to_uv_half_c(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *unused1, + const uint8_t *_src, const uint8_t *unused2, + int width, int is_be, int32_t *rgb2yuv) +{ + int i; + const float *src = (const float *)_src; + uint16_t *dstU = (uint16_t *)_dstU; + uint16_t *dstV = (uint16_t *)_dstV; + int32_t ru = rgb2yuv[RU_IDX], gu = rgb2yuv[GU_IDX], bu = rgb2yuv[BU_IDX]; + int32_t rv = rgb2yuv[RV_IDX], gv = rgb2yuv[GV_IDX], bv = rgb2yuv[BV_IDX]; + + for (i = 0; i < width; i++) { + int r = (lrintf(av_clipf(65535.0f * rdpx(&src[6*i]), 0.0f, 65535.0f)) + + lrintf(av_clipf(65535.0f * rdpx(&src[6*i+3]), 0.0f, 65535.0f))) >> 1; + int g = (lrintf(av_clipf(65535.0f * rdpx(&src[6*i+1]), 0.0f, 65535.0f)) + + lrintf(av_clipf(65535.0f * rdpx(&src[6*i+4]), 0.0f, 65535.0f))) >> 1; + int b = (lrintf(av_clipf(65535.0f * rdpx(&src[6*i+2]), 0.0f, 65535.0f)) + + lrintf(av_clipf(65535.0f * rdpx(&src[6*i+5]), 0.0f, 65535.0f))) >> 1; + + dstU[i] = (ru*r + gu*g + bu*b + (0x10001 << (RGB2YUV_SHIFT - 1))) >> RGB2YUV_SHIFT; + dstV[i] = (rv*r + gv*g + bv*b + (0x10001 << (RGB2YUV_SHIFT - 1))) >> RGB2YUV_SHIFT; + } +} + static av_always_inline void rgbf32_to_uv_c(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *unused1, const uint8_t *_src, const uint8_t *unused2, int width, int is_be, int32_t *rgb2yuv) @@ -1574,6 +1598,13 @@ static void rgbf32##endian_name##_to_uv_c(uint8_t *dstU, uint8_t *dstV, { \ rgbf32_to_uv_c(dstU, dstV, unused1, src, unused2, w, endian, rgb2yuv); \ } \ +static void rgbf32##endian_name##_to_uv_half_c(uint8_t *dstU, uint8_t *dstV, \ + const uint8_t *unused1, \ + const uint8_t *src, const uint8_t *unused2, \ + int w, uint32_t *rgb2yuv, void *opq) \ +{ \ + rgbf32_to_uv_half_c(dstU, dstV, unused1, src, unused2, w, endian, rgb2yuv); \ +} \ static void grayf32##endian_name##ToY16_c(uint8_t *dst, const uint8_t *src, \ const uint8_t *unused1, const uint8_t *unused2, \ int width, uint32_t *unused, void *opq) \ @@ -2138,6 +2169,12 @@ av_cold void ff_sws_init_input_funcs(SwsContext *c, case AV_PIX_FMT_RGBF16LE: *chrToYV12 = rgbf16leToUV_half_c; break; + case AV_PIX_FMT_RGBF32BE: + *chrToYV12 = rgbf32be_to_uv_half_c; + break; + case AV_PIX_FMT_RGBF32LE: + *chrToYV12 = rgbf32le_to_uv_half_c; + break; } } else { switch (srcFormat) {