1. 06 Jul, 2019 1 commit
  2. 05 Jul, 2019 1 commit
  3. 25 Jun, 2019 1 commit
  4. 23 Jun, 2019 1 commit
    • Monty's avatar
      Fix for #1286: desync in LRF · 3a7c7d12
      Monty authored
      Correct subtle bug: LRF filters pixel source (cdef or deblock) is
      chosen according to y coordinate after clamping to crop-frame, not
      before.  Bug only appears at bottom-of-frame.
      3a7c7d12
  5. 14 Jun, 2019 1 commit
    • Luca Barbato's avatar
      Ignore or remove the unused code · e03fb89a
      Luca Barbato authored
      Some of it is a rust conversion of the specification and will be used in
      the future, some is just dead code that wasn't seen as dead before the
      visibility rework.
      e03fb89a
  6. 28 May, 2019 1 commit
    • Monty's avatar
      Fix for mult overflow in LRF (#1300) · 936a7286
      Monty authored
      Move to unsigend arithmetic in LRF box accumulations, and simply guard
      the one subtraction that can underflow (that was the reason we were
      using signed ints to begin with).  Fixes an overflow in 12-bit encodes.
      936a7286
  7. 02 May, 2019 1 commit
  8. 20 Apr, 2019 6 commits
    • Romain Vimont's avatar
      Remove unused members from RestorationPlane · 77cfa28b
      Romain Vimont authored
      They have been implemented in TileRestorationPlane instead.
      77cfa28b
    • Romain Vimont's avatar
      Add tiling unit tests · e0bb9027
      Romain Vimont authored
      Add unit tests to make sure that FrameState (including Frame and Plane)
      and FrameBlocks are correctly split into tiled views.
      e0bb9027
    • Romain Vimont's avatar
      Add TileRestorationState · 19eba316
      Romain Vimont authored
      Add TileRestorationState, containing 3 TileStateRestorationPlane
      instances, each containing a TileRestorationUnits instance.
      
      They are tiled views of RestorationState, RestorationPlane and
      FrameRestorationUnits.
      19eba316
    • Romain Vimont's avatar
      Add struct FrameRestorationUnits · 61f3cdb7
      Romain Vimont authored
      The restoration units were stored in a Box<[RestorationUnit]>.
      
      Use a named structure instead, so that we can expose it as a 2D array
      (using Index and IndexMut traits) and split it into tiled views later.
      61f3cdb7
    • Romain Vimont's avatar
      Group constant RestorationPlane fields into cfg · b6044f09
      Romain Vimont authored
      This will simplify the creation of a tiled view, which will keep a
      reference to the RestorationPlane configuration.
      b6044f09
    • 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
  9. 30 Mar, 2019 1 commit
  10. 20 Mar, 2019 2 commits
  11. 18 Mar, 2019 1 commit
    • David Michael Barr's avatar
      Inline often called and almost-trivial functions (#1124) · 7a479a0c
      David Michael Barr authored
      * Inline constrain and msb for cdef_filter_block
        This reduces its average time by around 42%.
      * Inline round_shift for pred_directional and others
        This reduces its average time by around 10%.
      * Inline sgrproj_sum_finish to its various callers
        It is at the lowest level of a hot call graph and almost trivial.
      * Inline get_mv_rate in motion estimation
        It is almost trivial and called often.
      7a479a0c
  12. 11 Mar, 2019 1 commit
  13. 01 Mar, 2019 1 commit
  14. 28 Feb, 2019 1 commit
  15. 27 Feb, 2019 1 commit
  16. 22 Feb, 2019 6 commits
  17. 21 Feb, 2019 1 commit
    • Romain Vimont's avatar
      Make plane generic over pixel component type · 8057ee7c
      Romain Vimont authored
      In order to support both u8 and u16 for plane components, make the Plane
      structure generic over the component type. As a consequence, many other
      structures and functions also become generic.
      
      Some functions are not u8-compatible yet, although they have been make
      generic over the component type to make the compilation work. They
      assert that the size of the generic parameter is 16 bits wide.
      
      For this reason, the root context structure is unconditionally created
      as Context<u16> for now.
      8057ee7c
  18. 11 Feb, 2019 1 commit
  19. 08 Feb, 2019 2 commits
  20. 22 Jan, 2019 1 commit
    • Monty's avatar
      Fix to LRF cropping · 7c158f82
      Monty authored
      Recent simplification that eliminated clipped_cfg broke the loop
      restoration filters and I didn't notice as it's not enabled by default yet.
      This fixes the cropping for chroma in the SGR and Wiener filters.
      7c158f82
  21. 15 Jan, 2019 1 commit
    • Monty's avatar
      Clarify stripe addressing in lrf · de68ab15
      Monty authored
      Eliminate the passing of a PlaneConfig to stripe addressing, add a
      documented field for strip height.
      de68ab15
  22. 14 Jan, 2019 2 commits
  23. 13 Jan, 2019 1 commit
    • Romain Vimont's avatar
      Store restoration units contiguously · 8503cea4
      Romain Vimont authored
      The "matrix" of restoration units was stored in a vector of vectors.
      
      To avoids an additional indirection for each row, store them in a
      contiguous array instead. Besides the (theoretical) performance benerit
      for every access, this will simplify the implementation of tiled-views
      which have to expose non-overlapping parts of the "matrix" via unsafe
      code.
      
      Also, since its size is constant (although not known at compile-time),
      replace the vector by a boxed slice.
      8503cea4
  24. 11 Jan, 2019 2 commits
    • Romain Vimont's avatar
      Remove clipped_cfg from RestorationState · 07032e6b
      Romain Vimont authored
      A RestorationState stores a matrix of restoration units per plane. The
      restoration unit associated to a superblock may be retrieved from a
      superblock offset.
      
      Although this mapping is independant of subsampling, the superblock
      offsets were always converted to plane coordinates, which required to
      handle subsampling nonetheless. As a consequence, a PlaneConfig instance
      associated to RestorationPlane was necessary to find a restoration unit
      from a superblock offset.
      
      Instead, store the (log2) number of superblocks per restoration unit, to
      be able to retrieve a restoration unit from a superblock with a simple
      shift (without any subsampling information).
      
      That way, we can remove the PlaneConfig associated to RestorationPlane,
      which will simplify tiling.
      07032e6b
    • Romain Vimont's avatar
      Use non-padded dimensions from FrameInvariants · 54526343
      Romain Vimont authored
      The loop restoration filter needs the dimensions of the non-padded
      frame, that only FrameInvariants knows.
      
      On construction, RestorationState created a clipped version of the
      PlaneConfigs, that was used in lrf_filter_frame() to get the non-padded
      dimensions.
      
      Instead, directly pass &FrameInvariants to lrf_filter_frame().
      
      This paves the way to remove clipped_cfg from RestorationState entirely,
      to simplify tiling.
      54526343
  25. 10 Jan, 2019 2 commits