1. 16 Apr, 2019 14 commits
  2. 15 Apr, 2019 1 commit
  3. 25 Feb, 2019 2 commits
  4. 11 Feb, 2019 1 commit
  5. 08 Feb, 2019 1 commit
  6. 06 Feb, 2019 7 commits
    • David Flynn's avatar
      release: update version to 5.0-rc1 · 551d2a84
      David Flynn authored
      551d2a84
    • 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
    • David Flynn's avatar
      hls: preparation to encode per-slice geometry origin · 0d955732
      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.
      0d955732
    • David Flynn's avatar
      pointcloud: concatenation of two point clouds via append() · 58279a83
      David Flynn authored
      With slice/tile-based coding, it is necessary to build an output
      point cloud from independent slice/tiles.  An append operation allows
      the points of two point clouds to be concatenated.
      58279a83
    • 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
  7. 05 Feb, 2019 14 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
    • Danillo Bracco Graziosi's avatar
      raht/m44486: fixed-point implementation · 2e60eef8
      Danillo Bracco Graziosi authored and David Flynn's avatar David Flynn committed
      This replaces the previous floating point transform implementation with
      a fixed-point alternative with essentially identical compression
      performance.
      2e60eef8
    • Ohji Nakagami's avatar
      trisoup/m46036: fixed-point atan2 implementation · cecfbf46
      Ohji Nakagami authored and David Flynn's avatar David Flynn committed
      This commit provides an integer approximation of atan2().
      cecfbf46
    • Ohji Nakagami's avatar
      trisoup/m46036: fixed-point voxelisation of decoded triangles · 21987aef
      Ohji Nakagami authored and David Flynn's avatar David Flynn committed
      This replaces the previous floating point version.  The number of
      fractional bits is set to 8, allowing 24bit (unsigned) geometry
      to be represented in 32bit calculations with negligible effects
      on the reconstruction.
      21987aef
    • David Flynn's avatar
      encoder/m43953: signal bounding box using SPS · 01394738
      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)
      01394738
    • 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
      po-lite: handle container options via traits · 6c14cb8b
      David Flynn authored
      The generic option handling for containers assumes that the container
      type provides clear(), push_back() and iterator methods.  Beyond being
      insufficiently general, the template matches any template template
      type, preventing use of the non template template template.
      
      This commit provides a traits-based method to (a) conditionally
      apply the template template Option definition, and (b) to provide
      methods appropriate for a particular container.
      6c14cb8b
    • 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
      geom/m44753: contextualisation of occupancy using adjacency · 82a0c430
      David Flynn authored
      Each occupancy bit is contextualised based on the number of occupied
      (directly) adjacent child nodes in the (x-1), (y-1), and (z-1)
      neighbour nodes used to generate the neighbour pattern.
      
      Three contextualisation states are added:
       - no adjacent neighbours
       - one adjacent neigbour (=adjacencyGt0)
       - two adjacent neighoburs (=adjacencyGt1)
      82a0c430
    • David Flynn's avatar
      geom/m44752: false occupancy aware neighbour determination · 62b05926
      David Flynn authored
      The neighbour pattern for a node indicates occupied neighbouring nodes.
      
      This commit updates the definition of occupancy for the (x-1), (y-1),
      and (z-1) neighbours to be occupied if the neighbour's adjoining
      children (ie sharing a face with the current node) are occupied.
      
      In the 1-D figure below, at a depth d, the node 'X' has two occupied
      neighbours 'R' and 'L'.  When determining the neighbour pattern of X,
      the (x-1) state of the neighbour's adjoining child ('r') is used
      instead.  For completeness, nodes marked with '?' are not causally
      available.
      
        d+0:   R|X|L
        d+1:  Rr|??|??
      62b05926
    • David Flynn's avatar
      geom/m46402: sixteen entry occupancy context map update table · f777b6ab
      David Flynn authored
      Replaces the existing map update tables (generated from (L*p+s)/(L+1),
      memory L=10) with an adaptive memory (L=max(5, 1/p, 1/(1-p)) clipped
      to 200) represented as delta transitions and quantised to 16 entries.
      f777b6ab