8446 Commits

Author SHA1 Message Date
James Zern
3e0138edb7 vp9_satd: return an int
the final sum may use up to 26 bits

+ add a unit test
+ disable the sse2 as the result will rollover; this will be fixed in a
future commit

Change-Id: I2a49811dfaa06abfd9fa1e1e65ed7cd68e4c97ce
2015-11-20 14:35:38 -08:00
Marco
eed5494fc6 vp9-svc: Fix to key frame counter for spatial layers.
Existing condition only applied to temporal layers.

Change-Id: Icef20a59d0afc61d4e14dea01aff4786fa9e41ae
2015-11-18 14:31:37 -08:00
Paul Wilkins
85aea16f17 Merge "Changes to exhaustive motion search." 2015-11-18 11:10:13 +00:00
Zoe Liu
8a782c7eac Fixed a few sanity checks.
Change-Id: Ieec4a7be5945dc6de192e2d8292ab978baf47f53
(cherry picked from commit 2096296421c7fa56abb49470c0fbe7c4337b8a71)
2015-11-17 22:54:03 +00:00
Marco
988fd77c1f Reduce sampling time for noise estimate.
Change-Id: I46abd85e2187b8f4c2846416a23fab26d9b9f67d
2015-11-13 08:11:30 -08:00
Marco Paniconi
5f5d185d01 Merge "VP9 noise estimation: add frame level motion metrics and adjust thresholds." 2015-11-13 14:09:19 +00:00
paulwilkins
0149fb3d6b Changes to exhaustive motion search.
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
2015-11-13 10:16:31 +00:00
JackyChen
6fb3d6db99 VP9 noise estimation: add frame level motion metrics and adjust thresholds.
Change-Id: Ia1aba00603b32cee6835951d3d8f740937cf20f4
2015-11-12 23:41:42 -08:00
James Zern
34159b72d9 Merge "Add AVX vectorized vp9_diamond_search_sad" 2015-11-13 06:29:20 +00:00
Marco
419da5c734 Adjust variance threshold for 16x16 split at low resolutions.
Change-Id: I635e37f81237e9703d7d9a11ed76a043f4ec6eb0
2015-11-12 17:58:31 -08:00
Marco Paniconi
866c9357c2 Revert "Update to noise estimation."
This reverts commit 6b79a1e3e0dfc265f43445b8181aa95e1c02deac.

Change-Id: I5a4923ca8a6de842855ce0725e92567ccbed6fb7
2015-11-13 00:13:32 +00:00
Marco
6b79a1e3e0 Update to noise estimation.
Add frame level global check and adjust some parameters.

Change-Id: I42103394f2d329781195d94ce6cbb5b3383eea17
2015-11-12 09:18:35 -08:00
Marco Paniconi
1b63238b67 Merge "Non-rd partition: reduce variance threshold low resolutions." 2015-11-12 06:08:38 +00:00
Marco Paniconi
0941ff72a0 Merge "Adjust varianace threshold for high noise condition." 2015-11-12 06:06:51 +00:00
Marco
384fc5e381 Adjust motion threshold to limit cyclic refresh.
Change-Id: Icfca27a567eb8929c312c6315856ee130d982a04
2015-11-11 18:22:21 -08:00
Marco
1827764450 Adjust varianace threshold for high noise condition.
Change-Id: I91c722e480328ff95b8c57614d8176ccaceb2539
2015-11-11 18:06:21 -08:00
Marco Paniconi
4d38dbdfb5 Merge "vp9 denoiser: Add another noise level to denoising." 2015-11-11 20:40:29 +00:00
Marco
ff32369804 vp9 denoiser: Add another noise level to denoising.
Change-Id: Idc755ab54e4f78bb7d75bc97634c451804edad99
2015-11-11 11:21:26 -08:00
James Zern
8f7bc45b5b Revert "VP9: Only zero counts when !frame_parallel_decoding_mode"
This reverts commit 380a5519cca999f54b17f37b709996a11f3204ea.

This causes an assertion failure in debug_check_frame_counts() which
probably isn't valid with this change; leaving the investigation for
later now.

Change-Id: Ieda5ca811ed2fa50a0cc6935919a8d10dca996e0
2015-11-11 11:11:00 -08:00
Geza Lore
5eefd3ebfd Add AVX vectorized vp9_diamond_search_sad
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
2015-11-11 14:03:47 +00:00
Marco
064a9eca49 Non-rd partition: reduce variance threshold low resolutions.
Change-Id: I06306905d187948a92f839357df5d21413823808
2015-11-10 15:42:58 -08:00
Marco
bd6bf25969 Add bias to zero/small motion for noisy source.
Change is only for real-time mode, speed >= 5, and non-screen content mode.
Add bias to zero/low motion for big blocks, if noise estimation
is enabled and noise level is above threshold.

Change-Id: I3a0a4608ede6aa535bda6eca528d20f8aba738e7
2015-11-10 11:23:40 -08:00
JackyChen
19272d866b VP9 noise estimate: no noise estimate if frame size change.
Change-Id: I521f7b53c143d562a88fe7de330aa3f0ef09f414
2015-11-09 19:18:29 -08:00
James Zern
e1fbc886e1 Merge "VP9: Only zero counts when !frame_parallel_decoding_mode" 2015-11-09 22:23:34 +00:00
Marco Paniconi
cdec99b243 Merge "VP9 dynamic resize: increase waiting time after key frame." 2015-11-09 21:11:51 +00:00
jackychen
3c9a424e6e VP9 dynamic resize: increase waiting time after key frame.
For 1 pass CBR mode: increase waiting time after key frame
before we start sampling rate control behavior for determining
resize. This change need to disable one internal resize(DownUp)
temporally since it requires a longer clip to do so.

