1. 21 Nov, 2019 6 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
    • David Flynn's avatar
      remove inappropriate copy constructors · b12db69c
      David Flynn authored
      b12db69c
    • 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
    • David Flynn's avatar
      refactor: move pointset processing functions to compilation unit · d0e2ec04
      David Flynn authored
      None of these methods need to be inlined.
      d0e2ec04
    • 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
    • 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
  2. 12 Aug, 2019 4 commits
  3. 16 Apr, 2019 1 commit
  4. 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
    • 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
  5. 05 Feb, 2019 3 commits
  6. 31 Oct, 2018 6 commits
  7. 29 Aug, 2018 1 commit
  8. 20 Aug, 2018 9 commits
    • 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
    • Khaled Mammou's avatar
      instrument runtime of geometry and attribute encoding/decoding · 87146814
      Khaled Mammou authored and David Flynn's avatar David Flynn committed
      87146814
    • 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
      m42522/geometry: code occupancy using a binary arithmetic codec · 7d62e7ca
      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.
      7d62e7ca
  9. 23 Jul, 2018 1 commit
  10. 12 Jun, 2018 1 commit
  11. 05 Jun, 2018 4 commits