1. 16 Apr, 2019 1 commit
  2. 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
  3. 05 Feb, 2019 4 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
    • 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
  4. 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
  5. 31 Oct, 2018 7 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
    • Ohji Nakagami's avatar
      trisoup/m44703: use octree coding when trisoup leaf size equals 1 · 780b950b
      Ohji Nakagami authored and David Flynn's avatar David Flynn committed
      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.
      780b950b
    • David Flynn's avatar
      refactor: tidy includes · 2c6d7287
      David Flynn authored
      This commit removes unnecessary include directives.
      2c6d7287
    • David Flynn's avatar
      refactor: move common constants to constants.h · a298b199
      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.
      a298b199
    • David Flynn's avatar
      cli: add option to disable attribute coding · 0ddede25
      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.
      0ddede25
  6. 05 Sep, 2018 1 commit
  7. 03 Sep, 2018 2 commits
    • Khaled Mammou's avatar
      support 16b to 8b reflectance conversion by scaling src/output values · b82deac2
      Khaled Mammou authored and David Flynn's avatar David Flynn committed
      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".
      b82deac2
    • David Flynn's avatar
      cli: add cfg option to simplify dist2 specification · f805b3ce
      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.
      f805b3ce
  8. 29 Aug, 2018 6 commits
    • Khaled Mammou's avatar
      cfg: automatic derivation of dist2 series · 78a60bce
      Khaled Mammou authored and David Flynn's avatar David Flynn committed
      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
      78a60bce
    • 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
      attr: restrict PCCTMC3MaxPredictionNearestNeighborCount to 3 · fec7f6d2
      Khaled Mammou authored and David Flynn's avatar David Flynn committed
      This commit updates the hard coded limit and default values, and
      updates the master configuration template.
      fec7f6d2
    • 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
      decoder: remove roundOutputPositions option · b3c5d0fa
      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.
      b3c5d0fa
    • David Flynn's avatar
      cli: fix reporting of geometry codec type · 322109ed
      David Flynn authored
      322109ed
  9. 20 Aug, 2018 11 commits
    • David Flynn's avatar
      m43387/hls: encode attribute bitdepth · 8a13140f
      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.
      8a13140f
    • David Flynn's avatar
      m43953/hls: add more flexible decoder process · 9af74b63
      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.
      9af74b63
    • David Flynn's avatar
      m43650/geometry: remove bypass coding mode · a21bbc04
      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.
      a21bbc04
    • David Flynn's avatar
      m43953/hls: implement sps, gps, aps syntax structures and tlv fileformat · faf569e8
      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.
      faf569e8
    • David Flynn's avatar
      attr: rename "IntegerLift" coding method to "Pred" · 4d1d2ac6
      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.
      4d1d2ac6
    • Khaled Mammou's avatar
      m42640/attr: lifting scheme for lossy attribute encoding · 5eee0d72
      Khaled Mammou authored and David Flynn's avatar David Flynn committed
      This commit implements a lifting scheme optimized for lossy attribute
      compression, consisting of predict/update operators, and an adaptive
      quantization strategy.
      5eee0d72
    • Khaled Mammou's avatar
      m42642/attr: adaptive distance-based prediction · 85474147
      Khaled Mammou authored and David Flynn's avatar David Flynn committed
      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
      85474147
    • David Flynn's avatar
      m42538/recolour: remove kUseM42141RecolourMethod2=0 case · 817c61d1
      David Flynn authored
      This commit removes the searchRange option that was set to 0 by m42538.
      817c61d1
    • Khaled Mammou's avatar
      m43591/geometry: look-ahead for neighbour occupancy retrieval · 9d11f9fd
      Khaled Mammou authored and David Flynn's avatar David Flynn committed
      9d11f9fd
    • David Flynn's avatar
      m43662/geometry: replace neighb=0 with sibling neighbour constraint · 17e89a3f
      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".
      17e89a3f
    • David Flynn's avatar
      bee78272
  10. 23 Jul, 2018 2 commits