Commit Graph

6212 Commits

Author SHA1 Message Date
Scott LaVarnway
580317160c VP9: minor block_yrd() refactoring
Change-Id: Ic0a81fb5816c8252ca4876753320fde5c28d893f
2016-06-13 07:35:45 -07:00
Marco Paniconi
181988d372 Merge "vp9: Put lower limit on frames_to_key adjustment to gf interval." 2016-06-10 22:49:48 +00:00
James Zern
40e3bf8630 Merge "vp9_diamond_search_sad_avx cosmetics" 2016-06-10 17:30:39 +00:00
Marco
9b61c709c4 vp9: Put lower limit on frames_to_key adjustment to gf interval.
For 1 pass vbr.

Change-Id: I6c1c1cca3944150140e896e175b07ed518641b9b
2016-06-10 10:08:56 -07:00
Scott LaVarnway
2a0e1bcc83 vp9_diamond_search_sad_avx cosmetics
Fixed cosmetic issues noted in Change 349854.

Change-Id: I1d94070e4066fa920173013c5a36a30dd1cb357d
2016-06-10 04:56:21 -07:00
paulwilkins
fba94b8cfd Small re-arrangement.
Move initialization of a some new "twopass" values
to the function vp9_init_second_pass() and some other
small  changes.

Remove #if GROUP_ADAPTIVE_MAXQ as this is always
enabled now.

Change-Id: I1dbec2fd7c419779848aa987c4cd7824d4df8456
2016-06-09 11:32:34 +01:00
James Zern
5b7960fa82 vp9_subexp.h: normalize function prototype
vp9_prob_diff_update_savings_search_model

updated in:
19e0b40 Refactor probability savings search.

Change-Id: I13ae3106961f0271f51df17ee1c70c99f2d75f8f
2016-06-08 22:55:53 -07:00
Marco Paniconi
5aeadbb4f6 Merge "vp9: Use nonrd_pick_partition on scene-cut, for speed 5 vbr mode." 2016-06-09 00:49:02 +00:00
Marco
3fc01f95da vp9: Use nonrd_pick_partition on scene-cut, for speed 5 vbr mode.
On scene-cut detected frames (i.e., high_source_sad = 1), use
nonrd_pick_partition (over choose_part + select_part), as
the nonrd_pick partitioning is generally better.

Small positive increase in metrics on ytlive set (~0.5 - 1%).
Negligle overall speed decrease, as its only used on scene-cut frames.

Only affects 1 pass vbr mode, speed = 5.

Change-Id: I07c89cbdc75f5bb16eb8e0e2773ead0980d2de5c
2016-06-08 16:05:59 -07:00
Marco
77ffea92c5 vp9: Reduce overshoot factor for setting longer gf interval.
Only affects 1 pass vbr mode.

Change-Id: Ifd7ff3771eabe322a371b35b159cace6baa3b070
2016-06-08 15:15:15 -07:00
Alex Converse
d00aaa9c12 Merge "Refactor probability savings search." 2016-06-08 17:49:52 +00:00
James Zern
97b4f8fe92 Merge "Revert "remove vp9_diamond_search_sad_avx.c"" 2016-06-08 02:56:00 +00:00
Hui Su
28a93d6588 Merge "Avoid a potential assertion fail in optimize_b()" 2016-06-08 00:33:48 +00:00
Scott LaVarnway
eb09bbe88b Revert "remove vp9_diamond_search_sad_avx.c"
This reverts commit be12fefa4b
and commit 057c1c4034.

Also, the mismatch between the avx version and the
c version has been fixed.

BUG=https://bugs.chromium.org/p/webm/issues/detail?id=1168

For a rt encode using 1080p@60fps material, up to 11% performance
improvement overall was seen.

Change-Id: Icd1f216209ebc6fc0b8da885f32f356fa4355ed0
2016-06-07 17:21:01 -07:00
hui su
a554bd8dac Avoid a potential assertion fail in optimize_b()
The eob of a block is not perperly set when skip_recode is true,
thus triggering assert(eob <= default_eob) to fail.

Change-Id: Ifecbe33dce2dc4903e0a80bd384dc09bf0dd8a44
2016-06-07 15:45:04 -07:00
Marco
f0b08aa4fa vp9: Replace the avg_size_inter metric, for 1 pass vbr.
Code cleaup, use existing rolling_actual/target metrics instead,
set threshold to get same/similar effect.

Little/no change in metrics on ytlive set.

Change-Id: I74f3c3d0a143a9cf20dc9c3dee54c0f7e6a97a51
2016-06-07 11:29:33 -07:00
Marco
3de42ac27b vp9: Small ajustment to settings gf_interval, 1 pass vbr.
Add a max condition and lower the min value.

No change in behavior (metrics for yt live set) for the
default min/max_gf_interval=4/16 settings.
Small positive change when min/max_gf_interval=7/16
(for 60fps clips on ytlive set).

Change-Id: I1c1d72425c86c69419ea43fb9730130e81062f91
2016-06-07 09:51:41 -07:00
Paul Wilkins
03a401c4d9 Merge "Slightly more damped VBR adjustment." 2016-06-03 17:14:12 +00:00
Paul Wilkins
fd38ef4b99 Merge "Change to get_twopass_worst_quality()" 2016-06-03 17:13:51 +00:00
Paul Wilkins
a160533e41 Merge "Removed unused data structure." 2016-06-03 17:13:33 +00:00
Paul Wilkins
bfff16af67 Merge "Adjustment to VBR rate correction." 2016-06-03 17:13:14 +00:00
Paul Wilkins
5ef54c1536 Merge "Adjustment calculation of active worst quality." 2016-06-03 17:12:52 +00:00
Paul Wilkins
7a586cad07 Merge "Remove gf_zeromotion_pct." 2016-06-03 17:12:25 +00:00
paulwilkins
45a26dd9c8 Slightly more damped VBR adjustment.
Increase in the damping used in adjusting the active Q range.
This does hurt rate accuracy a little in a few extreme cases
especially if the clip is very short*, but helps metrics.

* Note that the adjustment is applied at the GF/ARF group level based
on what happened in the last group.  Hence for very short clips where
the length of a single group may be a significant % of the clip length
there is still scope for some drift that cannot be accommodated.

In practice most data points in our test sets are now much closer to target
than was previously the case with default settings and in some cases are
better even than they were with the command line undershoot and overshoot
parameter was set very low (e.g. 2%). For example in bridge_close at high rates
the old mechanism was unable to adapt enough to prevent extreme overshoot.

Change-Id: I634f8f0e015b5ee64a9f0ccaa2bcfdbc1d360489
2016-06-03 13:19:51 +01:00
paulwilkins
552fd02cf0 Change to get_twopass_worst_quality()
Change to the calculation of the error divisor used in
get_twopass_worst_quality(). This follows on from other
changes to the rate control that impact the output of this
function.

Change-Id: I414fa9aa1e6a68a64dccea17c3712f44b8a0c10c
2016-06-03 13:18:29 +01:00
paulwilkins
f9865d1701 Removed unused data structure.
Removed unused element from TWOPASS data structure.

Change-Id: I9b662fd8eea727a7978055bc14f7c7328f048a5e
2016-06-03 13:18:09 +01:00
paulwilkins
c7ac2f3864 Adjustment to VBR rate correction.
Changes to the function the redistributes bits from overshoot
or undershoot throughout the rest of the clip to respond more
quickly.

