# HG changeset patch
# User Satoshi Nakagawa <[email protected]>
# 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;
_______________________________________________
x265-devel mailing list
[email protected]
https://mailman.videolan.org/listinfo/x265-devel