[x265] [PATCH 3/5] Change the test conditions for pelFilterChroma in PixelHarness

Micro Daryl Robles microdaryl.robles at arm.com
Tue Feb 11 15:20:11 UTC 2025


- Masks can only be -1 or 0 based on Deblock::edgeFilterChroma.
- Also fix the input buffer offsets of Chroma and LumaStrong in the
  speedup calculation.
---
 source/test/pixelharness.cpp | 109 +++++++++++++++++++++--------------
 1 file changed, 67 insertions(+), 42 deletions(-)

diff --git a/source/test/pixelharness.cpp b/source/test/pixelharness.cpp
index 311985d83..f3d68238a 100644
--- a/source/test/pixelharness.cpp
+++ b/source/test/pixelharness.cpp
@@ -1749,7 +1749,6 @@ bool PixelHarness::check_scanPosLast(scanPosLast_t ref, scanPosLast_t opt)
     {
         ref_src[32 * 32 + i] = 0x1234;
     }
-    
 
     memset(ref_coeffNum, 0xCD, sizeof(ref_coeffNum));
     memset(ref_coeffSign, 0xCD, sizeof(ref_coeffSign));
@@ -2096,7 +2095,7 @@ bool PixelHarness::check_pelFilterLumaStrong_H(pelFilterLumaStrong_t ref, pelFil
 {
     intptr_t srcStep = 1, offset = 64;
     int32_t tcP, tcQ, maskP, maskQ, tc;
-    int j = 0;
+    intptr_t j = 0;
 
     pixel pixel_test_buff1[TEST_CASES][BUFFSIZE];
     for (int i = 0; i < TEST_CASES; i++)
@@ -2112,7 +2111,7 @@ bool PixelHarness::check_pelFilterLumaStrong_H(pelFilterLumaStrong_t ref, pelFil
 
         int index = rand() % 3;
 
-        ref(pixel_test_buff[index]  + 4 * offset + j, srcStep, offset, tcP, tcQ);
+        ref(pixel_test_buff[index] + 4 * offset + j, srcStep, offset, tcP, tcQ);
         checked(opt, pixel_test_buff1[index] + 4 * offset + j, srcStep, offset, tcP, tcQ);
 
         if (memcmp(pixel_test_buff[index], pixel_test_buff1[index], sizeof(pixel) * BUFFSIZE))
@@ -2129,7 +2128,7 @@ bool PixelHarness::check_pelFilterLumaStrong_V(pelFilterLumaStrong_t ref, pelFil
 {
     intptr_t srcStep = 64, offset = 1;
     int32_t tcP, tcQ, maskP, maskQ, tc;
-    int j = 0;
+    intptr_t j = 0;
 
     pixel pixel_test_buff1[TEST_CASES][BUFFSIZE];
     for (int i = 0; i < TEST_CASES; i++)
@@ -2145,8 +2144,8 @@ bool PixelHarness::check_pelFilterLumaStrong_V(pelFilterLumaStrong_t ref, pelFil
 
         int index = rand() % 3;
 
-        ref(pixel_test_buff[index]  + 4 + j, srcStep, offset, tcP, tcQ);
-        checked(opt, pixel_test_buff1[index] + 4 + j, srcStep, offset, tcP, tcQ);
+        ref(pixel_test_buff[index] + 4 * offset + j, srcStep, offset, tcP, tcQ);
+        checked(opt, pixel_test_buff1[index] + 4 * offset + j, srcStep, offset, tcP, tcQ);
 
         if (memcmp(pixel_test_buff[index], pixel_test_buff1[index], sizeof(pixel) * BUFFSIZE))
             return false;
@@ -2162,28 +2161,35 @@ bool PixelHarness::check_pelFilterChroma_H(pelFilterChroma_t ref, pelFilterChrom
 {
     intptr_t srcStep = 1, offset = 64;
     int32_t maskP, maskQ, tc;
-    int j = 0;
+    intptr_t j = 0;
+    const int NUM_MASKS = 3;
 
     pixel pixel_test_buff1[TEST_CASES][BUFFSIZE];
     for (int i = 0; i < TEST_CASES; i++)
         memcpy(pixel_test_buff1[i], pixel_test_buff[i], sizeof(pixel)* BUFFSIZE);
 
-    for (int i = 0; i < ITERS; i++)
+    int32_t masks[NUM_MASKS][2] = {{-1, -1}, {-1, 0}, {0, -1}};
+
+    for (int i = 0; i < NUM_MASKS; i++)
     {
-        tc = rand() % PIXEL_MAX;
-        maskP = (rand() % PIXEL_MAX) - 1;
-        maskQ = (rand() % PIXEL_MAX) - 1;
+        int32_t maskP = masks[i][0];
+        int32_t maskQ = masks[i][1];
 
-        int index = rand() % 3;
+        for (int i = 0; i < ITERS; i++)
+        {
+            tc = rand() % PIXEL_MAX;
 
-        ref(pixel_test_buff[index] + 4 * offset + j, srcStep, offset, tc, maskP, maskQ);
-        checked(opt, pixel_test_buff1[index] + 4 * offset + j, srcStep, offset, tc, maskP, maskQ);
+            int index = rand() % 3;
 
-        if (memcmp(pixel_test_buff[index], pixel_test_buff1[index], sizeof(pixel)* BUFFSIZE))
-            return false;
+            ref(pixel_test_buff[index] + 2 * offset + j, srcStep, offset, tc, maskP, maskQ);
+            checked(opt, pixel_test_buff1[index] + 2 * offset + j, srcStep, offset, tc, maskP, maskQ);
 
-        reportfail()
-        j += INCR;
+            if (memcmp(pixel_test_buff[index], pixel_test_buff1[index], sizeof(pixel) * BUFFSIZE))
+                return false;
+
+            reportfail()
+            j += INCR;
+        }
     }
 
     return true;
@@ -2193,28 +2199,35 @@ bool PixelHarness::check_pelFilterChroma_V(pelFilterChroma_t ref, pelFilterChrom
 {
     intptr_t srcStep = 64, offset = 1;
     int32_t maskP, maskQ, tc;
-    int j = 0;
+    intptr_t j = 0;
+    const int NUM_MASKS = 3;
 
     pixel pixel_test_buff1[TEST_CASES][BUFFSIZE];
     for (int i = 0; i < TEST_CASES; i++)
         memcpy(pixel_test_buff1[i], pixel_test_buff[i], sizeof(pixel)* BUFFSIZE);
 
-    for (int i = 0; i < ITERS; i++)
+    int32_t masks[NUM_MASKS][2] = {{-1, -1}, {-1, 0}, {0, -1}};
+
+    for (int i = 0; i < NUM_MASKS; i++)
     {
-        tc = rand() % PIXEL_MAX;
-        maskP = (rand() % PIXEL_MAX) - 1;
-        maskQ = (rand() % PIXEL_MAX) - 1;
+        int32_t maskP = masks[i][0];
+        int32_t maskQ = masks[i][1];
 
-        int index = rand() % 3;
+        for (int i = 0; i < ITERS; i++)
+        {
+            tc = rand() % PIXEL_MAX;
 
-        ref(pixel_test_buff[index] + 4 + j, srcStep, offset, tc, maskP, maskQ);
-        checked(opt, pixel_test_buff1[index] + 4 + j, srcStep, offset, tc, maskP, maskQ);
+            int index = rand() % 3;
 
-        if (memcmp(pixel_test_buff[index], pixel_test_buff1[index], sizeof(pixel)* BUFFSIZE))
-            return false;
+            ref(pixel_test_buff[index] + 2 * offset + j, srcStep, offset, tc, maskP, maskQ);
+            checked(opt, pixel_test_buff1[index] + 2 * offset + j, srcStep, offset, tc, maskP, maskQ);
 
-        reportfail()
-        j += INCR;
+            if (memcmp(pixel_test_buff[index], pixel_test_buff1[index], sizeof(pixel) * BUFFSIZE))
+                return false;
+
+            reportfail()
+            j += INCR;
+        }
     }
 
     return true;
@@ -3085,7 +3098,6 @@ bool PixelHarness::testCorrectness(const EncoderPrimitives& ref, const EncoderPr
             return false;
         }
     }
-    
 
     if (opt.pelFilterLumaStrong[0])
     {
@@ -3152,7 +3164,6 @@ bool PixelHarness::testCorrectness(const EncoderPrimitives& ref, const EncoderPr
         }
     }
 
-
     for (int k = 0; k < NUM_INTEGRAL_SIZE; k++)
     {
         if (opt.integral_inith[k] && !check_integral_inith(ref.integral_inith[k], opt.integral_inith[k]))
@@ -3749,7 +3760,8 @@ void PixelHarness::measureSpeed(const EncoderPrimitives& ref, const EncoderPrimi
         int32_t tcP = (rand() % PIXEL_MAX) - 1;
         int32_t tcQ = (rand() % PIXEL_MAX) - 1;
         HEADER0("pelFilterLumaStrong_Vertical");
-        REPORT_SPEEDUP(opt.pelFilterLumaStrong[0], ref.pelFilterLumaStrong[0], pbuf1, STRIDE, 1, tcP, tcQ);
+        REPORT_SPEEDUP(opt.pelFilterLumaStrong[0], ref.pelFilterLumaStrong[0], pbuf1 + 4,
+                       STRIDE, 1, tcP, tcQ);
     }
 
     if (opt.pelFilterLumaStrong[1])
@@ -3757,25 +3769,38 @@ void PixelHarness::measureSpeed(const EncoderPrimitives& ref, const EncoderPrimi
         int32_t tcP = (rand() % PIXEL_MAX) - 1;
         int32_t tcQ = (rand() % PIXEL_MAX) - 1;
         HEADER0("pelFilterLumaStrong_Horizontal");
-        REPORT_SPEEDUP(opt.pelFilterLumaStrong[1], ref.pelFilterLumaStrong[1], pbuf1, 1, STRIDE, tcP, tcQ);
+        REPORT_SPEEDUP(opt.pelFilterLumaStrong[1], ref.pelFilterLumaStrong[1], pbuf1 + 4 * STRIDE,
+                       1, STRIDE, tcP, tcQ);
     }
 
     if (opt.pelFilterChroma[0])
     {
+        const int NUM_MASKS = 3;
+        int32_t masks[NUM_MASKS][2] = {{-1, -1}, {-1, 0}, {0, -1}};
         int32_t tc = (rand() % PIXEL_MAX);
-        int32_t maskP = (rand() % PIXEL_MAX) - 1;
-        int32_t maskQ = (rand() % PIXEL_MAX) - 1;
-        HEADER0("pelFilterChroma_Vertical");
-        REPORT_SPEEDUP(opt.pelFilterChroma[0], ref.pelFilterChroma[0], pbuf1, STRIDE, 1, tc, maskP, maskQ);
+        for (int i = 0; i < NUM_MASKS; i++)
+        {
+            int32_t maskP = masks[i][0];
+            int32_t maskQ = masks[i][1];
+            HEADER("pelFilterChroma_Vertical[MaskP: %d, MaskQ: %d]", maskP, maskQ);
+            REPORT_SPEEDUP(opt.pelFilterChroma[0], ref.pelFilterChroma[0], pbuf1 + 2,
+                           STRIDE, 1, tc, maskP, maskQ);
+        }
     }
 
     if (opt.pelFilterChroma[1])
     {
+        const int NUM_MASKS = 3;
+        int32_t masks[NUM_MASKS][2] = {{-1, -1}, {-1, 0}, {0, -1}};
         int32_t tc = (rand() % PIXEL_MAX);
-        int32_t maskP = (rand() % PIXEL_MAX) - 1;
-        int32_t maskQ = (rand() % PIXEL_MAX) - 1;
-        HEADER0("pelFilterChroma_Horizontal");
-        REPORT_SPEEDUP(opt.pelFilterChroma[1], ref.pelFilterChroma[1], pbuf1, 1, STRIDE, tc, maskP, maskQ);
+        for (int i = 0; i < NUM_MASKS; i++)
+        {
+            int32_t maskP = masks[i][0];
+            int32_t maskQ = masks[i][1];
+            HEADER("pelFilterChroma_Horizontal[MaskP: %d, MaskQ: %d]", maskP, maskQ);
+            REPORT_SPEEDUP(opt.pelFilterChroma[1], ref.pelFilterChroma[1], pbuf1 + 2 * STRIDE,
+                           1, STRIDE, tc, maskP, maskQ);
+        }
     }
 
     for (int k = 0; k < NUM_INTEGRAL_SIZE; k++)
-- 
2.34.1

-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0003-Change-the-test-conditions-for-pelFilterChroma-in-Pi.patch
Type: text/x-diff
Size: 9632 bytes
Desc: not available
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20250211/5c3a6388/attachment-0001.patch>


More information about the x265-devel mailing list