1. 15 May, 2017 1 commit
  2. 03 May, 2017 1 commit
  3. 12 Apr, 2017 1 commit
  4. 10 Mar, 2017 1 commit
    • Debargha Mukherjee's avatar
      Replace one self guided filter with highpass · b7bb0976
      Debargha Mukherjee authored
      Adds an option controlled by a macro to replace one of
      the guided filters in the self-guided tool with a simple
      bandpass filtered version generated with a 3x3 kernel.
      By default the macro USE_HIGHPASS_IN_SGRPROJ is 0 (turned
      off), that defaults us to the dual self-guided filter.
      When the macro is turned on, the larger radius guided
      filter is replaced by a simpler filter that is much faster.
      
      Results (if USE_HIGHPASS_IN_SGRPROJ is on vs. off):
      lowres: performance drop by +0.14% (BDRATE)
      midres: performance drop by +0.27% (BDRATE)
      
      Further experiments on this variation of guided filters is
      pending.
      
      Change-Id: I7bbcfcad7ee266cd49a8dc6d96795a454feb1a94
      b7bb0976
  5. 09 Mar, 2017 2 commits
  6. 08 Mar, 2017 1 commit
    • David Barker's avatar
      Make encoder use vectorized self-guided filter · 506eb723
      David Barker authored
      By rearranging the code in restoration.c, we can allow the
      encoder to use the SSE4.1 version of the self-guided filter
      while picking the loop-restoration filter.
      
      This also helps us prepare for adding a highbitdepth SSE4.1
      version of the self-guided filter.
      
      No effect on encoder output, but gives an end-to-end speedup
      of 1-2%.
      
      Change-Id: Id17ba4a0963ddce9f70a7cae666e212e138d5f2c
      506eb723
  7. 06 Mar, 2017 1 commit
    • David Barker's avatar
      Vectorize self-guided filter · ce110cc5
      David Barker authored
      Add an SSE4.1 lowbd version of the self-guided filter for
      loop-restoration, and apply some optimizations to the C
      version.
      
      Approximate times per 128x128 / 256x256 tile on the machine
      this was developed on:
      Previous C:  620us / 2800us
      Optimized C: 500us / 2200us ( 24% /  27% faster)
      SSE4.1:      147us / 600us  (320% / 370% faster)
      
      Change-Id: I23ff5a5482a191aeb06f9d1f767a9f036bb357fe
      ce110cc5
  8. 14 Feb, 2017 1 commit
  9. 12 Feb, 2017 1 commit
    • David Barker's avatar
      Fix segfault with loop-restoration on x86. · befcc425
      David Barker authored
      The WienerInfo struct requires a 16-byte alignment on x86,
      since it contains filter coefficients which are loaded using
      SSE aligned load instructions. But on 32-bit x86, the default
      alignment of aom_malloc/aom_realloc is only 8 bytes, leading
      to occasional segfaults.
      
      To fix this, rather than using aom_realloc to resize WienerInfo
      structures, we always free and re-allocate them using aom_memalign
      
      BUG=aomedia:345
      
      Change-Id: Ib1b2a42d4a2fa215dcc81ea481c51271ab068a37
      befcc425
  10. 27 Jan, 2017 1 commit
  11. 19 Jan, 2017 1 commit
  12. 09 Jan, 2017 2 commits
  13. 07 Jan, 2017 2 commits
    • David Barker's avatar
      Optimize Wiener filter selection · 33f3bfde
      David Barker authored
      * Change the behaviour of search_wiener at borders to match
        the behaviour of the Wiener filter itself
      * Reorder the calculation in compute_stats, saving ~5% of
        encode time at low bitrates (tested on bus_cif.y4m at 200kbps)
      
      Change-Id: I5f649d77fd66584451aaf37697ce9c9af69524e4
      33f3bfde
    • David Barker's avatar
      Various loop-restoration optimizations · 6928a5d2
      David Barker authored
      * Optimize the self-guided and domaintxfmrf filters
      * Save 576KiB of buffers in the encoder and decoder
      * Disable self-guided filter for videos whose width or
        height is < 5, in order to help simplify the filter.
      
      This results in an overall 30-40% improvement in decoder
      speed with loop-restoration enabled (depending on source
      and bitate), with no effect on video quality, *except* for
      videos with width or height < 5 pixels.
      
      Change-Id: Ide9181118ec3a63a0335338f316505b08df2d831
      6928a5d2
  14. 06 Jan, 2017 1 commit
    • Debargha Mukherjee's avatar
      Add UV wiener loop restoration · a43a2d98
      Debargha Mukherjee authored
      Enables Wiener based loop restoration only for the UV
      frames. The selfguided and domaintranform filters do not
      work very well for UV components, hence they are disabled.
      For each UV frame a single set of wiener parameters are
      sent. They are applied tile-wise, but all tiles use the
      same parameters.
      
      BDRATE (Global PSNR) results:
      -----------------------------
      lowres: -1.266% (up from -0.666%, good improvement)
      midres: -1.815% (up from -1.792%, tiny improvement)
      
      Tiling on UV components will be explored subsequently.
      
      Change-Id: Ib5be93121c4e88e05edf3c36c46488df3cfcd1e2
      a43a2d98
  15. 04 Jan, 2017 1 commit
    • David Barker's avatar
      Simplify buffer management for self-guided restoration filter · 3a0df186
      David Barker authored
      * Remove some unused variables
      * Reduce need for casts by typing intermediate buffers appropriately
      * Avoid copying data which is never modified; use the original data
        instead.
      * Reduce number of intermediate buffers required, saving allocations
        of 576KiB in the decoder and ~1MiB in the encoder
      
      No effect on performance
      
      Change-Id: I55243904dd8e818fb6d43fa431903736475d23ff
      3a0df186
  16. 16 Dec, 2016 2 commits
  17. 15 Dec, 2016 2 commits
  18. 14 Dec, 2016 1 commit
  19. 12 Dec, 2016 1 commit
    • Debargha Mukherjee's avatar
      Replace bilateral filter with domain transform RF · 0e67b25c
      Debargha Mukherjee authored
      The main objective is to reduce computational complexity.
      The domain transform filter has an effect of edge preserving smoothing
      at a lower computational cost than the bilateral filter, and can be
      readily paralelized.
      
      A little drop in coding efficiency about 0.06% for lowres, 0.16% for
      midres.
      
      Change-Id: Id949406b7e5afe9b64588d130065c63a76e4f3f9
      0e67b25c
  20. 06 Dec, 2016 1 commit
    • Debargha Mukherjee's avatar
      Add domain transform recursive filter · 3981be93
      Debargha Mukherjee authored
      This filter is meant to replace the bilateral filter,
      but is currently added in addition to the bilateral filter
      for testing.
      
      Change-Id: Ia529701e69833d47c11b3367d5bf804eb8498079
      3981be93
  21. 01 Dec, 2016 1 commit
  22. 29 Nov, 2016 1 commit
  23. 10 Nov, 2016 1 commit
  24. 21 Sep, 2016 1 commit
  25. 19 Sep, 2016 1 commit
  26. 17 Sep, 2016 1 commit
    • Debargha Mukherjee's avatar
      Enable tile-adaptive restoration · 5cd2ab95
      Debargha Mukherjee authored
      Includes a major refactoring/enhancement to support
      tile-adaptive switchable restoration. The framework can be
      readily extended to add more restoration schemes in the
      future. Also includes various cleanups and fixes.
      
      Specifically the framework allows restoration to be conducted
      on tiles such that each tile can be either left unrestored, or
      use bilateral or wiener filtering.
      
      There is a modest improvemnt in coding efficiency (0.1 - 0.2%).
      
      Further enhancements will be added subsequently to improve coding
      efficiency and complexity.
      
      Change-Id: I5ebedb04785ce1ef6f324abe209e925c2d6cbe8a
      5cd2ab95
  27. 07 Sep, 2016 1 commit
  28. 01 Sep, 2016 2 commits
  29. 29 Aug, 2016 1 commit
    • Aamir Anis's avatar
      Tiling in loop restoration + cosmetics · e40e6e57
      Aamir Anis authored
      Frame can be split into rectangular tiles for application of separate
      bilateral or Wiener filters per tile. Some variable names changed for
      better readability.
      
      Change-Id: I13ebc4d0b0baf368e524db5ce276f03ed76af9c8
      e40e6e57
  30. 12 Aug, 2016 1 commit
  31. 06 Jun, 2016 1 commit
    • Aamir Anis's avatar
      Updated loop restoration · 99d9a8fe
      Aamir Anis authored
      1. Wiener restoration filter now has normalization and evaluation of
      quantization procedure.
      2. Corrected scaling of bits in RD cost computation.
      3. Changed dynamic range and number of bits for Wiener filter.
      Observed gains: Overall 0.58% for low_res, 0.7% for mid_res sequences.
      
      Change-Id: I8928b3ea493bfe1790926b00388d6c4bafc08e19
      99d9a8fe
  32. 11 Mar, 2016 1 commit
  33. 12 Feb, 2016 1 commit
    • Debargha Mukherjee's avatar
      Adding loop wiener restoration · 8b0a5b87
      Debargha Mukherjee authored
      Adds a wiener filter based restoration scheme in loop which can
      be optionally selected instead of the bilateral filter.
      
      The LMMSE filter generated per frame is a separable symmetric 7
      tap filter. Three parameters for each of horizontal and vertical
      filters are transmitted in the bitstream. The fourth parameter
      is obtained assuming the sum is normalized to 1.
      Also integerizes the bilateral filters, along with other
      refactoring necessary in order to support the new switchable
      restoration type framework.
      
      derflr: -0.75% BDRATE
      
      [A lot of videos still prefer bilateral, however since many frames
      now use the simpler separable filter, the decoding speed is
      much better].
      
      Further experiments to follow, related to replacing the bilateral.
      
      Change-Id: I6b1879983d50aab7ec5647340b6aef6b22299636
      8b0a5b87
  34. 29 Jan, 2016 1 commit