[x265] [PATCH 1/3] testbench: Add testing for MIN/MAX values in intrapred harness
Gerda Zsejke More
gerdazsejke.more at arm.com
Wed Jul 9 11:48:17 UTC 2025
Use pixel_test_buff matrix to test intrapred functions as this matrix
is set up with minimum and maximum pixel values instead of only random
values.
---
source/test/intrapredharness.cpp | 23 ++++++++++++++---------
1 file changed, 14 insertions(+), 9 deletions(-)
diff --git a/source/test/intrapredharness.cpp b/source/test/intrapredharness.cpp
index 94090f773..41a029f69 100644
--- a/source/test/intrapredharness.cpp
+++ b/source/test/intrapredharness.cpp
@@ -55,12 +55,13 @@ bool IntraPredHarness::check_dc_primitive(intra_pred_t ref, intra_pred_t opt, in
for (int i = 0; i <= 100; i++)
{
+ int index = rand() % TEST_CASES;
int rand_filter = rand() & 1;
if (width > 16)
rand_filter = 0;
- ref(pixel_out_c, stride, pixel_buff + j - Predict::ADI_BUF_STRIDE, 0, rand_filter);
- checked(opt, pixel_out_vec, stride, pixel_buff + j - Predict::ADI_BUF_STRIDE, 0, rand_filter);
+ ref(pixel_out_c, stride, pixel_test_buff[index] + j - Predict::ADI_BUF_STRIDE, 0, rand_filter);
+ checked(opt, pixel_out_vec, stride, pixel_test_buff[index] + j - Predict::ADI_BUF_STRIDE, 0, rand_filter);
for (int k = 0; k < width; k++)
{
@@ -87,8 +88,10 @@ bool IntraPredHarness::check_planar_primitive(intra_pred_t ref, intra_pred_t opt
for (int i = 0; i <= 100; i++)
{
- ref(pixel_out_c, stride, pixel_buff + j - Predict::ADI_BUF_STRIDE, 0, 0);
- checked(opt, pixel_out_vec, stride, pixel_buff + j - Predict::ADI_BUF_STRIDE, 0, 0);
+ int index = rand() % TEST_CASES;
+
+ ref(pixel_out_c, stride, pixel_test_buff[index] + j - Predict::ADI_BUF_STRIDE, 0, 0);
+ checked(opt, pixel_out_vec, stride, pixel_test_buff[index] + j - Predict::ADI_BUF_STRIDE, 0, 0);
for (int k = 0; k < width; k++)
{
@@ -119,19 +122,20 @@ bool IntraPredHarness::check_angular_primitive(const intra_pred_t ref[], const i
int bFilter = (width <= 16) && (rand() % 2);
for (int pmode = 2; pmode <= 34; pmode++)
{
+ int index = rand() % TEST_CASES;
if (!opt[pmode])
continue;
- checked(opt[pmode], pixel_out_vec, stride, pixel_buff + j, pmode, bFilter);
- ref[pmode](pixel_out_c, stride, pixel_buff + j, pmode, bFilter);
+ checked(opt[pmode], pixel_out_vec, stride, pixel_test_buff[index] + j, pmode, bFilter);
+ ref[pmode](pixel_out_c, stride, pixel_test_buff[index] + j, pmode, bFilter);
for (int k = 0; k < width; k++)
{
if (memcmp(pixel_out_vec + k * FENC_STRIDE, pixel_out_c + k * FENC_STRIDE, width * sizeof(pixel)))
{
printf("ang_%dx%d, Mode = %d, Row = %d failed !!\n", width, width, pmode, k);
- ref[pmode](pixel_out_c, stride, pixel_buff + j, pmode, bFilter);
- opt[pmode](pixel_out_vec, stride, pixel_buff + j, pmode, bFilter);
+ ref[pmode](pixel_out_c, stride, pixel_test_buff[index] + j, pmode, bFilter);
+ opt[pmode](pixel_out_vec, stride, pixel_test_buff[index] + j, pmode, bFilter);
return false;
}
}
@@ -159,9 +163,10 @@ bool IntraPredHarness::check_allangs_primitive(const intra_allangs_t ref, const
for (int i = 0; i <= 100; i++)
{
+ int index = rand() % TEST_CASES;
isLuma = (width <= 16) ? true : false; // bFilter is true for 4x4, 8x8, 16x16 and false for 32x32
- pixel * refAbove0 = pixel_buff + j + 3 * FENC_STRIDE; // keep this offset, since vector code may broken input buffer range [-(width-1), 0];
+ pixel * refAbove0 = pixel_test_buff[index] + j + 3 * FENC_STRIDE; // keep this offset, since vector code may broken input buffer range [-(width-1), 0];
pixel * refLeft0 = refAbove0 + 3 * width + FENC_STRIDE;
refLeft0[0] = refAbove0[0];
--
2.39.5 (Apple Git-154)
-------------- next part --------------
>From d4f373c6d1aaa8603adadaea6e972e0b5e1a1480 Mon Sep 17 00:00:00 2001
Message-Id: <d4f373c6d1aaa8603adadaea6e972e0b5e1a1480.1752060897.git.gerdazsejke.more at arm.com>
In-Reply-To: <cover.1752060897.git.gerdazsejke.more at arm.com>
References: <cover.1752060897.git.gerdazsejke.more at arm.com>
From: Gerda Zsejke More <gerdazsejke.more at arm.com>
Date: Wed, 14 May 2025 10:35:15 +0100
Subject: [PATCH 1/3] testbench: Add testing for MIN/MAX values in intrapred
harness
Use pixel_test_buff matrix to test intrapred functions as this matrix
is set up with minimum and maximum pixel values instead of only random
values.
---
source/test/intrapredharness.cpp | 23 ++++++++++++++---------
1 file changed, 14 insertions(+), 9 deletions(-)
diff --git a/source/test/intrapredharness.cpp b/source/test/intrapredharness.cpp
index 94090f773..41a029f69 100644
--- a/source/test/intrapredharness.cpp
+++ b/source/test/intrapredharness.cpp
@@ -55,12 +55,13 @@ bool IntraPredHarness::check_dc_primitive(intra_pred_t ref, intra_pred_t opt, in
for (int i = 0; i <= 100; i++)
{
+ int index = rand() % TEST_CASES;
int rand_filter = rand() & 1;
if (width > 16)
rand_filter = 0;
- ref(pixel_out_c, stride, pixel_buff + j - Predict::ADI_BUF_STRIDE, 0, rand_filter);
- checked(opt, pixel_out_vec, stride, pixel_buff + j - Predict::ADI_BUF_STRIDE, 0, rand_filter);
+ ref(pixel_out_c, stride, pixel_test_buff[index] + j - Predict::ADI_BUF_STRIDE, 0, rand_filter);
+ checked(opt, pixel_out_vec, stride, pixel_test_buff[index] + j - Predict::ADI_BUF_STRIDE, 0, rand_filter);
for (int k = 0; k < width; k++)
{
@@ -87,8 +88,10 @@ bool IntraPredHarness::check_planar_primitive(intra_pred_t ref, intra_pred_t opt
for (int i = 0; i <= 100; i++)
{
- ref(pixel_out_c, stride, pixel_buff + j - Predict::ADI_BUF_STRIDE, 0, 0);
- checked(opt, pixel_out_vec, stride, pixel_buff + j - Predict::ADI_BUF_STRIDE, 0, 0);
+ int index = rand() % TEST_CASES;
+
+ ref(pixel_out_c, stride, pixel_test_buff[index] + j - Predict::ADI_BUF_STRIDE, 0, 0);
+ checked(opt, pixel_out_vec, stride, pixel_test_buff[index] + j - Predict::ADI_BUF_STRIDE, 0, 0);
for (int k = 0; k < width; k++)
{
@@ -119,19 +122,20 @@ bool IntraPredHarness::check_angular_primitive(const intra_pred_t ref[], const i
int bFilter = (width <= 16) && (rand() % 2);
for (int pmode = 2; pmode <= 34; pmode++)
{
+ int index = rand() % TEST_CASES;
if (!opt[pmode])
continue;
- checked(opt[pmode], pixel_out_vec, stride, pixel_buff + j, pmode, bFilter);
- ref[pmode](pixel_out_c, stride, pixel_buff + j, pmode, bFilter);
+ checked(opt[pmode], pixel_out_vec, stride, pixel_test_buff[index] + j, pmode, bFilter);
+ ref[pmode](pixel_out_c, stride, pixel_test_buff[index] + j, pmode, bFilter);
for (int k = 0; k < width; k++)
{
if (memcmp(pixel_out_vec + k * FENC_STRIDE, pixel_out_c + k * FENC_STRIDE, width * sizeof(pixel)))
{
printf("ang_%dx%d, Mode = %d, Row = %d failed !!\n", width, width, pmode, k);
- ref[pmode](pixel_out_c, stride, pixel_buff + j, pmode, bFilter);
- opt[pmode](pixel_out_vec, stride, pixel_buff + j, pmode, bFilter);
+ ref[pmode](pixel_out_c, stride, pixel_test_buff[index] + j, pmode, bFilter);
+ opt[pmode](pixel_out_vec, stride, pixel_test_buff[index] + j, pmode, bFilter);
return false;
}
}
@@ -159,9 +163,10 @@ bool IntraPredHarness::check_allangs_primitive(const intra_allangs_t ref, const
for (int i = 0; i <= 100; i++)
{
+ int index = rand() % TEST_CASES;
isLuma = (width <= 16) ? true : false; // bFilter is true for 4x4, 8x8, 16x16 and false for 32x32
- pixel * refAbove0 = pixel_buff + j + 3 * FENC_STRIDE; // keep this offset, since vector code may broken input buffer range [-(width-1), 0];
+ pixel * refAbove0 = pixel_test_buff[index] + j + 3 * FENC_STRIDE; // keep this offset, since vector code may broken input buffer range [-(width-1), 0];
pixel * refLeft0 = refAbove0 + 3 * width + FENC_STRIDE;
refLeft0[0] = refAbove0[0];
--
2.39.5 (Apple Git-154)
More information about the x265-devel
mailing list