[x265] [PATCH] primitives: added C primitives for upShift/downShift input pixels
murugan at multicorewareinc.com
murugan at multicorewareinc.com
Tue Mar 11 10:18:19 CET 2014
# HG changeset patch
# User Murugan Vairavel <murugan at multicorewareinc.com>
# Date 1394529456 -19800
# Tue Mar 11 14:47:36 2014 +0530
# Node ID 6f60664fd99d54839cf8c71386d5419849e98b1f
# Parent 1417ba917211abb9f4a43ff44ca28ad9d9a0ab43
primitives: added C primitives for upShift/downShift input pixels
diff -r 1417ba917211 -r 6f60664fd99d source/Lib/TLibCommon/TComPicYuv.cpp
--- a/source/Lib/TLibCommon/TComPicYuv.cpp Mon Mar 10 16:59:22 2014 +0530
+++ b/source/Lib/TLibCommon/TComPicYuv.cpp Tue Mar 11 14:47:36 2014 +0530
@@ -193,30 +193,9 @@
uint8_t *u = (uint8_t*)pic.planes[1];
uint8_t *v = (uint8_t*)pic.planes[2];
- for (int r = 0; r < height; r++)
- {
- for (int c = 0; c < width; c++)
- {
- Y[c] = ((pixel)y[c]) << 2;
- }
-
- Y += getStride();
- y += pic.stride[0] / sizeof(*y);
- }
-
- for (int r = 0; r < height >> m_vChromaShift; r++)
- {
- for (int c = 0; c < width >> m_hChromaShift; c++)
- {
- U[c] = ((pixel)u[c]) << 2;
- V[c] = ((pixel)v[c]) << 2;
- }
-
- U += getCStride();
- V += getCStride();
- u += pic.stride[1] / sizeof(*u);
- v += pic.stride[2] / sizeof(*v);
- }
+ primitives.upShift(y, pic.stride[0] / sizeof(*y), Y,getStride(), width, height);
+ primitives.upShift(u, pic.stride[1] / sizeof(*u), U,getStride(), width >> m_hChromaShift, height >> m_vChromaShift);
+ primitives.upShift(v, pic.stride[2] / sizeof(*v), V,getStride(), width >> m_hChromaShift, height >> m_vChromaShift);
}
else if (pic.bitDepth == 8)
{
@@ -268,30 +247,9 @@
int shift = X265_MAX(0, pic.bitDepth - X265_DEPTH);
/* shift and mask pixels to final size */
- for (int r = 0; r < height; r++)
- {
- for (int c = 0; c < width; c++)
- {
- Y[c] = (pixel)((y[c] >> shift) & mask);
- }
-
- Y += getStride();
- y += pic.stride[0] / sizeof(*y);
- }
-
- for (int r = 0; r < height >> m_vChromaShift; r++)
- {
- for (int c = 0; c < width >> m_hChromaShift; c++)
- {
- U[c] = (pixel)((u[c] >> shift) & mask);
- V[c] = (pixel)((v[c] >> shift) & mask);
- }
-
- U += getCStride();
- V += getCStride();
- u += pic.stride[1] / sizeof(*u);
- v += pic.stride[2] / sizeof(*v);
- }
+ primitives.downShift(y, pic.stride[0] / sizeof(*y), Y,getCStride(), width, height, shift, mask);
+ primitives.downShift(u, pic.stride[1] / sizeof(*u), U,getCStride(), width >> m_hChromaShift, height >> m_vChromaShift, shift, mask);
+ primitives.downShift(v, pic.stride[2] / sizeof(*v), V,getCStride(), width >> m_hChromaShift, height >> m_vChromaShift, shift, mask);
}
/* extend the right edge if width was not multiple of the minimum CU size */
diff -r 1417ba917211 -r 6f60664fd99d source/common/pixel.cpp
--- a/source/common/pixel.cpp Mon Mar 10 16:59:22 2014 +0530
+++ b/source/common/pixel.cpp Tue Mar 11 14:47:36 2014 +0530
@@ -852,6 +852,34 @@
dst += dstStride;
}
}
+
+void upShift(uint8_t *src, int srcStride, pixel *dst, int dstStride, int width, int height)
+{
+ for (int r = 0; r < height; r++)
+ {
+ for (int c = 0; c < width; c++)
+ {
+ dst[c] = ((pixel)src[c]) << 2;
+ }
+
+ dst += dstStride;
+ src += srcStride;
+ }
+}
+
+void downShift(uint16_t *src, int srcStride, pixel *dst, int dstStride, int width, int height, int shift, uint16_t mask)
+{
+ for (int r = 0; r < height; r++)
+ {
+ for (int c = 0; c < width; c++)
+ {
+ dst[c] = (pixel)((src[c] >> shift) & mask);
+ }
+
+ dst += dstStride;
+ src += srcStride;
+ }
+}
} // end anonymous namespace
namespace x265 {
@@ -1099,5 +1127,7 @@
p.var[BLOCK_32x32] = pixel_var<32>;
p.var[BLOCK_64x64] = pixel_var<64>;
p.plane_copy_deinterleave_c = plane_copy_deinterleave_chroma;
+ p.upShift = upShift;
+ p.downShift = downShift;
}
}
diff -r 1417ba917211 -r 6f60664fd99d source/common/primitives.h
--- a/source/common/primitives.h Mon Mar 10 16:59:22 2014 +0530
+++ b/source/common/primitives.h Tue Mar 11 14:47:36 2014 +0530
@@ -163,6 +163,8 @@
typedef void (*addAvg_t)(int16_t* src0, int16_t* src1, pixel* dst, intptr_t src0Stride, intptr_t src1Stride, intptr_t dstStride);
typedef void (*saoCuOrgE0_t)(pixel * rec, int8_t * offsetEo, int lcuWidth, int8_t signLeft);
+typedef void (*upShift_t) (uint8_t *src, int srcStride, pixel *dst, int dstStride, int width, int height);
+typedef void (*downShift_t) (uint16_t *src, int srcStride, pixel *dst, int dstStride, int width, int height, int shift, uint16_t mask);
/* Define a structure containing function pointers to optimized encoder
* primitives. Each pointer can reference either an assembly routine,
@@ -233,6 +235,8 @@
extendCURowBorder_t extendRowBorder;
// sao primitives
saoCuOrgE0_t saoCuOrgE0;
+ upShift_t upShift;
+ downShift_t downShift;
struct
{
More information about the x265-devel
mailing list