Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Satoru KUMA
MPEG129-m52280
Commits
4b80ca8f
Commit
4b80ca8f
authored
Apr 16, 2019
by
David Flynn
Browse files
geom/m44753: guard adjacent child contextualization with a GPS flag
The commit adds a flag to conditionally enable/disable the feature.
parent
5af7b571
Changes
8
Hide whitespace changes
Inline
Side-by-side
doc/README.options.md
View file @
4b80ca8f
...
@@ -172,6 +172,10 @@ respectively.
...
@@ -172,6 +172,10 @@ respectively.
Controls the use of early termination of the geometry octree for
Controls the use of early termination of the geometry octree for
isolated points.
isolated points.
### `--adjacentChildContextualization=0|1`
Controls the contextualization of occupancy bits according to the
state of adjacent children of neighbouring nodes.
### `--intra_pred_max_node_size_log2=INT-VALUE`
### `--intra_pred_max_node_size_log2=INT-VALUE`
Intra occupancy prediction uses an octree node's neighbours to predict
Intra occupancy prediction uses an octree node's neighbours to predict
its occupancy. The prediction mode is enabled for octree nodes smaller
its occupancy. The prediction mode is enabled for octree nodes smaller
...
...
tmc3/OctreeNeighMap.cpp
View file @
4b80ca8f
...
@@ -134,6 +134,7 @@ updatePatternFromNeighOccupancy(
...
@@ -134,6 +134,7 @@ updatePatternFromNeighOccupancy(
GeometryNeighPattern
GeometryNeighPattern
makeGeometryNeighPattern
(
makeGeometryNeighPattern
(
bool
adjacent_child_contextualization_enabled_flag
,
const
PCCVector3
<
uint32_t
>&
position
,
const
PCCVector3
<
uint32_t
>&
position
,
const
int
nodeSizeLog2
,
const
int
nodeSizeLog2
,
const
MortonMap3D
&
occupancyAtlas
)
const
MortonMap3D
&
occupancyAtlas
)
...
@@ -171,6 +172,9 @@ makeGeometryNeighPattern(
...
@@ -171,6 +172,9 @@ makeGeometryNeighPattern(
// the occupancy contextualisation bits.
// the occupancy contextualisation bits.
GeometryNeighPattern
gnp
=
{
neighPattern
,
0
,
0
};
GeometryNeighPattern
gnp
=
{
neighPattern
,
0
,
0
};
if
(
!
adjacent_child_contextualization_enabled_flag
)
return
gnp
;
if
(
x
>
0
)
if
(
x
>
0
)
gnp
=
updatePatternFromNeighOccupancy
(
occupancyAtlas
,
x
-
1
,
y
,
z
,
gnp
,
0
);
gnp
=
updatePatternFromNeighOccupancy
(
occupancyAtlas
,
x
-
1
,
y
,
z
,
gnp
,
0
);
...
...
tmc3/OctreeNeighMap.h
View file @
4b80ca8f
...
@@ -166,10 +166,12 @@ struct GeometryNeighPattern {
...
@@ -166,10 +166,12 @@ struct GeometryNeighPattern {
};
};
//============================================================================
//============================================================================
// determine the occupancy pattern of the six neighbours of the node at
// determine the occupancy pattern of the six neighbours of the node at
// @position.
// @position. If @adjacent_child_contextualization_enabled_flag is true,
// the occupancy state of previously coded neighbours is used to refine
// the neighbour pattern and derive external adjacency counts for each child.
GeometryNeighPattern
makeGeometryNeighPattern
(
GeometryNeighPattern
makeGeometryNeighPattern
(
bool
adjacent_child_contextualization_enabled_flag
,
const
PCCVector3
<
uint32_t
>&
currentPosition
,
const
PCCVector3
<
uint32_t
>&
currentPosition
,
const
int
nodeSizeLog2
,
const
int
nodeSizeLog2
,
const
MortonMap3D
&
occupancyAtlas
);
const
MortonMap3D
&
occupancyAtlas
);
...
...
tmc3/TMC3.cpp
View file @
4b80ca8f
...
@@ -363,6 +363,10 @@ ParseParameters(int argc, char* argv[], Parameters& params)
...
@@ -363,6 +363,10 @@ ParseParameters(int argc, char* argv[], Parameters& params)
params
.
encoder
.
gps
.
inferred_direct_coding_mode_enabled_flag
,
true
,
params
.
encoder
.
gps
.
inferred_direct_coding_mode_enabled_flag
,
true
,
"Permits early termination of the geometry octree for isolated points"
)
"Permits early termination of the geometry octree for isolated points"
)
(
"adjacentChildContextualization"
,
params
.
encoder
.
gps
.
adjacent_child_contextualization_enabled_flag
,
true
,
"Occupancy contextualization using neighbouring adjacent children"
)
(
"intra_pred_max_node_size_log2"
,
(
"intra_pred_max_node_size_log2"
,
params
.
encoder
.
gps
.
intra_pred_max_node_size_log2
,
0
,
params
.
encoder
.
gps
.
intra_pred_max_node_size_log2
,
0
,
"octree nodesizes eligible for occupancy intra prediction"
)
"octree nodesizes eligible for occupancy intra prediction"
)
...
...
tmc3/geometry_octree_decoder.cpp
View file @
4b80ca8f
...
@@ -451,8 +451,10 @@ decodeGeometryOctree(
...
@@ -451,8 +451,10 @@ decodeGeometryOctree(
node0
.
pos
,
nodeSizeLog2
,
fifo
,
fifoCurrLvlEnd
,
&
occupancyAtlas
,
node0
.
pos
,
nodeSizeLog2
,
fifo
,
fifoCurrLvlEnd
,
&
occupancyAtlas
,
&
occupancyAtlasOrigin
);
&
occupancyAtlasOrigin
);
GeometryNeighPattern
gnp
=
GeometryNeighPattern
gnp
=
makeGeometryNeighPattern
(
makeGeometryNeighPattern
(
node0
.
pos
,
nodeSizeLog2
,
occupancyAtlas
);
gps
.
adjacent_child_contextualization_enabled_flag
,
node0
.
pos
,
nodeSizeLog2
,
occupancyAtlas
);
node0
.
neighPattern
=
gnp
.
neighPattern
;
node0
.
neighPattern
=
gnp
.
neighPattern
;
occupancyAdjacencyGt0
=
gnp
.
adjacencyGt0
;
occupancyAdjacencyGt0
=
gnp
.
adjacencyGt0
;
occupancyAdjacencyGt1
=
gnp
.
adjacencyGt1
;
occupancyAdjacencyGt1
=
gnp
.
adjacencyGt1
;
...
...
tmc3/geometry_octree_encoder.cpp
View file @
4b80ca8f
...
@@ -479,8 +479,10 @@ encodeGeometryOctree(
...
@@ -479,8 +479,10 @@ encodeGeometryOctree(
node0
.
pos
,
nodeSizeLog2
,
fifo
,
fifoCurrLvlEnd
,
&
occupancyAtlas
,
node0
.
pos
,
nodeSizeLog2
,
fifo
,
fifoCurrLvlEnd
,
&
occupancyAtlas
,
&
occupancyAtlasOrigin
);
&
occupancyAtlasOrigin
);
GeometryNeighPattern
gnp
=
GeometryNeighPattern
gnp
=
makeGeometryNeighPattern
(
makeGeometryNeighPattern
(
node0
.
pos
,
nodeSizeLog2
,
occupancyAtlas
);
gps
.
adjacent_child_contextualization_enabled_flag
,
node0
.
pos
,
nodeSizeLog2
,
occupancyAtlas
);
node0
.
neighPattern
=
gnp
.
neighPattern
;
node0
.
neighPattern
=
gnp
.
neighPattern
;
occupancyAdjacencyGt0
=
gnp
.
adjacencyGt0
;
occupancyAdjacencyGt0
=
gnp
.
adjacencyGt0
;
occupancyAdjacencyGt1
=
gnp
.
adjacencyGt1
;
occupancyAdjacencyGt1
=
gnp
.
adjacencyGt1
;
...
...
tmc3/hls.h
View file @
4b80ca8f
...
@@ -190,6 +190,11 @@ struct GeometryParameterSet {
...
@@ -190,6 +190,11 @@ struct GeometryParameterSet {
// Selects between bitwise and bytewise occupancy coding
// Selects between bitwise and bytewise occupancy coding
bool
bitwise_occupancy_coding_flag
;
bool
bitwise_occupancy_coding_flag
;
// Controlls contextualization of occupancy bits and refinement of
// the neighbour pattern according to the occupancy of adjacent
// children in neighbouring nodes.
bool
adjacent_child_contextualization_enabled_flag
;
// Experimental knob to control the number of contexts used
// Experimental knob to control the number of contexts used
// for occupancy coding.
// for occupancy coding.
int
geom_occupancy_ctx_reduction_factor
;
int
geom_occupancy_ctx_reduction_factor
;
...
...
tmc3/io_hls.cpp
View file @
4b80ca8f
...
@@ -194,6 +194,7 @@ write(const GeometryParameterSet& gps)
...
@@ -194,6 +194,7 @@ write(const GeometryParameterSet& gps)
bs
.
write
(
gps
.
neighbour_context_restriction_flag
);
bs
.
write
(
gps
.
neighbour_context_restriction_flag
);
bs
.
write
(
gps
.
inferred_direct_coding_mode_enabled_flag
);
bs
.
write
(
gps
.
inferred_direct_coding_mode_enabled_flag
);
bs
.
write
(
gps
.
bitwise_occupancy_coding_flag
);
bs
.
write
(
gps
.
bitwise_occupancy_coding_flag
);
bs
.
write
(
gps
.
adjacent_child_contextualization_enabled_flag
);
bs
.
writeUe
(
gps
.
geom_occupancy_ctx_reduction_factor
);
bs
.
writeUe
(
gps
.
geom_occupancy_ctx_reduction_factor
);
bs
.
writeUe
(
gps
.
neighbour_avail_boundary_log2
);
bs
.
writeUe
(
gps
.
neighbour_avail_boundary_log2
);
bs
.
writeUe
(
gps
.
intra_pred_max_node_size_log2
);
bs
.
writeUe
(
gps
.
intra_pred_max_node_size_log2
);
...
@@ -222,6 +223,7 @@ parseGps(const PayloadBuffer& buf)
...
@@ -222,6 +223,7 @@ parseGps(const PayloadBuffer& buf)
bs
.
read
(
&
gps
.
neighbour_context_restriction_flag
);
bs
.
read
(
&
gps
.
neighbour_context_restriction_flag
);
bs
.
read
(
&
gps
.
inferred_direct_coding_mode_enabled_flag
);
bs
.
read
(
&
gps
.
inferred_direct_coding_mode_enabled_flag
);
bs
.
read
(
&
gps
.
bitwise_occupancy_coding_flag
);
bs
.
read
(
&
gps
.
bitwise_occupancy_coding_flag
);
bs
.
read
(
&
gps
.
adjacent_child_contextualization_enabled_flag
);
bs
.
readUe
(
&
gps
.
geom_occupancy_ctx_reduction_factor
);
bs
.
readUe
(
&
gps
.
geom_occupancy_ctx_reduction_factor
);
bs
.
readUe
(
&
gps
.
neighbour_avail_boundary_log2
);
bs
.
readUe
(
&
gps
.
neighbour_avail_boundary_log2
);
bs
.
readUe
(
&
gps
.
intra_pred_max_node_size_log2
);
bs
.
readUe
(
&
gps
.
intra_pred_max_node_size_log2
);
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment