[x265-commits] [x265] asm: re-enable sad_x3 following alignment workaround
Steve Borho
steve at borho.org
Tue Nov 5 01:48:44 CET 2013
details: http://hg.videolan.org/x265/rev/814b4639d6a6
branches:
changeset: 4823:814b4639d6a6
user: Steve Borho <steve at borho.org>
date: Mon Nov 04 01:02:00 2013 -0600
description:
asm: re-enable sad_x3 following alignment workaround
Subject: [x265] Dropping the 'm_' prefix from names used for members of struct type Lowres
details: http://hg.videolan.org/x265/rev/37903c6fd1f9
branches:
changeset: 4824:37903c6fd1f9
user: Shazeb Nawaz Khan <shazeb at multicorewareinc.com>
date: Mon Nov 04 12:09:06 2013 +0530
description:
Dropping the 'm_' prefix from names used for members of struct type Lowres
Subject: [x265] RDOQ : pass a parameter to temporarily disable RDOQ.
details: http://hg.videolan.org/x265/rev/91d96a6038e2
branches:
changeset: 4825:91d96a6038e2
user: Deepthi Devaki <deepthidevaki at multicorewareinc.com>
date: Mon Nov 04 15:23:10 2013 +0530
description:
RDOQ : pass a parameter to temporarily disable RDOQ.
default value of parameter is true, that means RDOQ is not disabled. Outputs mustnot change in any rd levels.
Subject: [x265] update authors header
details: http://hg.videolan.org/x265/rev/6e211f980d98
branches:
changeset: 4826:6e211f980d98
user: Min Chen <chenm003 at 163.com>
date: Mon Nov 04 19:04:43 2013 +0800
description:
update authors header
Subject: [x265] fix bug in chroma_p2s and testbench
details: http://hg.videolan.org/x265/rev/c83157a8b616
branches:
changeset: 4827:c83157a8b616
user: Min Chen <chenm003 at 163.com>
date: Mon Nov 04 19:05:18 2013 +0800
description:
fix bug in chroma_p2s and testbench
Subject: [x265] asm code and test bench integration code for blockcopy_pp_c partitions
details: http://hg.videolan.org/x265/rev/7898c58d9cbc
branches:
changeset: 4828:7898c58d9cbc
user: Praveen Tiwari
date: Mon Nov 04 17:30:15 2013 +0530
description:
asm code and test bench integration code for blockcopy_pp_c partitions
Subject: [x265] added C primitive for blockcopy_p_s and function pointer creation for new type
details: http://hg.videolan.org/x265/rev/e61a0b1c035b
branches:
changeset: 4829:e61a0b1c035b
user: Praveen Tiwari
date: Mon Nov 04 18:14:38 2013 +0530
description:
added C primitive for blockcopy_p_s and function pointer creation for new type
Subject: [x265] pixel.cpp, initialization of function pointer table for blockcopy_ps_c partitions
details: http://hg.videolan.org/x265/rev/64f25611bcb2
branches:
changeset: 4830:64f25611bcb2
user: Praveen Tiwari
date: Mon Nov 04 18:45:30 2013 +0530
description:
pixel.cpp, initialization of function pointer table for blockcopy_ps_c partitions
Subject: [x265] pixel.h, added asm function decleration for blockcopy_ps_c
details: http://hg.videolan.org/x265/rev/4cd16b86488c
branches:
changeset: 4831:4cd16b86488c
user: Praveen Tiwari
date: Mon Nov 04 18:57:06 2013 +0530
description:
pixel.h, added asm function decleration for blockcopy_ps_c
Subject: [x265] corrected buffer name for chroma_copy_pp
details: http://hg.videolan.org/x265/rev/35989e4e0b46
branches:
changeset: 4832:35989e4e0b46
user: Praveen Tiwari
date: Mon Nov 04 20:37:42 2013 +0530
description:
corrected buffer name for chroma_copy_pp
Subject: [x265] pixelharness: shorten copy primitive names for consistency
details: http://hg.videolan.org/x265/rev/f3106abb88b2
branches:
changeset: 4833:f3106abb88b2
user: Steve Borho <steve at borho.org>
date: Mon Nov 04 18:35:58 2013 -0600
description:
pixelharness: shorten copy primitive names for consistency
diffstat:
source/Lib/TLibCommon/TComDataCU.cpp | 2 +-
source/Lib/TLibCommon/TComTrQuant.cpp | 25 +-
source/Lib/TLibCommon/TComTrQuant.h | 4 +-
source/Lib/TLibEncoder/TEncSearch.cpp | 39 +-
source/Lib/TLibEncoder/TEncSearch.h | 4 +-
source/common/CMakeLists.txt | 2 +-
source/common/lowres.cpp | 12 +-
source/common/lowres.h | 8 +-
source/common/pixel.cpp | 21 +-
source/common/primitives.h | 3 +
source/common/x86/asm-primitives.cpp | 74 ++-
source/common/x86/blockcopy8.asm | 798 ++++++++++++++++++++++++++++++++++
source/common/x86/ipfilter8.asm | 7 +-
source/common/x86/pixel.h | 70 ++
source/encoder/frameencoder.cpp | 2 +-
source/encoder/ratecontrol.cpp | 14 +-
source/encoder/slicetype.cpp | 8 +-
source/test/ipfilterharness.cpp | 12 +-
source/test/pixelharness.cpp | 6 +-
19 files changed, 1029 insertions(+), 82 deletions(-)
diffs (truncated from 1550 to 300 lines):
diff -r 2ab39c2dd50f -r f3106abb88b2 source/Lib/TLibCommon/TComDataCU.cpp
--- a/source/Lib/TLibCommon/TComDataCU.cpp Mon Nov 04 11:40:49 2013 +0530
+++ b/source/Lib/TLibCommon/TComDataCU.cpp Mon Nov 04 18:35:58 2013 -0600
@@ -246,7 +246,7 @@ void TComDataCU::initCU(TComPic* pic, ui
m_totalDistortion = 0;
m_totalBits = 0;
m_numPartitions = pic->getNumPartInCU();
- int qp = pic->m_lowres.m_invQscaleFactor ? pic->getCU(getAddr())->getQP(0) : m_slice->getSliceQp();
+ int qp = pic->m_lowres.invQscaleFactor ? pic->getCU(getAddr())->getQP(0) : m_slice->getSliceQp();
for (int i = 0; i < 4; i++)
{
m_avgCost[i] = 0;
diff -r 2ab39c2dd50f -r f3106abb88b2 source/Lib/TLibCommon/TComTrQuant.cpp
--- a/source/Lib/TLibCommon/TComTrQuant.cpp Mon Nov 04 11:40:49 2013 +0530
+++ b/source/Lib/TLibCommon/TComTrQuant.cpp Mon Nov 04 18:35:58 2013 -0600
@@ -253,11 +253,11 @@ void TComTrQuant::signBitHidingHDQ(TCoef
}
uint32_t TComTrQuant::xQuant(TComDataCU* cu, int32_t* coef, TCoeff* qCoef, int width, int height,
- TextType ttype, uint32_t absPartIdx, int32_t *lastPos)
+ TextType ttype, uint32_t absPartIdx, int32_t *lastPos, bool curUseRDOQ)
{
uint32_t acSum = 0;
int add = 0;
- bool useRDOQ = cu->getTransformSkip(absPartIdx, ttype) ? m_useRDOQTS : m_useRDOQ;
+ bool useRDOQ = (cu->getTransformSkip(absPartIdx, ttype) ? m_useRDOQTS : m_useRDOQ) && curUseRDOQ;
assert(width == height);
@@ -339,15 +339,16 @@ void TComTrQuant::init(uint32_t maxTrSiz
}
uint32_t TComTrQuant::transformNxN(TComDataCU* cu,
- int16_t* residual,
- uint32_t stride,
- TCoeff* coeff,
- uint32_t width,
- uint32_t height,
- TextType ttype,
- uint32_t absPartIdx,
- int32_t* lastPos,
- bool useTransformSkip)
+ int16_t* residual,
+ uint32_t stride,
+ TCoeff* coeff,
+ uint32_t width,
+ uint32_t height,
+ TextType ttype,
+ uint32_t absPartIdx,
+ int32_t* lastPos,
+ bool useTransformSkip,
+ bool curUseRDOQ)
{
if (cu->getCUTransquantBypass(absPartIdx))
{
@@ -385,7 +386,7 @@ uint32_t TComTrQuant::transformNxN(TComD
const uint32_t log2BlockSize = g_convertToBit[width];
primitives.dct[DCT_4x4 + log2BlockSize - ((width == 4) && (mode != REG_DCT))](residual, m_tmpCoeff, stride);
}
- return xQuant(cu, m_tmpCoeff, coeff, width, height, ttype, absPartIdx, lastPos);
+ return xQuant(cu, m_tmpCoeff, coeff, width, height, ttype, absPartIdx, lastPos, curUseRDOQ);
}
void TComTrQuant::invtransformNxN(bool transQuantBypass, uint32_t mode, int16_t* residual, uint32_t stride, TCoeff* coeff, uint32_t width, uint32_t height, int scalingListType, bool useTransformSkip, int lastPos)
diff -r 2ab39c2dd50f -r f3106abb88b2 source/Lib/TLibCommon/TComTrQuant.h
--- a/source/Lib/TLibCommon/TComTrQuant.h Mon Nov 04 11:40:49 2013 +0530
+++ b/source/Lib/TLibCommon/TComTrQuant.h Mon Nov 04 18:35:58 2013 -0600
@@ -128,7 +128,7 @@ public:
// transform & inverse transform functions
uint32_t transformNxN(TComDataCU* cu, int16_t* residual, uint32_t stride, TCoeff* coeff, uint32_t width, uint32_t height,
- TextType ttype, uint32_t absPartIdx, int32_t* lastPos, bool useTransformSkip = false);
+ TextType ttype, uint32_t absPartIdx, int32_t* lastPos, bool useTransformSkip = false, bool curUseRDOQ = true);
void invtransformNxN(bool transQuantBypass, uint32_t mode, int16_t* residual, uint32_t stride, TCoeff* coeff, uint32_t width, uint32_t height, int scalingListType, bool useTransformSkip = false, int lastPos = MAX_INT);
@@ -194,7 +194,7 @@ private:
void signBitHidingHDQ(TCoeff* qcoeff, TCoeff* coeff, const uint32_t* scan, int32_t* deltaU, int width, int height);
- uint32_t xQuant(TComDataCU* cu, int32_t* src, TCoeff* dst, int width, int height, TextType ttype, uint32_t absPartIdx, int32_t *lastPos);
+ uint32_t xQuant(TComDataCU* cu, int32_t* src, TCoeff* dst, int width, int height, TextType ttype, uint32_t absPartIdx, int32_t *lastPos, bool curUseRDOQ = true);
// RDOQ functions
uint32_t xRateDistOptQuant(TComDataCU* cu, int32_t* srcCoeff, TCoeff* dstCoeff, uint32_t width, uint32_t height, TextType ttype, uint32_t absPartIdx, int32_t *lastPos);
diff -r 2ab39c2dd50f -r f3106abb88b2 source/Lib/TLibEncoder/TEncSearch.cpp
--- a/source/Lib/TLibEncoder/TEncSearch.cpp Mon Nov 04 11:40:49 2013 +0530
+++ b/source/Lib/TLibEncoder/TEncSearch.cpp Mon Nov 04 18:35:58 2013 -0600
@@ -2773,7 +2773,7 @@ void TEncSearch::xSetSearchRange(TComDat
* \returns void
*/
void TEncSearch::encodeResAndCalcRdInterCU(TComDataCU* cu, TComYuv* fencYuv, TComYuv* predYuv, TShortYUV* outResiYuv,
- TShortYUV* outBestResiYuv, TComYuv* outReconYuv, bool bSkipRes)
+ TShortYUV* outBestResiYuv, TComYuv* outReconYuv, bool bSkipRes, bool curUseRDOQ)
{
if (cu->isIntra(0))
{
@@ -2854,7 +2854,7 @@ void TEncSearch::encodeResAndCalcRdInter
m_rdGoOnSbacCoder->load(m_rdSbacCoders[cu->getDepth(0)][CI_CURR_BEST]);
uint32_t zeroDistortion = 0;
- xEstimateResidualQT(cu, 0, 0, outResiYuv, cu->getDepth(0), cost, bits, distortion, &zeroDistortion);
+ xEstimateResidualQT(cu, 0, 0, outResiYuv, cu->getDepth(0), cost, bits, distortion, &zeroDistortion, curUseRDOQ);
m_entropyCoder->resetBits();
m_entropyCoder->encodeQtRootCbfZero(cu);
@@ -2939,15 +2939,16 @@ void TEncSearch::encodeResAndCalcRdInter
#pragma warning(disable: 4701) // potentially uninitialized local variable
#endif
-void TEncSearch::xEstimateResidualQT(TComDataCU* cu,
- uint32_t absPartIdx,
- uint32_t absTUPartIdx,
- TShortYUV* resiYuv,
- const uint32_t depth,
- UInt64 & rdCost,
- uint32_t & outBits,
- uint32_t & outDist,
- uint32_t * outZeroDist)
+void TEncSearch::xEstimateResidualQT(TComDataCU* cu,
+ uint32_t absPartIdx,
+ uint32_t absTUPartIdx,
+ TShortYUV* resiYuv,
+ const uint32_t depth,
+ UInt64 & rdCost,
+ uint32_t & outBits,
+ uint32_t & outDist,
+ uint32_t * outZeroDist,
+ bool curuseRDOQ)
{
assert(cu->getDepth(0) == cu->getDepth(absPartIdx));
const uint32_t trMode = depth - cu->getDepth(0);
@@ -3014,7 +3015,7 @@ void TEncSearch::xEstimateResidualQT(TCo
cu->setTransformSkipSubParts(0, TEXT_CHROMA_V, absPartIdx, cu->getDepth(0) + trModeC);
}
- if (m_cfg->param.bEnableRDOQ)
+ if (m_cfg->param.bEnableRDOQ && curuseRDOQ)
{
m_entropyCoder->estimateBit(m_trQuant->m_estBitsSbac, trWidth, trHeight, TEXT_LUMA);
}
@@ -3023,13 +3024,13 @@ void TEncSearch::xEstimateResidualQT(TCo
m_trQuant->selectLambda(TEXT_LUMA);
absSumY = m_trQuant->transformNxN(cu, resiYuv->getLumaAddr(absTUPartIdx), resiYuv->m_width, coeffCurY,
- trWidth, trHeight, TEXT_LUMA, absPartIdx, &lastPosY);
+ trWidth, trHeight, TEXT_LUMA, absPartIdx, &lastPosY, false, curuseRDOQ);
cu->setCbfSubParts(absSumY ? setCbf : 0, TEXT_LUMA, absPartIdx, depth);
if (bCodeChroma)
{
- if (m_cfg->param.bEnableRDOQ)
+ if (m_cfg->param.bEnableRDOQ && curuseRDOQ)
{
m_entropyCoder->estimateBit(m_trQuant->m_estBitsSbac, trWidthC, trHeightC, TEXT_CHROMA);
}
@@ -3040,12 +3041,12 @@ void TEncSearch::xEstimateResidualQT(TCo
m_trQuant->selectLambda(TEXT_CHROMA);
absSumU = m_trQuant->transformNxN(cu, resiYuv->getCbAddr(absTUPartIdxC), resiYuv->m_cwidth, coeffCurU,
- trWidthC, trHeightC, TEXT_CHROMA_U, absPartIdx, &lastPosU);
+ trWidthC, trHeightC, TEXT_CHROMA_U, absPartIdx, &lastPosU, false, curuseRDOQ);
curChromaQpOffset = cu->getSlice()->getPPS()->getChromaCrQpOffset() + cu->getSlice()->getSliceQpDeltaCr();
m_trQuant->setQPforQuant(cu->getQP(0), TEXT_CHROMA, cu->getSlice()->getSPS()->getQpBDOffsetC(), curChromaQpOffset);
absSumV = m_trQuant->transformNxN(cu, resiYuv->getCrAddr(absTUPartIdxC), resiYuv->m_cwidth, coeffCurV,
- trWidthC, trHeightC, TEXT_CHROMA_V, absPartIdx, &lastPosV);
+ trWidthC, trHeightC, TEXT_CHROMA_V, absPartIdx, &lastPosV, false, curuseRDOQ);
cu->setCbfSubParts(absSumU ? setCbf : 0, TEXT_CHROMA_U, absPartIdx, cu->getDepth(0) + trModeC);
cu->setCbfSubParts(absSumV ? setCbf : 0, TEXT_CHROMA_V, absPartIdx, cu->getDepth(0) + trModeC);
@@ -3318,7 +3319,7 @@ void TEncSearch::xEstimateResidualQT(TCo
m_trQuant->selectLambda(TEXT_LUMA);
absSumTransformSkipY = m_trQuant->transformNxN(cu, resiYuv->getLumaAddr(absTUPartIdx), resiYuv->m_width, coeffCurY,
- trWidth, trHeight, TEXT_LUMA, absPartIdx, &lastPosTransformSkipY, true);
+ trWidth, trHeight, TEXT_LUMA, absPartIdx, &lastPosTransformSkipY, true, curuseRDOQ);
cu->setCbfSubParts(absSumTransformSkipY ? setCbf : 0, TEXT_LUMA, absPartIdx, depth);
if (absSumTransformSkipY != 0)
@@ -3398,11 +3399,11 @@ void TEncSearch::xEstimateResidualQT(TCo
m_trQuant->selectLambda(TEXT_CHROMA);
absSumTransformSkipU = m_trQuant->transformNxN(cu, resiYuv->getCbAddr(absTUPartIdxC), resiYuv->m_cwidth, coeffCurU,
- trWidthC, trHeightC, TEXT_CHROMA_U, absPartIdx, &lastPosTransformSkipU, true);
+ trWidthC, trHeightC, TEXT_CHROMA_U, absPartIdx, &lastPosTransformSkipU, true, curuseRDOQ);
curChromaQpOffset = cu->getSlice()->getPPS()->getChromaCrQpOffset() + cu->getSlice()->getSliceQpDeltaCr();
m_trQuant->setQPforQuant(cu->getQP(0), TEXT_CHROMA, cu->getSlice()->getSPS()->getQpBDOffsetC(), curChromaQpOffset);
absSumTransformSkipV = m_trQuant->transformNxN(cu, resiYuv->getCrAddr(absTUPartIdxC), resiYuv->m_cwidth, coeffCurV,
- trWidthC, trHeightC, TEXT_CHROMA_V, absPartIdx, &lastPosTransformSkipV, true);
+ trWidthC, trHeightC, TEXT_CHROMA_V, absPartIdx, &lastPosTransformSkipV, true, curuseRDOQ);
cu->setCbfSubParts(absSumTransformSkipU ? setCbf : 0, TEXT_CHROMA_U, absPartIdx, cu->getDepth(0) + trModeC);
cu->setCbfSubParts(absSumTransformSkipV ? setCbf : 0, TEXT_CHROMA_V, absPartIdx, cu->getDepth(0) + trModeC);
diff -r 2ab39c2dd50f -r f3106abb88b2 source/Lib/TLibEncoder/TEncSearch.h
--- a/source/Lib/TLibEncoder/TEncSearch.h Mon Nov 04 11:40:49 2013 +0530
+++ b/source/Lib/TLibEncoder/TEncSearch.h Mon Nov 04 18:35:58 2013 -0600
@@ -147,7 +147,7 @@ public:
/// encode residual and compute rd-cost for inter mode
void encodeResAndCalcRdInterCU(TComDataCU* cu, TComYuv* fencYuv, TComYuv* predYuv, TShortYUV* resiYuv, TShortYUV* bestResiYuv,
- TComYuv* reconYuv, bool bSkipRes);
+ TComYuv* reconYuv, bool bSkipRes, bool curUseRDOQ = true);
/// set ME search range
void setAdaptiveSearchRange(int dir, int refIdx, int merange) { m_adaptiveRange[dir][refIdx] = merange; }
@@ -235,7 +235,7 @@ protected:
void xEncodeResidualQT(TComDataCU* cu, uint32_t absPartIdx, uint32_t depth, bool bSubdivAndCbf, TextType ttype);
void xEstimateResidualQT(TComDataCU* cu, uint32_t absPartIdx, uint32_t absTUPartIdx, TShortYUV* resiYuv, uint32_t depth,
- UInt64 &rdCost, uint32_t &outBits, uint32_t &outDist, uint32_t *puiZeroDist);
+ UInt64 &rdCost, uint32_t &outBits, uint32_t &outDist, uint32_t *puiZeroDist, bool curUseRDOQ = true);
void xSetResidualQTData(TComDataCU* cu, uint32_t absPartIdx, uint32_t absTUPartIdx, TShortYUV* resiYuv, uint32_t depth, bool bSpatial);
void setWpScalingDistParam(TComDataCU* cu, int refIdx, int picList);
diff -r 2ab39c2dd50f -r f3106abb88b2 source/common/CMakeLists.txt
--- a/source/common/CMakeLists.txt Mon Nov 04 11:40:49 2013 +0530
+++ b/source/common/CMakeLists.txt Mon Nov 04 18:35:58 2013 -0600
@@ -122,7 +122,7 @@ endif(ENABLE_PRIMITIVES_VEC)
if(ENABLE_PRIMITIVES_ASM)
set(C_SRCS asm-primitives.cpp pixel.h mc.h ipfilter8.h)
- set(A_SRCS pixel-a.asm const-a.asm cpu-a.asm sad-a.asm mc-a.asm mc-a2.asm ipfilter8.asm pixel-util.asm)
+ set(A_SRCS pixel-a.asm const-a.asm cpu-a.asm sad-a.asm mc-a.asm mc-a2.asm ipfilter8.asm pixel-util.asm blockcopy8.asm)
if (NOT X64)
set(A_SRCS ${A_SRCS} pixel-32.asm)
endif()
diff -r 2ab39c2dd50f -r f3106abb88b2 source/common/lowres.cpp
--- a/source/common/lowres.cpp Mon Nov 04 11:40:49 2013 +0530
+++ b/source/common/lowres.cpp Mon Nov 04 18:35:58 2013 -0600
@@ -47,9 +47,9 @@ void Lowres::create(TComPic *pic, int bf
if (*aqMode)
{
- m_qpAqOffset = (double*)x265_malloc(sizeof(double) * cuCount);
- m_invQscaleFactor = (int*)x265_malloc(sizeof(int) * cuCount);
- if (!m_qpAqOffset || !m_invQscaleFactor)
+ qpAqOffset = (double*)x265_malloc(sizeof(double) * cuCount);
+ invQscaleFactor = (int*)x265_malloc(sizeof(int) * cuCount);
+ if (!qpAqOffset || !invQscaleFactor)
*aqMode = 0;
}
@@ -110,8 +110,8 @@ void Lowres::destroy(int bframes)
X265_FREE(lowresMvCosts[0][i]);
X265_FREE(lowresMvCosts[1][i]);
}
- X265_FREE(m_qpAqOffset);
- X265_FREE(m_invQscaleFactor);
+ X265_FREE(qpAqOffset);
+ X265_FREE(invQscaleFactor);
}
// (re) initialize lowres state
@@ -127,7 +127,7 @@ void Lowres::init(TComPicYuv *orig, int
satdCost = -1;
memset(costEst, -1, sizeof(costEst));
- if (m_qpAqOffset && m_invQscaleFactor)
+ if (qpAqOffset && invQscaleFactor)
memset(costEstAq, -1, sizeof(costEstAq));
for (int y = 0; y < bframes + 2; y++)
diff -r 2ab39c2dd50f -r f3106abb88b2 source/common/lowres.h
--- a/source/common/lowres.h Mon Nov 04 11:40:49 2013 +0530
+++ b/source/common/lowres.h Mon Nov 04 18:35:58 2013 -0600
@@ -35,15 +35,15 @@ struct Lowres : public ReferencePlanes
{
/* lowres buffers, sizes and strides */
pixel *buffer[4];
- double *m_qpAqOffset; // qp Aq offset values for each Cu
- int* m_invQscaleFactor; // qScale values for qp Aq Offsets
+ double *qpAqOffset; // qp Aq offset values for each Cu
+ int *invQscaleFactor; // qScale values for qp Aq Offsets
int width; // width of lowres frame in pixels
int lines; // height of lowres frame in pixel lines
int frameNum; // Presentation frame number
int sliceType; // Slice type decided by lookahead
int leadingBframes; // number of leading B frames for P or I
- uint64_t m_wp_ssd[3]; // This is different than m_SSDY, this is sum(pixel^2) - sum(pixel)^2 for entire frame
- uint64_t m_wp_sum[3];
+ uint64_t wp_ssd[3]; // This is different than m_SSDY, this is sum(pixel^2) - sum(pixel)^2 for entire frame
+ uint64_t wp_sum[3];
bool bIntraCalculated;
bool bScenecut; // Set to false if the frame cannot possibly be part of a real scenecut.
diff -r 2ab39c2dd50f -r f3106abb88b2 source/common/pixel.cpp
--- a/source/common/pixel.cpp Mon Nov 04 11:40:49 2013 +0530
+++ b/source/common/pixel.cpp Mon Nov 04 18:35:58 2013 -0600
@@ -773,6 +773,21 @@ void blockcopy_pp_c(pixel *a, intptr_t s
b += strideb;
}
}
+
+template<int bx, int by>
+void blockcopy_ps_c(pixel *a, intptr_t stridea, int16_t *b, intptr_t strideb)
+{
+ for (int y = 0; y < by; y++)
+ {
More information about the x265-commits
mailing list