[x265] [PATCH] Some fixes in applyWeight() function
shazeb at multicorewareinc.com
shazeb at multicorewareinc.com
Fri Oct 11 14:59:34 CEST 2013
# HG changeset patch
# User Shazeb Nawaz Khan <shazeb at multicorewareinc.com>
# Date 1381496334 -19800
# Fri Oct 11 18:28:54 2013 +0530
# Node ID 695be3cbd99cc9136c379049e874dd79c5fdad58
# Parent c6d89dc62e191f56f63dbcb1781a6494da50a70d
Some fixes in applyWeight() function
These wont fix the PSNR drop but are necessary
diff -r c6d89dc62e19 -r 695be3cbd99c source/common/reference.cpp
--- a/source/common/reference.cpp Fri Oct 11 01:47:53 2013 -0500
+++ b/source/common/reference.cpp Fri Oct 11 18:28:54 2013 +0530
@@ -92,7 +92,7 @@
void MotionReference::applyWeight(int rows, int numRows)
{
- rows = X265_MIN(rows, numRows-1);
+ rows = X265_MIN(rows, numRows);
if (m_numWeightedRows >= rows)
return;
int marginX = m_reconPic->m_lumaMarginX;
@@ -101,15 +101,15 @@
pixel* dst = fpelPlane + ((m_numWeightedRows * (int)g_maxCUHeight) * lumaStride);
int width = m_reconPic->getWidth();
int height = ((rows - m_numWeightedRows) * g_maxCUHeight);
- if (rows == numRows - 1)
+ if (rows == numRows)
height = ((m_reconPic->getHeight() % g_maxCUHeight) ? (m_reconPic->getHeight() % g_maxCUHeight) : g_maxCUHeight);
size_t dstStride = lumaStride;
// Computing weighted CU rows
int shiftNum = IF_INTERNAL_PREC - X265_DEPTH;
- shift = shift + shiftNum;
- round = shift ? (1 << (shift - 1)) : 0;
- primitives.weightpUniPixel(src, dst, lumaStride, dstStride, width, height, weight, round, shift, offset);
+ int local_shift = shift + shiftNum;
+ int local_round = local_shift ? (1 << (local_shift - 1)) : 0;
+ primitives.weightpUniPixel(src, dst, lumaStride, dstStride, width, height, weight, local_round, local_shift, offset);
// Extending Left & Right
primitives.extendRowBorder(dst, dstStride, width, height, marginX);
@@ -125,7 +125,7 @@
}
// Extending Bottom
- if (rows == (numRows - 1))
+ if (rows == numRows)
{
pixel *pixY = fpelPlane - marginX + (m_reconPic->getHeight() - 1) * dstStride;
for (int y = 0; y < marginY; y++)
diff -r c6d89dc62e19 -r 695be3cbd99c source/encoder/motion.cpp
--- a/source/encoder/motion.cpp Fri Oct 11 01:47:53 2013 -0500
+++ b/source/encoder/motion.cpp Fri Oct 11 18:28:54 2013 +0530
@@ -1159,18 +1159,20 @@
int realHeight = blockheight + (dir == 1);
intptr_t realStride = FENC_STRIDE + (dir == 2);
pixel *fref = ref->unweightedFPelPlane + blockOffset + (qmv.x >> 2) + (qmv.y >> 2) * ref->lumaStride;
-
+ int shiftNum = IF_INTERNAL_PREC - X265_DEPTH;
+ int local_shift = ref->shift + shiftNum;
+ int local_round = local_shift ? (1 << (local_shift - 1)) : 0;
if (ref->isWeighted)
{
if (yFrac == 0)
{
primitives.ipfilter_ps[FILTER_H_P_S_8](fref, ref->lumaStride, immedVal, realStride, realWidth, realHeight, g_lumaFilter[xFrac]);
- primitives.weightpUni(immedVal, subpelbuf, realStride, realStride, realWidth, realHeight, ref->weight, ref->round, ref->shift, ref->offset);
+ primitives.weightpUni(immedVal, subpelbuf, realStride, realStride, realWidth, realHeight, ref->weight, local_round, local_shift, ref->offset);
}
else if (xFrac == 0)
{
primitives.ipfilter_ps[FILTER_V_P_S_8](fref, ref->lumaStride, immedVal, realStride, realWidth, realHeight, g_lumaFilter[yFrac]);
- primitives.weightpUni(immedVal, subpelbuf, realStride, realStride, realWidth, realHeight, ref->weight, ref->round, ref->shift, ref->offset);
+ primitives.weightpUni(immedVal, subpelbuf, realStride, realStride, realWidth, realHeight, ref->weight, local_round, local_shift, ref->offset);
}
else
{
@@ -1178,7 +1180,7 @@
int halfFilterSize = (filterSize >> 1);
primitives.ipfilter_ps[FILTER_H_P_S_8](fref - (halfFilterSize - 1) * ref->lumaStride, ref->lumaStride, immedVal, realWidth, realWidth, realHeight + filterSize - 1, g_lumaFilter[xFrac]);
primitives.ipfilter_ss[FILTER_V_S_S_8](immedVal + (halfFilterSize - 1) * realWidth, realWidth, immedVal2, realStride, realWidth, realHeight, g_lumaFilter[yFrac]);
- primitives.weightpUni(immedVal2, subpelbuf, realStride, realStride, realWidth, realHeight, ref->weight, ref->round, ref->shift, ref->offset);
+ primitives.weightpUni(immedVal2, subpelbuf, realStride, realStride, realWidth, realHeight, ref->weight, local_round, local_shift, ref->offset);
}
}
else
More information about the x265-devel
mailing list