1. 01 Dec, 2015 1 commit
  2. 13 Nov, 2015 1 commit
    • paulwilkins's avatar
      Changes to exhaustive motion search. · 0149fb3d
      paulwilkins authored
      This change alters the nature and use of exhaustive motion search.
      
      Firstly any exhaustive search is preceded by a normal step search.
      The exhaustive search is only carried out if the distortion resulting
      from the step search is above a threshold value.
      
      Secondly the simple +/- 64 exhaustive search is replaced by a
      multi stage mesh based search where each stage has a range
      and step/interval size. Subsequent stages use the best position from
      the previous stage as the center of the search but use a reduced range
      and interval size.
      
      For example:
        stage 1: Range +/- 64 interval 4
        stage 2: Range +/- 32 interval 2
        stage 3: Range +/- 15 interval 1
      
      This process, especially when it follows on from a normal step
      search, has shown itself to be almost as effective as a full range
      exhaustive search with step 1 but greatly lowers the computational
      complexity such that it can be used in some cases for speeds 0-2.
      
      This patch also removes a double exhaustive search for sub 8x8 blocks
      which also contained  a bug (the two searches used different distortion
      metrics).
      
      For best quality in my test animation sequence this patch has almost
      no impact on quality but improves encode speed by more than 5X.
      
      Restricted use in good quality speeds 0-2 yields significant quality gains
      on the animation test of 0.2 - 0.5 db with only a small impact on encode
      speed. On most clips though the quality gain and speed impact are small.
      
      Change-Id: Id22967a840e996e1db273f6ac4ff03f4f52d49aa
      0149fb3d
  3. 11 Nov, 2015 1 commit
    • Geza Lore's avatar
      Add AVX vectorized vp9_diamond_search_sad · 5eefd3eb
      Geza Lore authored
      This function now has an AVX intrinsics version which is about 80%
      faster compared to the C implementation. This provides a 2-4% total
      speed-up for encode, depending on encoding parameters. The function
      utilizes 3 properties of the cost function lookup table, constructed
      in 'cal_nmvjointsadcost' and 'cal_nmvsadcosts'.
      For the joint cost:
        - mvjointsadcost[1] == mvjointsadcost[2] == mvjointsadcost[3]
      For the component costs:
        - For all i: mvsadcost[0][i] == mvsadcost[1][i]
              (equal per component cost)
        - For all i: mvsadcost[0][i] == mvsadcost[0][-i]
              (Cost function is even)
      These must hold, otherwise the AVX version of the function cannot be used.
      
      Change-Id: I6c2791d43022822a9e6ab43cd124a773946d0bdc
      5eefd3eb
  4. 06 Nov, 2015 1 commit
    • James Zern's avatar
      Revert "Add AVX vectorized vp9_diamond_search_sad" · 30466f26
      James Zern authored
      This reverts commit f1342a7b.
      
      This breaks 32-bit builds:
       runtime error: load of misaligned address 0xf72fdd48 for type 'const
      __m128i' (vector of 2 'long long' values), which requires 16 byte
      alignment
      
      + _mm_set1_epi64x is incompatible with some versions of visual studio
      
      Change-Id: I6f6fc3c11403344cef78d1c432cdc9147e5c1673
      30466f26
  5. 05 Nov, 2015 1 commit
    • Geza Lore's avatar
      Add AVX vectorized vp9_diamond_search_sad · f1342a7b
      Geza Lore authored
      This function now has an AVX intrinsics version which is about 80%
      faster compared to the C implementation. This provides a 2-4% total
      speed-up for encode, depending on encoding parameters. The function
      utilizes 3 properties of the cost function lookup table, constructed
      in 'cal_nmvjointsadcost' and 'cal_nmvsadcosts'.
      For the joint cost:
        - mvjointsadcost[1] == mvjointsadcost[2] == mvjointsadcost[3]
      For the component costs:
        - For all i: mvsadcost[0][i] == mvsadcost[1][i]
              (equal per component cost)
        - For all i: mvsadcost[0][i] == mvsadcost[0][-i]
              (Cost function is even)
      These must hold, otherwise the AVX version of the function cannot be used.
      
      Change-Id: I184055b864c5a2dc37b2d8c5c9012eb801e9daf6
      f1342a7b
  6. 02 Nov, 2015 1 commit
    • Marco's avatar
      Move noise level estimate outside denoiser. · c7da053d
      Marco authored
      Source noise level estimate is also useful for
      setting variance encoder parameters (variance thresholds,
      qp-delta, mode selection, etc), so allow it to be used also
      if denoising is not on.
      
      Change-Id: I4fe23d47607b4e17a35287057f489c29114beed1
      c7da053d
  7. 27 Oct, 2015 1 commit
  8. 23 Oct, 2015 1 commit
    • Marco's avatar
      VP9: Estimate noise level for denoiser. · d162934b
      Marco authored
      Periodically estiamte noise level in source, and only denoise
      if estimated noise level is above threshold.
      
      Change-Id: I54f967b3003b0c14d0b1d3dc83cb82ce8cc2d381
      d162934b
  9. 06 Oct, 2015 1 commit
    • Marco's avatar
      Add first_spatial_layer_to_encode to SVC. · 7266bedc
      Marco authored
      Use the existing VP9_SET_SVC control to set the
      first spatial layer to encode.
      
      Since we loop over all spatial layers inside the encoder, the
      setting of spatial_layer_id via VP9_SET_SVC has no relevance.
      Use it instead to set the first_spatial_layer_to_encode,
      which allows an application to skip encoding lower layer(s).
      
      Change only affects the 1 pass CBR SVC.
      
      Change-Id: I5d63ab713c3e250fdf42c637f38d5ec8f60cd1fb
      7266bedc
  10. 02 Oct, 2015 2 commits
    • Marco's avatar
      Fix to denoiser with dynamic resize. · 86ede509
      Marco authored
      Temporary fix to denoiser when dynamic resizing is on.
       -Reallocate denoiser buffers on resized frame.
       -Force golden update on resized frame.
       -Don't denoise resized frame, and copy source into denoised buffers.
      
      Change-Id: Ife7638173b76a1c49eac7da4f2a30c9c1f4e2000
      86ede509
    • jackychen's avatar
      Two-steps scaling in VP9 encoder dynamic resizing. · ba06be38
      jackychen authored
      Dynamic resizing now support two-steps scaling: first go down to
      3/4 and then 1/2. This feature is under a flag which controls the
      switch between two-steps scaling and one-step scaling (1/2 only).
      
      Change-Id: I3a6c1d3d5668cf8e016a0a02aeca737565604a0f
      ba06be38
  11. 29 Sep, 2015 1 commit
    • Scott LaVarnway's avatar
      VP9: move loopfilter build masks to decode loop · 77181171
      Scott LaVarnway authored
      The loopfilter masks are now built in the decode loop.
      This is done so we can eventually reduce the number of
      MODE_INFO structs required by the decoder.
      
      The encoder builds the masks for the entire frame prior
      to calling the loopfilter.
      
      Change-Id: Ia2146b07e0acb8c50203e586dfae0c4c5b316f11
      77181171
  12. 26 Sep, 2015 2 commits
    • Ronald S. Bultje's avatar
      vp9/10: improve support for render_width/height. · 812945a8
      Ronald S. Bultje authored
      In the decoder, map this to the output variable vpx_image_t.r_w/h.
      This is intended as an improved version of VP9D_GET_DISPLAY_SIZE,
      which doesn't work with parallel frame decoding. In the encoder,
      map this to a codec control func (VP9E_SET_RENDER_SIZE) that takes
      a w/h pair argument in a int[2] (identical to VP9D_GET_DISPLAY_SIZE).
      
      Also add render_size to the encoder_param_get_to_decoder unit test.
      
      See issue 1030.
      
      Change-Id: I12124c13602d832bf4c44090db08c1009c94c7e8
      812945a8
    • Ronald S. Bultje's avatar
      Rename display_{size,width,height} to render_*. · 36ffe644
      Ronald S. Bultje authored
      The name "display_*" (or "d_*") is used for non-compatible information
      (that is, the cropped frame dimensions in pixels, as opposed to the
      intended screen rendering surface size). Therefore, continuing to use
      display_* would be confusing to end users. Instead, rename the field
      to render_*, so that struct vpx_image can include it.
      
      Change-Id: Iab8d2eae96492b71c4ea60c4bce8121cb2a1fe2d
      36ffe644
  13. 24 Sep, 2015 1 commit
  14. 21 Sep, 2015 1 commit
    • jackychen's avatar
      Change size on first frame and change config cause crash. · 55f092db
      jackychen authored
      Reallocation of mi buffer fails if change size on the first frame and
      change config in subsequent frames. Add a condition for resolution
      check to avoid assertion failure.
      
      BUG=1074
      
      Change-Id: Ie26ed816a57fa871ba27a72db9805baaaeaba9f3
      55f092db
  15. 16 Sep, 2015 1 commit
    • Ronald S. Bultje's avatar
      Add support for color-range. · eeb5ef0a
      Ronald S. Bultje authored
      In decoder, export (eventually) into vpx_image_t.range field. In
      encoder, use oxcf->color_range to set it (same way as for
      color_space).
      
      See issue 1059.
      
      Change-Id: Ieabbb2a785fa58cc4044bd54eee66f328f3906ce
      eeb5ef0a
  16. 15 Sep, 2015 1 commit
    • Marco's avatar
      Add cyclic refresh parameters to svc-layer context. · eb53c69e
      Marco authored
      For 1 pass CBR spatial-SVC:
      Add cyclic refresh parameters to the svc-layer context.
      
      This allows cyclic refresh (aq-mode=3) to be applied to
      the whole super-frame (all spatial layers).
      This gives a performance improvement for spatial layer encoding.
      
      Addd the aq_mode mode on/off setting as command line option.
      
      Change-Id: Ib9c3b5ba3cb7851bfb8c37d4f911664bef38e165
      eb53c69e
  17. 14 Sep, 2015 1 commit
  18. 11 Sep, 2015 1 commit
    • Marco's avatar
      Avoid scaling last_source, unless needed. · e8a4a3e2
      Marco authored
      Save some encoding time, for the case of spatial layers
      or under dynamic resizing mode.
      
      Change-Id: If4a8eb6f0376c3d2dde8465fde6bfd86ab704920
      e8a4a3e2
  19. 10 Sep, 2015 1 commit
  20. 03 Sep, 2015 1 commit
    • Marco's avatar
      Fix to dynamic resize mode under change_config(). · be3489ea
      Marco authored
      If the encoder dynamic resize is triggered and change config()
      is then called, it will reset the current (resized) codec width/height
      back to the the config (unresized) width/height (which will then
      prevent the resizing action from occurring in encoder_loop).
      
      Avoid this by checking for a change in the config width/height
      before resetting the cm->width/height.
      
      Change-Id: Id9d50c0ee8a943abe4b6c72bbaa02d9696f93177
      be3489ea
  21. 02 Sep, 2015 1 commit
  22. 31 Aug, 2015 1 commit
  23. 29 Aug, 2015 1 commit
  24. 28 Aug, 2015 1 commit
    • Marco's avatar
      Fix to golden update in cyclic_refresh. · bc0a9743
      Marco authored
      For one pass CBR: only check for updating refresh_golden
      if ext_refresh_frame_flags_pending is not set (i.e., == 0).
      And move the resetting of ext_refresh_frame_flags_pending = 0
      down to after the encode_loop (and account for dropped frames).
      
      This is to prevent changing refresh_golden flga when the user
      supplies the reference/update flags.
      
      Change-Id: I4d87b3e705ba43f243667e367503b585c61e2a54
      bc0a9743
  25. 27 Aug, 2015 1 commit
  26. 20 Aug, 2015 1 commit
    • Marco's avatar
      Update to dynamic resize for 1 pass CBR: source scaling. · 93ffe9d6
      Marco authored
      Switch to use the normative (convolve8) filter for source scaling,
      only for 1/2x1/2 scaling for now. This is faster and has better
      quality than either the vpx_scale_frame or the nonnormative scaler.
      
      Remove the vp9_scale_if_required_fast, which is now not used.
      
      Change-Id: I2f7d73950589d19baafb1fa650eac987d531bcc8
      93ffe9d6
  27. 18 Aug, 2015 1 commit
    • Marco's avatar
      Allow for re-encoding frame if high overshoot. · 42b67917
      Marco authored
      For 1 pass CBR mode under screen content mode:
      if pre-analysis (source temporal-sad) indicates significant
      change in content, then check the projected frame size after
      encode_frame(), and if size is above threshold, force re-encode
      of that frame at max QP.
      
      Change-Id: I91e66d9f3167aff2ffcc6f16f47f19f1c21dc688
      42b67917
  28. 14 Aug, 2015 1 commit
  29. 13 Aug, 2015 1 commit
  30. 12 Aug, 2015 1 commit
  31. 11 Aug, 2015 1 commit
  32. 10 Aug, 2015 1 commit
  33. 07 Aug, 2015 1 commit
  34. 05 Aug, 2015 1 commit
    • Scott LaVarnway's avatar
      VPX: remove scaled calls from FUN_CONV_1D · 4e6b5079
      Scott LaVarnway authored
      and FUN_CONV_2D macros.  The predict lut now handles
      this case.  The encoder now calls vpx_scaled_2d() instead
      of vpx_convolve8() for scaling.
      
      Change-Id: Ia1c8af8a31e4cb4887a587143108cb45835f7df7
      4e6b5079
  35. 03 Aug, 2015 1 commit
    • Yaowu Xu's avatar
      Correct the allocation size for ssim_vars · 8f089cbd
      Yaowu Xu authored
      Ssim_vars is used to accumulate stats based 4x4 pixel blocks, this
      commit changes the allocations size to be based on mi_rows and mi_cols
      to avoid out-of-bound memory access for larger size videos. The hard
      coded 720x480 can only work for image size up to 2880x1920.
      
      Change-Id: Id9d07f3f777385b448ac88a6034b7472e4cf3c79
      8f089cbd
  36. 31 Jul, 2015 1 commit
    • Zoe Liu's avatar
      Code refactor on InterpKernel · 7186a2dd
      Zoe Liu authored
      It in essence refactors the code for both the interpolation
      filtering and the convolution. This change includes the moving
      of all the files as well as the changing of the code from vp9_
      prefix to vpx_ prefix accordingly, for underneath architectures:
      (1) x86;
      (2) arm/neon; and
      (3) mips/msa.
      The work on mips/drsp2 will be done in a separate change list.
      
      Change-Id: Ic3ce7fb7f81210db7628b373c73553db68793c46
      7186a2dd
  37. 28 Jul, 2015 1 commit
  38. 23 Jul, 2015 1 commit