Change-Id: I90f10900cdd82cf2ce1d8da4b6f91eb5934310da
2016-06-03 13:17:43 +01:00
paulwilkins
cd700e1ab9 Adjustment calculation of active worst quality.
Added a factor based on the bit spend in the last arf group vs the
target to adjust the choice of the active worst quality in subsequent
groups.

Helps clips where previously there was a big overshoot or undershoot
to adapt and get closer to the target rate.

Change-Id: I67034b801679b99024409489a2273ea6fe23b8e6
2016-06-03 13:17:21 +01:00
paulwilkins
4328b08521 Remove gf_zeromotion_pct.
The use of this value is preventing rate adjustment on clips
or sections that have very little motion but high noise and
this can give rise to some sections with massive overshoot.

Change-Id: I9a65c7c1148dc5d3a7d8b23e50fc1733f3661621
2016-06-03 12:13:03 +01:00
JackyChen
891dbe1e52 vp9: Fix valgrind failure for short circuit on low temporal vaiance block.
Add check for actual split before using the variance of the split.

Change-Id: If0f93248be0b16d17738675d16c90516054dad2b
2016-06-02 15:56:58 -07:00
JackyChen
a32f341539 Disable short circuit feature for low temporal variance.
The featrue fails in libvpx_unit_tests-valgrind. Will re-enable it after
fixing the issue.

Change-Id: I8ba132f04e98f4615b31fbff2097eda83c5e42bc
2016-06-02 09:45:00 -07:00
jackychen
bacc67f4a8 vp9: Skip some modes when variance is low for big blocks, for 1 pass real-time.
Skip intra-mode and some inter-modes (newmv, nearmv, nearestmv) for
golden frame if the variance got from choose_partitioning is very low.
Only for 1 pass real-time CBR mode and bsize >= 32x32, it has ~2.5%
speed up with less than 0.1% PSNR drop for rtc test set. Don't see
visual regression.

Change-Id: I70efbc95a1007231ae36f02c5b2fbf6cd35077ad
2016-06-01 13:54:18 -07:00
Marco
bedf1c3af6 vp9: Skip computation of best_sad for newmv, unless needed.
For non-rd pickmode:
best_pred_sad, computed for NEWMV-last, is only used for
skipping golden non-zero modes. Add condition to avoid this
computation if not used (i.e, if golden nonzero modes are not used).

And remove code for computing best_pred_sad for NEWMV-golden,
since that sad is not used.

No change in behavior; small speed gain (~1%) for svc encodes.

Change-Id: Ic2cbdef6c4e9a233a57c0db0eeac8ad5fcead366
2016-05-31 10:29:00 -07:00
Linfeng Zhang
2ab7b9a6c9 Merge "Upgrade fwht4x4_mmx() to fwht4x4_sse2() for vp9 and vp10." 2016-05-27 17:51:35 +00:00
Linfeng Zhang
af7fb17c09 Upgrade fwht4x4_mmx() to fwht4x4_sse2() for vp9 and vp10.
Function level timing test shows about 27% time saving on
a Xeon E5-2680 v2 desktop.

Rename vp9_dct_sse2.c to vp9_dct_intrin_sse2.c for vp9 and
rename dct_sse2.c to dct_intrin_sse2.c for vp10 to avoid
duplicate basenames.

Actually vp9_fwht4x4_mmx/sse2() and vp10_fwht4x4_mmx/sse2()
are identical. TODO: They should be unified later if there is
no intention to keep a duplicate.

Change-Id: I3e537b7bbd9ba417c606cd7c68c4dbbfa583f77d
2016-05-27 09:51:16 -07:00
Alex Converse
19e0b406c9 Refactor probability savings search.
- Avoid excessive copying

- Don't both searching if no update can possibly offer savings

- Simplify the interface

- Remove the confusing vp9_cost_upd256 macro

Change-Id: Id9d9676a361fd1203b27e930cd29c23b2813ce59
2016-05-25 13:00:09 -07:00
James Zern
be12fefa4b remove vp9_diamond_search_sad_avx.c
vp9_diamond_search_sad_avx was disabled in:
057c1c4 disable vp9_diamond_search_sad_avx

this removes a missing prototype warning as the prototype is no longer
included in vp9_rtcd.h. the file can be restored if someone gets around
to fixing the issue.

BUG=https://bugs.chromium.org/p/webm/issues/detail?id=1168

Change-Id: Ia9fda4b81c53dc5fba7c31d780d761f886940b52
2016-05-24 12:02:22 -07:00
jackychen
6f397b8a5b vp9: Remove a redundent condition in sub-pixel filter choosing.
Change-Id: I5cbb0f452ec9622437482b3a9496ead1253acfe0
2016-05-20 14:38:45 -07:00
Jacky Chen
fa5d54f937 Merge "vp9: Refactor some denoiser logic in vp9_pick_inter_mode." 2016-05-19 23:05:32 +00:00
JackyChen
af0a9fcf70 vp9: Refactor some denoiser logic in vp9_pick_inter_mode.
Move the logic for rechecking zeromv on denoised block out to simplify
the function. To simplify the param passing, add a new structure
VP9_PICKMODE_CTX_DEN which is only used when denoiser is enabled.

Change-Id: Iaa9b4396dfcb8147236c02d4a1868a09103a4476
2016-05-19 15:28:25 -07:00
Marco Paniconi
bdfbd6325e Merge "vp9: Update to rc-metric for keeping track of average frame size." 2016-05-16 21:09:46 +00:00
JackyChen
0dfa6b38dc Move non-zero mv bias on large block out of vp9_pick_inter_mode.
This is to simplify pick inter mode funtion and is bitexact.

Change-Id: Ib1a115bac5fbd212c626be194bcd4a6ce4af9bf2
2016-05-13 15:29:05 -07:00
Marco
8a79769aff vp9: Update to rc-metric for keeping track of average frame size.
Rename and change to how its updated.
Only affects 1 pass vbr.

Small change in metrics (< ~0.1%) on ytlive set.

Change-Id: Ibb1fe485699b6c4a8194951c8f229abe2f64b9a5
2016-05-13 14:31:57 -07:00
Marco
0c60db7def vp9: Fix to quality regression issue for 1 pass.
BUG=https://bugs.chromium.org/p/webm/issues/detail?id=1217

Issue introduced in https://chromium-review.googlesource.com/#/c/339162/.
The factor on avg_frame_qindex[INTER_FRAME] in that CL, used for q-basis to
set active_best, can cause the QP to decrease too slowly or get stuck
in some cases when max-q=63.

Removing that factor fixes the regression in issue#1217.

Change-Id: I97fe28dca3c2bc2d852b1775f39c62164e032d4f
2016-05-11 14:01:21 -07:00
Alex Converse
ccf4f47b99 Merge changes I412c24aa,I28a8bbf0
* changes:
  mcomp: Remove an obsolete undef.
  mcomp: Remove an obsolete comment.
2016-05-11 20:03:21 +00:00
Yaowu Xu
a45596cff7 Merge "Added a measure of rc drift." 2016-05-11 18:02:00 +00:00
Paul Wilkins
5fd142e763 Merge "Fixed 8K two pass encoder crash." 2016-05-11 16:25:25 +00:00
paulwilkins
45df87ca57 Added a measure of rc drift.
Added actual and absolute rate miss values to the opsnr.stt
stats output line.

Changes to the borg graphing may be needed before merge.

Change-Id: I1e9d548ce445d29002f0c59ebfd3957a6f15e702
2016-05-11 15:15:07 +01:00
paulwilkins
65732c36a8 Fixed 8K two pass encoder crash.
Bug found by Yunqing relating to the correction for size at 8K and
above in get_twopass_worst_quality().

