<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Oct 17, 2013 at 10:06 AM,  <span dir="ltr"><<a href="mailto:dnyaneshwar@multicorewareinc.com" target="_blank">dnyaneshwar@multicorewareinc.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"># HG changeset patch<br>
# User Dnyaneshwar Gorade <<a href="mailto:dnyaneshwar@multicorewareinc.com">dnyaneshwar@multicorewareinc.com</a>><br>
# Date 1382022288 -19800<br>
#      Thu Oct 17 20:34:48 2013 +0530<br>
# Node ID f6d04c660b9bb1b0cf6274faf514be77148aa312<br>
# Parent  dfae391107c3d2823adabe284f1c08278669d8f0<br>
added pixelavg_pp fuction to testbench.<br>
<br>
diff -r dfae391107c3 -r f6d04c660b9b source/common/vec/pixel-sse41.cpp<br>
--- a/source/common/vec/pixel-sse41.cpp Thu Oct 17 16:05:37 2013 +0530<br>
+++ b/source/common/vec/pixel-sse41.cpp Thu Oct 17 20:34:48 2013 +0530<br>
@@ -5586,6 +5586,22 @@<br>
     __m128i sum1  = _mm_hadd_epi32(sum, sum);<br>
     return _mm_cvtsi128_si32(_mm_hadd_epi32(sum1, sum1));<br>
 }<br>
+<br>
+template<int lx, int ly><br>
+void pixelavg_pp(pixel* dst, intptr_t dstride, pixel* src0, intptr_t sstride0, pixel* src1, intptr_t sstride1, int)<br>
+{<br>
+    for (int y = 0; y < ly; y++)<br>
+    {<br>
+        for (int x = 0; x < lx; x++)<br>
+        {<br>
+            dst[x] = (src0[x] + src1[x] + 1) >> 1;<br>
+        }<br>
+<br>
+        src0 += sstride0;<br>
+        src1 += sstride1;<br>
+        dst += dstride;<br>
+    }<br>
+}<br></blockquote><div><br></div><div>We don't need a second C reference.  We have assembly code from x264 for this; you just need to un-comment lines 295 and 324 of asm-primitive.cpp.</div><div><br></div><div>Drop all the changes from this file</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
 }<br>
