- 06 Feb, 2019 3 commits
-
-
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.
-
- 05 Sep, 2018 1 commit
-
-
David Flynn authored
Reading and writing binary ply files is significantly faster than going via formatted I/O. This commit adds the --outputBinaryPly=1|0 option to select writing either binary or ascii ply files.
-
- 03 Sep, 2018 2 commits
-
-
Certain test sequences with 16-bit reflectance are actually 8-bit data that has been scaled by 255. This commit adds non-normative support to the encoder and decoder to convert between the two representations through the option "hack.reflectanceScale".
-
David Flynn authored
The dist2 values used by the pred/lift attribute coding schemes is dependent upon the distances between points in the point cloud. Using the --positionQuantizationScale option to scale the input point cloud therefore affects the required dist2 values. This commit adds the --positionQuantizationScaleAdjustsDist2=1|0 option to simplify the configuration of dist2. When enabled, the encoder will automatically scale any dist2 values by the squared position scale factor.
-
- 29 Aug, 2018 6 commits
-
-
This commit introduces automatic derivation of dist2 values by the frontend. Automatic derivation occurs if fewer than levelOfDetailCount values are provided. No syntax changes are made. cfg update: - use single dist2 values based on existing config - ford: 16383 -> 16384
-
This commit removes the ability to vary quant_step_size on a per-LoD basis. This greatly simplifies the codec configuration, especially when used in conjunction with dist2 derivation. cfg update: - rename quantizationSteps* -> quantizationStep* - update quantizationStep* to single values: - lossless-geom lossy-attrs: 8, 16, 32, 64, 128, 256 [8bit] - lossless-geom nearlossless-attrs: no change - lossless-geom lossless-attrs: no change - lossy-geom lossy-attrs: 8 [8bit] => 16-bit cat3 sequences are have 8-bit qs values multipled by 255
-
This commit updates the hard coded limit and default values, and updates the master configuration template.
-
This commit replaces the hard coded threshold values with APS signalling. The default configuration maintains the hard-coded threshold values based on bitdepth.
-
David Flynn authored
This option was added to use the original CfP response output position rounding after the switch to integer point clouds. It is not used and its effect is barely noticeable in the objective distortion metric. Furthermore, the encoder and decoder behaviour is different if the option is enabled.
-
David Flynn authored
-
- 20 Aug, 2018 11 commits
-
-
David Flynn authored
This commit allows the attribute codec to be parametrised by attribute bitdepth. The attribute bitdepth is signalled in the attribute's sequence parameter set description. The specified bitdepth affects cliping in the attribute prediction and reconstruction process.
-
David Flynn authored
This commit allows individual payloads to be inserted into the decoder rather than the decoder expecting to decode each payload in a fixed order. When an output pointcloud is ready, the decoder will call a user supplied callback with the conforming output pointcloud. The user may choose to rescale this point cloud as necessary.
-
David Flynn authored
This commit removes the "lossless" geometry bypass coding mode that simply skipped coding of geometry and required the decoder to read the geometry from the source video. Bypass coding mode is replaced by octree coding.
-
David Flynn authored
This commit rewrites the codec high-level syntax: - the bitstream is divided into "bricks" (akin to an AVC/HEVC slice/tile). - sequence, geometry and attribute parameter sets describe the coding parameters in use generally and for a specific brick. - marshalling the bitstream payloads to a file format is achieved using a type-length-value encoding scheme. Additionally, the triSoup bitstream scale and translation values have been unified with (replaced by) the octree counterparts. For compatibility, existing command line parameters continue to function as before. NB: this commit does not incorporate flexibility in the decoding order. The decoder requires the bitstream to be presented in a fixed order.
-
David Flynn authored
The IntegerLift name is misleading in light of a separate coding method that uses lifting predict and update operators. This commit renames the method to specify it is a prediction-only scheme.
-
This commit implements a lifting scheme optimized for lossy attribute compression, consisting of predict/update operators, and an adaptive quantization strategy.
-
Adaptively pick the number of neighbours considered during the prediction based on analysis of the reconstructed attribute values of the neighbours. From m42642, this is performed by computing the maximum difference between any two reconstructed attribute values of a points neighbours. If the variability is higher than a threshold, then apply a rate-distortion optimization procedure to choose between using either a single neighbour or all neighbours. The index of the best prediction strategy is arithmetically encoded. This commit: - implements the m42642 method - moves buildPredictors into transform-specific attribute encoding/decoding - adds quantizationStepsChroma - renames quantizationSteps -> quantizationStepsLuma df: fixed incorrect application of quantizationStepsLuma|Chroma df: updated cat3 cfg to specify quantizationStepsChroma df: fixed header encoding if quantizationStepsChroma missing
-
David Flynn authored
This commit removes the searchRange option that was set to 0 by m42538.
-
-
David Flynn authored
In the contextualisation of occupancy coding using neighbour patterns, this commit replaces the case when neighbour contextualisation is disabled with a constraint that restricts neighbour contextualisation only examine the direct siblings of a node. The restriction ensures that at most three neighbours may be present for a node. The configuration option "neighbourContextualisation=1" is replaced with "neighbourContextRestriction=0".
-
David Flynn authored
-
- 23 Jul, 2018 2 commits
-
-
David Flynn authored
-
David Flynn authored
-
- 05 Jun, 2018 2 commits
-
-
David Flynn authored
This commit aims to reduce te amount of copy+paste code used to support the three different geometry coding modes by unifying them into a single flow.
-
David Flynn authored
This commit adds a DecoderParameters struct to reduce the overhead of adding extra parameters.
-