1. 02 Jul, 2019 1 commit
  2. 25 Jun, 2019 1 commit
  3. 22 Jun, 2019 1 commit
  4. 20 Jun, 2019 5 commits
  5. 14 Jun, 2019 1 commit
  6. 01 Jun, 2019 1 commit
  7. 21 May, 2019 1 commit
    • Yushin Cho's avatar
      Fix that tx partition can have decoded pixels during tx rdo · 937d250d
      Yushin Cho authored
      The fix applies when tx rdo is turned on and "--tune Psnr" is used.
      
      The coding gain with this fix at speed 2 with --tune Psnr
      
         PSNR | PSNR Cb | PSNR Cr | PSNR HVS |    SSIM | MS SSIM | CIEDE 2000
      -0.4020 | -0.1592 | -0.0924 |  -0.2546 | -0.4039 | -0.3031 |    -0.1819
      937d250d
  8. 20 May, 2019 1 commit
  9. 15 May, 2019 1 commit
  10. 10 May, 2019 2 commits
  11. 09 May, 2019 1 commit
    • Thomas Daede's avatar
      Convert some Vecs in RDO to ArrayVecs. · 63f13f77
      Thomas Daede authored
      These are fixed size and stack allocated rather than malloc()'ed,
      hopefully improving speed and reducing memory fragmentation.
      
      Vecs that are passed across functions have not been converted.
      63f13f77
  12. 02 May, 2019 1 commit
  13. 20 Apr, 2019 13 commits
    • Romain Vimont's avatar
      Fix crash when enable_cdef is false · ac5ae36b
      Romain Vimont authored
      The region may be smaller than the lrf_input plane. In that case,
      &rec[..width] panic!ed.
      ac5ae36b
    • Romain Vimont's avatar
      Use TileBlocks · 28f0c8f9
      Romain Vimont authored
      Encode the single-tile frame using a single-tile TileBlocks.
      28f0c8f9
    • Romain Vimont's avatar
      Pass TileBlocks instead of FrameBlocks · 158620c9
      Romain Vimont authored
      Some functions may be called either frame-wise or tile-wise, but
      FrameBlocks is not accessible tile-wise.
      
      Make them accept TileBlocks instead: it is always possible to get a
      TileBlocks from the whole FrameBlocks.
      158620c9
    • Romain Vimont's avatar
      Use TileRect to fix intra-prediction offsets · 6b6c2ba8
      Romain Vimont authored
      The previous commit fixed the confusion between absolute offsets and
      offsets relative to the current tile in intra prediction. To do so, it
      changed the logic to pass the whole tile as a region, with an additional
      block offset.
      
      Instead, pass the region of interest (i.e. restore the previous
      behavior) but with an additional TileRect to know the current tile
      location.
      6b6c2ba8
    • David Michael Barr's avatar
      Fix DC_PRED and CFL_PRED at tile boundaries · 855b6d06
      David Michael Barr authored
      
      
      A BlockRegion only knows its absolute offset, not its offset relative to
      the tile.
      
      In predict_intra_inner(), pass the whole region for the tile and the
      block offset relative to the tile.
      Signed-off-by: default avatarRomain Vimont <rom1v@videolabs.io>
      855b6d06
    • Romain Vimont's avatar
      Rename frame/title variables in RDO · 6dc9bb05
      Romain Vimont authored
      This helps to know whether the values are relative to the current tile
      or to the whole frame.
      6dc9bb05
    • Romain Vimont's avatar
      Use tiling structures · 744a2365
      Romain Vimont authored
      Encode the frame as a single tile using the new tiling structures.
      744a2365
    • Romain Vimont's avatar
      Use tiling structures for motion estimation · b952ad48
      Romain Vimont authored
      Create a temporary TileStateMut from the FrameState, and use it for
      motion estimation.
      b952ad48
    • Romain Vimont's avatar
      Pass MI width and height to get_sub_partitions() · 36550d11
      Romain Vimont authored
      The function get_sub_partitions_with_border_check() retrieved w_in_b and
      h_in_b from FrameInvariants.
      
      Pass these values directly. That will make it usable with tiles.
      36550d11
    • Romain Vimont's avatar
      Create CDEF SB frames from a Tile · 948ba74b
      Romain Vimont authored
      To prepare for tiling, create super-block frames from a tile instead of
      a frame.
      948ba74b
    • Romain Vimont's avatar
      Move initializations out of the loop · 08e95261
      Romain Vimont authored
      They do not depend on the loop variable.
      08e95261
    • Romain Vimont's avatar
      Simplify restoration units conditions · 3af0f22d
      Romain Vimont authored
      For a given super-block, either none or all 3 planes have a restoration
      unit.
      3af0f22d
    • Romain Vimont's avatar
      Refactor restoration units · e7521d26
      Romain Vimont authored
      A restoration unit may contain several super-blocks, and may be
      "stretched" on borders, even across tile boundaries:
      <https://github.com/xiph/rav1e/issues/631#issuecomment-454419152>
      
      In the bitstream, it must be coded only for its first super-block, in
      plane order. To do so, a "coded" flag was set the first time, so that
      further super-blocks using the same restoration will not "code" it.
      
      But this assumed that all super-blocks associated to a restoration unit
      were encoded sequentially in plane order. With parallel tile encoding,
      even with proper synchronization (preventing data races), this
      introduces a race condition: a "stretched" restoration unit may not be
      coded in its first super-block, corrupting the bitstream.
      
      To avoid the problem, expose the restoration unit only for its first
      super-block, by returning a Option<&(mut) RestorationUnit>. This also
      avoids the need for any synchronization (a restoration unit will never
      be retrieved by more than 1 tile).
      
      At frame level, lrf_filter_frame() will still retrieve the correct
      restoration unit for each super-block, by calling
      restoration_unit_by_stripe().
      e7521d26
  14. 15 Apr, 2019 1 commit
  15. 14 Apr, 2019 1 commit
  16. 12 Apr, 2019 1 commit
  17. 09 Apr, 2019 3 commits
  18. 08 Apr, 2019 1 commit
  19. 05 Apr, 2019 1 commit
  20. 04 Apr, 2019 1 commit
    • Romain Vimont's avatar
      Pass plane and offset to get_intra_edges() · b8063c41
      Romain Vimont authored
      In order to guarantee that a slice never exceeds its parent,
      EdgedPlaneSlice was introduced by #1082.
      
      However, it added complexity, and happens to be insufficient to adapt
      get_intra_edges() for tiling (we can't retrieve the tile dimensions).
      
      Instead, pass both the Plane (in the future, the plane region associated
      with the tile) and the plane offset. It's simpler, and it still does not
      require a slice to exceed its parent.
      b8063c41
  21. 30 Mar, 2019 1 commit