[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