<br>
 namespace x265 {<br>
@@ -5645,6 +5661,26 @@<br>
     SETUP_NONSAD(4, 4); // 4x4 SAD covered by assembly<br>
     /* 4x4 is too small for any sub partitions */<br>
<br>
+#define SET_FUNC_PRIMITIVE_TABLE_C_SUBSET2(FUNC_PREFIX, WIDTH) \<br>
+    p.FUNC_PREFIX[PARTITION_ ## WIDTH ## x4]  = FUNC_PREFIX<WIDTH,  4>; \<br>
+    p.FUNC_PREFIX[PARTITION_ ## WIDTH ## x8]  = FUNC_PREFIX<WIDTH,  8>; \<br>
+    p.FUNC_PREFIX[PARTITION_ ## WIDTH ## x12] = FUNC_PREFIX<WIDTH, 12>; \<br>
+    p.FUNC_PREFIX[PARTITION_ ## WIDTH ## x16] = FUNC_PREFIX<WIDTH, 16>; \<br>
+    p.FUNC_PREFIX[PARTITION_ ## WIDTH ## x24] = FUNC_PREFIX<WIDTH, 24>; \<br>
+    p.FUNC_PREFIX[PARTITION_ ## WIDTH ## x32] = FUNC_PREFIX<WIDTH, 32>; \<br>
+    p.FUNC_PREFIX[PARTITION_ ## WIDTH ## x48] = FUNC_PREFIX<WIDTH, 48>; \<br>
+    p.FUNC_PREFIX[PARTITION_ ## WIDTH ## x64] = FUNC_PREFIX<WIDTH, 64>;<br>
+<br>
+#define SET_FUNC_PRIMITIVE_TABLE_C2(FUNC_PREFIX) \<br>
+    SET_FUNC_PRIMITIVE_TABLE_C_SUBSET2(FUNC_PREFIX,  4) \<br>
+    SET_FUNC_PRIMITIVE_TABLE_C_SUBSET2(FUNC_PREFIX,  8) \<br>
+    SET_FUNC_PRIMITIVE_TABLE_C_SUBSET2(FUNC_PREFIX, 12) \<br>
+    SET_FUNC_PRIMITIVE_TABLE_C_SUBSET2(FUNC_PREFIX, 16) \<br>
+    SET_FUNC_PRIMITIVE_TABLE_C_SUBSET2(FUNC_PREFIX, 24) \<br>
+    SET_FUNC_PRIMITIVE_TABLE_C_SUBSET2(FUNC_PREFIX, 32) \<br>
+    SET_FUNC_PRIMITIVE_TABLE_C_SUBSET2(FUNC_PREFIX, 48) \<br>
+    SET_FUNC_PRIMITIVE_TABLE_C_SUBSET2(FUNC_PREFIX, 64) \<br>
+<br>
 #if HIGH_BIT_DEPTH<br>
     Setup_Vec_Pixel16Primitives_sse41(p);<br>
 #else<br>
@@ -5661,6 +5697,9 @@<br>
<br>
     p.weightpUniPixel = weightUnidirPixel;<br>
     p.weightpUni = weightUnidir;<br>
+<br>
+    SET_FUNC_PRIMITIVE_TABLE_C2(pixelavg_pp)<br>
+<br>
 #endif /* !HIGH_BIT_DEPTH */<br>
 }<br>
 }<br>
diff -r dfae391107c3 -r f6d04c660b9b source/test/pixelharness.cpp<br>
--- a/source/test/pixelharness.cpp      Thu Oct 17 16:05:37 2013 +0530<br>
+++ b/source/test/pixelharness.cpp      Thu Oct 17 20:34:48 2013 +0530<br>
@@ -494,6 +494,29 @@<br>
     return true;<br>
 }<br>
<br>
+bool PixelHarness::check_pixelavg_pp(pixelavg_pp_t ref, pixelavg_pp_t opt)<br>
+{<br>
+    ALIGN_VAR_16(pixel, ref_dest[64 * 64]);<br>
+    ALIGN_VAR_16(pixel, opt_dest[64 * 64]);<br>
+<br>
+    memset(ref_dest, 0, 64 * 64 * sizeof(pixel));<br>
+    memset(opt_dest, 0, 64 * 64 * sizeof(pixel));<br></blockquote><div><br></div><div>it's not necessary to memset the output buffers</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

+<br>
+    int j = 0;<br>
+<br>
+    for (int i = 0; i < ITERS; i++)<br>
+    {<br>
+        opt(opt_dest, STRIDE, pbuf1 + j, STRIDE, pbuf2 + j, STRIDE, 32);<br>
+        ref(ref_dest, STRIDE, pbuf1 + j, STRIDE, pbuf2 + j, STRIDE, 32);<br>
+<br>
+        if (memcmp(ref_dest, opt_dest, 64 * 64 * sizeof(pixel)))<br>
+            return false;<br>
+<br>
+        j += INCR;<br>
+    }<br>
+<br>
+    return true;<br>
+}<br></blockquote><div><br></div><div>need a blank line here</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
 bool PixelHarness::testPartition(int part, const EncoderPrimitives& ref, const EncoderPrimitives& opt)<br>
 {<br>
     if (opt.satd[part])<br>
@@ -567,7 +590,14 @@<br>
             return false;<br>
         }<br>
     }<br>
-<br>
+    if(opt.pixelavg_pp[part])<br></blockquote><div><br></div><div>white-space</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
+    {<br>
+        if (!check_pixelavg_pp(ref.pixelavg_pp[part], opt.pixelavg_pp[part]))<br>
+        {<br>
+            printf("pixelavg_pp[%s]: failed!\n", FuncNames[part]);<br>
+            return false;<br>
+        }<br>
+    }<br>
     return true;<br>
 }<br>
<br>
@@ -626,6 +656,14 @@<br>
                 return false;<br>
             }<br>
         }<br>
+        if(opt.pixelavg_pp[i])<br></blockquote><div><br></div><div>white-space</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
+        {<br>
+            if (!check_pixelavg_pp(ref.pixelavg_pp[i], opt.pixelavg_pp[i]))<br>
+            {<br>
+                printf("pixelavg_pp[%s]: failed!\n", FuncNames[i]);<br>
+                return false;<br>
+            }<br>
+        }<br>
     }<br>
<br>
     if (opt.blockcpy_pp)<br>
diff -r dfae391107c3 -r f6d04c660b9b source/test/pixelharness.h<br>
--- a/source/test/pixelharness.h        Thu Oct 17 16:05:37 2013 +0530<br>
+++ b/source/test/pixelharness.h        Thu Oct 17 20:34:48 2013 +0530<br>
@@ -52,6 +52,7 @@<br>
     bool check_pixeladd_ss(pixeladd_ss_t ref, pixeladd_ss_t opt);<br>
     bool check_pixeladd_pp(pixeladd_pp_t ref, pixeladd_pp_t opt);<br>
     bool check_downscale_t(downscale_t ref, downscale_t opt);<br>
+    bool check_pixelavg_pp(pixelavg_pp_t ref, pixelavg_pp_t opt);<br>
<br>
 public:<br>
<br>
_______________________________________________<br>
x265-devel mailing list<br>
<a href="mailto:x265-devel@videolan.org">x265-devel@videolan.org</a><br>
<a href="https://mailman.videolan.org/listinfo/x265-devel" target="_blank">https://mailman.videolan.org/listinfo/x265-devel</a><br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br>Steve Borho
</div></div>