[x265-commits] [x265] framefilter: use unsigned 32bit ints consistently to avoi...

Steve Borho steve at borho.org
Sat Jan 17 15:23:33 CET 2015


details:   http://hg.videolan.org/x265/rev/f08bd63864ff
branches:  
changeset: 9160:f08bd63864ff
user:      Steve Borho <steve at borho.org>
date:      Wed Jan 14 17:15:58 2015 +0530
description:
framefilter: use unsigned 32bit ints consistently to avoid gcc warnings
Subject: [x265] all_angs_pred_8x8: optimize mov instruction

details:   http://hg.videolan.org/x265/rev/9d26082ca7b3
branches:  
changeset: 9161:9d26082ca7b3
user:      Praveen Tiwari
date:      Wed Jan 14 15:58:21 2015 +0530
description:
all_angs_pred_8x8: optimize mov instruction
Subject: [x265] fix lossless

details:   http://hg.videolan.org/x265/rev/23c7143cecf6
branches:  
changeset: 9162:23c7143cecf6
user:      Satoshi Nakagawa <nakagawa424 at oki.com>
date:      Wed Jan 14 21:10:27 2015 +0900
description:
fix lossless
Subject: [x265] cli: move option tables and help functions into x265cli.h

details:   http://hg.videolan.org/x265/rev/f9a54da18713
branches:  
changeset: 9163:f9a54da18713
user:      Steve Borho <steve at borho.org>
date:      Thu Jan 15 11:49:26 2015 +0530
description:
cli: move option tables and help functions into x265cli.h

this makes the command line interface more portable
Subject: [x265] primitives: reorder header for better clarity

details:   http://hg.videolan.org/x265/rev/c6a0e5470c49
branches:  
changeset: 9164:c6a0e5470c49
user:      Steve Borho <steve at borho.org>
date:      Sat Jan 17 08:49:22 2015 +0530
description:
primitives: reorder header for better clarity
Subject: [x265] mbdstharness: use NUM_TR_SIZE, reintroduce speed tests for dst/idst4x4

details:   http://hg.videolan.org/x265/rev/65e71f08c55a
branches:  
changeset: 9165:65e71f08c55a
user:      Steve Borho <steve at borho.org>
date:      Sat Jan 17 10:12:34 2015 +0530
description:
mbdstharness: use NUM_TR_SIZE, reintroduce speed tests for dst/idst4x4

and white-space nits
Subject: [x265] primitives: consistent naming of chroma macros, cleanup asm-primitives.cpp

details:   http://hg.videolan.org/x265/rev/87fec2dec3c5
branches:  
changeset: 9166:87fec2dec3c5
user:      Steve Borho <steve at borho.org>
date:      Sat Jan 17 11:33:35 2015 +0530
description:
primitives: consistent naming of chroma macros, cleanup asm-primitives.cpp

"A foolish consistency is the hobgoblin of little minds" - RWE
Subject: [x265] asm: introduce helper macros to unify function sets

details:   http://hg.videolan.org/x265/rev/3c6382ba17c8
branches:  
changeset: 9167:3c6382ba17c8
user:      Steve Borho <steve at borho.org>
date:      Sat Jan 17 12:44:28 2015 +0530
description:
asm: introduce helper macros to unify function sets
Subject: [x265] asm: chroma all-block macros, remove large amounts of redundancy

details:   http://hg.videolan.org/x265/rev/064add949946
branches:  
changeset: 9168:064add949946
user:      Steve Borho <steve at borho.org>
date:      Sat Jan 17 14:40:41 2015 +0530
description:
asm: chroma all-block macros, remove large amounts of redundancy
Subject: [x265] asm: cleanup AVC oriented macros

details:   http://hg.videolan.org/x265/rev/c67aadfb6f80
branches:  
changeset: 9169:c67aadfb6f80
user:      Steve Borho <steve at borho.org>
date:      Sat Jan 17 15:05:20 2015 +0530
description:
asm: cleanup AVC oriented macros
Subject: [x265] asm: new ALL_LUMA_BLOCKS for all square blocks, TU or CU

