[x265-commits] [x265] YUV output: correct a rext merge issue

Deepthi Nandakumar deepthi at multicorewareinc.com
Wed Nov 6 23:42:27 CET 2013


details:   http://hg.videolan.org/x265/rev/dd8510d84b5a
branches:  
changeset: 4883:dd8510d84b5a
user:      Deepthi Nandakumar <deepthi at multicorewareinc.com>
date:      Wed Nov 06 15:20:10 2013 +0530
description:
YUV output: correct a rext merge issue
Subject: [x265] YUV Output: more rext merge bugs

details:   http://hg.videolan.org/x265/rev/b2068453b55b
branches:  
changeset: 4884:b2068453b55b
user:      Deepthi Nandakumar <deepthi at multicorewareinc.com>
date:      Wed Nov 06 15:42:48 2013 +0530
description:
YUV Output: more rext merge bugs
Subject: [x265] Merge

details:   http://hg.videolan.org/x265/rev/21e08cf159c5
branches:  
changeset: 4885:21e08cf159c5
user:      Deepthi Nandakumar <deepthi at multicorewareinc.com>
date:      Wed Nov 06 15:43:19 2013 +0530
description:
Merge
Subject: [x265] asm: routines for luma hps filter functions for all block sizes.

details:   http://hg.videolan.org/x265/rev/01d97a51d37d
branches:  
changeset: 4886:01d97a51d37d
user:      Nabajit Deka
date:      Wed Nov 06 15:42:33 2013 +0530
description:
asm: routines for luma hps filter functions for all block sizes.
Subject: [x265] Adding asm function declaration and function pointer initializations for luma hps functions.

details:   http://hg.videolan.org/x265/rev/450947d76251
branches:  
changeset: 4887:450947d76251
user:      Nabajit Deka
date:      Wed Nov 06 15:46:19 2013 +0530
description:
Adding asm function declaration and function pointer initializations for luma hps functions.
Subject: [x265] asm code for blockcopy_sp, 16xN blocks

details:   http://hg.videolan.org/x265/rev/264b1458963a
branches:  
changeset: 4888:264b1458963a
user:      Praveen Tiwari
date:      Wed Nov 06 16:01:41 2013 +0530
description:
asm code for blockcopy_sp, 16xN blocks
Subject: [x265] asm code for blockcopy_sp, 24x32 block

details:   http://hg.videolan.org/x265/rev/8f71fba52d55
branches:  
changeset: 4889:8f71fba52d55
user:      Praveen Tiwari
date:      Wed Nov 06 17:02:19 2013 +0530
description:
asm code for blockcopy_sp, 24x32 block
Subject: [x265] YUV, Y4M Output: bitdepth confusion resolved

details:   http://hg.videolan.org/x265/rev/846e2c0d8478
branches:  
changeset: 4890:846e2c0d8478
user:      Deepthi Nandakumar <deepthi at multicorewareinc.com>
date:      Wed Nov 06 15:37:17 2013 +0530
description:
YUV, Y4M Output: bitdepth confusion resolved
Subject: [x265] asm: ipfilter_ss[FILTER_V_S_S_8]

details:   http://hg.videolan.org/x265/rev/de7a50155cba
branches:  
changeset: 4891:de7a50155cba
user:      Min Chen <chenm003 at 163.com>
date:      Wed Nov 06 19:35:33 2013 +0800
description:
asm: ipfilter_ss[FILTER_V_S_S_8]
Subject: [x265] pixel.h: nit

details:   http://hg.videolan.org/x265/rev/267b3da1a734
branches:  
changeset: 4892:267b3da1a734
user:      Steve Borho <steve at borho.org>
date:      Wed Nov 06 14:46:08 2013 -0600
description:
pixel.h: nit
Subject: [x265] TComSlice: nits

details:   http://hg.videolan.org/x265/rev/eab2d925a0e0
branches:  
changeset: 4893:eab2d925a0e0
user:      Steve Borho <steve at borho.org>
date:      Wed Nov 06 14:50:09 2013 -0600
description:
TComSlice: nits
Subject: [x265] tcomdatacu: remove the for loop in InitCU(), which will never execute

details:   http://hg.videolan.org/x265/rev/8bdb65fef0f0
branches:  
changeset: 4894:8bdb65fef0f0
user:      Gopu Govindaswamy <gopu at multicorewareinc.com>
date:      Wed Nov 06 17:10:35 2013 +0530
description:
tcomdatacu: remove the for loop in InitCU(), which will never execute

