# HG changeset patch
# User Shazeb Nawaz Khan <[email protected]>
# Date 1380607560 -19800
#      Tue Oct 01 11:36:00 2013 +0530
# Node ID 07d712e6265cb6f052a55fe7a1448d48b5339acc
# Parent  b089a7ff0d73efa6b9da3ee98ba6c8191ff3652b
Templating weightUnidir primitive to support pixel inputs

To be used for full-pel planes

diff -r b089a7ff0d73 -r 07d712e6265c source/common/pixel.cpp
--- a/source/common/pixel.cpp   Tue Oct 01 11:20:02 2013 +0530
+++ b/source/common/pixel.cpp   Tue Oct 01 11:36:00 2013 +0530
@@ -514,17 +514,19 @@
     }
 }
 
-void weightUnidir(short *src, pixel *dst, intptr_t srcStride, intptr_t 
dstStride, int width, int height, int w0, int round, int shift, int offset)
+template <typename T>
+void weightUnidir(void *srcAbstract, pixel *dst, intptr_t srcStride, intptr_t 
dstStride, int width, int height, int w0, int round, int shift, int offset)
 {
+    T *src = static_cast<T *>(srcAbstract);
     int x, y;
     for (y = height - 1; y >= 0; y--)
     {
         for (x = width - 1; x >= 0; )
         {
             // note: luma min width is 4
-            dst[x] = (pixel) Clip3(0, ((1 << X265_DEPTH) - 1), ((w0 * (src[x] 
+ IF_INTERNAL_OFFS) + round) >> shift) + offset);
+            dst[x] = (pixel) Clip3(0, ((1 << X265_DEPTH) - 1), ((w0 * 
(uint16_t) (src[x] + IF_INTERNAL_OFFS) + round) >> shift) + offset);
             x--;
-            dst[x] = (pixel) Clip3(0, ((1 << X265_DEPTH) - 1), ((w0 * (src[x] 
+ IF_INTERNAL_OFFS) + round) >> shift) + offset);
+            dst[x] = (pixel) Clip3(0, ((1 << X265_DEPTH) - 1), ((w0 * 
(uint16_t) (src[x] + IF_INTERNAL_OFFS) + round) >> shift) + offset);
             x--;
         }
 
@@ -842,7 +844,8 @@
     p.transpose[3] = transpose<32>;
     p.transpose[4] = transpose<64>;
 
-    p.weightpUni = weightUnidir;
+    p.weightpUniPixel = weightUnidir<pixel>;
+    p.weightpUni = weightUnidir<short>;
 
     p.pixelsub_sp = pixelsub_sp_c;
     p.pixeladd_pp = pixeladd_pp_c;
diff -r b089a7ff0d73 -r 07d712e6265c source/common/primitives.h
--- a/source/common/primitives.h        Tue Oct 01 11:20:02 2013 +0530
+++ b/source/common/primitives.h        Tue Oct 01 11:36:00 2013 +0530
@@ -228,8 +228,7 @@
 typedef void (*filterRowV_N_t)(short *midA, intptr_t midStride, pixel *dstA, 
pixel *dstB, pixel *dstC, intptr_t dstStride, int width, int height, int 
marginX, int marginY, int row, int isLastRow);
 typedef void (*extendCURowBorder_t)(pixel* txt, intptr_t stride, int width, 
int height, int marginX);
 
-
-typedef void (*weightpUni_t)(short *src, pixel *dst, intptr_t srcStride, 
intptr_t dstStride, int width, int height, int w0, int round, int shift, int 
offset);
+typedef void (*weightpUni_t)(void *src, pixel *dst, intptr_t srcStride, 
intptr_t dstStride, int width, int height, int w0, int round, int shift, int 
offset);
 typedef void (*scale_t)(pixel *dst, pixel *src, intptr_t stride);
 typedef void (*downscale_t)(pixel *src0, pixel *dstf, pixel *dsth, pixel 
*dstv, pixel *dstc,
                             intptr_t src_stride, intptr_t dst_stride, int 
width, int height);
@@ -286,6 +285,7 @@
     calcrecon_t     calcrecon[NUM_SQUARE_BLOCKS];
     transpose_t     transpose[NUM_SQUARE_BLOCKS];
 
+    weightpUni_t    weightpUniPixel;
     weightpUni_t    weightpUni;
     pixelsub_sp_t   pixelsub_sp;
     pixeladd_ss_t   pixeladd_ss;
diff -r b089a7ff0d73 -r 07d712e6265c source/common/vec/pixel.inc
--- a/source/common/vec/pixel.inc       Tue Oct 01 11:20:02 2013 +0530
+++ b/source/common/vec/pixel.inc       Tue Oct 01 11:36:00 2013 +0530
@@ -469,7 +469,9 @@
     p.transpose[2] = transpose16;
     p.transpose[3] = transpose32;
     p.transpose[4] = transpose<64>;
-    p.weightpUni = weightUnidir;
+    p.weightpUniPixel = weightUnidir<pixel>;
+    p.weightpUni = weightUnidir<short>;
+
 #endif
 
 #if !HIGH_BIT_DEPTH
diff -r b089a7ff0d73 -r 07d712e6265c source/common/vec/pixel8.inc
--- a/source/common/vec/pixel8.inc      Tue Oct 01 11:20:02 2013 +0530
+++ b/source/common/vec/pixel8.inc      Tue Oct 01 11:36:00 2013 +0530
@@ -8573,8 +8573,10 @@
     }
 }
 
-void weightUnidir(short *src, pixel *dst, intptr_t srcStride, intptr_t 
dstStride, int width, int height, int w0, int round, int shift, int offset)
+template <typename T>
+void weightUnidir(void *srcAbstract, pixel *dst, intptr_t srcStride, intptr_t 
dstStride, int width, int height, int w0, int round, int shift, int offset)
 {
+    T* src = static_cast<T *> (srcAbstract);
     int x, y;
     Vec8s tmp;
 
_______________________________________________
x265-devel mailing list
[email protected]
https://mailman.videolan.org/listinfo/x265-devel

Reply via email to