details:   http://hg.videolan.org/x265/rev/1a28acde41b4
branches:  
changeset: 9170:1a28acde41b4
user:      Steve Borho <steve at borho.org>
date:      Sat Jan 17 15:15:55 2015 +0530
description:
asm: new ALL_LUMA_BLOCKS for all square blocks, TU or CU
Subject: [x265] asm: move template into x265 namespace

details:   http://hg.videolan.org/x265/rev/ff7f88dae2e8
branches:  
changeset: 9171:ff7f88dae2e8
user:      Steve Borho <steve at borho.org>
date:      Sat Jan 17 15:20:43 2015 +0530
description:
asm: move template into x265 namespace
Subject: [x265] primitives: move intra pred functions into CU for improved cache coherency

details:   http://hg.videolan.org/x265/rev/bf128e92a119
branches:  
changeset: 9172:bf128e92a119
user:      Steve Borho <steve at borho.org>
date:      Sat Jan 17 15:57:13 2015 +0530
description:
primitives: move intra pred functions into CU for improved cache coherency
Subject: [x265] asm: remove _ from ALL_LUMA_TU_TYPED_S to allow more users

details:   http://hg.videolan.org/x265/rev/50674be3e441
branches:  
changeset: 9173:50674be3e441
user:      Steve Borho <steve at borho.org>
date:      Sat Jan 17 16:14:15 2015 +0530
description:
asm: remove _ from ALL_LUMA_TU_TYPED_S to allow more users
Subject: [x265] pixel: consistent naming of blockfill functions

details:   http://hg.videolan.org/x265/rev/b43ef6db6fff
branches:  
changeset: 9174:b43ef6db6fff
user:      Steve Borho <steve at borho.org>
date:      Sat Jan 17 17:12:26 2015 +0530
description:
pixel: consistent naming of blockfill functions
Subject: [x265] asm: pickup missing primitives

details:   http://hg.videolan.org/x265/rev/ae3ab90ea325
branches:  
changeset: 9175:ae3ab90ea325
user:      Steve Borho <steve at borho.org>
date:      Sat Jan 17 17:12:08 2015 +0530
description:
asm: pickup missing primitives

We often were not using the most optimized version of each primitive, especially
in Main10 encodes.
Subject: [x265] more use CUGeom

details:   http://hg.videolan.org/x265/rev/d8d13f2e2095
branches:  
changeset: 9176:d8d13f2e2095
user:      Satoshi Nakagawa <nakagawa424 at oki.com>
date:      Sat Jan 17 18:32:52 2015 +0900
description:
more use CUGeom

diffstat:

 source/common/cudata.cpp             |    60 +-
 source/common/deblock.cpp            |    58 +-
 source/common/deblock.h              |    13 +-
 source/common/intrapred.cpp          |    32 +-
 source/common/ipfilter.cpp           |    24 +-
 source/common/pixel.cpp              |   140 +-
 source/common/predict.cpp            |     4 +-
 source/common/primitives.cpp         |    80 +-
 source/common/primitives.h           |    86 +-
 source/common/x86/asm-primitives.cpp |  2061 ++++++++++++---------------------
 source/common/x86/intrapred8.asm     |    38 +-
 source/common/x86/ipfilter8.h        |   426 +++---
 source/common/x86/pixel-util.h       |    22 +-
 source/encoder/framefilter.cpp       |    81 +-
 source/encoder/framefilter.h         |     3 +-
 source/encoder/search.cpp            |   228 +--
 source/encoder/search.h              |     7 +-
 source/encoder/slicetype.cpp         |    10 +-
 source/test/intrapredharness.cpp     |   169 +-
 source/test/intrapredharness.h       |     4 +-
 source/test/mbdstharness.cpp         |    29 +-
 source/x265.cpp                      |   350 +-----
 source/x265cli.h                     |   387 ++++++
 23 files changed, 1878 insertions(+), 2434 deletions(-)