partStartIdx is always zero or negative, and the numElements is also always zero or negative
the for will never executed if numElements is zero or negative, removed the for loop block in initCU()
Subject: [x265] tcomdatacu: partStartIdx is always negative, no need to have else block in InitCU()

details:   http://hg.videolan.org/x265/rev/11a4c5a15d79
branches:  
changeset: 4895:11a4c5a15d79
user:      Gopu Govindaswamy <gopu at multicorewareinc.com>
date:      Wed Nov 06 16:22:52 2013 +0530
description:
tcomdatacu: partStartIdx is always negative, no need to have else block in InitCU()
Subject: [x265] asm code for blockcopy_sp, 32xN

details:   http://hg.videolan.org/x265/rev/6b6d54cc234e
branches:  
changeset: 4896:6b6d54cc234e
user:      Praveen Tiwari
date:      Wed Nov 06 17:25:49 2013 +0530
description:
asm code for blockcopy_sp, 32xN
Subject: [x265] asm code for blockcopy_sp, 12x16 block

details:   http://hg.videolan.org/x265/rev/99c3b2e4f1cc
branches:  
changeset: 4897:99c3b2e4f1cc
user:      Praveen Tiwari
date:      Wed Nov 06 17:42:52 2013 +0530
description:
asm code for blockcopy_sp, 12x16 block
Subject: [x265] asm code for blockcopy_sp, 2x4

details:   http://hg.videolan.org/x265/rev/ea33d0f85b8e
branches:  
changeset: 4898:ea33d0f85b8e
user:      Praveen Tiwari
date:      Wed Nov 06 19:58:21 2013 +0530
description:
asm code for blockcopy_sp, 2x4
Subject: [x265] asm code for blockcopy_sp, 2x8

details:   http://hg.videolan.org/x265/rev/529bf6093782
branches:  
changeset: 4899:529bf6093782
user:      Praveen Tiwari
date:      Wed Nov 06 20:28:15 2013 +0530
description:
asm code for blockcopy_sp, 2x8
Subject: [x265] asm code for blockcopy_sp, 6x8

details:   http://hg.videolan.org/x265/rev/2ae2eb6c8e51
branches:  
changeset: 4900:2ae2eb6c8e51
user:      Praveen Tiwari
date:      Wed Nov 06 19:31:12 2013 +0530
description:
asm code for blockcopy_sp, 6x8
Subject: [x265] used sse4 for 2x4, 2x8 and 6x8

details:   http://hg.videolan.org/x265/rev/ddaa80b9b959
branches:  
changeset: 4901:ddaa80b9b959
user:      Praveen Tiwari
date:      Wed Nov 06 20:36:25 2013 +0530
description:
used sse4 for 2x4, 2x8 and 6x8
Subject: [x265] asm code for blockcopy_sp, 32x64

details:   http://hg.videolan.org/x265/rev/1a46771b9f87
branches:  
changeset: 4902:1a46771b9f87
user:      Praveen Tiwari
date:      Wed Nov 06 20:47:52 2013 +0530
description:
asm code for blockcopy_sp, 32x64
Subject: [x265] blockcopy_sp, added 16x64 block size

details:   http://hg.videolan.org/x265/rev/598a03afc62f
branches:  
changeset: 4903:598a03afc62f
user:      Praveen Tiwari
date:      Wed Nov 06 20:51:42 2013 +0530
description:
blockcopy_sp, added 16x64 block size
Subject: [x265] asm code for blockcopy_sp, 48x64

details:   http://hg.videolan.org/x265/rev/cde21084ca9d
branches:  
changeset: 4904:cde21084ca9d
user:      Praveen Tiwari
date:      Wed Nov 06 21:01:32 2013 +0530
description:
asm code for blockcopy_sp, 48x64
Subject: [x265] blockcopy_sp, 48x64 changed the macro name according to width

details:   http://hg.videolan.org/x265/rev/d87d627b2161
branches:  
changeset: 4905:d87d627b2161
user:      Praveen Tiwari
date:      Wed Nov 06 21:06:54 2013 +0530
description:
blockcopy_sp, 48x64 changed the macro name according to width
Subject: [x265] asm code for blockcopy_sp, 64xN