The basis for the correction was changed to the linear size relative to
1080P as a baseline and the adjustment has been clamped to prevent
problems at extreme images sizes.

For 1080P the results on our test sets were neutral but the low res and
mid res sets saw a small gain (0.1%-0.2% average).

I would also expect some gains on 4k and larger content where the
previous correction was overly aggressive.

Change-Id: I30b026b5f4535e9601e3178d738066459d19c8fb
2016-05-11 14:45:50 +01:00
Alex Converse
6dd5ec7efb mcomp: Remove an obsolete undef.
The macro was removed in 6724676.

Change-Id: I412c24aac49bd1ff60a331a30933e0d8ae3f2dd5
2016-05-10 18:04:24 -07:00
Alex Converse
7764f8af3e mcomp: Remove an obsolete comment.
This was copied over from VP8. VP9 doesn't seem to do this buffer copy.

Change-Id: I28a8bbf0503a7f99b2cb60620ab3674adde863bb
2016-05-10 18:04:24 -07:00
hui su
be3f0698b0 Add VP9 encoder API for level specification.
Add control API VP9E_SET_TARGET_LEVEL that allows the encoder to
control the output bitstream level and/or keep level related
statistics.

Usage:
               255         do not care about level (default)
               0           keep level related stats only
               10          target for level 1
               11          target for level 1.1
               .
               .
               .
               62          target for level 6.2

Usage for vpxenc:

--target-level=0/255/10/11...

Change-Id: I31d1aeca19358b893e7577b4e63748c8e614034a
2016-05-10 11:48:16 -07:00
Hui Su
e2b696c390 Merge "Fix comment for target_bandwidth in VP9 and VP10" 2016-05-10 16:34:54 +00:00
hui su
667f6320b0 Fix comment for target_bandwidth in VP9 and VP10
Unlike in VP8, it is in units of bits per second in VP9 and VP10.

Change-Id: Iee1936cc58cdfaff205624c2fe87cecdf7eda123
2016-05-09 16:43:02 -07:00
Alex Converse
f5f5ca03ca Merge "pickmode: Fix a pair of unsigned overflows." 2016-05-09 22:16:22 +00:00
Alex Converse
d8a18186ba pickmode: Fix a pair of unsigned overflows.
block_variance: This operates on 8x8s and would be safe with a int32 *
int32 to uint32 multiply, but this is potentially unsafe for 12-bit
input. Unfortunately the code already segfaults on 12-bit input:
https://bugs.chromium.org/p/webm/issues/detail?id=1223

calculate_variance: This operates on up to a 32x32 of 8x8s and can
overflow even with 8-bit input (log2((256*32*32)**2) == 36).

BUG=https://bugs.chromium.org/p/webm/issues/detail?id=1220

Change-Id: I1ca4ff6092db9a7580da371ee9a21f403fdadc40
2016-05-09 11:21:20 -07:00
Marco
36f796d2d0 vp9: 1 pass vbr: Reduce base qp for active_best_quality for inter-frames.
Reduce factor for setting base-qp for active_best_quality (for inter-frames).
Small increase in metrics on yt live set.