diffs (truncated from 5924 to 300 lines):

diff -r 7ad510c96fea -r d8d13f2e2095 source/common/cudata.cpp
--- a/source/common/cudata.cpp	Wed Jan 14 12:06:54 2015 +0530
+++ b/source/common/cudata.cpp	Sat Jan 17 18:32:52 2015 +0900
@@ -57,51 +57,51 @@ void copy256(uint8_t* dst, uint8_t* src)
 void bcast256(uint8_t* dst, uint8_t val) { memset(dst, val, 256); }
 
 /* Check whether 2 addresses point to the same column */
-inline bool isEqualCol(int addrA, int addrB, int numUnitsPerRow)
+inline bool isEqualCol(int addrA, int addrB, int numUnits)
 {
-    // addrA % numUnitsPerRow == addrB % numUnitsPerRow
-    return ((addrA ^ addrB) &  (numUnitsPerRow - 1)) == 0;
+    // addrA % numUnits == addrB % numUnits
+    return ((addrA ^ addrB) &  (numUnits - 1)) == 0;
 }
 
 /* Check whether 2 addresses point to the same row */
-inline bool isEqualRow(int addrA, int addrB, int numUnitsPerRow)
+inline bool isEqualRow(int addrA, int addrB, int numUnits)
 {
-    // addrA / numUnitsPerRow == addrB / numUnitsPerRow
-    return ((addrA ^ addrB) & ~(numUnitsPerRow - 1)) == 0;
+    // addrA / numUnits == addrB / numUnits
+    return ((addrA ^ addrB) & ~(numUnits - 1)) == 0;
 }
 
 /* Check whether 2 addresses point to the same row or column */
-inline bool isEqualRowOrCol(int addrA, int addrB, int numUnitsPerRow)
+inline bool isEqualRowOrCol(int addrA, int addrB, int numUnits)
 {
-    return isEqualCol(addrA, addrB, numUnitsPerRow) | isEqualRow(addrA, addrB, numUnitsPerRow);
+    return isEqualCol(addrA, addrB, numUnits) | isEqualRow(addrA, addrB, numUnits);
 }
 
 /* Check whether one address points to the first column */
-inline bool isZeroCol(int addr, int numUnitsPerRow)
+inline bool isZeroCol(int addr, int numUnits)
 {
-    // addr % numUnitsPerRow == 0
-    return (addr & (numUnitsPerRow - 1)) == 0;
+    // addr % numUnits == 0
+    return (addr & (numUnits - 1)) == 0;
 }
 
 /* Check whether one address points to the first row */
-inline bool isZeroRow(int addr, int numUnitsPerRow)
+inline bool isZeroRow(int addr, int numUnits)
 {
-    // addr / numUnitsPerRow == 0
-    return (addr & ~(numUnitsPerRow - 1)) == 0;
+    // addr / numUnits == 0
+    return (addr & ~(numUnits - 1)) == 0;
 }
 
 /* Check whether one address points to a column whose index is smaller than a given value */
-inline bool lessThanCol(int addr, int val, int numUnitsPerRow)
+inline bool lessThanCol(int addr, int val, int numUnits)
 {
-    // addr % numUnitsPerRow < val
-    return (addr & (numUnitsPerRow - 1)) < val;
+    // addr % numUnits < val
+    return (addr & (numUnits - 1)) < val;
 }
 
 /* Check whether one address points to a row whose index is smaller than a given value */
-inline bool lessThanRow(int addr, int val, int numUnitsPerRow)
+inline bool lessThanRow(int addr, int val, int numUnits)
 {
-    // addr / numUnitsPerRow < val
-    return addr < val * numUnitsPerRow;
+    // addr / numUnits < val
+    return addr < val * numUnits;
 }
 
 inline MV scaleMv(MV mv, int scale)