Change-Id: If21beda1be23f169ee541ab4dd642f718347887a
2015-11-09 12:04:00 -08:00
Marco Paniconi
498fd551fd Merge "Use same bias (against non-zero mv for big blocks) for speed 5." 2015-11-09 19:29:35 +00:00
Alex Converse
d1a7c10325 Merge "Expand unconstrained nodes in pack_mb_tokens and loop on zeros." 2015-11-09 18:27:40 +00:00
Scott LaVarnway
380a5519cc VP9: Only zero counts when !frame_parallel_decoding_mode
The counts are never used when frame_parallel_decoding_mode
is set.

Change-Id: Ic7a566a048297f7373c9ffbb48929ea09eff674f
2015-11-09 10:14:13 -08:00
Marco
718654848a Use same bias (against non-zero mv for big blocks) for speed 5.
Use same setting for speed 5 (as it is for speed > 5).
Change is only for real-time (non-rd) mode.

Change-Id: I830250eac654328373cb318baa89d4f0e63942e1
2015-11-09 10:09:51 -08:00
Hui Su
908fbabe4e Merge "Use accurate bit cost for uv_mode in UV intra mode RD selection" 2015-11-07 00:22:50 +00:00
Alex Converse
70eb870cfe Expand unconstrained nodes in pack_mb_tokens and loop on zeros.
Reduces Linux perf estimated cycle count for pack_mb_tokens on a
lossless encode on my desktop from 61858501855 to 48154040219 or from
26% of the overall profile to 21%.

Change-Id: I9ca3426d7e3272bc7f7030abda4f0d0cec87fb4a
2015-11-06 16:00:10 -08:00
hui su
6ab6ac450b Use accurate bit cost for uv_mode in UV intra mode RD selection
On derflr, +0.1% for VP10; however, -0.03% on VP9.

Change-Id: I09c724232ede74254043d61d3cadc506256af0af
2015-11-06 14:45:43 -08:00
James Zern
eba14ddbe7 Merge "Revert "Add AVX vectorized vp9_diamond_search_sad"" 2015-11-06 22:37:20 +00:00
James Zern
30466f26b4 Revert "Add AVX vectorized vp9_diamond_search_sad"
This reverts commit f1342a7b070ef61b9fbdf03e899ac2107cfcb6bd.

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
2015-11-06 13:15:01 -08:00
Marco
5f041c01ed vp9: Disable noise estimate on resize trigger frame.
Change-Id: I35767a6320943582ee11d737b5f240cea2d01b25
2015-11-06 08:42:09 -08:00
Marco
1c724d01aa vp9: Updates to noise estimation.
Add threshold/condition on spatial_variance and brightness level.
Modification to normalization of block variance.
Change resolution limit below which we disable noise estimation.

Change-Id: If5be08a26ceda351242d8a58d2f0bc88c0a918f0
2015-11-05 18:19:01 -08:00
Yunqing Wang
57cae22c1e Merge "Add AVX vectorized vp9_diamond_search_sad" 2015-11-05 20:17:13 +00:00
Geza Lore
f1342a7b07 Add AVX vectorized vp9_diamond_search_sad
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
2015-11-05 10:02:17 +00:00
Marco Paniconi
c6641709a7 Merge "Bias against non-zero mv for large blocks." 2015-11-04 00:01:23 +00:00
Marco
04a99cb36b Bias against non-zero mv for large blocks.
Change is only for real-time mode, speed > 5, and non-screen content mode.
Bias is based on block size and motion vector level (motion above some threshold).

Helps to improves stability in background from lightning changes.
PSNR/SSIM metrics on RTC set almost no change/neutral (within +/- 0.1).

Change-Id: I7eac13c1ae10be4ab1f40acc7f9f1df5653ece9d
2015-11-03 14:51:56 -08:00
Marco Paniconi
17534d2918 Merge "Update to encoder_breakout_test, for non-rd mode." 2015-11-03 22:40:53 +00:00
Yaowu Xu
5ff1008ed9 Merge "Fix a msvc warning" 2015-11-03 21:56:25 +00:00
Hui Su
3cbe767972 Merge "Generate intra prediction reference values only when necessary" 2015-11-03 20:55:14 +00:00
Marco
9a7785b9d6 Update to encoder_breakout_test, for non-rd mode.
Only use non-zero threshold(s) for breakout if
the motion level of the current tested mode is low.

Change-Id: I22aae961cc42371b49d3f648560181cc54708502
2015-11-03 11:49:44 -08:00
Yaowu Xu
87e08f4d9f Fix a msvc warning
Change-Id: Id5b8f597fb275395232559fea7bfeb56912b88a1
2015-11-03 11:22:58 -08:00
Marco
c7da053d4b Move noise level estimate outside denoiser.
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
2015-11-02 12:15:26 -08:00
hui su
e085fb643f Generate intra prediction reference values only when necessary
This can help increase encoding speed substantially.

Change-Id: Id0c009146e6e74d9365add71c7b10b9a57a84676
2015-11-02 10:26:50 -08:00
Marco
c2f6a7df8d vp9 denoiser: Don't estimate noise on resized trigger frame.
Change-Id: I60461f011d1aba0b1eb6584c6940f745221915f4
2015-11-02 09:11:35 -08:00
Debargha Mukherjee
9cafc46d9e Merge "Convert motion search config from AoS to SoA" 2015-10-30 20:57:10 +00:00