Change-Id: I9cf0ac797783aeddbfaf1ff510696c9035d7c5ee
2016-05-09 10:21:44 -07:00
James Zern
5e679848e8 Merge changes from topic 'missing-proto'
* changes:
  vp9_frame_scale_ssse3.c: make 2 functions static
  vp9_pickmode.c: make function static
  vp9_noise_estimate.c: make function static
  vp9_aq_360.c: add missing include
  vp9_idct_intrin_sse2: add missing vp9_rtcd.h include
  vpx_dsp/*.[hc]: add missing vpx_dsp_rtcd.h include
2016-05-06 02:25:29 +00:00
Marco Paniconi
e313fc8514 Merge "vp9: Modify logic for gf setting based on up-coming key frame." 2016-05-05 21:23:03 +00:00
Marco
f4b5076ad3 vp9: Reduce qp threshold for limiting cyclic refresh on steady blocks.
Makes the delta-qp stop little earlier on areas that have been refreshed enough.
This helps to reduce some pulsing artifact on noisy flat areas observed in some
noisy vc-clips.

Threshold changes only take effect for sources where noise level is estimated to
be >= medium level.

Only affects 1 pass CBR, non-screen content case.

Change-Id: Iacf557f6aa8abbcd6782c02ff2e6c14891960850
2016-05-05 11:31:43 -07:00
Marco
1fc21052ab vp9: Modify logic for gf setting based on up-coming key frame.
For 1 pass vbr mode:
Refactor to move the logic for gf setting based on up-coming
key frames to a separate function, so same logic can be used for
scene-cuts/changes.

Change-Id: Ic4ede308e08ba869bb62e4566e19ea31222c5229
2016-05-05 09:33:27 -07:00
James Zern
272afa9a43 vp9_frame_scale_ssse3.c: make 2 functions static
downsample_2_to_1_ssse3/upsample_1_to_2_ssse3() are local to this module

Change-Id: I78a9de8e1eca475ba1bf137102580c531aa3f7dd
2016-05-04 15:10:24 -07:00
James Zern
9bfa12764c vp9_pickmode.c: make function static
set_intra_cost_penalty() is local to this module

Change-Id: Ie277bfc5e8a26f05a04fd261bdb888388ad0e2a1
2016-05-04 15:10:00 -07:00
James Zern
264c174fca vp9_noise_estimate.c: make function static
enable_noise_estimation() is local to this module

Change-Id: Id736c419387ca1959695dd327ce164bec029b597
2016-05-04 15:09:05 -07:00
James Zern
bc08689fa5 vp9_aq_360.c: add missing include
Change-Id: Ia8ac9b7023211b1da2294b0934cf076fb1cdc65f
2016-05-04 15:08:10 -07:00
Marco Paniconi
f38648742a Merge "vp9-noise estimation. Decrease frame period for estimating noise." 2016-05-04 22:02:53 +00:00
Yaowu Xu
939d7d9de8 Merge "Change to use proper type in vp{9,10}_token_state" 2016-05-04 21:57:12 +00:00
Marco
ff3866dc43 vp9-noise estimation. Decrease frame period for estimating noise.
Makes the noise estimation react little faster.
Little/no change in metrics.

Change only affects 1 pass cbr.

Change-Id: I13f0daa90ecbf9d49eb1cf2e48febd9d92292940
2016-05-04 12:43:02 -07:00
Yaowu Xu
81eb71f00c Change to use proper type in vp{9,10}_token_state
"qc" in vp{9,10}_token_state is used to save quantized coefficients, this
commit changes the type from short to tran_low_t to properly reflect
the value range for highbitdepth build.

This fixes an out-of-range bug when optimize_b is used in highbitdepth
build.

Change-Id: Ibf330879e6ac6ae8f099e085caa9d3d9a889fde8
2016-05-04 12:14:11 -07:00
Alex Converse
8620dea882 variance aq: Fix a variance calculation overflow bug.
This is an actual overflow where the result of the calculation is
materially changed, not just a negative value that is stored in an
unsigned.

Caught with fsanitize=integer on the VP9/AqSegmentTest.TestNoMisMatchAQ2/1 test.

Change-Id: I514b0ef4ae7ad50e3e08c0079aa204d59fa679aa
2016-05-04 11:40:55 -07:00
Alex Converse
f76158131d Fix unsigned overflows in temporal filter.
Change-Id: Iebdc8304d30c78f03f99f6dc665003ff41c8b1cd
2016-05-03 10:55:44 -07:00
Alex Converse
8307045cb5 Merge "Use signed variables in the lookahead." 2016-05-02 21:32:39 +00:00
Jacky Chen
04a6db562a Merge "vp9: Refactor vp9_denoiser_NxM_sse2." 2016-05-02 21:28:08 +00:00
JackyChen
b29612fbbe vp9: Refactor vp9_denoiser_NxM_sse2.
Denoiser is ~1.5% faster in speed 6~8.

Change-Id: I7b350f3c50cce6773d9c4eded4c0c1b722d0a5fc
2016-05-02 13:19:40 -07:00
JackyChen
136c29e3a3 vp9: Refactor choose_partitioning.
Move skin superblock force split out of this function as well
as some minor code refactors. Checked bitexact for different speed
settings and different resolutions.

Change-Id: I6078cbe88dd9ce6c0b69470a8a0a8f8d2274161b
2016-05-02 10:15:03 -07:00
Marco
7bd73b638a vp9: Move the initialization of some rc variables to rc_init.
And initialize a variable (avg_source_sad) that was not initialized to 0.

Change-Id: I63223e20fffe2a2ea38f03da62dad16af0618ea4
2016-04-28 17:10:37 -07:00
Alex Converse
94806e029d Merge "Avoid an unsigned overflow in invert_quant" 2016-04-28 19:44:03 +00:00
JackyChen
c69a141a9e vp9: Don't force block size to 8x8 in denoiser.
First, we only set use_4x4_partition for key frame where we don't
denoise; second, envision we have small partitions, we should pass the
actual block size to denoiser and make an early termination if needed.

Change-Id: I331f42046d792b17360723d17ff817d601394658
2016-04-27 22:18:11 -07:00
Alex Converse
918a2fd726 Use signed variables in the lookahead.
Wrap around behavior is enforced manually and we use the values in
arithmetic involving negative integers.

Change-Id: I199706b6f3af91f4fb6fe2ef302fbbc6d0cf5785
2016-04-27 16:01:20 -07:00
Alex Converse
d3fe3b2abb Avoid an unsigned overflow in invert_quant
Change-Id: I16a570b2af66b6580d1cd6f8345a25f079009bf4
2016-04-27 15:07:22 -07:00
Hui Su
03b6f5f8e3 Merge "VP9: adjust trellis quant optimization RD parameters" 2016-04-26 19:12:09 +00:00
Hui Su
f16cf9fbcc Merge "VP9: enable trellis quantization optimization for intra blocks" 2016-04-26 19:11:49 +00:00
Marco Paniconi
fbefe470bf Merge "vp9: Fix condition to update consec_zero_mv." 2016-04-26 18:15:27 +00:00
Jacky Chen
29ade0d3cf Merge "vp9: Simplify the logic in denoiser SSE2 code." 2016-04-26 17:43:49 +00:00
hui su
c3a9247e09 VP9: adjust trellis quant optimization RD parameters
Coding gain:
lowres  0.64%
midres  0.38%
hdres   0.58%

Change-Id: I233fa2a4b24bd1e15091a5f5ef6aff661f3f50ec
2016-04-26 10:17:38 -07:00
hui su
c8f56d2303 VP9: enable trellis quantization optimization for intra blocks
Coding gain:
lowres  0.18%
midres  0.23%
hdres   0.36%

Change-Id: I044c8afbc481fc55b23d440352941071355b0afb
2016-04-26 10:17:29 -07:00
JackyChen
1a53c0c9e1 vp9: Simplify the logic in denoiser SSE2 code.
Block size passed into denoiser filter is always >= BLOCK_8X8 (in
vp9_pick_inter_mode), it is not necessary to check smaller block
size. Passed the bitexact test on clips with different resolutions and
noise levels.

Change-Id: I19fa3195d18c27d9e5de60dc11cff1522ef3714e
2016-04-26 09:04:39 -07:00
Paul Wilkins
779840c9f4 Merge "Resolve a couple of TODOs in firstpass.c" 2016-04-26 12:57:09 +00:00
Paul Wilkins
7a4c2c7671 Merge "Experiment to adapt for net AQ offset." 2016-04-26 12:56:52 +00:00
Marco
b7e8b3cbb6 vp9: Fix consec_zero_mv in skin detection.
This was missed in https://chromium-review.googlesource.com/#/c/340135/.

Change-Id: Iafc83141f4ff744819bdbde7d239678b215feb9d
2016-04-25 15:39:15 -07:00
Marco
9f90473ef8 vp9: Fix condition to update consec_zero_mv.
Fix will reset the consec_zero_mv map on non-skipped blocks with non-zero mv.
Adjust thresholds on consec_zero_mv in noise estimation and skin detection,
as more possible reset on map means lower thresholds should be used.

Change-Id: Ibe8520057472b3609585260b51b6f95a38fb777d
2016-04-25 15:29:11 -07:00
Marco Paniconi
97d8adef82 Merge "vp9: 1 pass vbr: Adjust gf boost/interval on motion level." 2016-04-25 21:13:56 +00:00
Marco
e172e8aa26 vp9: 1 pass vbr: Adjust gf boost/interval on motion level.
Add some adjustment for high motion case.

Change-Id: If700be1ce849c187ed031221ea7cabbc8d91ec2b
2016-04-25 11:54:10 -07:00
JackyChen
57c7c11633 vp9: Fix a bug where best_sse_mv is not set properly.
In VP9 internal denoiser, motion magnitude is computed from
best_sse_mv, which should be set to 0 at the begining. This bug may
cause visual aritifact in denoiser. Also, delete two improper comments.

Change-Id: I8710d2acba23320bc85cf72af17d65245c19438b
2016-04-25 11:44:40 -07:00
Marco Paniconi
bd3c874cac Merge "vp9-denoiser: Bugfix and some adjustments for high noise case." 2016-04-25 17:16:10 +00:00
Marco
229c686c89 vp9-denoiser: Bugfix and some adjustments for high noise case.
Need to check that sse for non-zero mv has been set for the current block
(i.e., check that nonzero-mv is tested as a mode, so newmv_sse != UINT_MAX)
before forcing to not use zero-mv for denoising.

Also increase some thresholds (sse and sse_diff) for high noise case,
and use shift operaton instead of multiplication on a threshold computation.

Change-Id: Iae7339475d57240316b7fa8b887c4ee3c0d0dbec
2016-04-25 10:15:03 -07:00
Marco
8b25dd599f vp9: Add rc quantity to track amount of low motion in scene.
Use it for now in noise estimation to bypass estimation if
motion level is high.

Change-Id: I033662dc909f2060e4e81abf562a7ad262dc8170
2016-04-25 09:07:35 -07:00
paulwilkins
015c43f0c1 Resolve a couple of TODOs in firstpass.c
Resolved two TODO items.

Force a minimum value of 1.0 for frame duration as per section duration.

Column inactive zone is currently set to 0 as most of the serious issues
relating to inactive regions relate to letter boxing.

Change-Id: Ifbab3acf2c089d7305620a7ff7ed7c3536cc9235
2016-04-25 12:38:10 +01:00
paulwilkins
4b590058c8 Experiment to adapt for net AQ offset.
In Aq mode 1 the segment and AQ delta for each block is based
on spatial variance. There may be a net imbalance between blocks
that have lower Q than the baseline value and those that have higher Q.

This patch monitors that imbalance and extends the allowed baseline
Q range for the frame to accommodate adjustment of that baseline value
to compensate.

Change-Id: Iae8a48c7c01fe2af94a141e149d03acf467237ca
2016-04-25 12:07:07 +01:00
Marco Paniconi
cf82222316 Merge "vp9: Some adjustments to denoiser under high-noise condition." 2016-04-22 18:55:57 +00:00
Marco
80ed9e4f5c vp9-noise estimation: Add check on whether skin detection is enabled.
Change-Id: Ie80b7a14e3505c40b5742793f84aa6fb9d21dab5
2016-04-22 10:37:00 -07:00
Marco
80bbba1494 vp9: Some adjustments to denoiser under high-noise condition.
Change-Id: Ib47d742d07f13c7c39cea85e228c19ae298baf4a
2016-04-22 10:31:19 -07:00
Marco Paniconi
2c8338f982 Merge "vp9: Move consec_zero_mv from cyclic refresh to cpi struct." 2016-04-22 17:06:31 +00:00
Marco
adf8533cee vp9: Move consec_zero_mv from cyclic refresh to cpi struct.
So it can be used even with aq-mode=3 not enabled.
Also cleans up some code in the places where its used.

No change in behavior.

Change-Id: Ib6b265308dbd483f691200da9a0be4da4b380dbc
2016-04-22 08:09:39 -07:00
Jim Bankoski
1de659af06 vp9_encodemb.c: TODO clean up
huisu did in nextgen branch -> please try in vp9

Change-Id: I0ff35db07ac38464e0e2858e303be686c03a5d0e
2016-04-21 20:35:54 +00:00
Marco
83f17eeede vp9: 1 pass vbr: Small fix on reset avg_intersize_gfint on scene cut.
Change-Id: Ie73d1bbc2c953d010b32097440698f0d060750be
2016-04-20 16:32:09 -07:00
Marco
8a906039a7 vp9: 1 pass vbr: small adjustment to active_best factor for inter.
Change-Id: I9c68aa9e72969b0ffbf57eb186380ff666745aeb
2016-04-20 14:25:13 -07:00
Marco
9ca6b46cef vp9: Adjust gf period for high average Q and overshoot.
For 1 pass vbr mode.
Increase the gf interval for case where average Q is close to
max and high overshoot is detected.

Small increase in overall avg_psnr/sssim metrics (~0.2/0.1%) for ytlive,
but improves the low-end (low bitrate) for several clips (less overshoot).

Change-Id: Ifba40f25b4861b2e0d9832c82d5359a6a3dce9f2
2016-04-19 17:18:11 -07:00
Marco
9cc1f692bd vp9: 1 pass vbr: More even spacing for gf near key frame.
More even spacing near key frame and avoid gf on scene cut
if its close to key frame.

Small increase in metrics for ytlive set (which uses key-period=150).
(~0.2% gain)

Change only affects 1 pass vbr mode.

Change-Id: If1e5a59baf1e0befbaf998522fbc47d94ac5b5df
2016-04-18 14:40:55 -07:00
Marco
d488236ce3 vp9: Adjustment to active_best_quality for inter_frame, 1 pass vbr.
Change only affects 1 pass vbr.

Use a q value somewhat larger (~6%) than avg_frame_qindex[INTER]
as basis for active_best_quality for inter-frames.
And use the minium of this (avg_frame_qindex) and the active_worst_quality.

This reduces some overshoot in ytlive clips.
Overall small but positive average increase in metrics (up on average ~0.2%).

Change-Id: Icdbaae7872d5675fd38a13c0ec6ce0e2e3b919ce
2016-04-18 13:01:27 -07:00
Paul Wilkins
2e0841931c Merge "Adjustment to prediction decay." 2016-04-18 18:47:13 +00:00
Scott LaVarnway
9faa0296b8 Merge "VP9: inline vp9_get_intra_inter_context()" 2016-04-15 19:06:33 +00:00
Scott LaVarnway
ef98a8f61f VP9: inline vp9_get_intra_inter_context()
Change-Id: I71366140799b9b39474b9b459082cdb250bd1905
2016-04-15 04:58:37 -07:00
Marco Paniconi
e6657f32c5 Merge "vp9: Adjustment to scene-cut detection." 2016-04-13 22:36:29 +00:00
Marco
24db57f0e1 vp9: Adjustment to scene-cut detection.
Change recursive weight for average_source_sad and
put some constraint on spacing between detected scene-cuts.

Change only affects 1 pass real-time mode.

Change-Id: I1917e748d845e244812d11aec2a9d755372ec182
2016-04-13 14:40:08 -07:00
Yunqing Wang
885872f899 Fix Visual Studio build warning
Fixed warning C4244: '-=' : conversion from 'const double' to 'int',
possible loss of data.

Change-Id: Ic4691346037767b244e7f71248c2f871f92002f3
2016-04-13 09:09:08 -07:00
Marco
6a3cf099aa vp9: Adjust threshold for scene-change detection.
For 1 pass vbr.

Change-Id: I10b7eefc36d65c30844d205e139515bec7fed6af
2016-04-12 18:28:04 -07:00
Marco Paniconi
f81b0000f6 Merge "vp9: Fix to active_best for GF/ARF in 1 pass vbr." 2016-04-12 21:18:41 +00:00
Debargha Mukherjee
ff72cca8bb Merge "Step towards making the 2-pass cq mode perceptual" 2016-04-12 19:42:06 +00:00
Marco
3861b25be1 vp9: Fix to active_best for GF/ARF in 1 pass vbr.
Correct the setting of Q basis of GF/ARF in 1 pass vbr.

Existing logic would switch to using avg_QP of key frame if
avg_QP of inter is less than active worst (even if key frame is
not last frame).

Instead fix the logic (as per the comment) to use the lower of
active_worst_quality and avg_Q for inter as basis for GF/ARF
active_best_quality (unless last frame was key frame).

Increase in metrics: AvgPSNR/SSIM up by ~0.7/0.3 on ytlive set.

Change-Id: I9a628378ec6684bfda9457ebfc2384ef6d8579f7
2016-04-12 10:37:45 -07:00
Alex Converse
a3a10a323b pickmode: only cost the skip flag once per prediction block
RTC speed 6:
File    Match   Avg     BDRate  Low     Mid     High
OVERALL ✔       -0.040  -0.045  -0.031  -0.084  0.004

Screencast speed 6:
File     Match   Avg     BDRate  Low     Mid     High
OVERALL ✔       1.115   -0.162  0.203   2.470   0.541

Change-Id: I46bbc11c89301015b5d3eac25294c709f23f0897
2016-04-11 15:39:52 -07:00
Alex Converse
5b3d3b1909 Merge "Remove obsolete segment skip checks from tokenization." 2016-04-11 18:58:32 +00:00
Paul Wilkins
1c187c4be0 Adjustment to prediction decay.
Adjustment to stop excessive prediction decay triggered by blocks
or frames with extremely low spatial complexity which rendered the
comparison of intra and inter coded errors meaningless.

This was causing much shorter than expected groups on some 4k
test content.

Change-Id: I3f2c64200ef6dcef4721fc9f2ec09e480056ffc2
2016-04-11 13:25:33 +01:00
Paul Wilkins
f659c7e99e Merge "Adjust motion component of prediction decay." 2016-04-11 10:27:30 +00:00
Paul Wilkins
c5a89b46b9 Merge "Trap very short arf group just before a kf." 2016-04-11 10:27:12 +00:00
Debargha Mukherjee
c47c460f69 Step towards making the 2-pass cq mode perceptual
Uses a metric on fraction of smooth blocks derived from first pass
stats in a frame to adjust down the cq_level modestly in the cq mode.
The current implementation does not add much complexity, and is
fairly light in the adaptation.

Change-Id: Ic484e810d5bd51b7bb6b8945f378c7c3d9d27053
2016-04-09 06:24:18 -07:00
Alex Converse
fa4ca4037e Remove obsolete segment skip checks from tokenization.
Change-Id: Iac7bc0d0eba459a04688aae224d34ae9b59742db
2016-04-08 11:38:25 -07:00
Marco Paniconi
989d536861 Merge "vp9-denoiser: Avoid copy-block when denoising is at LowLow level." 2016-04-08 17:51:54 +00:00
paulwilkins
81d1e7bf28 Adjust motion component of prediction decay.
Adjust the motion decay component to account for image size.
This has very little impact for smaller image sizes.

Average bdrate results for our HD test sets:-

Hdres set:  opsnr +0,92%,  Fast SSIM +1.6%
Netflix hd set:  opsnr + 1.5%, Fast SSIM +3.1%

There are a couple of notable -ve clips such as cyclist and sunflower
which seem to be better with a shorter interval but also a few very big
wins such as Jets >12% psnr 22% Fast SSIM and from the Netflix
Netflix set PierSeaside 9.7% psnr and 18.2% Fast SSIM.

Change-Id: Ie43aaedaa74331ed83d624a13548094ac64fed9e
2016-04-08 10:28:40 +01:00
Marco
f6f544278e vp9: Some adjustments to scene-cut detection.
Change only affects 1 pass vbr mode, speed >=5.
Increase min_thresh, decrease boost, and set a min/max
value for gf_interval.

Change-Id: I9c1e1a1ab0c5780064eb62714ee39a72ea4d2107
2016-04-07 14:26:15 -07:00
Marco Paniconi
e96f0c3db3 Merge "vp9-1 pass vbr: Use average QP for active_worst_quality, for inter-frames." 2016-04-07 16:31:12 +00:00
paulwilkins
107de19698 Trap very short arf group just before a kf.
Trap the case where we end up with a very short arf group just before
a key frame. Such a group often has poor quality and may cause pulsing.

For example if the KF is 17 frames away we are better doing two mid-size
groups of 9 and 8 than a group of 15 followed by a group of 2.

This becomes more and more important when coding with a short forced
kf interval though it may not impact our standard tests much.

Change-Id: I29d83d6637b203eac69be320dd35a7401a4678c1
2016-04-07 14:56:24 +01:00
Marco
ac86dde3af vp9-denoiser: Avoid copy-block when denoising is at LowLow level.
Avoid copy-block when denoising is at LowLow level (i.e., no denoising is done).
Instead, don't enter denoiser at all, and when level goes back up over kLowLow
do a reset in denoiser.

Change-Id: I0544adf58f4dd51ecc4a4607fcb0353bfbbb7a59
2016-04-04 17:02:24 -07:00
Marco
5572ab1d02 vp9-noise estimate: Adhust threshold for Low level detection.
Change-Id: I1c78255c81cb4ac218964c80f8ecaf29f95b875b
2016-04-04 12:33:08 -07:00
Marco Paniconi
71cf9fac83 Merge "vp9-noise estimation: Increase threshold for Low-level." 2016-04-04 17:33:35 +00:00
Marco
9ff73fe092 vp9-noise estimation: Increase threshold for Low-level.
This make it more likely clean/low-noise content will
be set as LowLow, and hence no denoising will be done.
Also set early exit on denoising for small blocks.

Change-Id: I4a72bba3e6c5e2d523d304c39deacc9c39bf216c
2016-04-04 09:32:22 -07:00
Marco
a2307ff095 vp9-denoiser. Code cleanup and bugfix.
Some cleanup and bugfix: pass mi_row/mi_col (not mv_col/mv_row)
to build_inter_predictors. This only affects case where
the frame is resized, but since denoising is not done on resized
frames, the fix has not effect currently.

Change-Id: I36617a7f0b43b6f49976745f15d400977e6ffa46
2016-04-04 09:11:00 -07:00
Marco
7467ee0458 vp9-denoiser: Adjust usage of skin and consec_zeromv.
Change-Id: I250258fc70ec0fcf1b501708c5d4b84685cf882e
2016-04-01 11:50:15 -07:00
Debargha Mukherjee
4aac819a18 Fix some static analysis issues with resize
Change-Id: I2e8ada1ae95bd5577344d6f898e6ad4723e38fbd
2016-03-31 14:39:34 -07:00
Marco
8fab3e82ca vp9-1 pass vbr: Use average QP for active_worst_quality, for inter-frames.
And replace some operation with shift.

Change-Id: If1ea874ee05b7238d5f954e55bb3ceda804a091a
2016-03-30 17:43:47 -07:00
Scott LaVarnway
ba962a5f37 VP9: Eliminate up_available and left_available
Use above_mi and left_mi instead.

Change-Id: I0b50e232c31d11da30aa2fb6f91a695aaf725e0c
2016-03-30 04:47:39 -07:00
Paul Wilkins
aea8d97a74 Merge "Increase min-max q range for normal inter frames." 2016-03-29 14:02:22 +00:00
Marco
48e7294e48 vp9-denoiser: Incorporate consec_zeromv in skin detection for denoising.
Change-Id: Ibe4e1207c0db1779e1358f4566da67c9a07bdb15
2016-03-28 10:57:54 -07:00
Marco
f94124cf31 vp9: 1 pass vbr mode at speed 5: switch to use mv.search to NSTEP.
Change only affects 1 pass, vbr, speed = 5 (real-time mode).

Some improvement for high motion content.
AvgPSNR/SSIM metrics for ytlive set all up, on average ~2%,
some clips (high motion ones) up 4/5%.

Encoder speed down: on mynintendo_x1.1280_720.y4m: 47fps -> 44fps.

Change-Id: I9e3eaa6392dcb6b5b44ee6f43004f97ba859bc11
2016-03-25 15:33:55 -07:00
Paul Wilkins
04b4a5f25e Merge "Force recode for bad rate misses." 2016-03-24 18:05:24 +00:00
Paul Wilkins
27a6be1419 Merge "Fix some HBD scaling bugs." 2016-03-24 18:04:52 +00:00
Paul Wilkins
a84f1f846e Increase min-max q range for normal inter frames.
Allow the encode loop to select from a wider range of Q values
when encoding normal (non arf or kf) frames.

This change is targeted at improving psycho-visual quality in some
easy sections that are currently not getting enough bits.
This is likely to be a little worse from a metrics perspective  and may also
have a small impact on encode speed in cases where extra recode
iterations are triggered.

Change-Id: I667eebf33c753bcbcf8b93596467369e5708b889
2016-03-22 12:56:05 -07:00
Paul Wilkins
9d8ead125d Force recode for bad rate misses.
Adds a second threshold for recodes even on frames where
recode is normally disabled if there is a big rate miss.

Change-Id: Ifd4a34707da55ec15eb7cfb87de4644b8d76deb2
2016-03-22 12:45:27 -07:00
Paul Wilkins
ee35f4dede Fix some HBD scaling bugs.
Fixed a bug for HBD in stats output and scaling of a threshold
within the first pass code.

Change-Id: Icd0463d78cc9ce4661b027b0612c55c0628d212f
2016-03-22 12:28:02 -07:00
Marco
01283e2727 vp9: Non-rd partition selection: use consec_zeromv to set sb_is_skin.
Change-Id: I084360cdeabfc63e146a969053d91baee27f4001
2016-03-22 11:16:06 -07:00
Marco
ce39add465 vp9: Improvement to skin detection.
Add consec_zeromv to skin detection.
Reduces false detection in steady background areas.

Change-Id: Ic31c831537d29f082f58477f82ed78f313d7dd30
2016-03-17 16:26:10 -07:00
Marco
32c38a20ba vp9: Fix the threshold for gf update in cyclic refresh.
Fix the threshold for forcing refresh of golden frame based
on high motion. The current comparison was incorrect and
prevented this (force update of gf on high motion) from being used.
For now keep this logic under a flag (and off for now) so as to
not change behavior, until further testing.

Change-Id: Ib5f0082159a428b0603b9534e4bcb6f83e4ccb25
2016-03-17 12:24:58 -07:00
Alex Converse
e6aebcdf08 Merge "Use whole pixel only at speed 8 screen content." 2016-03-17 16:25:28 +00:00
Alex Converse
54e5ff00a6 Merge "Reuse computation in build_nmv_component_cost_table." 2016-03-17 16:25:02 +00:00
Marco Paniconi
825e754288 Merge "vp9-svc: Bugfix on usage of svc_force_zeromv in non-rd pickmode." 2016-03-17 15:14:45 +00:00
Alex Converse
0271bafb4a Reuse computation in build_nmv_component_cost_table.
Saves 1% CPU on remoting_perftest with speed 8.

Change-Id: I28dc2f602bd3bf5639a40c9f21f5a9833f01d4be
2016-03-16 21:55:33 -07:00
Alex Converse
bd924fbd21 choose_partitioning: Avoid computing segment_id twice.
1% faster remoting_perftest at speed -8.

Change-Id: I78d591e14b8f890c1e69cacb6d490dfeb9c37900
2016-03-16 16:32:49 -07:00
Marco
f03dfcb118 vp9-svc: Bugfix on usage of svc_force_zeromv in non-rd pickmode.
Only affects 1 pass cbr svc mode.

Change-Id: Ifc0948b4aabffa64a9701295d8dbc58a7208a30f
2016-03-16 16:12:16 -07:00
Alex Converse
55859e8428 Use whole pixel only at speed 8 screen content.
+5.857% BD-RATE on SCREEN_CONTENT

Leaving this off for non-screen content because:
+25.300% on TWITCH120
+37.833% BD-RATE on RTC

Change-Id: Ie0a312182d6cc859fb04298e4cd81d02b39e23fe
2016-03-15 15:04:48 -07:00
Paul Wilkins
627a3ddcbe Isolate HBD stats bug change.
Change-Id: Ief453daf5f13f42803cb5122fcdd294e65e613f5
2016-03-15 12:24:54 -07:00
Paul Wilkins
afd869308e Merge "Revert "Fix bug in stats output for HBD."" 2016-03-15 19:21:45 +00:00
Paul Wilkins
a132100e63 Revert "Fix bug in stats output for HBD."
This reverts commit c7780075ec.

Change-Id: I2d2e1b387bf0c70cc7238ee4f8edab2aad873489
2016-03-15 19:21:14 +00:00
Marco
2bf51c76e3 vp9: Fix to scene cut/content change detection.
Use proper conditon on resolution check.

Change-Id: Idf563eb4391f373baf79546414a075b6516a5d35
2016-03-15 10:31:57 -07:00
Marco
239bf26fde vp9: Scene cut/content change detection: Adjust gf update.
For 1 pass vbr mode: Increase the period of gf update on scene
cut (keep it same as orginal/default setting for now).

Change-Id: I679c3bd21152f6c4e486c8098d931c00e1d26b5f
2016-03-14 12:16:37 -07:00
Marco
3521e9ee7c vp9: Scene cut/slide change detection: Increse min_thresh.
Only affects vbr mode.

Change-Id: I15e24c50343bc9171c734dfc7685491c7dbb8654
2016-03-14 10:43:42 -07:00
Marco Paniconi
e86d886a39 Merge "vp9: Fix issue in scene/content change detection." 2016-03-11 23:24:16 +00:00
Marco
26e5014567 vp9: Switch to model=1 for skin detection.
Very small change in speed (within 0.5%),
somewhat better detection over RTC clips.

Change-Id: I5bf0a7438fa7ccb60b26887125099e3238e5f298
2016-03-11 12:51:00 -08:00
Marco
15be44a58f vp9: Fix issue in scene/content change detection.
The change https://chromium-review.googlesource.com/#/c/329181/
also changed behavior for cbr mode, which causes some regression
in screenshare test in webrtc.

Resetting the specific change to leave the cbr behavior
unchanged for now.

Change-Id: I52df158806422f86398e1d2f522e92067d8325eb
2016-03-11 12:20:12 -08:00
Marco
caa8de547f vp9 non-rd pickmode. Some adjustments for vbr mode.
Some adjustments to inter-mode selection for vbr mode.
Condition some of the bias to low/zero motion on cbr mode, and
don't use int_pro_motion_estimation for golden ref
(treat it same as last ref).

Change only affect 1 pass vbr mode, speed >=5 (non-rd pickmode).

Encoding time increase within ~5%.
Avg PSNR/SSIM on RTC set increase by ~2%, all clips up,
ranging from 0.5 to 4%.

Change-Id: I0048d0104a8816773d91a2b1484d601169d9bad7
2016-03-11 09:22:36 -08:00
Marco
c3d6da666e vp9: Update to skin detection.
For model=1, use higher threshold on luminance, conditioned
on the skin cluster distance.

Change-Id: I971bccdef7b92b2aeef60af90a8e48b98716a89b
2016-03-10 15:46:05 -08:00
Marco
11bf7ea354 vp9-svc: Fix to frame dropping in svc mode.
Don't advance the svc frame counters on dropped frame,
since this can break the referencing scheme and lead
to a crash/assert.

Updated svc-datarate unittest to add a lower bitrate test.

Change only affects 1 pass cbr svc, with frame dropper enabled.

Change-Id: Ibb7530b7a587a9344d46898d9286fd9e2ef0779c
2016-03-09 10:15:15 -08:00
James Zern
dc221e761b vp9_svc_layercontext(): fix proto mismatch
Change-Id: I8a76d150a61662fc2e3158a49ce4e642f917029a
2016-03-08 10:37:27 -08:00
Marco
a304d26bf1 vp9-svc: Fix to resetting pattern/flags on key frame.
Chane only affects 1 pass cbr svc mode.

Change-Id: Ie28557409eb87673ed0b66c6dfe1bf3509a18c4d
2016-03-07 13:54:43 -08:00
Marco
2b5ab8095e vp9-svc: Non-rd pickmode, fix condition for testing zeromv for spatial ref.
Change-Id: I75bad321d5814a6df6735a8ead7700ab93b50763
2016-03-07 09:55:25 -08:00
Paul Wilkins
38b3593eb9 Merge "Fix bug in stats output for HBD." 2016-03-04 15:55:11 +00:00
paulwilkins
c7780075ec Fix bug in stats output for HBD.
Change-Id: Ic3b033e22cdcdc4a0f78cef433b2208fd254c27b
2016-03-04 12:57:10 +00:00
Marco
38e401b5da vp9-svc: Fix issues with svc with periodic key frames.
Use the superframe counter to set the key frame, and force
it to the key frame on base spatial layer only.
Also, update svc frame counters under frame dropping.

Update unittest: add specific tests with short key frame period.

https://bugs.chromium.org/p/webm/issues/detail?id=1150

Change-Id: I5b1c9a09253e6e5fbfce51b4cf603ae22d422b01
2016-03-02 16:59:58 -08:00
Alex Converse
fcaedc5681 Merge "Simplify the inner loop of duplicate_mode_info_in_sb." 2016-03-02 17:21:08 +00:00
Alex Converse
8b47c2662a Merge "Port "cost_coeff speed improvements" to vp9." 2016-03-02 17:20:58 +00:00
Alex Converse
6c0dd11f29 Simplify the inner loop of duplicate_mode_info_in_sb.
Change-Id: I8ba9164c3550379fb998d4d074846e90fb2c6f8c
2016-03-01 17:43:02 -08:00
Marco
c83bcb3474 vp9-svc: Allow for 2 stage downscaling for spatial layers.
For 1 pass cbr mode: allow for two-stage 1:2 scaling
(which will use the 1:2 optimized scaler) if the spatial
layer is 1/4x1/4 of souce.

Without this change, the base layer for 3 spatial layers would
be using the non-normative scaler which is un-optimized/C code.

Change-Id: I9d73f92a4a96927d0f1d6bf75315c1e60513226a
2016-03-01 15:48:42 -08:00
Jingning Han
dbaf5f64e2 Merge "Port alt reference frame filter improvement to VP9" 2016-03-01 22:31:37 +00:00
Jingning Han
405fe6b78c Merge "Back port partition rate cost estimate fix to VP9" 2016-03-01 22:31:30 +00:00
Jingning Han
9c0a2a7935 Port alt reference frame filter improvement to VP9
Use sharp filter to generate motion compensated reference for
temporal filtering. It improves the average coding performance of
VP9 speed 0:
derf    0.34%
hevcmr  0.38%
stdhd   0.58%

Change-Id: I1772a051be545de8c343055274e5ca0929d19cda
2016-02-29 16:55:13 -08:00
Jingning Han
8d006a16c5 Back port partition rate cost estimate fix to VP9
This commit back ports the fix from
https://chromium-review.googlesource.com/#/c/326940

It corrects the block partition context fetching in rate-distortion
optimization. It improves the average coding performance of speed 0:
derf    0.098%
hevcmr  0.102%
stdhd   0.282%

Change-Id: I8bcc6fe40ba5c6b50a6136daac116dcc738937ec
2016-02-29 16:50:35 -08:00
Alex Converse
ee5d3d3760 Don't copy tx_size to all 8x8 MIs in the prediction block.
The double pointer in xd->mi handles this for us.

Cuts encode_suberblock()'s self time in half at rt speed 8.

Change-Id: I820dae24efdbf9a140bbeae82e4e2a5850317766
2016-02-29 15:23:21 -08:00
Marco
55a09f7f45 vp9-svc: For 1 pass svc, remove frame-level upsampling.
With the svc fix in https://chromium-review.googlesource.com/#/c/328978/,
the asan error is resolved, so this should work now.

Change-Id: I57b2a593651d414e1b445431d90f2fdc3281128b
2016-02-29 08:56:14 -08:00
James Zern
8062e10162 Revert "vp9-svc: Fix speed issue with source downscaling for spatial layers."
This reverts commit f51f0998e1.

This causes datarate tests to fail. Some are due to the new default
keyframe distance, another causes an assert even forcing 9999:

[ RUN      ] VP9/DatarateOnePassCbrSvc.OnePassCbrSvc3SpatialLayers/0
test_libvpx:
vpx_dsp/x86/vpx_subpixel_8t_intrin_ssse3.c:853: scaledconvolve2d:
Assertion `y_step_q4 <= 32' failed.

Change-Id: I4ee4fea97f47e4f1a23b82a62e6afc6280961e38
2016-02-26 16:53:26 -08:00
Julia Robson
74a679de6f Port "cost_coeff speed improvements" to vp9.
About a 5% faster overall encode (perf cycles) at speed zero!

Change-Id: Iaf013ba75884415cd824e98349f654ffb1c3ef33
2016-02-26 14:47:18 -08:00
Marco Paniconi
a69c3f2823 Merge "vp9-svc: Bugfix for svc in non-rd variance partition." 2016-02-26 22:39:28 +00:00
Marco
6a23966c34 vp9-svc: Bugfix for svc in non-rd variance partition.
Reset the scale factors before build_inter_predictors.

Add datarate tests for 3 spatial layers, which exposed this issue.

Change-Id: I7f81efbe44345ecea9fdd5f639a4cca76aed3874
2016-02-26 09:24:18 -08:00
Marco
f51f0998e1 vp9-svc: Fix speed issue with source downscaling for spatial layers.
For 1 pass cbr mode: allow for two-stage 1:2 scaling
(which will use the 1:2 optimized scaler) if the spatial
layer is 1/4x1/4 of souce.

Without this change, the base layer for 3 spatial layers would
be using the non-normative scaler which is un-optimized/C code.

Change-Id: Ifcf526ec2aaf3e5fa7924588d9dd8660bf02fb46
2016-02-26 08:11:37 -08:00
James Zern
48755f9f1a Merge "vp9/10: fix forced keyframes w/alt-refs enabled" 2016-02-26 03:52:44 +00:00
James Zern
ac4c37c684 vp9/10: fix forced keyframes w/alt-refs enabled
in 1-pass encodes. issues with 2-pass as well as other forced flags
persist.

Change-Id: Ic7ceb906fccea6456d5df96483c10cacd46e01c7
2016-02-24 15:56:37 -08:00
Marco
1cab19e9e4 vp9: Update to scene/content change detection.
Update some parameters and put check on frame size change.
For 1 pass VBR mode, speed >= 5.

Change-Id: If24ed94a21e705ea57d40b9bf235ad079db786fc
2016-02-23 17:52:37 -08:00
Marco
a0278cad3f vp9 aq-mode=3: Allow it to be used for 1 pass VBR mode.
Change-Id: I630b8e33106c78382545d49da5fb4c75b1b0b528
2016-02-22 17:44:20 -08:00
Marco
958f372509 vp9: 1 pass vbr real-time mode: Adjust gf refresh for scene change.
Use the existing scene/content change detection to better
update/adjust golden frame refresh.

Change only affects 1 pass real-time vbr mode, speed >=5.

Change-Id: I2963a5bb7ca4a19f8cf8511b0a925e502f60e014
2016-02-19 09:40:23 -08:00
James Zern
b6b40d3015 Merge changes from topic 'vp9-missing-alloc-checks'
* changes:
  vp9_svc_layercontext: add missing alloc checks
  vp9_resize: add missing alloc checks
  vp9_encoder: add missing alloc checks
  vp9/decoder,resize_mv_buffer: add missing alloc check
  vp9_cyclic_refresh_alloc: correct cleanup on error
2016-02-18 18:53:13 +00:00
James Zern
00a39d6e04 vp9_svc_layercontext: add missing alloc checks
Change-Id: Ieb305c178c64b3864f0e8fc1a13c29799e1ae8f5
2016-02-17 16:12:40 -08:00
James Zern
efbab73cc1 vp9_resize: add missing alloc checks
Change-Id: I87ef6dec7cd2e8f9a40135e5ca11b13520ebd6d7
2016-02-17 16:12:27 -08:00