1. 09 Jun, 2017 3 commits
    • David Barker's avatar
      Vectorize av1_convolve_2d() · 8295c7c7
      David Barker authored
      Includes a test case based on the warp filter tests
      
      Change-Id: I9abea53a088f68bb8a928ebd7cb96b3266a63c13
      8295c7c7
    • David Barker's avatar
      Unify high-precision convolve filters: convolve-round · 726a953c
      David Barker authored
      * Reduce bit widths of intermediate values where possible
      * Change ROUND_POWER_OF_TWO_SIGNED to ROUND_POWER_OF_TWO
        in av1(_highbd)_convolve_2d
      * Apply offsetting and bounds checking, to match the intended
        hardware implementation
      * Separate the implementations of av1(_highbd)_convolve_2d
        into compound-round and non-compound-round cases. This is because
        there are now a significant number of differences between the
        functions.
      
      Overall, this is expected to affect the bitstream and encoder output
      when convolve-round alone is enabled, but *not* when compound-round
      is enabled.
      
      Change-Id: I8c21e0645fd11f64c59552885f87f4a5dd40ccf7
      726a953c
    • David Barker's avatar
      Add 'do_average' to ConvolveParams structure · e64d51a9
      David Barker authored
      The 'ref' member of ConvolveParams currently serves two purposes:
      * To indicate which component of a compound we're currently predicting,
        eg. for fetching interpolation filters with dual-filter enabled.
      * To determine whether we should average into the destination buffer.
      
      But there are two cases where we want to separate these out:
      * In joint_motion_search, we want to try combining a fixed second
        prediction with various first predictions.
      * When searching masked interinter compounds, we want to predict
        each component separately then try different combinations.
      
      In these cases, we set 'ref' to 0 and use temporary variables to
      make sure we use the correct interpolation filters. But this is
      quite fragile.
      
      This patch separates out the two uses into separate members.
      This allows us to remove some temporary variables, but more
      importantly gives easy fixes to two bugs in
      build_inter_predictors_single_buf (used by rdopt):
      
      * We previously set ref=0 but didn't fix up the interpolation filters
      * For ZERO_ZEROMV modes, the second component would accidentally
        average into the (uninitialized!) second prediction buffer
      
      BUG=aomedia:577
      BUG=aomedia:584
      BUG=aomedia:595
      
      Change-Id: Ibc31d1ac701a029ea5efaa1197dd402bc4b7af1e
      e64d51a9
  2. 02 Jun, 2017 1 commit
  3. 08 May, 2017 1 commit
  4. 26 Apr, 2017 1 commit
  5. 21 Apr, 2017 1 commit
    • Angie Chiang's avatar
      Add compound_round experiment · f87d8373
      Angie Chiang authored
      This experiment extracts the post compound rounding feature
      from convolve_round experiment
      
                            lowres
      convolve_round       -1.493%
      compound_round only  -0.874%
      
      Change-Id: I084cf10b5155edd408848e44681f8af66b803724
      f87d8373
  6. 12 Apr, 2017 1 commit
  7. 10 Apr, 2017 1 commit
    • Fergus Simpson's avatar
      scaling: Avoid SSSE3 convolution instructions when scaling · fc59389f
      Fergus Simpson authored
      The SSE3 convolve functions do not work when scaling is involved. If
      either x_step_q4 or y_step_q4 is not 16 scaling will occur and an assert
      fails.
      
      This patch creates a C version of av1_convolve, av1_convolve_c. This
      function in turn calls all C versions of what av1_convolve calls. New C
      versions of these called functions have been created where needed and
      the same for the functions they call. This means that when scaling is
      enabled no asserts fail. av1_convolve_c is called instead of
      av1_convolve when x_step_q4 or y_step_q4 is not 16.
      
      Change-Id: I604d2716e034e23a0553fb7004133d3075514a7a
      fc59389f
  8. 24 Feb, 2017 1 commit
    • Angie Chiang's avatar
      Let hbd conv func be flexible · 0a2c0cbc
      Angie Chiang authored
      This CL allow us to change filter coefficients easily for SIMD
      implementation of high bitdepth convolution functions
      
      Change-Id: I454a5c76d3ba9e4454118c6a9d87737b3aa24898
      0a2c0cbc
  9. 22 Feb, 2017 2 commits
  10. 21 Feb, 2017 1 commit
    • Angie Chiang's avatar
      Clean up convolve.c · c5958db4
      Angie Chiang authored
      Remove code related to convolve_round experiment out of
      av1_convolve()
      
      The experimental code is now implemented in av1_convolve_2d().
      
      Change-Id: I409a390876e9d19e6ee42150f0ac20ff108244a9
      c5958db4
  11. 15 Feb, 2017 1 commit
  12. 12 Feb, 2017 1 commit
  13. 10 Feb, 2017 1 commit
  14. 06 Feb, 2017 1 commit
    • Angie Chiang's avatar
      Add av1_convolve_2d_facade · 7927a97d
      Angie Chiang authored
      When convolve_round is on, av1_convolve_2d_facade will be used for
      interpolation rather than av1_convolve. Will remove the experiment
      code of convolve_round experiment from av1_convolve in another CL.
      
      So far we use 4-bit rounding in the intermediate stage on top of using
      post rounding for compound mode after the last stage.
      
      This will give us roughly 0.45% gain on lowres , 0.39% on midres and
      roughly 0.6-0.7% on hdres
      Altogether, is 1.15% on lowresm, 0.74% on midres and roughly 1.7-1.8% on
      hdres
      
      Note that there no restriction usage of 12-tap filter in the CL.
      Adding that, we will lose roughly 0.1% again on lowres.
      
      Change-Id: I6332e1d888e28a3b3ddc29711817d66e52cb5cdf
      7927a97d
  15. 02 Feb, 2017 1 commit
  16. 20 Jan, 2017 2 commits
    • Angie Chiang's avatar
      Refactor av1_convolve · caa9e5ad
      Angie Chiang authored
      Move declaration of filter_params_x/y outside of if/else block
      
      Change-Id: I4f908872b7ff85b440a12a535d939a3c137aaab5
      caa9e5ad
    • Angie Chiang's avatar
      Add CONVOLVE_POST_ROUNDING flag · 117aa0dc
      Angie Chiang authored
      By turning on CONVOLVE_POST_ROUNDING, in the compound inter
      prediction mode, FILTER_BITS rounding is moved after the summation
      of two predictions.
      
      Note that the post rounding is only applied on non-sub8x8 block
      
             PSNR     BDRate
      lowres -0.808%  -0.673%
      
      Change-Id: Ib91304e6122c24d832a582ab9f5757d33eac876c
      117aa0dc
  17. 18 Jan, 2017 2 commits
  18. 13 Jan, 2017 2 commits
    • Angie Chiang's avatar
      Add rounding option into av1_convolve · 674bffdc
      Angie Chiang authored
      Use a round flag in ConvolveParams to indicate if the destination buffer
      has the result rounded by FILTER_BITS or not.
      This CL is part of the goal of reducing interpolation rounding error in
      compound prediction mode.
      
      Change-Id: I49e522a89a67a771f5a6e7fbbc609e97923aecb6
      674bffdc
    • Jingning Han's avatar
      Clean up redundant #if statements · 203b1d30
      Jingning Han authored
      Change-Id: Ia4779ffb47de333d670ae110cbdfb6cc567da910
      203b1d30
  19. 15 Dec, 2016 2 commits
  20. 12 Dec, 2016 4 commits
  21. 01 Dec, 2016 2 commits
    • Angie Chiang's avatar
      Turn on SIMD optimization for dual_filter · 7a483cff
      Angie Chiang authored
      Let aom_convolve8_### SIMD implementation support any block width.
      Turn on SIMD optimization when interpolation filter types on two
      directions are different.
      
      This will reduce 30% of encoding time when dual_filter and ext_interp
      both on.
      
      Change-Id: I539dbb2737f01835034b7269656a15b2058fa3cc
      7a483cff
    • Angie Chiang's avatar
      Allow only one direction uses 12 sharp filter · b9b017d5
      Angie Chiang authored
      Performance drop
      BDRate
      lowres -0.116%
      midres -0.073%
      hdres  -0.056%
      
      Change-Id: Ic90caf9b8f6fb9d9fd6f9c0e80436a7c468a3c97
      b9b017d5
  22. 30 Nov, 2016 1 commit
  23. 29 Nov, 2016 1 commit
    • Angie Chiang's avatar
      Add av1_convolve_init() · e067de00
      Angie Chiang authored
      Generate simd filter structure in av1_convolve_init()
      This will provide flexibility of changing filter coefficients.
      
      Change-Id: If79f84c56483aa08c894d6b12e2b6ce10147f0ce
      e067de00
  24. 01 Nov, 2016 1 commit
  25. 25 Oct, 2016 1 commit
  26. 09 Sep, 2016 1 commit
    • James Zern's avatar
      s/INTERP_FILTER/InterpFilter/ · 7b9407a8
      James Zern authored
      this matches style guidelines and stabilizes successive runs of
      clang-format across the tree. remaining types should be address in
      successive commits.
      
      Change-Id: I6ad3f69cf0a22cb9a9b895b272195f891f71170f
      7b9407a8
  27. 01 Sep, 2016 2 commits
  28. 12 Aug, 2016 1 commit