[x265] fix: constrained intra
Satoshi Nakagawa
nakagawa424 at oki.com
Tue Apr 15 05:36:10 CEST 2014
# HG changeset patch
# User Satoshi Nakagawa <nakagawa424 at oki.com>
# Date 1397532876 -32400
# Tue Apr 15 12:34:36 2014 +0900
# Node ID 5dde9f4817813e96116df5b86925fa3fc5eff2a8
# Parent 08d64a70594ed31cd80046bd4a7e9fa52119be47
fix: constrained intra
diff -r 08d64a70594e -r 5dde9f481781 source/Lib/TLibCommon/TComPattern.cpp
--- a/source/Lib/TLibCommon/TComPattern.cpp Mon Apr 14 13:18:18 2014 -0500
+++ b/source/Lib/TLibCommon/TComPattern.cpp Tue Apr 15 12:34:36 2014 +0900
@@ -79,12 +79,24 @@
int leftUnits = cuHeightInUnits << 1;
partIdxLB = g_rasterToZscan[g_zscanToRaster[partIdxLT] + ((cuHeightInUnits - 1) * partIdxStride)];
- bNeighborFlags[leftUnits] = isAboveLeftAvailable(cu, partIdxLT);
- numIntraNeighbor += (int)(bNeighborFlags[leftUnits]);
- numIntraNeighbor += isAboveAvailable(cu, partIdxLT, partIdxRT, (bNeighborFlags + leftUnits + 1));
- numIntraNeighbor += isAboveRightAvailable(cu, partIdxLT, partIdxRT, (bNeighborFlags + leftUnits + 1 + cuWidthInUnits));
- numIntraNeighbor += isLeftAvailable(cu, partIdxLT, partIdxLB, (bNeighborFlags + leftUnits - 1));
- numIntraNeighbor += isBelowLeftAvailable(cu, partIdxLT, partIdxLB, (bNeighborFlags + leftUnits - 1 - cuHeightInUnits));
+ if (!cu->getSlice()->getPPS()->getConstrainedIntraPred())
+ {
+ bNeighborFlags[leftUnits] = isAboveLeftAvailable(cu, partIdxLT);
+ numIntraNeighbor += (int)(bNeighborFlags[leftUnits]);
+ numIntraNeighbor += isAboveAvailable(cu, partIdxLT, partIdxRT, (bNeighborFlags + leftUnits + 1));
+ numIntraNeighbor += isAboveRightAvailable(cu, partIdxLT, partIdxRT, (bNeighborFlags + leftUnits + 1 + cuWidthInUnits));
+ numIntraNeighbor += isLeftAvailable(cu, partIdxLT, partIdxLB, (bNeighborFlags + leftUnits - 1));
+ numIntraNeighbor += isBelowLeftAvailable(cu, partIdxLT, partIdxLB, (bNeighborFlags + leftUnits - 1 - cuHeightInUnits));
+ }
+ else
+ {
+ bNeighborFlags[leftUnits] = isAboveLeftAvailableCIP(cu, partIdxLT);
+ numIntraNeighbor += (int)(bNeighborFlags[leftUnits]);
+ numIntraNeighbor += isAboveAvailableCIP(cu, partIdxLT, partIdxRT, (bNeighborFlags + leftUnits + 1));
+ numIntraNeighbor += isAboveRightAvailableCIP(cu, partIdxLT, partIdxRT, (bNeighborFlags + leftUnits + 1 + cuWidthInUnits));
+ numIntraNeighbor += isLeftAvailableCIP(cu, partIdxLT, partIdxLB, (bNeighborFlags + leftUnits - 1));
+ numIntraNeighbor += isBelowLeftAvailableCIP(cu, partIdxLT, partIdxLB, (bNeighborFlags + leftUnits - 1 - cuHeightInUnits));
+ }
width = cuWidth2 + 1;
height = cuHeight2 + 1;
@@ -238,12 +250,24 @@
int leftUnits = cuHeightInUnits << 1;
partIdxLB = g_rasterToZscan[g_zscanToRaster[partIdxLT] + ((cuHeightInUnits - 1) * partIdxStride)];
- bNeighborFlags[leftUnits] = isAboveLeftAvailable(cu, partIdxLT);
- numIntraNeighbor += (int)(bNeighborFlags[leftUnits]);
- numIntraNeighbor += isAboveAvailable(cu, partIdxLT, partIdxRT, (bNeighborFlags + leftUnits + 1));
- numIntraNeighbor += isAboveRightAvailable(cu, partIdxLT, partIdxRT, (bNeighborFlags + leftUnits + 1 + cuWidthInUnits));
- numIntraNeighbor += isLeftAvailable(cu, partIdxLT, partIdxLB, (bNeighborFlags + leftUnits - 1));
- numIntraNeighbor += isBelowLeftAvailable(cu, partIdxLT, partIdxLB, (bNeighborFlags + leftUnits - 1 - cuHeightInUnits));
+ if (!cu->getSlice()->getPPS()->getConstrainedIntraPred())
+ {
+ bNeighborFlags[leftUnits] = isAboveLeftAvailable(cu, partIdxLT);
+ numIntraNeighbor += (int)(bNeighborFlags[leftUnits]);
+ numIntraNeighbor += isAboveAvailable(cu, partIdxLT, partIdxRT, (bNeighborFlags + leftUnits + 1));
+ numIntraNeighbor += isAboveRightAvailable(cu, partIdxLT, partIdxRT, (bNeighborFlags + leftUnits + 1 + cuWidthInUnits));
+ numIntraNeighbor += isLeftAvailable(cu, partIdxLT, partIdxLB, (bNeighborFlags + leftUnits - 1));
+ numIntraNeighbor += isBelowLeftAvailable(cu, partIdxLT, partIdxLB, (bNeighborFlags + leftUnits - 1 - cuHeightInUnits));
+ }
+ else
+ {
+ bNeighborFlags[leftUnits] = isAboveLeftAvailableCIP(cu, partIdxLT);
+ numIntraNeighbor += (int)(bNeighborFlags[leftUnits]);
+ numIntraNeighbor += isAboveAvailableCIP(cu, partIdxLT, partIdxRT, (bNeighborFlags + leftUnits + 1));
+ numIntraNeighbor += isAboveRightAvailableCIP(cu, partIdxLT, partIdxRT, (bNeighborFlags + leftUnits + 1 + cuWidthInUnits));
+ numIntraNeighbor += isLeftAvailableCIP(cu, partIdxLT, partIdxLB, (bNeighborFlags + leftUnits - 1));
+ numIntraNeighbor += isBelowLeftAvailableCIP(cu, partIdxLT, partIdxLB, (bNeighborFlags + leftUnits - 1 - cuHeightInUnits));
+ }
width = cuWidth * 2 + 1;
height = cuHeight * 2 + 1;
More information about the x265-devel
mailing list