1. 21 Nov, 2019 26 commits
    • 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 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
    • 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 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
    • Sehoon Yea's avatar
      attr/m49601: add YCgCoR colour transform support · 1654a45d
      Sehoon Yea authored and David Flynn's avatar David Flynn committed
      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
    • Sehoon Yea's avatar
      attr/m49601: use attr_t (uint16_t) for all attributes · f5e788ec
      Sehoon Yea authored and David Flynn's avatar David Flynn committed
      In order to support bit depths higher than 8bit, this commit adds
      an attr_t type to represent attribute data.  Existing uses of
      uint8_t and uint16_t are converted to attr_t.
      f5e788ec
    • David Flynn's avatar
    • 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
    • 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
    • David Flynn's avatar
      attr: change RGB coding order to GBR · c963fede
      David Flynn authored
      The GBR coding order matches the description in ISO/IEC 23001-8 for
      the identity matrix (MatrixCoefficients=0).
      c963fede
    • 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
    • ChenJiafeng's avatar
      attr/m50669: adjust context derivation for zerorun · a96dda0c
      ChenJiafeng authored and David Flynn's avatar David Flynn committed
      This adoption implements a different context selection method for the
      isOne syntax element in attribute coding.
      a96dda0c
    • 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
      ply: move ply io methods to separate compilation unit · 31d57093
      David Flynn authored
      This commit migrates PCCPointSet3::read and write to ply::read and write.
      31d57093
    • 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
    • David Flynn's avatar
      attr: don't specialise k=0 case in (de/en)codeColorsPred · 8c37a777
      David Flynn authored
      This converts an unrolled loop (with special case for the initial
      iteration) to the rolled up form in order to improve readability.
      8c37a777
    • David Flynn's avatar
      hls/m50745: avoid signalling variables in meaningless cases · f38332a3
      David Flynn authored
      For the lifting scheme, some APS parameters are always signalled.
      However, some syntax elements are not needed depending upon the values
      of attr_coding_type and lifting_scalability_enabled_flag.  This adoption
      avoids signalling unnecessary syntax elements in these cases.
      f38332a3
    • David Flynn's avatar
      release: update version to 7.1 · 047cc958
      David Flynn authored
      047cc958
    • David Flynn's avatar
      attr: pass aps reference rather than use many arguments in calls · 41bc63dc
      David Flynn authored
      This commit refactors calling the LoD generation routines to pass
      the aps rather than a long list of syntax variables.
      41bc63dc
    • 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 Nov, 2019 4 commits
  3. 26 Aug, 2019 4 commits
  4. 14 Aug, 2019 1 commit
  5. 12 Aug, 2019 5 commits