1. 21 Nov, 2019 14 commits
    • David Flynn's avatar
      pointcloud/m42611: change geometry representation from double to int32_t · e36bbaee
      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>.
      e36bbaee
    • Hyejung Hur's avatar
      attr/m51092: reuse lods between attributes of same slice · 0eab32df
      Hyejung Hur authored and David Flynn's avatar David Flynn committed
      This commit enables sharing of LoDs between attributes of the same
      slice if certain preconditions are met.
      0eab32df
    • 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
    • Noritaka Iguchi's avatar
      attr/m49626: add region-wise quantization support for LoD coding · 6b18730b
      Noritaka Iguchi authored and David Flynn's avatar David Flynn committed
      A per-slice region may be defined with a qp offset.  Points within
      the region have an offset applied to the per-level QP.
      6b18730b
    • 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/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
      hls/m51025: support multi-frame sequences · 105120bd
      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.
      105120bd
    • 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. 12 Aug, 2019 4 commits
  3. 16 Apr, 2019 8 commits
  4. 06 Feb, 2019 1 commit
  5. 05 Feb, 2019 5 commits
    • 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
      hls/m45867: add tile inventory writer/parser · d2892504
      David Flynn authored
      d2892504
    • David Flynn's avatar
      d5d4e366
    • David Flynn's avatar
      hls/m43953: signal geom_slice_id / attr_geom_slice_id · 70c904ff
      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.
      70c904ff
    • David Flynn's avatar
      trisoup/m46530: replace trisoup hls with trisoup_node_size_log2 · 0d8f1119
      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)
      0d8f1119
  6. 01 Nov, 2018 2 commits
    • Khaled Mammou's avatar
      attr/m43781: fast lifting for lossy attributes · 441b6b45
      Khaled Mammou authored and David Flynn's avatar David Flynn committed
      Replace the k-d tree based nearest neighbour search with an approximate
      search based upon the points in Morton order.
      441b6b45
    • Toshiyasu Sugio's avatar
      attr/m43665: configurable number of direct neighbour predictors · dce92811
      Toshiyasu Sugio authored and David Flynn's avatar David Flynn committed
      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.
      dce92811
  7. 31 Oct, 2018 3 commits
    • David Flynn's avatar
      geom/m43600: intra geometry occupancy prediction · 89fae502
      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
      89fae502
    • David Flynn's avatar
      geom/m44750: occupancy context maps with on-the-fly update · e9dd9ce0
      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.
      e9dd9ce0
    • Khaled Mammou's avatar
      geom/m43592: use dual lut coder for bytewise occupancy coding · 23ba6f71
      Khaled Mammou authored and David Flynn's avatar David Flynn committed
      This commit allows bytewise encoding of occupancy symbols using the
      dual-lut coder.
      23ba6f71
  8. 29 Aug, 2018 3 commits
    • Khaled Mammou's avatar
      attr: use single quant_step_size_* for all LoDs in lift/pred · 51f21bcb
      Khaled Mammou authored and David Flynn's avatar David Flynn committed
      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
      51f21bcb
    • Khaled Mammou's avatar
      m42642/attr: add hls signalling of adaptive prediction threshold · ee776724
      Khaled Mammou authored and David Flynn's avatar David Flynn committed
      This commit replaces the hard coded threshold values with APS signalling.
      The default configuration maintains the hard-coded threshold values based
      on bitdepth.
      ee776724
    • David Flynn's avatar
      hls: rename sps attr_count to attr_num_dimensions · 8b6ccbc7
      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.
      8b6ccbc7