- 21 Nov, 2019 6 commits
-
-
David Flynn authored
Since the codec can only code integer positions, using Vec3<double> for position data requires repeated inefficient format conversions. This commit changes the internal representation to Vec3<int32_t>.
-
David Flynn authored
-
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
-
David Flynn authored
None of these methods need to be inlined.
-
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.
-
David Flynn authored
This adds: - a frame_idx syntax element to every geometry slice header. - (decoder) handling of a frame boundary data unit. Frame boundaries are represented by changes in the value of frame_idx or by the presence of a frame boundary data unit.
-
- 12 Aug, 2019 4 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.
-
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.
-
- 16 Apr, 2019 1 commit
-
-
David Flynn authored
This is part of a series attempting to remove unhelpful typedefs.
-
- 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.
-
David Flynn authored
This commit provides support for each slice to have an origin specified relative to the sequence bounding box. Reconstructed points are offset by the slice origin prior to inverse scaling and translation.
-
- 05 Feb, 2019 3 commits
-
-
David Flynn authored
- calculates the sequence bounding box at the start of encoding (in original coordinates as a decoder may reconstruct it) - signals bounding box in SPS - disables signalling of geometry box origin (always 0)
-
David Flynn authored
-
David Flynn authored
- signal geom_slice_id / attr_geom_slice_id in geometry / attribute header. - attr_geom_slice_id set to current geom_slice_id to maintain relationship between attribute and geometry. - increment geom_slice_id after each round of encoding. - decoder checks that the attribute payload's attr_geom_slice_id corresponds to the most recently decoded geometry payload.
-
- 31 Oct, 2018 6 commits
-
-
This commit integrates a c++ trisoup codec, replacing the previous matlab implementation. The provided code has been reworked to avoid duplicating code, dead code, and operate with the current HLS.
-
David Flynn authored
This commit splits the handling of the geometry brick header and octree geometry coding. The encoder/decoder classes now take care of coding the header, while the geometry coder handles the geometry coding itself.
-
David Flynn authored
This commit prepares for the possibility that geometry coding itself is lossy. Instead of performing recolouring just after input quantisation, it is deferred until after geometry processing. The recolouring functions are updated to handle differences in pointcloud scales rather than requiring the target pointcloud to be scaled identically to the source.
-
David Flynn authored
This commit moves method definitions out of a header file into a separate compilation unit.
-
David Flynn authored
The geometry coder is quite large, especially with trisoup and has no benefit to being a header only implementation. This commit moves the geometry octree coder out of the header files and into geometry_octree_{en,de}coder.cpp.
-
David Flynn authored
This reduces confusion when adding a unique_ptr to the node structure.
-
- 29 Aug, 2018 1 commit
-
-
David Flynn authored
This is an editorial change to improve naming clarity: attr_count represents the number of elements (dimensionality) in an attribute set rather than the total number of attributes.
-
- 20 Aug, 2018 9 commits
-
-
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.
-
-
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
This commit provides an implementation of m42522 to code occupancy using a binary context model rather than a 255-ary model. A total of 581 binary contexts are used compared to the previous 10 255-ary contexts.
-
- 23 Jul, 2018 1 commit
-
-
David Flynn authored
-
- 12 Jun, 2018 1 commit
-
-
David Flynn authored
This commit fixes a null pointer dereference in cases where no reconstructed point cloud output is specified.
-
- 05 Jun, 2018 4 commits
-
-
David Flynn authored
If there is an issue running one of the tmc1 blocks, terminate the encoding immediately and report the error.
-
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 introduces signalling for geometryCodecType in the bitstream headers in order to allow the decoder to be more easily slaved to the bitstream -- ie, to avoid needing to configure a special decoding mode.
-
David Flynn authored
This commit aims to reduce the overload on the --mode option and to restore it to the previous encode/decode functionality. To this end, a new option (--geometryCodec=...) is added that selects the geometry codec. Version v1.0 use of --mode=... is supported.
-