Commit 5ed41242 authored by David Flynn's avatar David Flynn
Browse files

geom: refactor repeated bitCodingOrder to global kOccBitCodingOrder

parent 4fe5be82
......@@ -171,17 +171,16 @@ GeometryOctreeDecoder::decodeOccupancyNeighZ(
int mappedOccAdjGt0,
int mappedOccAdjGt1)
{
static const int8_t bitCodingOrder[8]{1, 7, 5, 3, 2, 4, 6, 0};
int minOccupied = 2;
int numOccupiedAcc = 0;
int occupancy = 0;
for (int i = 0; i < 8; i++) {
int bit = 1;
int bitIsPredicted = (mappedOccIsPredicted >> bitCodingOrder[i]) & 1;
int bitPrediction = (mappedOccPrediction >> bitCodingOrder[i]) & 1;
int bitAdjGt0 = (mappedOccAdjGt0 >> bitCodingOrder[i]) & 1;
int bitAdjGt1 = (mappedOccAdjGt1 >> bitCodingOrder[i]) & 1;
int bitIsPredicted = (mappedOccIsPredicted >> kOccBitCodingOrder[i]) & 1;
int bitPrediction = (mappedOccPrediction >> kOccBitCodingOrder[i]) & 1;
int bitAdjGt0 = (mappedOccAdjGt0 >> kOccBitCodingOrder[i]) & 1;
int bitAdjGt1 = (mappedOccAdjGt1 >> kOccBitCodingOrder[i]) & 1;
int ctxIdxMapIdx =
3 * (bitAdjGt0 + bitAdjGt1) + bitIsPredicted + bitPrediction;
......@@ -195,7 +194,7 @@ GeometryOctreeDecoder::decodeOccupancyNeighZ(
}
ctxIdxMap.evolve(bit, &ctxIdxMap[i][numOccupiedAcc]);
numOccupiedAcc += bit;
occupancy |= bit << bitCodingOrder[i];
occupancy |= bit << kOccBitCodingOrder[i];
}
return occupancy;
......@@ -212,8 +211,6 @@ GeometryOctreeDecoder::decodeOccupancyNeighNZ(
int mappedOccAdjGt0,
int mappedOccAdjGt1)
{
static const int8_t bitCodingOrder[8]{1, 7, 5, 3, 2, 4, 6, 0};
int neighPattern7 = kNeighPattern10to7[neighPattern10];
int neighPattern5 = kNeighPattern7to5[neighPattern7];
......@@ -237,10 +234,10 @@ GeometryOctreeDecoder::decodeOccupancyNeighNZ(
// NB: if firt 7 bits are 0, then the last is implicitly 1.
int bit = 1;
int bitIsPredicted = (mappedOccIsPredicted >> bitCodingOrder[i]) & 1;
int bitPrediction = (mappedOccPrediction >> bitCodingOrder[i]) & 1;
int bitAdjGt0 = (mappedOccAdjGt0 >> bitCodingOrder[i]) & 1;
int bitAdjGt1 = (mappedOccAdjGt1 >> bitCodingOrder[i]) & 1;
int bitIsPredicted = (mappedOccIsPredicted >> kOccBitCodingOrder[i]) & 1;
int bitPrediction = (mappedOccPrediction >> kOccBitCodingOrder[i]) & 1;
int bitAdjGt0 = (mappedOccAdjGt0 >> kOccBitCodingOrder[i]) & 1;
int bitAdjGt1 = (mappedOccAdjGt1 >> kOccBitCodingOrder[i]) & 1;
int ctxIdxMapIdx =
3 * (bitAdjGt0 + bitAdjGt1) + bitIsPredicted + bitPrediction;
......@@ -253,7 +250,7 @@ GeometryOctreeDecoder::decodeOccupancyNeighNZ(
ctxIdxMap.evolve(bit, &ctxIdxMap[i][idx]);
partialOccupancy |= bit << i;
occupancy |= bit << bitCodingOrder[i];
occupancy |= bit << kOccBitCodingOrder[i];
}
return occupancy;
......
......@@ -176,16 +176,15 @@ GeometryOctreeEncoder::encodeOccupancyNeighZ(
int mappedOccAdjGt0,
int mappedOccAdjGt1)
{
static const int8_t bitCodingOrder[8]{1, 7, 5, 3, 2, 4, 6, 0};
int minOccupied = 2;
int numOccupiedAcc = 0;
for (int i = 0; i < 8; i++) {
int bit = (mappedOccupancy >> bitCodingOrder[i]) & 1;
int bitIsPredicted = (mappedOccIsPredicted >> bitCodingOrder[i]) & 1;
int bitPrediction = (mappedOccPrediction >> bitCodingOrder[i]) & 1;
int bitAdjGt0 = (mappedOccAdjGt0 >> bitCodingOrder[i]) & 1;
int bitAdjGt1 = (mappedOccAdjGt1 >> bitCodingOrder[i]) & 1;
int bit = (mappedOccupancy >> kOccBitCodingOrder[i]) & 1;
int bitIsPredicted = (mappedOccIsPredicted >> kOccBitCodingOrder[i]) & 1;
int bitPrediction = (mappedOccPrediction >> kOccBitCodingOrder[i]) & 1;
int bitAdjGt0 = (mappedOccAdjGt0 >> kOccBitCodingOrder[i]) & 1;
int bitAdjGt1 = (mappedOccAdjGt1 >> kOccBitCodingOrder[i]) & 1;
int ctxIdxMapIdx =
3 * (bitAdjGt0 + bitAdjGt1) + bitIsPredicted + bitPrediction;
......@@ -216,8 +215,6 @@ GeometryOctreeEncoder::encodeOccupancyNeighNZ(
int mappedOccAdjGt0,
int mappedOccAdjGt1)
{
static const int8_t bitCodingOrder[8]{1, 7, 5, 3, 2, 4, 6, 0};
int neighPattern7 = kNeighPattern10to7[neighPattern10];
int neighPattern5 = kNeighPattern7to5[neighPattern7];
......@@ -237,11 +234,11 @@ GeometryOctreeEncoder::encodeOccupancyNeighNZ(
break;
}
int bit = (mappedOccupancy >> bitCodingOrder[i]) & 1;
int bitIsPredicted = (mappedOccIsPredicted >> bitCodingOrder[i]) & 1;
int bitPrediction = (mappedOccPrediction >> bitCodingOrder[i]) & 1;
int bitAdjGt0 = (mappedOccAdjGt0 >> bitCodingOrder[i]) & 1;
int bitAdjGt1 = (mappedOccAdjGt1 >> bitCodingOrder[i]) & 1;
int bit = (mappedOccupancy >> kOccBitCodingOrder[i]) & 1;
int bitIsPredicted = (mappedOccIsPredicted >> kOccBitCodingOrder[i]) & 1;
int bitPrediction = (mappedOccPrediction >> kOccBitCodingOrder[i]) & 1;
int bitAdjGt0 = (mappedOccAdjGt0 >> kOccBitCodingOrder[i]) & 1;
int bitAdjGt1 = (mappedOccAdjGt1 >> kOccBitCodingOrder[i]) & 1;
int ctxIdxMapIdx =
3 * (bitAdjGt0 + bitAdjGt1) + bitIsPredicted + bitPrediction;
......
......@@ -257,6 +257,10 @@ const uint8_t pcc::kOccMapRotateZ090[256] = {
//============================================================================
const int8_t pcc::kOccBitCodingOrder[8] = {1, 7, 5, 3, 2, 4, 6, 0};
//============================================================================
// Generated from (L*p+s)/(L+1), L=min(200, max(5, 1/p, 1/(1-p))
const uint8_t pcc::kCtxMapOctreeOccupancyDelta[16] = {
0, 1, 1, 2, 4, 7, 9, 11, 14, 16, 19, 23, 22, 18, 13, 6};
......
......@@ -82,6 +82,9 @@ extern const uint8_t kOccMapRotateZ270[256];
extern const uint8_t kOccMapRotateZ180[256];
extern const uint8_t kOccMapRotateZ090[256];
// Geometry occupancy bit scan order for entropy coding
extern const int8_t kOccBitCodingOrder[8];
// Geometry occupancy context map update table, represented as deltas to
// current map entry value.
extern const uint8_t kCtxMapOctreeOccupancyDelta[16];
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment