1. 21 Nov, 2019 17 commits
    • David Flynn's avatar
      ply: perform inverse scaling during ply writing · 9f898950
      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.
      9f898950
    • David Flynn's avatar
      recolour/m51510: reduce default search range to 1 · 574ceff8
      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.
      574ceff8
    • Sebastien Lasserre's avatar
      geom/m48906: planar mode coding of octree occupancy · 2c74c097
      Sebastien Lasserre authored and David Flynn's avatar David Flynn committed
      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.
      2c74c097
    • Xiang Zhang's avatar
      geom/m49231: add support for non-cubic nodes with implicit qtbt · 667f9209
      Xiang Zhang authored and David Flynn's avatar David Flynn committed
      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
      667f9209
    • Xiang Zhang's avatar
      geom/m50927: slice-based geometry quantization · 220acf28
      Xiang Zhang authored and David Flynn's avatar David Flynn committed
      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
      220acf28
    • Xiang Zhang's avatar
      geom/m49232: octree node geometry quantisation · 4d0d1e66
      Xiang Zhang authored and David Flynn's avatar David Flynn committed
      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
      4d0d1e66
    • Sehoon Yea's avatar
      attr/m49601: add YCgCoR colour transform support · 1654a45d
      Sehoon Yea authored and David Flynn's avatar David Flynn committed
      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.
      1654a45d
    • David Flynn's avatar
      attr/m49601: add support to signal chroma (secondary) bitdepth · 20d66c65
      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.
      20d66c65
    • David Flynn's avatar
      attr: refactor colourspace conversion to support other formats · a8f27566
      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.
      a8f27566
    • Sehoon Yea's avatar
      attr/m49601: use attr_t (uint16_t) for all attributes · f5e788ec
      Sehoon Yea authored and David Flynn's avatar David Flynn committed
      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.
      f5e788ec
    • David Flynn's avatar
    • Sehoon Yea's avatar
      attr/m49605: add inter component prediction for predicting coder · 0a90edeb
      Sehoon Yea authored and David Flynn's avatar David Flynn committed
      This adoption permits prediction of residuals between components of
      the same attribute, coding the residual resulting from this second
      prediction.
      0a90edeb
    • Yiting Shao's avatar
      attr/m48894: introduce neighbour bias LoD predictor construction · 9d34012b
      Yiting Shao authored and David Flynn's avatar David Flynn committed
      This adoption allows determining the weights of each point's
      predicting neighbours with a reduced influence of the, for
      instance, z component.
      9d34012b
    • David Flynn's avatar
      hls/m51027: signal geometry axis order · d96e5851
      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.
      d96e5851
    • David Flynn's avatar
      ply: move ply io methods to separate compilation unit · 31d57093
      David Flynn authored
      This commit migrates PCCPointSet3::read and write to ply::read and write.
      31d57093
    • David Flynn's avatar
      cli: add support for encoding pointcloud sequences · ef9b47b9
      David Flynn authored and David Flynn's avatar David Flynn committed
      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.
      ef9b47b9
    • Satoru KUMA's avatar
      attr/m47352: permit partial geometry and attribute reconstruction · 10a4eb36
      Satoru KUMA authored and David Flynn's avatar David Flynn committed
      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.
      10a4eb36
  2. 26 Aug, 2019 1 commit
  3. 12 Aug, 2019 8 commits
  4. 16 Apr, 2019 7 commits
  5. 06 Feb, 2019 4 commits
    • Yiting Shao's avatar
      slice/m44910: add octree slice partitioning scheme · 08a4a4e9
      Yiting Shao authored and David Flynn's avatar David Flynn committed
      This partitioning method (--partitionMethod=3) decomposes the input
      pointcloud into an octree of depth --partitionOctreeDepth=d, with
      each leaf node corresponding to a slice.
      08a4a4e9
    • Yiting Shao's avatar
      slice/m44910: add longest-edge slice partitioning scheme · 81bde409
      Yiting Shao authored and David Flynn's avatar David Flynn committed
      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.
      81bde409
    • David Flynn's avatar
      hls: initial slice and partitioning framework · 693f8517
      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.
      693f8517
    • Vladyslav Zakharchenko's avatar
      attr/m44940: add binary tree based level-of-detail generator · 29ab50ed
      Vladyslav Zakharchenko authored and David Flynn's avatar David Flynn committed
      This uses a binary-tree to generate the levels-of-details for the
      lifting/predicting transforms as an alternative to Euclidean distance
      thresholding methods.
      29ab50ed
  6. 05 Feb, 2019 3 commits
    • Jungsun Kim's avatar
      attr/m44899: add attribute prediction without LoD · 81b3c8b8
      Jungsun Kim authored and David Flynn's avatar David Flynn committed
      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.
      81b3c8b8
    • David Flynn's avatar
      encoder: allow external configuration of geometry bounding box · 8dbb5a7f
      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.
      8dbb5a7f
    • David Flynn's avatar
      cli: support for PCCVector3<T> types · 2ca8bfa8
      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.
      2ca8bfa8