1. 30 Nov, 2017 4 commits
  2. 29 Nov, 2017 1 commit
  3. 28 Nov, 2017 1 commit
    • Yunqing Wang's avatar
      Add convolve 1d functions · d78224f7
      Yunqing Wang authored
      Added convolve 1d functions for 1d-only sub-pixel interpolation, including
      av1_convolve_x() function for "subpel_x_q4 == 0" case and av1_convolve_y()
      function for "subpel_y_q4 == 0" case. Separated into different cases for
      speeding up the codec(especially the decoder). The optimized version will
      be added later.
      
      Change-Id: I08fd317d02c786af68270a971bb3b17c94bd52ca
      d78224f7
  4. 27 Nov, 2017 1 commit
    • Yunqing Wang's avatar
      Convolve copy function optimization · 57e41ea6
      Yunqing Wang authored
      Added a copy function (c version and sse2 version) for full-pixel motion
      vectors. Here, the compound or non-compound cases were not separated, and
      the left shifting were always done.
      
      Change-Id: Idb13e7c0576503a434d0d6e926cd54db645a4ff9
      57e41ea6
  5. 20 Nov, 2017 1 commit
    • Cheng Chen's avatar
      JNT_COMP: refactor if statements · 8263f80c
      Cheng Chen authored
      Refactor if statement that use frame_offset == -1 to indicate
      jnt_comp is not chosen, as distance now can not be negative.
      Instead, add a variable use_jnt_comp_avg for the same functionality.
      
      Change-Id: Ie6b9c6ab36131b48bc9e066babada17046729cd8
      8263f80c
  6. 06 Nov, 2017 2 commits
    • Cheng Chen's avatar
      JNT_COMP: Round the weighted sum · 7caa7382
      Cheng Chen authored
      Previously the weighted sums in convolve are right shifted without
      rounding. This patch adds rounding value before right shifts.
      
      Change-Id: Iea39aca419ac0ca0c32756f345293ce5e28dbd5b
      7caa7382
    • Cheng Chen's avatar
      JNT_COMP: add SIMD implementations for c functions · ef34fff7
      Cheng Chen authored
      Add SIMD implementations for c functions for low bit-depth, making
      encoder speed faster by 3~4x than c functions.
      
      Change-Id: Icca0b07b25489759be9504aaec09d1239076fc52
      ef34fff7
  7. 02 Nov, 2017 2 commits
  8. 27 Oct, 2017 1 commit
    • Zhijie Yang's avatar
      Add short_filter experiment · f02f8aef
      Zhijie Yang authored
      Reduce the motion interpolation filter taps for inter prediction
      blocks with widths or heights smaller than or equal to 4 to alleviate the memory
      bandwidth increase.
      
      AWCY HL: 0.01% Y, -0.20% U, -0.29% V (positive number means loss)
      
      Change-Id: Ic454340e20aea2f1aae622336990f24a9e5b54d8
      f02f8aef
  9. 24 Oct, 2017 1 commit
    • Cheng Chen's avatar
      JNT_COMP: 1. Init version of experiment JNT_COMP · d867c9aa
      Cheng Chen authored
      Enable to assign distance based weight for joint compound prediction.
      
      (w0, w1) are weights for two predictors of different distance to
      current frame.
      
      Use 4 bit precision for quantized distance weight. e.g.
      the prediction is generated as
      
      value = (w0 * p0 + w1 * p1) >> n
      w0 + w1 = (1 << n), n = 4;
      
      Change-Id: Ib0ff0c41c82b9ebb033f498e90c18a03d18969e4
      d867c9aa
  10. 04 Oct, 2017 1 commit
    • Rupert Swarbrick's avatar
      Pack InterpFilters into a single integer · 27e90295
      Rupert Swarbrick authored
      Before this patch, if CONFIG_DUAL_FILTER was true then an MB_MODE_INFO
      stored its filter choices as an array of four numbers, each of which
      was between 0 and 10. It also seems that elements 2 and 3 of the array
      were always the same as elements 0 and 1 when used.
      
      This patch defines a new type(def) called InterpFilters together with
      constructor and extractor functions. When CONFIG_DUAL_FILTER is zero,
      InterpFilters is a synonym for InterpFilter and the constructor and
      extractor functions should compile away to nothing. When it is
      nonzero, InterpFilters is a uint32_t which stores the x filter in the
      high part and the y filter in the low part (this looks strange, but
      matches the old numbering).
      
      Making this change allows us to get rid of lots of special case code
      that was dependent on CONFIG_DUAL_FILTER. The uniform
      extract/make/broadcast interface also actually shortens code in
      general.
      
      Change-Id: I6b24a61bac3e4b220d8d46d0b27cfe865dcfba81
      27e90295
  11. 21 Aug, 2017 1 commit
    • Rupert Swarbrick's avatar
      Obey do_average flag when doing convolve_round · 07089c68
      Rupert Swarbrick authored
      Doing this means that we don't have to memset temporary buffers to
      zero in reconinter.c, which was taking ~5% of cycles in a short
      encoding test (using perf to attach to a running encode).
      
      Change-Id: Ibb6e31920000b876c6ee99f454d89c8a97e9fb31
      07089c68
  12. 15 Aug, 2017 2 commits
  13. 08 Aug, 2017 1 commit
  14. 13 Jul, 2017 2 commits
  15. 08 Jul, 2017 1 commit
    • Fergus Simpson's avatar
      Fix frame scaling prediction · 505f0068
      Fergus Simpson authored
      Use higher precision offsets for more accurate predictor
      generation when references are at a different scale from
      the coded frame.
      
      Change-Id: I4c2c0ec67fa4824273cb3bd072211f41ac7802e8
      505f0068
  16. 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
  17. 02 Jun, 2017 1 commit
  18. 08 May, 2017 1 commit
  19. 26 Apr, 2017 1 commit
  20. 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
  21. 12 Apr, 2017 1 commit
  22. 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
  23. 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
  24. 22 Feb, 2017 2 commits
  25. 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
  26. 15 Feb, 2017 1 commit
  27. 12 Feb, 2017 1 commit
  28. 10 Feb, 2017 1 commit
  29. 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
  30. 02 Feb, 2017 1 commit