details:   http://hg.videolan.org/x265/rev/f0214135645a
branches:  
changeset: 4906:f0214135645a
user:      Praveen Tiwari
date:      Wed Nov 06 21:26:48 2013 +0530
description:
asm code for blockcopy_sp, 64xN
Subject: [x265] blockcopy_sp, corrected number of xmm registers

details:   http://hg.videolan.org/x265/rev/0c359d82ebc1
branches:  
changeset: 4907:0c359d82ebc1
user:      Praveen Tiwari
date:      Wed Nov 06 21:29:32 2013 +0530
description:
blockcopy_sp, corrected number of xmm registers
Subject: [x265] asm: move _sse4 block copy function pointer assignments into SSE4 section

details:   http://hg.videolan.org/x265/rev/34d494a8051f
branches:  
changeset: 4908:34d494a8051f
user:      Steve Borho <steve at borho.org>
date:      Wed Nov 06 15:26:24 2013 -0600
description:
asm: move _sse4 block copy function pointer assignments into SSE4 section
Subject: [x265] asm: move block copy funcdefs into blockcopy8.h

details:   http://hg.videolan.org/x265/rev/edf77f60b55c
branches:  
changeset: 4909:edf77f60b55c
user:      Steve Borho <steve at borho.org>
date:      Wed Nov 06 15:30:57 2013 -0600
description:
asm: move block copy funcdefs into blockcopy8.h
Subject: [x265] asm: use new block based chroma single-pass MC primitives

details:   http://hg.videolan.org/x265/rev/8d1bd79d3618
branches:  
changeset: 4910:8d1bd79d3618
user:      Steve Borho <steve at borho.org>
date:      Wed Nov 06 16:05:59 2013 -0600
description:
asm: use new block based chroma single-pass MC primitives
Subject: [x265] asm: use new block based single-pass H-filter motion compensation primitives

details:   http://hg.videolan.org/x265/rev/dbb86150c919
branches:  
changeset: 4911:dbb86150c919
user:      Steve Borho <steve at borho.org>
date:      Wed Nov 06 16:30:44 2013 -0600
description:
asm: use new block based single-pass H-filter motion compensation primitives

diffstat:

 source/Lib/TLibCommon/TComDataCU.cpp     |   81 +--
 source/Lib/TLibCommon/TComDataCU.h       |   28 -
 source/Lib/TLibCommon/TComPrediction.cpp |   24 +-
 source/Lib/TLibCommon/TComSlice.cpp      |    2 +-
 source/Lib/TLibCommon/TComSlice.h        |   22 +-
 source/common/CMakeLists.txt             |    2 +-
 source/common/ipfilter.cpp               |   41 +-
 source/common/primitives.h               |    3 +-
 source/common/x86/asm-primitives.cpp     |   40 +
 source/common/x86/blockcopy8.asm         |  850 +++++++++++++++++++++++++++++++
 source/common/x86/blockcopy8.h           |  102 +++
 source/common/x86/ipfilter8.asm          |  306 ++++++++--
 source/common/x86/ipfilter8.h            |    2 +
 source/common/x86/pixel.h                |   70 --
 source/encoder/motion.cpp                |  277 ++++-----
 source/encoder/motion.h                  |    2 -
 source/encoder/slicetype.cpp             |    2 +-
 source/output/y4m.cpp                    |   47 +-
 source/output/yuv.cpp                    |   36 +-
 source/test/ipfilterharness.cpp          |  102 +++
 source/test/ipfilterharness.h            |    1 +
 21 files changed, 1579 insertions(+), 461 deletions(-)

diffs (truncated from 2626 to 300 lines):