@@ -1533,17 +1533,17 @@ uint32_t CUData::getInterMergeCandidates
             m_encData->getPicCTU(m_cuAddr)->m_cuPelY + g_zscanToPelY[partIdxRB] + UNIT_SIZE < m_slice->m_sps->picHeightInLumaSamples)
         {
             uint32_t absPartIdxRB = g_zscanToRaster[partIdxRB];
-            uint32_t numPartInCUSize = s_numPartInCUSize;
-            bool bNotLastCol = lessThanCol(absPartIdxRB, numPartInCUSize - 1, numPartInCUSize); // is not at the last column of CTU
-            bool bNotLastRow = lessThanRow(absPartIdxRB, numPartInCUSize - 1, numPartInCUSize); // is not at the last row    of CTU
+            uint32_t numUnits = s_numPartInCUSize;
+            bool bNotLastCol = lessThanCol(absPartIdxRB, numUnits - 1, numUnits); // is not at the last column of CTU
+            bool bNotLastRow = lessThanRow(absPartIdxRB, numUnits - 1, numUnits); // is not at the last row    of CTU
 
             if (bNotLastCol && bNotLastRow)
             {
-                absPartAddr = g_rasterToZscan[absPartIdxRB + numPartInCUSize + 1];
+                absPartAddr = g_rasterToZscan[absPartIdxRB + numUnits + 1];
                 ctuIdx = m_cuAddr;
             }
             else if (bNotLastCol)
-                absPartAddr = g_rasterToZscan[(absPartIdxRB + numPartInCUSize + 1) & (numPartInCUSize - 1)];
+                absPartAddr = g_rasterToZscan[(absPartIdxRB + numUnits + 1) & (numUnits - 1)];
             else if (bNotLastRow)
             {
                 absPartAddr = g_rasterToZscan[absPartIdxRB + 1];
@@ -1760,17 +1760,17 @@ int CUData::fillMvpCand(uint32_t puIdx, 
             m_encData->getPicCTU(m_cuAddr)->m_cuPelY + g_zscanToPelY[partIdxRB] + UNIT_SIZE < m_slice->m_sps->picHeightInLumaSamples)
         {
             uint32_t absPartIdxRB = g_zscanToRaster[partIdxRB];
-            uint32_t numPartInCUSize = s_numPartInCUSize;
-            bool bNotLastCol = lessThanCol(absPartIdxRB, numPartInCUSize - 1, numPartInCUSize); // is not at the last column of CTU
-            bool bNotLastRow = lessThanRow(absPartIdxRB, numPartInCUSize - 1, numPartInCUSize); // is not at the last row    of CTU
+            uint32_t numUnits = s_numPartInCUSize;
+            bool bNotLastCol = lessThanCol(absPartIdxRB, numUnits - 1, numUnits); // is not at the last column of CTU
+            bool bNotLastRow = lessThanRow(absPartIdxRB, numUnits - 1, numUnits); // is not at the last row    of CTU
 
             if (bNotLastCol && bNotLastRow)
             {
-                absPartAddr = g_rasterToZscan[absPartIdxRB + numPartInCUSize + 1];
+                absPartAddr = g_rasterToZscan[absPartIdxRB + numUnits + 1];
                 ctuIdx = m_cuAddr;
             }
             else if (bNotLastCol)
-                absPartAddr = g_rasterToZscan[(absPartIdxRB + numPartInCUSize + 1) & (numPartInCUSize - 1)];
+                absPartAddr = g_rasterToZscan[(absPartIdxRB + numUnits + 1) & (numUnits - 1)];
             else if (bNotLastRow)
             {
                 absPartAddr = g_rasterToZscan[absPartIdxRB + 1];
diff -r 7ad510c96fea -r d8d13f2e2095 source/common/deblock.cpp
--- a/source/common/deblock.cpp	Wed Jan 14 12:06:54 2015 +0530
+++ b/source/common/deblock.cpp	Sat Jan 17 18:32:52 2015 +0900
@@ -33,13 +33,13 @@ using namespace x265;
 #define DEBLOCK_SMALLEST_BLOCK  8
 #define DEFAULT_INTRA_TC_OFFSET 2
 
-void Deblock::deblockCTU(const CUData* ctu, int32_t dir)
+void Deblock::deblockCTU(const CUData* ctu, const CUGeom& cuGeom, int32_t dir)
 {
     uint8_t blockStrength[MAX_NUM_PARTITIONS];
 
-    memset(blockStrength, 0, sizeof(uint8_t) * m_numPartitions);
+    memset(blockStrength, 0, sizeof(uint8_t) * cuGeom.numPartitions);
 
-    deblockCU(ctu, 0, 0, dir, blockStrength);
+    deblockCU(ctu, cuGeom, dir, blockStrength);
 }
 
 static inline uint8_t bsCuEdge(const CUData* cu, uint32_t absPartIdx, int32_t dir)
@@ -68,32 +68,31 @@ static inline uint8_t bsCuEdge(const CUD
 
 /* Deblocking filter process in CU-based (the same function as conventional's)
  * param Edge the direction of the edge in block boundary (horizonta/vertical), which is added newly */
-void Deblock::deblockCU(const CUData* cu, uint32_t absPartIdx, uint32_t depth, const int32_t dir, uint8_t blockStrength[])
+void Deblock::deblockCU(const CUData* cu, const CUGeom& cuGeom, const int32_t dir, uint8_t blockStrength[])
 {
+    uint32_t absPartIdx = cuGeom.encodeIdx;
+    uint32_t depth = cuGeom.depth;
     if (cu->m_predMode[absPartIdx] == MODE_NONE)
         return;
 
-    uint32_t curNumParts = NUM_CU_PARTITIONS >> (depth << 1);
-
-    const SPS& sps = *cu->m_slice->m_sps;
-
     if (cu->m_cuDepth[absPartIdx] > depth)
     {
-        uint32_t qNumParts   = curNumParts >> 2;
-        uint32_t xmax = sps.picWidthInLumaSamples  - cu->m_cuPelX;
-        uint32_t ymax = sps.picHeightInLumaSamples - cu->m_cuPelY;
-        for (uint32_t partIdx = 0; partIdx < 4; partIdx++, absPartIdx += qNumParts)
-            if (g_zscanToPelX[absPartIdx] < xmax && g_zscanToPelY[absPartIdx] < ymax)
-                deblockCU(cu, absPartIdx, depth + 1, dir, blockStrength);
+        for (uint32_t subPartIdx = 0; subPartIdx < 4; subPartIdx++)
+        {
+            const CUGeom& childGeom = *(&cuGeom + cuGeom.childOffset + subPartIdx);
+            if (childGeom.flags & CUGeom::PRESENT)
+                deblockCU(cu, childGeom, dir, blockStrength);
+        }
         return;
     }
 
-    const uint32_t numUnits  = sps.numPartInCUSize >> depth;
+    uint32_t numUnits = 1 << (cuGeom.log2CUSize - LOG2_UNIT_SIZE);
     setEdgefilterPU(cu, absPartIdx, dir, blockStrength, numUnits);
-    setEdgefilterTU(cu, absPartIdx, depth, dir, blockStrength);
+    setEdgefilterTU(cu, absPartIdx, 0, dir, blockStrength);
     setEdgefilterMultiple(cu, absPartIdx, dir, 0, bsCuEdge(cu, absPartIdx, dir), blockStrength, numUnits);
 
-    for (uint32_t partIdx = absPartIdx; partIdx < absPartIdx + curNumParts; partIdx++)
+    uint32_t numParts = cuGeom.numPartitions;
+    for (uint32_t partIdx = absPartIdx; partIdx < absPartIdx + numParts; partIdx++)
     {
         uint32_t bsCheck = !(partIdx & (1 << dir));
 
@@ -102,12 +101,11 @@ void Deblock::deblockCU(const CUData* cu
     }
 
     const uint32_t partIdxIncr = DEBLOCK_SMALLEST_BLOCK >> LOG2_UNIT_SIZE;
-    uint32_t sizeInPU = sps.numPartInCUSize >> depth;
     uint32_t shiftFactor = (dir == EDGE_VER) ? cu->m_hChromaShift : cu->m_vChromaShift;
     uint32_t chromaMask = ((DEBLOCK_SMALLEST_BLOCK << shiftFactor) >> LOG2_UNIT_SIZE) - 1;
     uint32_t e0 = (dir == EDGE_VER ? g_zscanToPelX[absPartIdx] : g_zscanToPelY[absPartIdx]) >> LOG2_UNIT_SIZE;
         
-    for (uint32_t e = 0; e < sizeInPU; e += partIdxIncr)
+    for (uint32_t e = 0; e < numUnits; e += partIdxIncr)
     {
         edgeFilterLuma(cu, absPartIdx, depth, dir, e, blockStrength);
         if (!((e0 + e) & chromaMask))
@@ -117,12 +115,12 @@ void Deblock::deblockCU(const CUData* cu
 
 static inline uint32_t calcBsIdx(const CUData* cu, uint32_t absPartIdx, int32_t dir, int32_t edgeIdx, int32_t baseUnitIdx)
 {
-    uint32_t numPartInCUSize = cu->m_slice->m_sps->numPartInCUSize;
+    uint32_t numUnits = cu->m_slice->m_sps->numPartInCUSize;
 
     if (dir)
-        return g_rasterToZscan[g_zscanToRaster[absPartIdx] + edgeIdx * numPartInCUSize + baseUnitIdx];
+        return g_rasterToZscan[g_zscanToRaster[absPartIdx] + edgeIdx * numUnits + baseUnitIdx];
     else
-        return g_rasterToZscan[g_zscanToRaster[absPartIdx] + baseUnitIdx * numPartInCUSize + edgeIdx];
+        return g_rasterToZscan[g_zscanToRaster[absPartIdx] + baseUnitIdx * numUnits + edgeIdx];
 }
 
 void Deblock::setEdgefilterMultiple(const CUData* cu, uint32_t scanIdx, int32_t dir, int32_t edgeIdx, uint8_t value, uint8_t blockStrength[], uint32_t numUnits)
@@ -135,19 +133,18 @@ void Deblock::setEdgefilterMultiple(cons
     }
 }
 
-void Deblock::setEdgefilterTU(const CUData* cu, uint32_t absPartIdx, uint32_t depth, int32_t dir, uint8_t blockStrength[])
+void Deblock::setEdgefilterTU(const CUData* cu, uint32_t absPartIdx, uint32_t tuDepth, int32_t dir, uint8_t blockStrength[])
 {
-    if ((uint32_t)cu->m_tuDepth[absPartIdx] + cu->m_cuDepth[absPartIdx] > depth)
+    uint32_t log2TrSize = cu->m_log2CUSize[absPartIdx] - tuDepth;
+    if (cu->m_tuDepth[absPartIdx] > tuDepth)
     {
-        const uint32_t curNumParts = NUM_CU_PARTITIONS >> (depth << 1);
-        const uint32_t qNumParts   = curNumParts >> 2;
-
-        for (uint32_t partIdx = 0; partIdx < 4; partIdx++, absPartIdx += qNumParts)
-            setEdgefilterTU(cu, absPartIdx, depth + 1, dir, blockStrength);
+        uint32_t qNumParts = 1 << (log2TrSize - LOG2_UNIT_SIZE - 1) * 2;
+        for (uint32_t qIdx = 0; qIdx < 4; ++qIdx, absPartIdx += qNumParts)
+            setEdgefilterTU(cu, absPartIdx, tuDepth + 1, dir, blockStrength);
         return;
     }
 
-    uint32_t numUnits  = 1 << (cu->m_log2CUSize[absPartIdx] - cu->m_tuDepth[absPartIdx] - LOG2_UNIT_SIZE);
+    uint32_t numUnits  = 1 << (log2TrSize - LOG2_UNIT_SIZE);
     setEdgefilterMultiple(cu, absPartIdx, dir, 0, 2, blockStrength, numUnits);
 }
 
@@ -501,7 +498,6 @@ void Deblock::edgeFilterChroma(const CUD
     srcChroma[1] = reconPic->m_picOrg[2] + srcOffset;
 
     uint32_t numUnits = cuQ->m_slice->m_sps->numPartInCUSize >> (depth + chromaShift);
-
     for (uint32_t idx = 0; idx < numUnits; idx++)
     {
         uint32_t partQ = calcBsIdx(cuQ, absPartIdx, dir, edge, idx << chromaShift);
diff -r 7ad510c96fea -r d8d13f2e2095 source/common/deblock.h
--- a/source/common/deblock.h	Wed Jan 14 12:06:54 2015 +0530
+++ b/source/common/deblock.h	Sat Jan 17 18:32:52 2015 +0900
@@ -30,27 +30,22 @@ namespace x265 {
 // private namespace
 
 class CUData;
+struct CUGeom;
 
 class Deblock
 {
 public:
     enum { EDGE_VER, EDGE_HOR };
 
-    uint32_t m_numPartitions;
-
-    Deblock() : m_numPartitions(0) {}
-
-    void init() { m_numPartitions = 1 << (g_maxFullDepth * 2); }
-
-    void deblockCTU(const CUData* ctu, int32_t dir);
+    void deblockCTU(const CUData* ctu, const CUGeom& cuGeom, int32_t dir);
 
 protected:
 
     // CU-level deblocking function
-    void deblockCU(const CUData* cu, uint32_t absPartIdx, uint32_t depth, const int32_t dir, uint8_t blockStrength[]);
+    void deblockCU(const CUData* cu, const CUGeom& cuGeom, const int32_t dir, uint8_t blockStrength[]);
 
     // set filtering functions
-    void setEdgefilterTU(const CUData* cu, uint32_t absPartIdx, uint32_t depth, int32_t dir, uint8_t blockStrength[]);
+    void setEdgefilterTU(const CUData* cu, uint32_t absPartIdx, uint32_t tuDepth, int32_t dir, uint8_t blockStrength[]);
     void setEdgefilterPU(const CUData* cu, uint32_t absPartIdx, int32_t dir, uint8_t blockStrength[], uint32_t numUnits);
     void setEdgefilterMultiple(const CUData* cu, uint32_t absPartIdx, int32_t dir, int32_t edgeIdx, uint8_t value, uint8_t blockStrength[], uint32_t numUnits);
 
diff -r 7ad510c96fea -r d8d13f2e2095 source/common/intrapred.cpp
--- a/source/common/intrapred.cpp	Wed Jan 14 12:06:54 2015 +0530
+++ b/source/common/intrapred.cpp	Sat Jan 17 18:32:52 2015 +0900
@@ -216,27 +216,27 @@ namespace x265 {
 
 void setupIntraPrimitives_c(EncoderPrimitives& p)
 {
-    p.intra_pred[0][BLOCK_4x4] = planar_pred_c<2>;
-    p.intra_pred[0][BLOCK_8x8] = planar_pred_c<3>;
-    p.intra_pred[0][BLOCK_16x16] = planar_pred_c<4>;
-    p.intra_pred[0][BLOCK_32x32] = planar_pred_c<5>;
+    p.cu[BLOCK_4x4].intra_pred[PLANAR_IDX] = planar_pred_c<2>;
+    p.cu[BLOCK_8x8].intra_pred[PLANAR_IDX] = planar_pred_c<3>;


More information about the x265-commits mailing list