- 21 Nov, 2019 7 commits
-
-
David Flynn authored
-
This adoption permits prediction of residuals between components of the same attribute, coding the residual resulting from this second prediction.
-
This adoption allows determining the weights of each point's predicting neighbours with a reduced influence of the, for instance, z component.
-
David Flynn authored
This adoption permits encoding the geometry positions in an order other than {x,y,z}. The --geometry_axis_order option causes the encoder to load data from the ply file in a different order. The order is signalled in the SPS and the decoder will label the output axis as appropriate.
-
David Flynn authored
This commit migrates PCCPointSet3::read and write to ply::read and write.
-
This commit enables the codec to encapsulate more than one frame in the coded bitstream. The number of frames to encode is controlled by the frameCount option. Support is added to encode multiple source frames from separate ply files based on a template input file name. A printf-like "%d" directive acts as a placeholder for the current frame number. Decoding functions in a similar way with a each frame decoded from the bitstream being written to a separate ply file named according to a template pattern. The first frame number used for file I/O may be set using the firstFrameNum option.
-
This provides a means to achieve spatial scalability for a G-PCC bitstream. For bitstreams encoded with aps_scalable_enabled_flag set, the decoder may partially decode the geometry octree (minGeomNodeSizeLog2) and the corresponding point attributes. The functionality is achieved by constraining the LoD generation process to align with partial geometry decoding.
-
- 26 Aug, 2019 1 commit
-
-
David Flynn authored
-
- 12 Aug, 2019 8 commits
-
-
Adjust the operation sequence of slice partition and geometry quantization. We do geometry quantization first and then do the slice partition, so that the point number of each slice would be kept in the predefined range under lossless/lossy geometry coding conditions.
-
Rather than code bypass bins using a simplified mode of the arithmetic coder, this commit adds the ability to signal bypass bins in a separate byte-reversed sub-stream.
-
This commit allow individual QP offsets to be specified for each LoD/RAHT layer in attribute coding.
-
David Flynn authored
This placeholder is for any encoder-specific per-attribute parameters that do not belong in the SPS, APS, etc.,
-
This commit implements the recolouring method described in m47800, which notably uses a distance-weighted average rather than the previous unweighted average.
-
David Flynn authored
For each 2×2×2 block, a predicted block is produced by upconverting the previous transform level. The prediction is transformed and subtracted from the transformed attributes at the encoder.
-
In order to support transform domain prediction of AC coefficients using upsampled previously reconstructed transform levels, this commit replaces the existing RAHT implementation with a descent based RAHT tree traversal for both encoder and decoder with the transform performed in units of 2×2×2 blocks.
-
David Flynn authored
-
- 16 Apr, 2019 7 commits
-
-
This commit introduces prediction by previously coded points within the same level of detail using the predicting attribute coder. The feature is controlled using --intraLodPredictionEnabled=0|1.
-
David Flynn authored
This method has been replaced by an LoD decimation method.
-
This LoD generation (subsampling) method uses the Morton-based ordering of points that is used to determine prediction neighbours. Each LoD level comprises 3/4 of the points of the previous.
-
David Flynn authored
This commit permits signalling a per-slice delta QP for luma and chroma attribute components. The delta is relative to the base value derived from the APS. NB: while syntax support and derivation processes are provided, this commit does not contain any method to control the delta QP value at the encoder.
-
This commit introduces control of the quantisation step size using the familiar HEVC | AVC quantisation parameter.
-
David Flynn authored
This is part of a series attempting to remove unhelpful typedefs.
-
David Flynn authored
The commit adds a flag to conditionally enable/disable the feature.
-
- 06 Feb, 2019 4 commits
-
-
This partitioning method (--partitionMethod=3) decomposes the input pointcloud into an octree of depth --partitionOctreeDepth=d, with each leaf node corresponding to a slice.
-
This partitioning method (--partitionMethod=2) finds the longest edge of the point cloud and divides it into --partitionNumUniformGeom=n slices along the longest edge. If n = 0, the ratio of longest edge to shortest edge determines the number of slices.
-
David Flynn authored
This commit provides a basic frame work for partitioning a frame into multiple slices, with the continued assumption of single-frame sequences. The decoder is modified to independently decode each slice and accumulate decoded points in a buffer for output. The encoder is updated to support partitioning the input point cloud into slices and to independently code each slice. Points from reconstructed slices are accumulated and output at the end of the frame period. The partitioning process (partitioning methods are defined in partitioning.cpp) proceeds as follows: - quantise the input point cloud without duplicate point removal or reordering points. - apply the partitioning function to produce a list of tiles and slices, each slice having an origin, id, and list of point indexes that identify points in the input point cloud. - producing a source point cloud for each partition as a subset of the input point cloud. - compressing each partition (slice) as normal by quantising the partitioned input. Recolouring is necessarily performed against the partitioned input since the recolouring method cannot correctly handle recolouring a partition from a complete point cloud. NB: this commit does not provide any partitioning methods.
-
This uses a binary-tree to generate the levels-of-details for the lifting/predicting transforms as an alternative to Euclidean distance thresholding methods.
-
- 05 Feb, 2019 4 commits
-
-
This simplified attribute prediction scheme avoids computing the LoD structure in order to reduce the computational complexity of both the encoder and the decoder. It is activated by setting levelOfDetailCount=0. NB: this is only configured for lossless/near-lossless predictive attribute coding of cat3 sequences.
-
David Flynn authored
The configuration parameters seq_bounding_box_xyz0 and seq_bounding_box_whd allow overriding the automatic derivation of frame (sequence) bounding box, forcing the depth of the geometry tree. NB: seq_bounding_box_xyz0 and seq_bounding_box_whd are specified using unscaled co-ordinates. NB: this patch does not signal these parameters in the SPS.
-
David Flynn authored
Define po-lite option traits to handle PCCVector3<T> as a container to permit using PCCVector3<T> types as command / config parameters.
-
David Flynn authored
This commit provides trisoup_node_size_log2 as a replacement for the following HLS syntax variables: - geom_codec_type (redundant wrt. triangle node size derivation) - trisoup_depth (redundant wrt. bounding box) - trisoup_triangle_level (semantics simplified) The following config options have been removed: - geometryCodec (redundant wrt. trisoup_node_size_log2) - triSoupLevel (replaced by trisoup_node_size_log2) - triSoupDepth (unnecessary) - triSoupIntToOrigScale (redundant wrt. positionQuantizationScale)
-
- 01 Nov, 2018 2 commits
-
-
Replace the k-d tree based nearest neighbour search with an approximate search based upon the points in Morton order.
-
This commit provides an ability to vary the number of direct neighbours used in the predicting transform. Mode 0 corresponds to the existing averaging, and mode n selects the n-th nearest neighbour for direct prediction. The provided code has been reworked to: - rewrite unary coding to be a little more obvious - tidy the mode decision path - add configuration for max_num_direct_predictors (renamed from MaxNumPredCand) - now counts the number of single predictors, rather than prediction modes.
-
- 31 Oct, 2018 7 commits
-
-
David Flynn authored
This commit provides a method to predict the child occupancy bits of a node based on the node's 26 neighbours. The prediction is used to contextualise coding of each occupancy bit. This tool requires the use of the occupancyAtlas for neighbour lookup. NB: a restriction in the current implementation requires that the atlas size is at most 8³. intra_pred_max_node_size_log2: 6
-
David Flynn authored
Bitwise geometry occupancy coding uses a mapping table to select entropy contexts. This commit employs a dynamic mapping which is updated after each coding operation, replacing the previous static mapping tables. NB: the proposed version used a context with a halving period (max_count) of 64 symbols. However, this conflicts with another adoption (512 symbols), and a wholesale replacement of the arithmetic codec and context model. To resolve the conflict, the existing halving period (128) is used.
-
This commit allows bytewise encoding of occupancy symbols using the dual-lut coder.
-
When trisoup was completely independent, trisoup handled lossless geometry coding by using a leaf size of 1 and no triangles. This commit replaces that mode with the better performing octree geometry coder.
-
David Flynn authored
This commit removes unnecessary include directives.
-
David Flynn authored
This commit moves various constants from PCCTMC3Common.h to a new constants.h. Hard coded values of constants have been replaced with their symbolic name.
-
David Flynn authored
Sometimes it is useful to encode geometry without attributes. However, the common test condition configurations all enable attribute coding. In order to avoid rewriting the configuration files, the "disableAttributeCoding" option configures the encoder as if no attributes are specified.
-