- 21 Nov, 2019 17 commits
-
-
David Flynn authored
This commit moves the non-normative inverse position scaling process from the codec's reconstruction process into the ply writer. This is to support changing the internal point cloud position representation to integer.
-
David Flynn authored
Reducing the search range from 8 to 1 significantly reduces the time spent recolouring. The value of 1 seems to be a reasonable trade-off between distortion and runtime.
-
This commit introduces planar modes, in the three x,y, and directions, as new representations of the geometry. Planar modes are activated at eligible nodes through a planar mode activation flag coded in the bitstream. Extra syntax is added to the bitstream to indicate the position of the plane associated with activated planar modes. A local eligibility criteria avoids using planar modes in adverse regions of the point cloud and thus avoiding worse compression performance, particularly on dense point clouds.
-
This adoption permits coding geometry with non-cubic bounding boxes. Since the depth of the tree remains constant for cubic and non-cubic bounding boxes with identical largest dimensions, quad-tree and binary-tree partitions are introduced to avoid coding 'fractional' positions. The following configuration options control the placement of non-octree partitions within the coding tree: --max_num_implicit_qtbt_before_ot --min_implicit_qtbt_size_log2
-
This extends the geometry based quantisation scheme to: - add a per-slice QP offset, and - permit uniform quantisation of the whole slice without requiring signalling of an additional node QP offset. Per node QP offset signalling is disabled by setting positionQuantisationOctreeDepth=-1
-
This introduces a quantization scheme into the octree coding process, enables adaptive geometry quantization for different regions of the point cloud. This in-loop scheme is independent of the any quantisation performed in non-normative pre-processing at the input to the encoder. At a particular depth of the octree, the remaining (uncoded) position bits of each point are quantised according to a per-node (or rather, per-subtree) QP. The QP itself is signalled as an offset to a base QP. The following configuration parameters are added: positionQuantisationEnabled positionBaseQp positionQuantisationOctreeDepth
-
This commit adds the lossless YCgCoR colour transform. The CTC configuration is updated to use YCgCoR for lossless attribute coding instead of inter-component prediction on GBR (colourMatrix=0) data.
-
David Flynn authored
Some imput formats and colour spaces have a different bitdepth for their chroma (non-primary) component. This commit adds support to signal their bitdepth as described by the codec independent code points.
-
David Flynn authored
This commit enables signalling a colour matrix index using cicp_matrix_coefficients_idx (ISO/IEC 23001-8 codec independent code points). It adds the following options that replace the existing colorTransform option: - colourMatrix: The coded representation according to ISO/IEC 23001-8. - convertPlyColourspace: Enables conversion to/from RGB using the indicated matrix. Configuration files are updated to use the new option and to signal the identity matrix in the case of direct GBR coding.
-
In order to support bit depths higher than 8bit, this commit adds an attr_t type to represent attribute data. Existing uses of uint8_t and uint16_t are converted to attr_t.
-
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 3 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.
-