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 EBC624BA30 for ; Fri, 9 Aug 2024 11:26:43 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2203268DA30; Fri, 9 Aug 2024 14:26:33 +0300 (EEST) Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.50]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5CA2868D900 for ; Fri, 9 Aug 2024 14:26:26 +0300 (EEST) Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-42819654737so14161755e9.1 for ; Fri, 09 Aug 2024 04:26:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1723202785; x=1723807585; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=L3h/hOhYHotw82EAptn2fVRLx+LkMsqx8M/KPvxBBVc=; b=jhiELz0njcIdICI/ImEvHXzLMhnLOmrQrW8FI/w1Fkh683VmWD8Bg07LTjYsk1ThP3 hHqvdAXaKcKGUYNygng1m+uhV7ZhrukpXYwcc0tH4+jKuLuR69NEPYBxIhHCN+rd0tMI xShdOrRsTf3TNAM5CEYl4mq6pwAQhlKsbbyoJCJvO54T86NCIYqqVvicZQgCXL3+W+Ds +WyoHJpmsuMXt/kGQvYyO2aIymKlfdYAnVIuHxqqoGklOK0Atv3uEvSjbs9xyNqQtSiD sBtJ4mbYOPs/aWVvAMOFrzTIpvtH/q5a7w/VavZCczQT7IVZpLLvmi/oC75sie8UoJGC Mzyw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1723202785; x=1723807585; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=L3h/hOhYHotw82EAptn2fVRLx+LkMsqx8M/KPvxBBVc=; b=SZ2DU/L8g2YHmW3uVtXWkemmPY7oeqQdm1y0y0654bilyLLUZTj0l2RrXhIaC9uSnM f0Y/844+gnuu5mSUeEXR1emQcSM321rQkE3wdrRSKLQUSZNrbjfNmaWYSNj1D0UrRoX9 qntX/q/cbF/UdAmB5k9KCGlHcTzXe3kTGAAW8uN0/EIYhfefG1C/BtAPH1MQSxsPTgkW iY+lAdOLOQ5qW7UHg3VdxZcwLGZHRB02aElea2UV9pMLlikDS5vYz9QKevr8KyHrKf5s TaypzDyMUfnNS93vsPDaATJl5i73JH7zzboQd34WBENz0U47QEup+YSprQPaQrk7MdlZ 9knQ== X-Gm-Message-State: AOJu0Yzk5sfOZ1Bkg3nYlqQcaepdv0zR9z38vMl+eV/0H+aBMX5Ri+rp KGMecXMwFmMTqZak/0W2tNSPXf/9hiHVhHlv4pX2jKbHZ9+3jX7muWq3hB1o X-Google-Smtp-Source: AGHT+IHUDPwQ3zAJLL5kQeNLVfCd997xQ44EVO7Z8fL6B0PfAmDvaAvisXuswiXKJRilzbtxsPwn8A== X-Received: by 2002:a05:600c:3590:b0:428:1b0d:8657 with SMTP id 5b1f17b1804b1-429c3a2b31dmr8891555e9.22.1723202784461; Fri, 09 Aug 2024 04:26:24 -0700 (PDT) Received: from localhost.localdomain ([2a02:a03f:6610:8700:a59e:a164:e144:7458]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4290c72d6c8sm72385685e9.9.2024.08.09.04.26.23 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 09 Aug 2024 04:26:23 -0700 (PDT) From: Ramiro Polla To: ffmpeg-devel@ffmpeg.org Date: Fri, 9 Aug 2024 13:26:10 +0200 Message-Id: <20240809112612.107000-2-ramiro.polla@gmail.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20240809112612.107000-1-ramiro.polla@gmail.com> References: <20240809112612.107000-1-ramiro.polla@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/4] checkasm/yuv2yuv: add tests for semiplanar unscaled converters 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 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: --- tests/checkasm/Makefile | 2 +- tests/checkasm/checkasm.c | 1 + tests/checkasm/checkasm.h | 1 + tests/checkasm/sw_yuv2yuv.c | 131 ++++++++++++++++++++++++++++++++++++ 4 files changed, 134 insertions(+), 1 deletion(-) create mode 100644 tests/checkasm/sw_yuv2yuv.c diff --git a/tests/checkasm/Makefile b/tests/checkasm/Makefile index 3a7670e24b..2d2e42e445 100644 --- a/tests/checkasm/Makefile +++ b/tests/checkasm/Makefile @@ -63,7 +63,7 @@ AVFILTEROBJS-$(CONFIG_SOBEL_FILTER) += vf_convolution.o CHECKASMOBJS-$(CONFIG_AVFILTER) += $(AVFILTEROBJS-yes) # swscale tests -SWSCALEOBJS += sw_gbrp.o sw_range_convert.o sw_rgb.o sw_scale.o sw_yuv2rgb.o +SWSCALEOBJS += sw_gbrp.o sw_range_convert.o sw_rgb.o sw_scale.o sw_yuv2rgb.o sw_yuv2yuv.o CHECKASMOBJS-$(CONFIG_SWSCALE) += $(SWSCALEOBJS) diff --git a/tests/checkasm/checkasm.c b/tests/checkasm/checkasm.c index 58597d3888..5c407de2ba 100644 --- a/tests/checkasm/checkasm.c +++ b/tests/checkasm/checkasm.c @@ -255,6 +255,7 @@ static const struct { { "sw_rgb", checkasm_check_sw_rgb }, { "sw_scale", checkasm_check_sw_scale }, { "sw_yuv2rgb", checkasm_check_sw_yuv2rgb }, + { "sw_yuv2yuv", checkasm_check_sw_yuv2yuv }, #endif #if CONFIG_AVUTIL { "fixed_dsp", checkasm_check_fixed_dsp }, diff --git a/tests/checkasm/checkasm.h b/tests/checkasm/checkasm.h index 4d5f3e387e..3e73808739 100644 --- a/tests/checkasm/checkasm.h +++ b/tests/checkasm/checkasm.h @@ -123,6 +123,7 @@ void checkasm_check_sw_range_convert(void); void checkasm_check_sw_rgb(void); void checkasm_check_sw_scale(void); void checkasm_check_sw_yuv2rgb(void); +void checkasm_check_sw_yuv2yuv(void); void checkasm_check_takdsp(void); void checkasm_check_utvideodsp(void); void checkasm_check_v210dec(void); diff --git a/tests/checkasm/sw_yuv2yuv.c b/tests/checkasm/sw_yuv2yuv.c new file mode 100644 index 0000000000..b561b46768 --- /dev/null +++ b/tests/checkasm/sw_yuv2yuv.c @@ -0,0 +1,131 @@ +/* + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with FFmpeg; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include + +#include "libavutil/common.h" +#include "libavutil/intreadwrite.h" +#include "libavutil/mem_internal.h" +#include "libavutil/pixdesc.h" + +#include "libswscale/swscale.h" +#include "libswscale/swscale_internal.h" + +#include "checkasm.h" + +#define randomize_buffers(buf, size) \ + do { \ + for (int j = 0; j < size; j += 4) \ + AV_WN32(buf + j, rnd()); \ + } while (0) + +static void check_semiplanar(int dst_pix_fmt) +{ + static const int src_fmts[] = { + AV_PIX_FMT_NV24, + AV_PIX_FMT_NV42, + }; + const AVPixFmtDescriptor *dst_desc = av_pix_fmt_desc_get(dst_pix_fmt); +#define MAX_LINE_SIZE 1920 + static const int input_sizes[] = {8, 128, 1080, MAX_LINE_SIZE}; + + declare_func_emms(AV_CPU_FLAG_MMX | AV_CPU_FLAG_MMXEXT, + int, SwsContext *c, const uint8_t *src[], + int srcStride[], int srcSliceY, int srcSliceH, + uint8_t *dst[], int dstStride[]); + + LOCAL_ALIGNED_8(uint8_t, src_y, [MAX_LINE_SIZE * 2]); + LOCAL_ALIGNED_8(uint8_t, src_uv, [MAX_LINE_SIZE * 2 * 2]); + const uint8_t *src[4] = { src_y, src_uv }; + + LOCAL_ALIGNED_8(uint8_t, dst0_y, [MAX_LINE_SIZE * 2]); + LOCAL_ALIGNED_8(uint8_t, dst0_u, [MAX_LINE_SIZE]); + LOCAL_ALIGNED_8(uint8_t, dst0_v, [MAX_LINE_SIZE]); + uint8_t *dst0[4] = { dst0_y, dst0_u, dst0_v }; + + LOCAL_ALIGNED_8(uint8_t, dst1_y, [MAX_LINE_SIZE * 2]); + LOCAL_ALIGNED_8(uint8_t, dst1_u, [MAX_LINE_SIZE]); + LOCAL_ALIGNED_8(uint8_t, dst1_v, [MAX_LINE_SIZE]); + uint8_t *dst1[4] = { dst1_y, dst1_u, dst1_v }; + + randomize_buffers(src_y, MAX_LINE_SIZE * 2); + randomize_buffers(src_uv, MAX_LINE_SIZE * 2 * 2); + + for (int sfi = 0; sfi < FF_ARRAY_ELEMS(src_fmts); sfi++) { + int src_pix_fmt = src_fmts[sfi]; + const AVPixFmtDescriptor *src_desc = av_pix_fmt_desc_get(src_pix_fmt); + for (int isi = 0; isi < FF_ARRAY_ELEMS(input_sizes); isi++) { + struct SwsContext *ctx; + int log_level; + int width = input_sizes[isi]; + int srcSliceY = 0; + int srcSliceH = 2; + int srcStride[4] = { + width, + width << 1, + }; + int dstStride[4] = { + width, + width >> dst_desc->log2_chroma_w, + width >> dst_desc->log2_chroma_w, + }; + + // override log level to prevent spamming of the message + // "No accelerated colorspace conversion found from %s to %s" + log_level = av_log_get_level(); + av_log_set_level(AV_LOG_ERROR); + ctx = sws_getContext(width, srcSliceH, src_pix_fmt, + width, srcSliceH, dst_pix_fmt, + 0, NULL, NULL, NULL); + av_log_set_level(log_level); + if (!ctx) + fail(); + + if (check_func(ctx->convert_unscaled, "%s_%s_%d", src_desc->name, dst_desc->name, width)) { + memset(dst0_y, 0xFF, MAX_LINE_SIZE * 2); + memset(dst0_u, 0xFF, MAX_LINE_SIZE); + memset(dst0_v, 0xFF, MAX_LINE_SIZE); + memset(dst1_y, 0xFF, MAX_LINE_SIZE * 2); + memset(dst1_u, 0xFF, MAX_LINE_SIZE); + memset(dst1_v, 0xFF, MAX_LINE_SIZE); + + call_ref(ctx, src, srcStride, srcSliceY, + srcSliceH, dst0, dstStride); + call_new(ctx, src, srcStride, srcSliceY, + srcSliceH, dst1, dstStride); + + if (memcmp(dst0_y, dst1_y, MAX_LINE_SIZE * 2) || + memcmp(dst0_u, dst1_u, MAX_LINE_SIZE) || + memcmp(dst0_v, dst1_v, MAX_LINE_SIZE)) + fail(); + + bench_new(ctx, src, srcStride, srcSliceY, + srcSliceH, dst0, dstStride); + } + sws_freeContext(ctx); + } + } +} + +#undef MAX_LINE_SIZE + +void checkasm_check_sw_yuv2yuv(void) +{ + check_semiplanar(AV_PIX_FMT_YUV420P); + report("yuv420p"); +} -- 2.30.2 _______________________________________________ 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".