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 AC7E14C347 for ; Sun, 8 Feb 2026 21:19:13 +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=1770585496; 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=Ar3JgwG7odZsPGdXejpRicZOKxfUNkX3hxusttDZ0rKMnaCClj844+ilMO9fL4OQbSpyf vb0vpea8UmFQhfGpDJptnaf3BwQNDBts1OAZqgtrmDRFbYwSf1CFDFSihHvDEBKmNk3Vwl7 EDJQGVA1cu4kOEpDSpo+PgeojvWjEUjDz5APdBJiIzWvb4RFQ/vG5lGpqvDyAKwclVnN3Dr lph0oXmxq+KCxDrZjFlGM1RXORCf6PsvrV/J1w8faJaoJn9iRRgpN6uprwip9eimMhRYBhR kVMriRM+vDniUwntfRXVXxQHjgkTG5mQAGfOaLHV6cH5jccTKy7AUVUb/T8A== Received: from [172.20.0.4] (unknown [172.20.0.4]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id 1670D691274; Sun, 8 Feb 2026 23:18:16 +0200 (EET) ARC-Seal: i=1; cv=none; a=rsa-sha256; d=ffmpeg.org; s=arc; t=1770585482; b=U7pqkigJ36w5dt7tKk4w6R8sX/55a//2RyiI9tbW1Lwjcuqvd7qlrDGKXdGDWEZiiGFpk 1jNum0vfQmyzO34ZPYxCjE+V9XJ2822KJ45DKvxoITX/AHjYVSVNl2ZfWrsAe4hJ/tvqY0H DHhBaWm9/+Dty7tUuKecHPIUJBR6SDkWPlKivjr0ohaDOANDmFomLo/+Me/e6OqMpi/zoQC AKVDOxJ4aA6IHZxP64LnR1CO8Xc/yA3xAgXEZxWeA1rrjf/rjrfma0D5gTVHozWLL1lEAM0 4wDnt1I0yTY+bafWmHbSAPj8oMICTmLm0trgSetKijmMi4zTSOEK/aorBzig== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=ffmpeg.org; s=arc; t=1770585482; 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=dMlw1sapDrkftJjWVWjBwVPjVnlG3ZVSVOkcsRnc2rtnnkYrtZF9QGOSg2Ah/v6f+HMR/ RPGwoK7rYkB7jIUOOciVF4DzzlcMV4I2+4ByLSgpEugMA8LjHoivLgbuVzf94txf85rTHF4 0/oGc34FPGNt4HJjnJMGVXgTgqDJ5/aMmls8DJvaZ5VuxGf5qnoyR5nFk8aqF9qKlmTm3OM LCK6RPfvixn2VDTJZw8KZFEL3wnznRTVrNWsqffoO8W/gSSQgca6iMPNbyNd/YX32sXq3wm /ZJ73Lg+7dAO01wVijWC/a+2jLjkaGnQnoFlWjqC12pb9Ryx3z4RxuvuLlaQ== 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-10624.protonmail.ch (mail-10624.protonmail.ch [79.135.106.24]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id 61A816910EF for ; Sun, 8 Feb 2026 23:16:40 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=christle.is; s=protonmail2; t=1770585390; x=1770844590; 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=NRETmyIhoHMbQZmpCCZh0uiwIOmvKKlDfO9nWznakU67h/UmiI+Kj2tWy/EYbNT+/ saID55ivJQvJeREtuKbv7FI6w672psDHIWSLA5vpHkIItJIRKoFCDx2ZUKpwSeJjtY 1eOX1LI5Ah4rMBmac/7AWTafEqvx1I68YXLpVQ+Gfy24FHjkgMAbPlBRJadQLhpncC AD4pGQ2HemW/8OkbOAUwx7J0vGjrVH7BFrb0FsTsLb5HQeYuzjMLUHo+FnRr7hP0Y4 rkU2WaEi3cg32n6OJZYehV1BqQelnODnyQT2UAgWRKu6F3GuCHZpK7ElSBicHrp4GE vDJerg9IU/TPQ== Date: Sun, 08 Feb 2026 21:16:24 +0000 To: ffmpeg-devel@ffmpeg.org Message-ID: <20260208211537.91515-4-dev@christle.is> In-Reply-To: <20260208211537.91515-1-dev@christle.is> References: <20260206064418.58375-1-dev@christle.is> <20260208211537.91515-1-dev@christle.is> Feedback-ID: 179972264:user:proton X-Pm-Message-ID: 51b75bfa99dad99d55ec0e292ebecfa389d15d69 MIME-Version: 1.0 Message-ID-Hash: DCSBEQXMHS2YKK6DCPX6QK2E6QM3DHMO X-Message-ID-Hash: DCSBEQXMHS2YKK6DCPX6QK2E6QM3DHMO X-MailFrom: SRS0=jq/I=AM=christle.is=dev@ffmpeg.org X-Mailman-Rule-Hits: member-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 X-Mailman-Version: 3.3.10 Precedence: list Reply-To: FFmpeg development discussions and patches Subject: [FFmpeg-devel] [PATCH v2 3/3] 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