From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.ffmpeg.org (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id 77D3D4DF92 for ; Sun, 8 Feb 2026 19:53:44 +0000 (UTC) Authentication-Results: ffbox; dkim=fail (body hash mismatch (got b'QHSemQf0jaxLalgfM2mvmHZRcKm7fQ/mLEpyHySUaZA=', expected b'5igSi0Cj9bEv84I9DRM2krtFyvAv0/+Bq/+KzJ+lKRE=')) header.d=christle.is header.a=rsa-sha256 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ffmpeg.org; i=@ffmpeg.org; q=dns/txt; s=mail; t=1770580395; h=date : to : message-id : in-reply-to : references : mime-version : reply-to : subject : list-id : list-archive : list-archive : list-help : list-owner : list-post : list-subscribe : list-unsubscribe : from : cc : content-type : content-transfer-encoding : from; bh=WVgbwpLCCqsauVrYeq1UQPqRnOE92L8DZZFzdEyZv3g=; b=VVueSJpd4Ccv2v5LA2aFpKkopKD4DExasEXSy0pd32C5oGIntz7on0jNRD2Wi5RBw5WDY pFaK89GgfrQTs8neyzaCngnhioBPTBZ9jbTsanOWqQJkv5K4jT+AmKR51qx/lA66JjqO2Me o+zq7tpNefjwk6FuP5lC6Xfc5UVHsCZky8+QNATcPwATbnPobg0vlbsLeENLo51fE+xSsQF 5eHKHbeymRLDITsxCD07sG1L0i5E9QDccyUKbRXwNSjnhZ6azhDZPtLKldy4SMAao6CyV9G FfpzrsD5efOgODaxoeBbacAe8jp6blrdxyk4yXPKdGbPp+hwSsPGTA19P5mw== Received: from [172.20.0.4] (unknown [172.20.0.4]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id D4EA7691161; Sun, 8 Feb 2026 21:53:15 +0200 (EET) ARC-Seal: i=1; cv=none; a=rsa-sha256; d=ffmpeg.org; s=arc; t=1770580371; b=pYOEvkaZ/pmTj8JrKrSme1sMbFmDC70hbm6AohTut+VkbeQ+svwvBwUmy2tn5woZbMJIJ kjrtWyZGaMu5LC4XpGQ/ICe9lfFKl/0eV5m7qAD3cC/5qTlme8yJ2BfyjtMGQPyRMYPms26 Y1Q9v3Y3rlItd3AM3qNV4/jCd9SupqgrBHxV8Jjh/QsECfBq3C5Ix8BmZ5ES+MFvwPT7e6i 9jjce7VmFEI2a0N7ZjSYBPzcWSnIiuMP9oL6xs/z0y7n1jRGdBpEGqeWlEHiXntE/6Yi0sW ak6VTfPVs7L7AzeoWfioxe1ByByzdNaKPdpRS9+SGWo59sqWS8KjnfvHvJmw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=ffmpeg.org; s=arc; t=1770580371; h=from : sender : reply-to : subject : date : message-id : to : cc : mime-version : content-type : content-transfer-encoding : content-id : content-description : resent-date : resent-from : resent-sender : resent-to : resent-cc : resent-message-id : in-reply-to : references : list-id : list-help : list-unsubscribe : list-subscribe : list-post : list-owner : list-archive; bh=QHSemQf0jaxLalgfM2mvmHZRcKm7fQ/mLEpyHySUaZA=; b=FixxcU8C12nyHYR7VfkTA+lW+Y0UooJge8Vcv9SiiJ97k9XWgvhgOu9sxP6dEw85KD6bv mF2WJg7Fk59etlCIU7SlnqyLFeCnv8MnlPk4cyMMVekXX89rJbXzH45yyBQ5CZe390121Qe IPVYVPfjwUVgDzpiGJ/OZr4zlwRo6FPWbOtv3fF1BAOkxQw3YkEMwGN+OjSjcPbCvIQRMBW OkV/uKnAd0QpzW90Pwsx3Vd4Y2NXgJrnOV2pDBY1lCJPderzWzSob6h+IZx+XLOolqJExBT HsStOLiynY5rKmuWBoZjUwwFImSW9TGJxmuV8EulULFV/O6iMTYSJ0fsZqKQ== ARC-Authentication-Results: i=1; ffmpeg.org; dkim=pass header.d=christle.is; arc=none; dmarc=pass header.from=christle.is policy.dmarc=quarantine Authentication-Results: ffmpeg.org; dkim=pass header.d=christle.is; arc=none (Message is not ARC signed); dmarc=pass (Used From Domain Record) header.from=christle.is policy.dmarc=quarantine Received: from mail-244119.protonmail.ch (mail-244119.protonmail.ch [109.224.244.119]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id A9C7768F4BD for ; Fri, 6 Feb 2026 08:46:13 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=christle.is; s=protonmail2; t=1770360373; x=1770619573; bh=5igSi0Cj9bEv84I9DRM2krtFyvAv0/+Bq/+KzJ+lKRE=; h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References: Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID: Message-ID:BIMI-Selector; b=XVlqQQJqPIW5hOf8/BjT4lkEMm8V07gfx6B+V+Hvlyt3eUxqgr4B7UkJn6ryy6mEn vSbe6NDZcpasrdRStiKbMnst0xrYVF6+++iV12Ngh8ZdB6ULH86fVz+h7rTB9JZnx6 1SPGrgucyZ0yGP57UqzX/WHpURxuJwU+DhmnpY0jH1IcLJmxZJGpGA7zZhWg2NbRaQ 4qFEYvfbpoS3g2efJj3LLXrw4ZywMisZgwBjiBGFpY4gLW8vMlhNQny4c1iWtVikm/ LItcCwsn7qLPuodh/fXKxfiIszO4gyxtvmwDpBy6QKOXJ7cZu1U2tQmlJum5Uuq7le aXxFFlyHPhpDQ== Date: Fri, 06 Feb 2026 06:46:06 +0000 To: ffmpeg-devel@ffmpeg.org Message-ID: <20260206064418.58375-2-dev@christle.is> In-Reply-To: <20260206064418.58375-1-dev@christle.is> References: <20260206064418.58375-1-dev@christle.is> Feedback-ID: 179972264:user:proton X-Pm-Message-ID: 44e6801d3f10fa78bac7aac3b9084dedc36b39a2 MIME-Version: 1.0 X-MailFrom: SRS0=Q+0Z=AK=christle.is=dev@ffmpeg.org X-Mailman-Rule-Hits: nonmember-moderation X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-ffmpeg-devel.ffmpeg.org-0; header-match-ffmpeg-devel.ffmpeg.org-1; header-match-ffmpeg-devel.ffmpeg.org-2; header-match-ffmpeg-devel.ffmpeg.org-3; emergency; member-moderation Message-ID-Hash: OKFE6OCLWF3KNM57G2BLTBS4K3MWJM2A X-Message-ID-Hash: OKFE6OCLWF3KNM57G2BLTBS4K3MWJM2A X-Mailman-Approved-At: Sun, 08 Feb 2026 19:52:29 +0000 X-Mailman-Version: 3.3.10 Precedence: list Reply-To: FFmpeg development discussions and patches Subject: [FFmpeg-devel] [PATCH 2/2] tests/checkasm/sw_yuv2rgb: test multi-row conversion with padded strides List-Id: FFmpeg development discussions and patches Archived-At: Archived-At: List-Archive: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: David Christle via ffmpeg-devel Cc: David Christle Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Archived-At: List-Archive: List-Post: Increase test height from 2 to 4 rows and add 32 bytes of source stride padding. This exercises chroma row sharing across multiple luma row pairs in YUV420P and the stride increment arithmetic in SIMD implementations, both of which were previously untested. Signed-off-by: David Christle --- tests/checkasm/sw_yuv2rgb.c | 96 +++++++++++++++++++------------------ 1 file changed, 49 insertions(+), 47 deletions(-) diff --git a/tests/checkasm/sw_yuv2rgb.c b/tests/checkasm/sw_yuv2rgb.c index c6c1ad934b..ba579d0545 100644 --- a/tests/checkasm/sw_yuv2rgb.c +++ b/tests/checkasm/sw_yuv2rgb.c @@ -104,6 +104,8 @@ static void check_yuv2rgb(int src_pix_fmt) { const AVPixFmtDescriptor *src_desc = av_pix_fmt_desc_get(src_pix_fmt); #define MAX_LINE_SIZE 1920 +#define SRC_STRIDE_PAD 32 +#define NUM_LINES 4 static const int input_sizes[] = {8, 128, 1080, MAX_LINE_SIZE}; declare_func_emms(AV_CPU_FLAG_MMX | AV_CPU_FLAG_MMXEXT, @@ -111,36 +113,26 @@ static void check_yuv2rgb(int src_pix_fmt) const int srcStride[], int srcSliceY, int srcSliceH, uint8_t *const dst[], const int dstStride[]); - LOCAL_ALIGNED_8(uint8_t, src_y, [MAX_LINE_SIZE * 2]); - LOCAL_ALIGNED_8(uint8_t, src_u, [MAX_LINE_SIZE]); - LOCAL_ALIGNED_8(uint8_t, src_v, [MAX_LINE_SIZE]); - LOCAL_ALIGNED_8(uint8_t, src_a, [MAX_LINE_SIZE * 2]); + LOCAL_ALIGNED_8(uint8_t, src_y, [(MAX_LINE_SIZE + SRC_STRIDE_PAD) * NUM_LINES]); + LOCAL_ALIGNED_8(uint8_t, src_u, [(MAX_LINE_SIZE + SRC_STRIDE_PAD) * NUM_LINES]); + LOCAL_ALIGNED_8(uint8_t, src_v, [(MAX_LINE_SIZE + SRC_STRIDE_PAD) * NUM_LINES]); + LOCAL_ALIGNED_8(uint8_t, src_a, [(MAX_LINE_SIZE + SRC_STRIDE_PAD) * NUM_LINES]); const uint8_t *src[4] = { src_y, src_u, src_v, src_a }; - LOCAL_ALIGNED_8(uint8_t, dst0_0, [2 * MAX_LINE_SIZE * 6]); - LOCAL_ALIGNED_8(uint8_t, dst0_1, [2 * MAX_LINE_SIZE]); - LOCAL_ALIGNED_8(uint8_t, dst0_2, [2 * MAX_LINE_SIZE]); + LOCAL_ALIGNED_8(uint8_t, dst0_0, [NUM_LINES * MAX_LINE_SIZE * 6]); + LOCAL_ALIGNED_8(uint8_t, dst0_1, [NUM_LINES * MAX_LINE_SIZE]); + LOCAL_ALIGNED_8(uint8_t, dst0_2, [NUM_LINES * MAX_LINE_SIZE]); uint8_t *dst0[4] = { dst0_0, dst0_1, dst0_2 }; - uint8_t *lines0[4][2] = { - { dst0_0, dst0_0 + MAX_LINE_SIZE * 6 }, - { dst0_1, dst0_1 + MAX_LINE_SIZE }, - { dst0_2, dst0_2 + MAX_LINE_SIZE } - }; - - LOCAL_ALIGNED_8(uint8_t, dst1_0, [2 * MAX_LINE_SIZE * 6]); - LOCAL_ALIGNED_8(uint8_t, dst1_1, [2 * MAX_LINE_SIZE]); - LOCAL_ALIGNED_8(uint8_t, dst1_2, [2 * MAX_LINE_SIZE]); + + LOCAL_ALIGNED_8(uint8_t, dst1_0, [NUM_LINES * MAX_LINE_SIZE * 6]); + LOCAL_ALIGNED_8(uint8_t, dst1_1, [NUM_LINES * MAX_LINE_SIZE]); + LOCAL_ALIGNED_8(uint8_t, dst1_2, [NUM_LINES * MAX_LINE_SIZE]); uint8_t *dst1[4] = { dst1_0, dst1_1, dst1_2 }; - uint8_t *lines1[4][2] = { - { dst1_0, dst1_0 + MAX_LINE_SIZE * 6 }, - { dst1_1, dst1_1 + MAX_LINE_SIZE }, - { dst1_2, dst1_2 + MAX_LINE_SIZE } - }; - randomize_buffers(src_y, MAX_LINE_SIZE * 2); - randomize_buffers(src_u, MAX_LINE_SIZE); - randomize_buffers(src_v, MAX_LINE_SIZE); - randomize_buffers(src_a, MAX_LINE_SIZE * 2); + randomize_buffers(src_y, (MAX_LINE_SIZE + SRC_STRIDE_PAD) * NUM_LINES); + randomize_buffers(src_u, (MAX_LINE_SIZE + SRC_STRIDE_PAD) * NUM_LINES); + randomize_buffers(src_v, (MAX_LINE_SIZE + SRC_STRIDE_PAD) * NUM_LINES); + randomize_buffers(src_a, (MAX_LINE_SIZE + SRC_STRIDE_PAD) * NUM_LINES); for (int dfi = 0; dfi < FF_ARRAY_ELEMS(dst_fmts); dfi++) { int dst_pix_fmt = dst_fmts[dfi]; @@ -152,12 +144,12 @@ static void check_yuv2rgb(int src_pix_fmt) int log_level; int width = input_sizes[isi]; int srcSliceY = 0; - int srcSliceH = 2; + int srcSliceH = NUM_LINES; int srcStride[4] = { - width, - width >> src_desc->log2_chroma_w, - width >> src_desc->log2_chroma_w, - width, + width + SRC_STRIDE_PAD, + (width >> src_desc->log2_chroma_w) + SRC_STRIDE_PAD, + (width >> src_desc->log2_chroma_w) + SRC_STRIDE_PAD, + width + SRC_STRIDE_PAD, }; int dstStride[4] = { MAX_LINE_SIZE * 6, @@ -178,13 +170,13 @@ static void check_yuv2rgb(int src_pix_fmt) c = sws_internal(sws); if (check_func(c->convert_unscaled, "%s_%s_%d", src_desc->name, dst_desc->name, width)) { - memset(dst0_0, 0xFF, 2 * MAX_LINE_SIZE * 6); - memset(dst1_0, 0xFF, 2 * MAX_LINE_SIZE * 6); + memset(dst0_0, 0xFF, NUM_LINES * MAX_LINE_SIZE * 6); + memset(dst1_0, 0xFF, NUM_LINES * MAX_LINE_SIZE * 6); if (dst_pix_fmt == AV_PIX_FMT_GBRP) { - memset(dst0_1, 0xFF, MAX_LINE_SIZE); - memset(dst0_2, 0xFF, MAX_LINE_SIZE); - memset(dst1_1, 0xFF, MAX_LINE_SIZE); - memset(dst1_2, 0xFF, MAX_LINE_SIZE); + memset(dst0_1, 0xFF, NUM_LINES * MAX_LINE_SIZE); + memset(dst0_2, 0xFF, NUM_LINES * MAX_LINE_SIZE); + memset(dst1_1, 0xFF, NUM_LINES * MAX_LINE_SIZE); + memset(dst1_2, 0xFF, NUM_LINES * MAX_LINE_SIZE); } call_ref(c, src, srcStride, srcSliceY, @@ -198,23 +190,31 @@ static void check_yuv2rgb(int src_pix_fmt) dst_pix_fmt == AV_PIX_FMT_BGRA || dst_pix_fmt == AV_PIX_FMT_RGB24 || dst_pix_fmt == AV_PIX_FMT_BGR24) { - if (cmp_off_by_n(lines0[0][0], lines1[0][0], width * sample_size, 3) || - cmp_off_by_n(lines0[0][1], lines1[0][1], width * sample_size, 3)) - fail(); + for (int row = 0; row < srcSliceH; row++) + if (cmp_off_by_n(dst0_0 + row * dstStride[0], + dst1_0 + row * dstStride[0], + width * sample_size, 3)) + fail(); } else if (dst_pix_fmt == AV_PIX_FMT_RGB565 || dst_pix_fmt == AV_PIX_FMT_BGR565) { - if (cmp_565_by_n(lines0[0][0], lines1[0][0], width, 2) || - cmp_565_by_n(lines0[0][1], lines1[0][1], width, 2)) - fail(); + for (int row = 0; row < srcSliceH; row++) + if (cmp_565_by_n(dst0_0 + row * dstStride[0], + dst1_0 + row * dstStride[0], + width, 2)) + fail(); } else if (dst_pix_fmt == AV_PIX_FMT_RGB555 || dst_pix_fmt == AV_PIX_FMT_BGR555) { - if (cmp_555_by_n(lines0[0][0], lines1[0][0], width, 2) || - cmp_555_by_n(lines0[0][1], lines1[0][1], width, 2)) - fail(); + for (int row = 0; row < srcSliceH; row++) + if (cmp_555_by_n(dst0_0 + row * dstStride[0], + dst1_0 + row * dstStride[0], + width, 2)) + fail(); } else if (dst_pix_fmt == AV_PIX_FMT_GBRP) { for (int p = 0; p < 3; p++) - for (int l = 0; l < 2; l++) - if (cmp_off_by_n(lines0[p][l], lines1[p][l], width, 3)) + for (int row = 0; row < srcSliceH; row++) + if (cmp_off_by_n(dst0[p] + row * dstStride[p], + dst1[p] + row * dstStride[p], + width, 3)) fail(); } else { fail(); @@ -228,6 +228,8 @@ static void check_yuv2rgb(int src_pix_fmt) } } +#undef NUM_LINES +#undef SRC_STRIDE_PAD #undef MAX_LINE_SIZE void checkasm_check_sw_yuv2rgb(void) -- 2.52.0 _______________________________________________ ffmpeg-devel mailing list -- ffmpeg-devel@ffmpeg.org To unsubscribe send an email to ffmpeg-devel-leave@ffmpeg.org