From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id DD52D4B2B0 for ; Mon, 3 Jun 2024 07:17:56 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id F2F9868D62C; Mon, 3 Jun 2024 10:17:53 +0300 (EEST) Received: from out203-205-251-80.mail.qq.com (out203-205-251-80.mail.qq.com [203.205.251.80]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1CF3968D373 for ; Mon, 3 Jun 2024 10:17:45 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1717399055; bh=BEoAb5D0dszb0Vw/ogC2pHhOvOkG63JQCUCDxUhJGCk=; h=From:To:Cc:Subject:Date; b=Qvu5w8SaTcjGtjWB68b4LNJi4NxJuL8gY6u33IqjdpqgF1kD2AakMKvacP6bkhdqy r0ysGipHNotEgTQcHW8hcoiVILvllZTXYnJWZmWu8YYEpbWmA3aKYZoJjMlUR8RoaY Fhv9MH8+0tAGQN+xx0x1ESbOQy3wtqPk7D4uHRik= Received: from ZHILIZHAO-MB1.tencent.com ([113.108.77.52]) by newxmesmtplogicsvrszc13-0.qq.com (NewEsmtp) with SMTP id 461A78E4; Mon, 03 Jun 2024 15:17:33 +0800 X-QQ-mid: xmsmtpt1717399053tc35wdkvu Message-ID: X-QQ-XMAILINFO: MtZ4zLDUQmWfyAHn3sk9i97ehdt5Zr8T3W33Big67peLDNF24U5nkFdbJySeLG ddoY1kVIiTGyrN1wkXfpYotatSVsmRADHhekoTfTVP7sYGLgoiMeBAXKr3PhYh5O4lYC6LUn4LgZ oa2XQgkdxjAUXWZxECUPRNChNMh34cbOU/K++vm/sPJOzfWxKy7PVcOd/GyMeqgfHryDdhH1h7Nm TO9Mswd0OBV9kUDTZCS4tfpQEtCQlXb34ZhmT+FUvBAT9LzQmm4U+t9jjTkXmkSTj12r/PbaerL4 Lt8kflK5O/vOic2UVzaMgJ+9x+njylNPWtgx1I98kB788bKIgSz1fkxoaZCQb3BTm9WwTBL3KNfq IZfFlpIodvWPMyZzOa0bGEtFgLd3nTNu2ZVeaF4VyuzVLgOk1vN+QIaK6ebNV7uO+znhu+gHxFln LmAo5y+FYRGDnOpI3I7aGN84tC3V92+Q05kSDZeFsyWQkuuyNWuLIaMmyplD5kAx1axdXBUoUOZF 8wmrf/tu5PjdCcCr/PHlIQa2x+In+xbGbfdom8T09qvQrhZyCb/XZzPDleVAHv63RLTxOEqLc4MR wIQK3p2RkyiwGqBwIwWiC5ukdQBCfoNcd7kKKiNBOkDDIQw87UR6ES38crOLrBofsNcWFU1Yjd9M AFWSkrEGsGvylqzr2OQDhZq21OIfRFiXoxXKtOysvFQ2kpMEd5MQMsEZ+i38Jb4bKgS7O0QX0t8x esTSbhJdxUu+LkSZAA81Nlj2S5bbu6wdYKF8C4FncYWYT+cBmtk8er/oIGPInBDHO9CXxrqFMnw3 rhPkTpPvVmHnfK9K3f/wFoJ7d9I3LEoW0zzkyZAYEN95WohUI1rVeevrGzdWYPO2ZVH2oHLoXnS/ d38OjB7cmOhyY5T6dACsJ/XNsuqR8ROjp7xgSFBksJiepPBPi8zj/kFYKxP5JcSlRjl3yafYdYH8 F+pwpevjc+Kjk86viWgvO3PLd5JbAwd87Et83zKqw= X-QQ-XMRINFO: MPJ6Tf5t3I/ycC2BItcBVIA= From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Mon, 3 Jun 2024 15:17:31 +0800 X-OQ-MSGID: <20240603071732.52523-1-quinkblack@foxmail.com> X-Mailer: git-send-email 2.42.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [DON'T MERGE PATCH 1/2] checkasm/sw_rgb: test rgb24 to yuv 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: Zhao Zhili Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: From: Zhao Zhili --- I need help on the test. It succeed with the following patch on ARM64, but failed with x86. I'm not sure whether the issue is in the test, or hidden in x86 asm, and I don't know x86 asm. tests/checkasm/sw_rgb.c | 126 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) diff --git a/tests/checkasm/sw_rgb.c b/tests/checkasm/sw_rgb.c index 7cd815e5be..68afee95e3 100644 --- a/tests/checkasm/sw_rgb.c +++ b/tests/checkasm/sw_rgb.c @@ -24,6 +24,8 @@ #include "libavutil/mem_internal.h" #include "libswscale/rgb2rgb.h" +#include "libswscale/swscale.h" +#include "libswscale/swscale_internal.h" #include "checkasm.h" @@ -111,6 +113,124 @@ static void check_uyvy_to_422p(void) } } +static void check_rgb_to_y() +{ + struct SwsContext *ctx; + const AVPixFmtDescriptor *desc; +#define LARGEST_INPUT_SIZE 4096 + static const int input_sizes[] = {8, 128, 1280, 1080, LARGEST_INPUT_SIZE}; + int32_t rgb2yuv[9] = {0}; + + declare_func(void, uint8_t *dst, const uint8_t *src, + const uint8_t *unused1, const uint8_t *unused2, int width, + uint32_t *rgb2yuv, void *opq); + + LOCAL_ALIGNED_32(uint8_t, src, [LARGEST_INPUT_SIZE * 3]); + LOCAL_ALIGNED_32(uint16_t, dst0_y, [LARGEST_INPUT_SIZE]); + LOCAL_ALIGNED_32(uint16_t, dst1_y, [LARGEST_INPUT_SIZE]); + + randomize_buffers(src, LARGEST_INPUT_SIZE * 3); + rgb2yuv[BY_IDX] = ((int)(0.114 * 219 / 255 * (1 << RGB2YUV_SHIFT) + 0.5)); + rgb2yuv[BV_IDX] = (-(int)(0.081 * 224 / 255 * (1 << RGB2YUV_SHIFT) + 0.5)); + rgb2yuv[BU_IDX] = ((int)(0.500 * 224 / 255 * (1 << RGB2YUV_SHIFT) + 0.5)); + rgb2yuv[GY_IDX] = ((int)(0.587 * 219 / 255 * (1 << RGB2YUV_SHIFT) + 0.5)); + rgb2yuv[GV_IDX] = (-(int)(0.419 * 224 / 255 * (1 << RGB2YUV_SHIFT) + 0.5)); + rgb2yuv[GU_IDX] = (-(int)(0.331 * 224 / 255 * (1 << RGB2YUV_SHIFT) + 0.5)); + rgb2yuv[RY_IDX] = ((int)(0.299 * 219 / 255 * (1 << RGB2YUV_SHIFT) + 0.5)); + rgb2yuv[RV_IDX] = ((int)(0.500 * 224 / 255 * (1 << RGB2YUV_SHIFT) + 0.5)); + rgb2yuv[RU_IDX] = (-(int)(0.169 * 224 / 255 * (1 << RGB2YUV_SHIFT) + 0.5)); + + ctx = sws_alloc_context(); + if (sws_init_context(ctx, NULL, NULL) < 0) + fail(); + + for (int i = 0; i < FF_ARRAY_ELEMS(input_sizes); i++) { + int w = input_sizes[i]; + + ctx->srcFormat = AV_PIX_FMT_RGB24; + ctx->dstFormat = AV_PIX_FMT_YUV420P; + + ff_sws_init_scale(ctx); + if (check_func(ctx->lumToYV12, "rgb24_to_y_%d", w)) { + memset(dst0_y, 0xFF, LARGEST_INPUT_SIZE * 2); + memset(dst1_y, 0xFF, LARGEST_INPUT_SIZE * 2); + + call_ref(dst0_y, src, NULL, NULL, w, rgb2yuv, NULL); + call_new(dst1_y, src, NULL, NULL, w, rgb2yuv, NULL); + + if (memcmp(dst0_y, dst1_y, w * 2)) + fail(); + + bench_new(dst1_y, src, NULL, NULL, w, rgb2yuv, NULL); + } + } + + sws_freeContext(ctx); +} + +static void check_rgb_to_uv() +{ + struct SwsContext *ctx; + const AVPixFmtDescriptor *desc; +#define LARGEST_INPUT_SIZE 4096 + static const int input_sizes[] = {8, 128, 1280, 1080, LARGEST_INPUT_SIZE}; + int32_t rgb2yuv[9] = {0}; + + declare_func(void, uint8_t *dstU, uint8_t *dstV, + const uint8_t *src1, const uint8_t *src2, const uint8_t *src3, + int width, uint32_t *pal, void *opq); + + LOCAL_ALIGNED_32(uint8_t, src, [LARGEST_INPUT_SIZE * 3]); + LOCAL_ALIGNED_32(uint16_t, dst0_u, [LARGEST_INPUT_SIZE]); + LOCAL_ALIGNED_32(uint16_t, dst0_v, [LARGEST_INPUT_SIZE]); + LOCAL_ALIGNED_32(uint16_t, dst1_u, [LARGEST_INPUT_SIZE]); + LOCAL_ALIGNED_32(uint16_t, dst1_v, [LARGEST_INPUT_SIZE]); + + randomize_buffers(src, LARGEST_INPUT_SIZE * 3); + rgb2yuv[BY_IDX] = ((int)(0.114 * 219 / 255 * (1 << RGB2YUV_SHIFT) + 0.5)); + rgb2yuv[BV_IDX] = (-(int)(0.081 * 224 / 255 * (1 << RGB2YUV_SHIFT) + 0.5)); + rgb2yuv[BU_IDX] = ((int)(0.500 * 224 / 255 * (1 << RGB2YUV_SHIFT) + 0.5)); + rgb2yuv[GY_IDX] = ((int)(0.587 * 219 / 255 * (1 << RGB2YUV_SHIFT) + 0.5)); + rgb2yuv[GV_IDX] = (-(int)(0.419 * 224 / 255 * (1 << RGB2YUV_SHIFT) + 0.5)); + rgb2yuv[GU_IDX] = (-(int)(0.331 * 224 / 255 * (1 << RGB2YUV_SHIFT) + 0.5)); + rgb2yuv[RY_IDX] = ((int)(0.299 * 219 / 255 * (1 << RGB2YUV_SHIFT) + 0.5)); + rgb2yuv[RV_IDX] = ((int)(0.500 * 224 / 255 * (1 << RGB2YUV_SHIFT) + 0.5)); + rgb2yuv[RU_IDX] = (-(int)(0.169 * 224 / 255 * (1 << RGB2YUV_SHIFT) + 0.5)); + + ctx = sws_alloc_context(); + if (sws_init_context(ctx, NULL, NULL) < 0) + fail(); + + for (int i = 0; i < 2; i++) { + for (int j = 0; j < FF_ARRAY_ELEMS(input_sizes); j++) { + int w = input_sizes[j] >> i; + + ctx->chrSrcHSubSample = i ? 1 : 0; + ctx->srcFormat = AV_PIX_FMT_RGB24; + ctx->dstFormat = i ? AV_PIX_FMT_YUV420P : AV_PIX_FMT_YUV444P; + + ff_sws_init_scale(ctx); + + if (check_func(ctx->chrToYV12, "rgb24_to_uv%s_%d", i ? "_half" : "", w)) { + memset(dst0_u, 0xFF, LARGEST_INPUT_SIZE * 2); + memset(dst0_v, 0xFF, LARGEST_INPUT_SIZE * 2); + memset(dst1_u, 0xFF, LARGEST_INPUT_SIZE * 2); + memset(dst1_v, 0xFF, LARGEST_INPUT_SIZE * 2); + + call_ref(dst0_u, dst0_v, NULL, src, src, w, rgb2yuv, NULL); + call_new(dst1_u, dst1_v, NULL, src, src, w, rgb2yuv, NULL); + + if (memcmp(dst0_u, dst1_u, w * 2) || memcmp(dst0_v, dst1_v, w * 2)) + fail(); + + bench_new(dst1_u, dst1_v, NULL, src, src, w, rgb2yuv, NULL); + } + } + } + + sws_freeContext(ctx); +} + static void check_interleave_bytes(void) { LOCAL_ALIGNED_16(uint8_t, src0_buf, [MAX_STRIDE*MAX_HEIGHT+1]); @@ -201,6 +321,12 @@ void checkasm_check_sw_rgb(void) check_uyvy_to_422p(); report("uyvytoyuv422"); + check_rgb_to_y(); + report("rgb_to_y"); + + check_rgb_to_uv(); + report("rgb_to_uv"); + check_interleave_bytes(); report("interleave_bytes"); } -- 2.42.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".