1. 12 Jan, 2020 1 commit
  2. 18 Dec, 2019 4 commits
  3. 17 Dec, 2019 1 commit
  4. 04 Dec, 2019 1 commit
  5. 03 Dec, 2019 2 commits
  6. 27 Nov, 2019 3 commits
  7. 21 Nov, 2019 28 commits
    • David Flynn's avatar
      release: update version to 8.0-rc1 · d580dd0c
      David Flynn authored
      d580dd0c
    • David Flynn's avatar
      2f0bcac0
    • 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
      trisoup: convert internal positions to int32_t · cc9fc8e4
      David Flynn authored
      For consistency with the upcoming change to the pointcloud position
      data type, this commit changes the trisoup coding to internally
      use int32_t rather than uint32_t.
      cc9fc8e4
    • David Flynn's avatar
      geom: convert octree internal positions to int32_t · f47efe4c
      David Flynn authored
      For consistency with the upcoming change to the pointcloud position
      data type, this commit changes the geometry coding to internally
      use int32_t rather than uint32_t.
      f47efe4c
    • 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
      maths: be explicit in the computation type of Vec3::getNorm2 + friends · ee064ec9
      David Flynn authored
      The result and computation types of Vec3<T>::getNorm2 were assumed to
      be T.  This works fine for floating point types, but leads to overflow
      when the underlying vector is Vec3<int32_t>.  This commit requires the
      caller to supply the result of the computation type as a template
      parameter to getNorm2.
      ee064ec9
    • David Flynn's avatar
      maths: allow the usual numeric conversions between Vec3<T> and Vec3<U> · 52848dbf
      David Flynn authored
      This makes Vec3<T> perform more like the usual arithmetic types, in
      order to avoid having to explicitly perform element wise conversions
      when two Vec3<>s have different numeric types.
      
      For instance:
        _i = int16_t() + int()                // typeof(_i) == int
        vi = Vec3<int16_t>() + Vec3<int>()    // typeof(vi) == Vec3<int>
      
        _d = 1 + 2.0                          // typeof(_d) == double
        vd = Vec3<int>(1) + Vec3<double>(2.0) // typeof(vd) == Vec3<double>
      
        vi = Vec3<int>(Vec3<double>())        // typeof(vi) == Vec3<int>
        vd = Vec3<double>(Vec3<int>())        // typeof(vd) == Vec3<double>
      
      Be aware, however, that the usual implicit conversions can result
      in a loss of precision:
      
              int _i = 1 + 1.5                          // _i == 2;
        Vec3<int> vi = Vec3<int>(1) + Vec3<double>(1.5) // vi == Vec3<int>(2)
      52848dbf
    • David Flynn's avatar
      maths: use operator[] in Vec3<> arithmetic operators · 6dcd6f29
      David Flynn authored
      This commit works around an issue in gcc-5 where template friends
      do not grant friendship.
      6dcd6f29
    • Hyejung Hur's avatar
      attr/m51092: reuse lods between attributes of same slice · 0eab32df
      Hyejung Hur authored
      This commit enables sharing of LoDs between attributes of the same
      slice if certain preconditions are met.
      0eab32df
    • David Flynn's avatar
      attr: refactor lod representation to be member of attribute codec · 4a73572f
      David Flynn authored
      This commit relocates the LoD state into an AttributeLoDs class in
      order to enable reusing the LoD data between multiple attributes
      within the same slice.
      4a73572f
    • David Flynn's avatar
      attr: use interface to hide attribute codec internals · f0eedcdb
      David Flynn authored
      In order to isolate the attribute coder from the rest of the codec,
      this adds an interface along with factory methods to the attribute
      codec.
      f0eedcdb
    • David Flynn's avatar
      remove inappropriate copy constructors · b12db69c
      David Flynn authored
      b12db69c
    • 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
    • Zhenzhen Gao's avatar
      11dd54b1
    • Sebastien Lasserre's avatar
      geom/m48905: permit more than one duplicate point in IDCM nodes · 4f17624e
      Sebastien Lasserre authored
      This adoption permits IDCM nodes to signal either:
       - two unique points, or
       - a single position with an arbitrary number of duplicates
      4f17624e
    • Sebastien Lasserre's avatar
      geom/m48906: planar mode coding of octree occupancy · 2c74c097
      Sebastien Lasserre authored
      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
    • David Flynn's avatar
      geom: unify encoder and decoder internal point representation · 8bed893b
      David Flynn authored
      This commit changes the representation of quantised points in the
      encoder to be 'MSB' justified, as is the case in the decoder.
      Quantised points now take the form "0bppppppqqq00" where p denotes
      unquantised bits, q quantised bits, and 0 marks non coded bits.
      8bed893b
    • David Flynn's avatar
      geom: fix interaction of qtbt and octree geometry quantisation · 8f3fd506
      David Flynn authored
      The geometry quantisation assumed that octree nodes were cubes.  The
      addition of qt/bt partitioning modes breaks this premise.  This commit
      addresses the following:
      
       - Only the to-be-coded bits, which may differ for each component, are
         quantised, rather than quantising all bits according to the tree
         depth (which would result in quantising already coded bits).
      
       - The occupancy mask (determining the non-coded occupancy bits) must
         be recomputed for each node.  Since the effect of quantisation is
         to prune back each sub-tree from the leaves, some nodes that would
         have had qt/bt partitions will not be coded, leaving an unequal
         reconstruction.  The solution is to terminate the shorter leaves
         earlier and to recompute the partition.
      8f3fd506
    • Xiang Zhang's avatar
      geom/m49231: add support for non-cubic nodes with implicit qtbt · 667f9209
      Xiang Zhang authored
      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
    • David Flynn's avatar
      geom: remove reconstructed position data from PCCPointSet3 · e156f8aa
      David Flynn authored
      Geometry quantisation introduced an extra field to the point cloud
      to hold scaled positions (to be restored after geometry coding is
      complete).  This had a side effect of causing significant memory
      increases since it applied to every instance of the point cloud.
      
      Since it is not necessary to store both quantised and scaled positions
      separately, this commit removes the extra storage and uses a method
      similar to the decoder to represent partially quantised positions.
      e156f8aa
    • David Flynn's avatar
      geom: use single level based tree position representation · a8e8d3e6
      David Flynn authored
      The geometry tree nodes contain a position element (pos) that identifies
      the spatial position of the node.  At internal nodes this node position
      is the partial position of a point and may either be represented using
      the magnitude of the decoded points, or the magnitude of the current
      depth.
      
      The first form equates to:
       nextPos = curPos | (xyz << currentNodeSize)
      
      The second:
       nextPos = (curPos << 1) | xyz
      
      Where xyz represents a position bit from the coded occupancy.
      
      In order to use the first form to determine neighbour relationships,
      curPos must be shifted down to represent position within the current
      depth.  This repeated shifting, along with the introduction of
      simultaneous quantised and unquantised positions becomes increasingly
      difficult to follow when adding non-cubic nodes (via OtQtBt).
      
      This commit switches the representation to the second form above,
      eliminating various shifted forms and duplicate state.  A decoded
      positions is inverse quantised when reaching a leaf node.
      a8e8d3e6
    • Xiang Zhang's avatar
      geom/m50927: slice-based geometry quantization · 220acf28
      Xiang Zhang authored
      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
      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
      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
    • Sehoon Yea's avatar
      attr/m49601: add YCgCoR colour transform support · 1654a45d
      Sehoon Yea authored
      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