diff -r bc99537483f1 -r dbb86150c919 source/Lib/TLibCommon/TComDataCU.cpp
--- a/source/Lib/TLibCommon/TComDataCU.cpp	Tue Nov 05 22:21:55 2013 -0600
+++ b/source/Lib/TLibCommon/TComDataCU.cpp	Wed Nov 06 16:30:44 2013 -0600
@@ -255,40 +255,8 @@ void TComDataCU::initCU(TComPic* pic, ui
 
     // CHECK_ME: why partStartIdx always negative
     int partStartIdx = 0 - (cuAddr) * pic->getNumPartInCU();
-
-    int numElements = std::min<int>(partStartIdx, m_numPartitions);
-    for (int i = 0; i < numElements; i++)
-    {
-        TComDataCU* from = pic->getCU(getAddr());
-        m_skipFlag[i]   = from->getSkipFlag(i);
-        m_partSizes[i] = from->getPartitionSize(i);
-        m_predModes[i] = from->getPredictionMode(i);
-        m_cuTransquantBypass[i] = from->getCUTransquantBypass(i);
-        m_depth[i] = from->getDepth(i);
-        m_width[i] = from->getWidth(i);
-        m_height[i] = from->getHeight(i);
-        m_trIdx[i] = from->getTransformIdx(i);
-        m_transformSkip[0][i] = from->getTransformSkip(i, TEXT_LUMA);
-        m_transformSkip[1][i] = from->getTransformSkip(i, TEXT_CHROMA_U);
-        m_transformSkip[2][i] = from->getTransformSkip(i, TEXT_CHROMA_V);
-        m_mvpIdx[0][i] = from->m_mvpIdx[0][i];
-        m_mvpIdx[1][i] = from->m_mvpIdx[1][i];
-        m_mvpNum[0][i] = from->m_mvpNum[0][i];
-        m_mvpNum[1][i] = from->m_mvpNum[1][i];
-        m_qp[i] = from->m_qp[i];
-        m_bMergeFlags[i] = from->m_bMergeFlags[i];
-        m_mergeIndex[i] = from->m_mergeIndex[i];
-        m_lumaIntraDir[i] = from->m_lumaIntraDir[i];
-        m_chromaIntraDir[i] = from->m_chromaIntraDir[i];
-        m_interDir[i] = from->m_interDir[i];
-        m_cbf[0][i] = from->m_cbf[0][i];
-        m_cbf[1][i] = from->m_cbf[1][i];
-        m_cbf[2][i] = from->m_cbf[2][i];
-        m_iPCMFlags[i] = from->m_iPCMFlags[i];
-    }
-
     int firstElement = std::max<int>(partStartIdx, 0);
-    numElements = m_numPartitions - firstElement;
+    int numElements = m_numPartitions - firstElement;
 
     if (numElements > 0)
     {
@@ -330,25 +298,6 @@ void TComDataCU::initCU(TComPic* pic, ui
         memset(m_iPCMSampleCb, 0, sizeof(Pel) * c_tmp);
         memset(m_iPCMSampleCr, 0, sizeof(Pel) * c_tmp);
     }
-    else
-    {
-        TComDataCU * from = pic->getCU(getAddr());
-        m_cuMvField[0].copyFrom(&from->m_cuMvField[0], m_numPartitions, 0);
-        m_cuMvField[1].copyFrom(&from->m_cuMvField[1], m_numPartitions, 0);
-        for (int i = 0; i < y_tmp; i++)
-        {
-            m_trCoeffY[i] = from->m_trCoeffY[i];
-            m_iPCMSampleY[i] = from->m_iPCMSampleY[i];
-        }
-
-        for (int i = 0; i < c_tmp; i++)
-        {
-            m_trCoeffCb[i] = from->m_trCoeffCb[i];
-            m_trCoeffCr[i] = from->m_trCoeffCr[i];
-            m_iPCMSampleCb[i] = from->m_iPCMSampleCb[i];
-            m_iPCMSampleCr[i] = from->m_iPCMSampleCr[i];
-        }
-    }
 
     // Setting neighbor CU
     m_cuLeft        = NULL;
@@ -438,16 +387,6 @@ void TComDataCU::initEstData(uint32_t de
 
     m_cuMvField[0].clearMvField();
     m_cuMvField[1].clearMvField();
-
-    uint32_t tmp = width * height;
-    memset(m_trCoeffY,    0, tmp * sizeof(*m_trCoeffY));
-    memset(m_iPCMSampleY, 0, tmp * sizeof(*m_iPCMSampleY));
-
-    tmp = (width >> m_hChromaShift) * (height >> m_vChromaShift);
-    memset(m_trCoeffCb,    0, tmp * sizeof(*m_trCoeffCb));
-    memset(m_trCoeffCr,    0, tmp * sizeof(*m_trCoeffCr));
-    memset(m_iPCMSampleCb, 0, tmp * sizeof(*m_iPCMSampleCb));
-    memset(m_iPCMSampleCr, 0, tmp * sizeof(*m_iPCMSampleCr));
 }
 
 // initialize Sub partition
@@ -513,16 +452,6 @@ void TComDataCU::initSubCU(TComDataCU* c
         m_mvpNum[1][i] = -1;
     }
 
-    uint32_t tmp = width * heigth;
-    memset(m_trCoeffY, 0, sizeof(TCoeff) * tmp);
-    memset(m_iPCMSampleY, 0, sizeof(Pel) * tmp);
-
-    tmp = (width >> m_hChromaShift) * (heigth >> m_vChromaShift);
-    memset(m_trCoeffCb, 0, sizeof(TCoeff) * tmp);
-    memset(m_trCoeffCr, 0, sizeof(TCoeff) * tmp);
-    memset(m_iPCMSampleCb, 0, sizeof(Pel) * tmp);
-    memset(m_iPCMSampleCr, 0, sizeof(Pel) * tmp);
-
     m_cuMvField[0].clearMvField();
     m_cuMvField[1].clearMvField();
 
@@ -1597,14 +1526,6 @@ void TComDataCU::setTransformSkipSubPart
     memset(m_transformSkip[g_convertTxtTypeToIdx[ttype]] + absPartIdx, useTransformSkip, sizeof(UChar) * curPartNum);
 }
 
-void TComDataCU::setSizeSubParts(uint32_t width, uint32_t height, uint32_t absPartIdx, uint32_t depth)
-{
-    uint32_t curPartNum = m_pic->getNumPartInCU() >> (depth << 1);
-
-    memset(m_width  + absPartIdx, width,  sizeof(UChar) * curPartNum);
-    memset(m_height + absPartIdx, height, sizeof(UChar) * curPartNum);
-}
-
 UChar TComDataCU::getNumPartInter()
 {
     UChar numPart = 0;
diff -r bc99537483f1 -r dbb86150c919 source/Lib/TLibCommon/TComDataCU.h
--- a/source/Lib/TLibCommon/TComDataCU.h	Tue Nov 05 22:21:55 2013 -0600
+++ b/source/Lib/TLibCommon/TComDataCU.h	Wed Nov 06 16:30:44 2013 -0600
@@ -224,8 +224,6 @@ public:
 
     UChar         getDepth(uint32_t idx)           { return m_depth[idx]; }
 
-    void          setDepth(uint32_t idx, UChar h)  { m_depth[idx] = h; }
-
     void          setDepthSubParts(uint32_t depth, uint32_t absPartIdx);
 
     // -------------------------------------------------------------------------------------------------------------------
@@ -234,12 +232,8 @@ public:
 
     char*         getPartitionSize()                      { return m_partSizes; }
 
-    int           getUnitSize()                           { return m_unitSize; }
-
     PartSize      getPartitionSize(uint32_t idx)              { return static_cast<PartSize>(m_partSizes[idx]); }
 
-    void          setPartitionSize(uint32_t idx, PartSize uh) { m_partSizes[idx] = (char)uh; }
-
     void          setPartSizeSubParts(PartSize eMode, uint32_t absPartIdx, uint32_t depth);
     void          setCUTransquantBypassSubParts(bool flag, uint32_t absPartIdx, uint32_t depth);
 
@@ -247,8 +241,6 @@ public:
 
     bool         getSkipFlag(uint32_t idx)            { return m_skipFlag[idx]; }
 
-    void         setSkipFlag(uint32_t idx, bool skip) { m_skipFlag[idx] = skip; }
-
     void         setSkipFlagSubParts(bool skip, uint32_t absPartIdx, uint32_t depth);
 
     char*         getPredictionMode()                 { return m_predModes; }
@@ -259,24 +251,16 @@ public:
 
     bool          getCUTransquantBypass(uint32_t idx)     { return m_cuTransquantBypass[idx]; }
 
-    void          setPredictionMode(uint32_t idx, PredMode uh) { m_predModes[idx] = (char)uh; }
-
     void          setPredModeSubParts(PredMode eMode, uint32_t absPartIdx, uint32_t depth);
 
     UChar*        getWidth()                     { return m_width; }
 
     UChar         getWidth(uint32_t idx)             { return m_width[idx]; }
 
-    void          setWidth(uint32_t idx, UChar  uh)  { m_width[idx] = uh; }
-
     UChar*        getHeight()                    { return m_height; }
 
     UChar         getHeight(uint32_t idx)            { return m_height[idx]; }
 
-    void          setHeight(uint32_t idx, UChar  uh) { m_height[idx] = uh; }
-
-    void          setSizeSubParts(uint32_t width, uint32_t height, uint32_t absPartIdx, uint32_t depth);
-
     char*         getQP()                        { return m_qp; }
 
     char          getQP(uint32_t idx)                { return m_qp[idx]; }
@@ -342,16 +326,12 @@ public:
 
     bool          getMergeFlag(uint32_t idx)            { return m_bMergeFlags[idx]; }
 
-    void          setMergeFlag(uint32_t idx, bool b)    { m_bMergeFlags[idx] = b; }
-
     void          setMergeFlagSubParts(bool bMergeFlag, uint32_t absPartIdx, uint32_t partIdx, uint32_t depth);
 
     UChar*        getMergeIndex()                   { return m_mergeIndex; }
 
     UChar         getMergeIndex(uint32_t idx)           { return m_mergeIndex[idx]; }
 
-    void          setMergeIndex(uint32_t idx, uint32_t mergeIndex) { m_mergeIndex[idx] = (UChar)mergeIndex; }
-
     void          setMergeIndexSubParts(uint32_t mergeIndex, uint32_t absPartIdx, uint32_t partIdx, uint32_t depth);
     template<typename T>
     void          setSubPart(T bParameter, T* pbBaseLCU, uint32_t cuAddr, uint32_t cuDepth, uint32_t puIdx);
@@ -364,24 +344,18 @@ public:
 
     UChar         getLumaIntraDir(uint32_t idx) { return m_lumaIntraDir[idx]; }
 
-    void          setLumaIntraDir(uint32_t idx, UChar uh) { m_lumaIntraDir[idx] = uh; }
-
     void          setLumaIntraDirSubParts(uint32_t dir, uint32_t absPartIdx, uint32_t depth);
 
     UChar*        getChromaIntraDir()                 { return m_chromaIntraDir; }
 
     UChar         getChromaIntraDir(uint32_t idx)         { return m_chromaIntraDir[idx]; }
 
-    void          setChromaIntraDir(uint32_t idx, UChar  uh) { m_chromaIntraDir[idx] = uh; }
-
     void          setChromIntraDirSubParts(uint32_t dir, uint32_t absPartIdx, uint32_t depth);
 
     UChar*        getInterDir()                    { return m_interDir; }
 
     UChar         getInterDir(uint32_t idx)            { return m_interDir[idx]; }
 
-    void          setInterDir(uint32_t idx, UChar  uh) { m_interDir[idx] = uh; }
-
     void          setInterDirSubParts(uint32_t dir,  uint32_t absPartIdx, uint32_t partIdx, uint32_t depth);
     bool*         getIPCMFlag()                     { return m_iPCMFlags; }
 
@@ -414,8 +388,6 @@ public:
 
     char*         getMVPIdx(int picList)                       { return m_mvpIdx[picList]; }
 
-    void          setMVPNum(int picList, uint32_t idx, int mvpNum) { m_mvpNum[picList][idx] = (char)mvpNum; }
-
     int           getMVPNum(int picList, uint32_t idx)             { return m_mvpNum[picList][idx]; }
 
     char*         getMVPNum(int picList)                       { return m_mvpNum[picList]; }
diff -r bc99537483f1 -r dbb86150c919 source/Lib/TLibCommon/TComPrediction.cpp
--- a/source/Lib/TLibCommon/TComPrediction.cpp	Tue Nov 05 22:21:55 2013 -0600
+++ b/source/Lib/TLibCommon/TComPrediction.cpp	Wed Nov 06 16:30:44 2013 -0600
@@ -476,6 +476,7 @@ void TComPrediction::xPredInterLumaBlk(T
 
     int srcStride = refPic->getStride();
     int srcOffset = (mv->x >> 2) + (mv->y >> 2) * srcStride;
+    int partEnum = partitionFromSizes(width, height);
     Pel* src = refPic->getLumaAddr(cu->getAddr(), cu->getZorderIdxInCU() + partAddr) + srcOffset;
 
     int xFrac = mv->x & 0x3;
@@ -483,11 +484,11 @@ void TComPrediction::xPredInterLumaBlk(T
 
     if ((yFrac | xFrac) == 0)
     {
-        primitives.blockcpy_pp(width, height, dst, dstStride, src, srcStride);
+        primitives.luma_copy_pp[partEnum](dst, dstStride, src, srcStride);
     }
     else if (yFrac == 0)
     {
-        primitives.ipfilter_pp[FILTER_H_P_P_8](src, srcStride, dst, dstStride, width, height, g_lumaFilter[xFrac]);
+        primitives.luma_hpp[partEnum](src, srcStride, dst, dstStride, xFrac);
     }
     else if (xFrac == 0)
     {
@@ -537,7 +538,7 @@ void TComPrediction::xPredInterLumaBlk(T
         int filterSize = NTAPS_LUMA;
         int halfFilterSize = (filterSize >> 1);
         primitives.ipfilter_ps[FILTER_H_P_S_8](ref - (halfFilterSize - 1) * refStride, refStride, m_immedVals, tmpStride, width, height + filterSize - 1, g_lumaFilter[xFrac]);
-        primitives.ipfilter_ss[FILTER_V_S_S_8](m_immedVals + (halfFilterSize - 1) * tmpStride, tmpStride, dst, dstStride, width, height, g_lumaFilter[yFrac]);
+        primitives.ipfilter_ss[FILTER_V_S_S_8](m_immedVals + (halfFilterSize - 1) * tmpStride, tmpStride, dst, dstStride, width, height, yFrac);
     }
 }
 
@@ -568,23 +569,24 @@ void TComPrediction::xPredInterChromaBlk
 
     int xFrac = mv->x & 0x7;
     int yFrac = mv->y & 0x7;
+    int partEnum = partitionFromSizes(width, height);
     uint32_t cxWidth = width >> 1;
     uint32_t cxHeight = height >> 1;
 
     if ((yFrac | xFrac) == 0)
     {
-        primitives.blockcpy_pp(cxWidth, cxHeight, dstCb, dstStride, refCb, refStride);
-        primitives.blockcpy_pp(cxWidth, cxHeight, dstCr, dstStride, refCr, refStride);
+        primitives.chroma_copy_pp[partEnum](dstCb, dstStride, refCb, refStride);
+        primitives.chroma_copy_pp[partEnum](dstCr, dstStride, refCr, refStride);
     }
     else if (yFrac == 0)
     {
-        primitives.ipfilter_pp[FILTER_H_P_P_4](refCb, refStride, dstCb, dstStride, cxWidth, cxHeight, g_chromaFilter[xFrac]);
-        primitives.ipfilter_pp[FILTER_H_P_P_4](refCr, refStride, dstCr, dstStride, cxWidth, cxHeight, g_chromaFilter[xFrac]);
+        primitives.chroma_hpp[partEnum](refCb, refStride, dstCb, dstStride, xFrac);
+        primitives.chroma_hpp[partEnum](refCr, refStride, dstCr, dstStride, xFrac);
     }
     else if (xFrac == 0)
     {
-        primitives.ipfilter_pp[FILTER_V_P_P_4](refCb, refStride, dstCb, dstStride, cxWidth, cxHeight, g_chromaFilter[yFrac]);
-        primitives.ipfilter_pp[FILTER_V_P_P_4](refCr, refStride, dstCr, dstStride, cxWidth, cxHeight, g_chromaFilter[yFrac]);
+        primitives.chroma_vpp[partEnum](refCb, refStride, dstCb, dstStride, yFrac);
+        primitives.chroma_vpp[partEnum](refCr, refStride, dstCr, dstStride, yFrac);
     }
     else
     {
@@ -643,9 +645,9 @@ void TComPrediction::xPredInterChromaBlk
         int filterSize = NTAPS_CHROMA;
         int halfFilterSize = (filterSize >> 1);
         primitives.ipfilter_ps[FILTER_H_P_S_4](refCb - (halfFilterSize - 1) * refStride, refStride, m_immedVals, extStride, cxWidth, cxHeight + filterSize - 1, g_chromaFilter[xFrac]);
-        primitives.ipfilter_ss[FILTER_V_S_S_4](m_immedVals + (halfFilterSize - 1) * extStride, extStride, dstCb, dstStride, cxWidth, cxHeight, g_chromaFilter[yFrac]);


More information about the x265-commits mailing list