summaryrefslogtreecommitdiff
path: root/vp9/encoder/vp9_pickmode.c
AgeCommit message (Collapse)Author
2019-03-24Use high bd path to substract blocks in hbd build.Jerome Jiang
BUG=webm:1609 Change-Id: Ifc15d616e7cfb247b399def64ef7691589d90075
2019-03-21Merge "vp9: remove condition on high bitdepth using simple block yrd."Jerome Jiang
2019-03-20vp9-rtc: Fixes for low-resolnMarco Paniconi
The force smooth_filter should only be used for noisy content, so for now keep it off and add TODO. Also fix/adjust low-resoln condition and threshold in cyclic refresh. Change-Id: I6c456dc9f23daabba20badd65a2f7ee6c5e259c4
2019-03-19vp9-rtc: Adjustments for base layer in screen.Marco Paniconi
On scene/content changes for base layer of screen: reduce 32x32 split threshold, bias rdcost for flat blocks if sse_y is non-zero, and avoid early exit on intra-check. Reduce artifacts in scroll content. Change-Id: I144357a61462351173af900e0b8a47dac4aad6ca
2019-03-19vp9: remove condition on high bitdepth using simple block yrd.Jerome Jiang
Speed is similar between non HBD vs 8bit with HBD build. BUG=webm:1541 Change-Id: I8b5f7eff87ec7dc4710d31744155a60e50b0f0a9
2019-03-15vp9-rtc: Some adjustments for low-resolns real-timeMarco Paniconi
Force smooth_interpol filter for low resolutions at high Q, avoid the loopfilter strength reduction for similar conditon, and reduce thresh_motion for cyclic refresh turnoff. Change-Id: I4e9121d1cdc7d1b04992c741dc4f0cec281592f7
2019-03-10vp9-screen: Rework the mode skip logic for screenMarco Paniconi
Don't force skip of zero-golden reference when zero_temp_sad_source = 0, as it be may the inter-layer reference. And remove the flatness conditon when superblock is static. Change-Id: I6b4b6eac0f6a2abc862c23d0e5467c7cf61995ef
2019-03-08vp9-screen: Fix to screen wth layered encodingMarco Paniconi
zero_temp_sad_source is only computed when compute_source_sad_onepass and sf->use_source_sad are on, which currently is only for the top layer of the layered encoding. So qualify the usage of zero_temp_sad_source on those flags. This affects the quality/speed of the lower layers of screen content mode when SVC (quality layers) are used. Change-Id: I54167265a05a4b918ce015931375aa42d3e75cf5
2019-03-06vp9-rtc: Improve mode check on flat blocks in screen modeMarco Paniconi
For nonrd-pickmode in screen content mode: modify logic for inter and intra mode check for spatially flat blocks. Condition skip of non-zero/zero inter mode based on zero_temp_sad_source, and force intra/DC check regardless. Reduces artifacts in scrolling motion. Change-Id: Iee75cd19d03296afeb649c5bce628806103769ae
2019-03-06vp9-denoiser: Bias to last for golden long termMarco Paniconi
If golden referene is selected as long-term reference, bias the denoiser filter to use last reference. Fixes visual artifact. And reduce the thresh_svc_golden, which was used to reduce the artifact occurrence. Change-Id: I08f24160ca11bd8f5f70acaefe989d5f92988132
2019-02-28vp9-rtc: Reduce thresholds for skip goldenMarco Paniconi
For nonrd-pickmode CBR mode: reduce the skip golden ref thresholds, to reduce some psnr regression in some clips, while still effectively reducing flashing block artifact occurrence. Change-Id: I468dcf5354411aeb54ac3ef56c6fb73267d93fde
2019-02-27Merge "vp9-rtc: Add cyclic_refresh condition to segment reset"Marco Paniconi
2019-02-27vp9-rtc: Add cyclic_refresh condition to segment resetMarco Paniconi
In non-rd pickmode for screen content: this logic to reset segment should only be for cyclic_refresh mode on, so add that condition explicitly. There may be other uses of segments, like ROI, so we should condition this reset logic on cyclic_refresh, as it was intended for that mode only. Change-Id: I954e6cee968fbca35b34286c4a7ca2531c8e9823
2019-02-27vp9-rtc: Modify skip golden mode check for 1 layerMarco Paniconi
For real-time CBR mode: golden reference mode testing is skipped under certain conditons based on sse of zero-last mode. This was done for svc mode. Here we add similar condition for non-svc/1 layer encoding. Reduces flashing block artifacts that can occur in background areas with noise. Change-Id: I93f71ea9507af8c9153fc6c0ba7dcc7a0fa8810d
2019-01-31vp9: Adjust intra check for short_circuit_flat_blocksMarco Paniconi
For non-rd pickmode: include H and V intra mode check for spatially flat blocks when the sf->short_circuit_flat_blocks speed feature is set. Small improvement on screen content tests. Change-Id: I3391d02cce6a46160be6ccc8a1e33fd8547eb467
2019-01-30vp9-svc: Fix to non-rd pickmode for screen contentMarco Paniconi
For screen content mode: always force intra check for spatially flat blocks that have moved. Also adjust/fix condition for forcing check of zeromv-golden for quality layers. Reduces artifacts in screensharing tests. Change-Id: Iafd62fb24a4e05f5b12af663dde2805fdb4c7b36
2019-01-29vp9-svc: Modify early breakout for non-rd pickmodeMarco Paniconi
Modify early breakout condition for non-rd pickmode for quality layers: when lower layer has lower QP force test of zeromv on golden (lower layer reference) before breakout due to skip. Reduce artifacts, observed in cases of scrolling content. Change-Id: Id834b1eb024a4c97f0e74d8b7f7a0351459e088f
2018-12-17Localize x->encode_breakout setup to non-rd mode searchJingning Han
The breakout speed feature is currently only used by the non-rd mode search path. Localize it to simplify set_offset() logic. Change-Id: I27e7519c987a7caac2e4bd6be0ede1b9c8320e55
2018-12-07Add enum definition for subpel search precisionHui Su
To improve readability. Change-Id: Idc08b2068c7d8ba9dadc0d559a3b4d61c2a88c94
2018-12-04vp9: force refresh of long term ref when denoiser reset.Jerome Jiang
This will allocate extra frame buffer if long term temporal reference is used and denoiser is enabled on non-key frame. Add test. Change-Id: I0e8d1fdb9a2d697a8eed7fe6206bcb362e69f1c8
2018-11-26vp9-svc: Put check on usage of long term temporal ref.Marco Paniconi
If the scale factor of the golden long term reference is different from the last reference then disable usage of long term reference. This should not happen, but add this as a check against some possibly incorrect update of the svc configuration. Change-Id: Ic1062d4384e005007d8c922813fa8ad188d8fa98
2018-10-05Changes to facilitate accurate sub-pel motion searchYunqing Wang
This patch included changes to facilitate accurate sub-pel motion search. More patch will follow to turn on accurate sub-pel motion search. Change-Id: I224c28c338353fe5c7609372162f79885c54248f
2018-09-21Improve subpel MV search for speed 1Hui Su
Do one more subpel MV search each round. This improves coding efficiency slightly: lowres 0.12% midres 0.11% hdres 0.13% Also renames the control flag for subpel MV search quality. Encoding speed loss is less than 1%. This only affects speed 1. Change-Id: I3aecd25342f2dcacea6c143db494f7db6282cb92
2018-08-02vp9: new struct BEST_PICKMODE containing search results.Jerome Jiang
One of steps to refactor the nonrd pickmode. Simplify arguments list for functions. Change-Id: I5f23375caa36be2ae0fbd2ff851b303150a7aa8f
2018-08-01vp9: Refactor nonrd pickmode: new mv searchJerome Jiang
Move new mv search to a separate function. Change-Id: I6ef22d03ccad7b87cb5cd611094de204d508f63e
2018-08-01vp9: Refactor nonrd pickmode: interp filter.Jerome Jiang
Move interp filter search to new function. Change-Id: I6ac57d5b3800c9944732a84a4d4a825a6c0f4c35
2018-08-01vp9: Refactor nonrd pickmode: tx_size.Jerome Jiang
Remove duplicated code to calculate transform size. Change-Id: Id71772607eea911f24b59168c0629ba5ff891afb
2018-07-31vp9: Clamp tx_size in model_rd_largeMarco Paniconi
For nonrd_pickmode: add clamp/check to make sure tx_size is not set to lower than 8X8, for the model_rd_large function (which is only called for big block sizes). No change in behavior. Change-Id: I9c6093068e406ac16cfd6784ba75868906225378
2018-07-31vp9: Remove assert from model_rd in non-rd pickmode.Marco Paniconi
The assert checks for tx_size >= 8x8, but 4x4 can be set in some cases. Change-Id: I8bf9683e1add768becaa1208e1709ad0470e3850
2018-07-26vp9: 4x4 tx_size for nonrd-pickmode for screen contentMarco Paniconi
Force 4x4 transform size under some conditions for real-time screen-content mode. Improvemet on text in some screen clips. Change-Id: I77cafa23ea1060ef4334dc07eac53189bf80e0ec
2018-07-26Merge "vp9: Modify condition for force test of intra"Marco Paniconi
2018-07-25vp9: Modify condition for force test of intraMarco Paniconi
For real-time/nonrd_pickmode: under some conditions force check of intra modes for flat blocks with motion. Reduces artifacts for screen-content mode. Change-Id: If320f41a90982b14c48d91150f59f048a62982b1
2018-07-25vp9: Avoid early breakout on slide changeMarco Paniconi
For real-time screen content: don't allow early breakout in nonrd-pickmode on slide change. Avoid artifacts. Change-Id: I09c6927a5d85b46ce059ea5954a3719a7362fb99
2018-07-25Merge "Revert "vp9: Adjust reset segment for real-time screen-content""Marco Paniconi
2018-07-25Revert "vp9: Adjust reset segment for real-time screen-content"Marco Paniconi
This reverts commit d72cd51d83947064ef6354f02b1df59d2d3f1317. Reason for revert: <INSERT REASONING HERE> Doesn't seem to really remove the artifact that was the cause for this change. Reverting for now. Original change's description: > vp9: Adjust reset segment for real-time screen-content > > For real-time screen content mode when the short_circuit > flat_blocks feauture is enabled: reset segment to 0 for > coding block if its flat, regardless of temporal source_sad. > Reduces some artifacts on flat areas. > > Change-Id: I9620e424bedc5a13f87cc4f66af7c0e86043c89c TBR=marpan@google.com,builds@webmproject.org,jianj@google.com # Not skipping CQ checks because original CL landed > 1 day ago. Change-Id: I83ee9fd75bfb621a4f3e9afbcc07e7c6ca5c51d6
2018-07-24vp9: Modify logic for flat blocks in nonrd-pickmode.Marco Paniconi
For real-time screen content mode: when slide change is detected, for spatially flat blocks (source_variance = 0) on the re-encoded frame, skip inter modes (so force intra) if non-zero temporal variance is detected for the coding block. Add flag to keep track of re-encoded frame at max Q. Reduces artifacts on slide change. Change-Id: I28151f412aba6ab8cb03f30087c7ce16d443654b
2018-07-23vp9: Adjust reset segment for real-time screen-contentMarco Paniconi
For real-time screen content mode when the short_circuit flat_blocks feauture is enabled: reset segment to 0 for coding block if its flat, regardless of temporal source_sad. Reduces some artifacts on flat areas. Change-Id: I9620e424bedc5a13f87cc4f66af7c0e86043c89c
2018-07-12vp9: Enforce intra search on scene_changeMarco Paniconi
For real-time non-rd pickmode: force check of intra modes on INTER frames for scene changes. Reduces artifacts on scene changes. Change-Id: I5ae80869072db156791ace554c0a470f3785e9c6
2018-07-10vp9: Initialize source variance in nonrd-pickmode.Marco Paniconi
It is already initialized at superblock level, but since it is computed per coding block, based on some speed features, better to initialize it in pick_inter. No change in behavior, as currently the speed features that enable use of source_variance in pick_inter are fixed at the frame-level. Change-Id: Ic787ac2f389ba1bced98716096e7b5cffba856a7
2018-07-09vp9-svc: Intra-only frame for spatial layers.Marco Paniconi
Use case is for layered (SVC) coding to allow higher resolution layers to continue decoding with temporal references, while base spatial layer is intra-only frame. Made encoder changes to real-time path for encoding intra-only frame. The intra-only frame will be followed by the overlay/copy frame (with both packed in the same superframe). Use existing control to enable intra_only frame. Intra only is only applied to base spatial layer, and only allowed under fixed/non-flexible SVC mode, and only for 1 < number_spatial_layers < 4. Added svc datarate unittest for inserting intra_only frame as sync frame. Added svc end to end tests to check mismatch. Change-Id: I2f4f0106b2c4f51ce77aa2c1c6823ba83ff2f7a0 Signed-off-by: Marco Paniconi <marpan@google.com>
2018-07-01vp9: Fix to screen content artifact for real-time.Marco Paniconi
Reset segment to base (segment#0) on spatially flat stationary blocks (source_variance = 0). Also increase dc_skip threshold for these blocks. Reduces artifacts on flat areas in screen content mode. Change-Id: I7ee0c80d37536db7896fa74a83f75799f1dcf73d
2018-06-28vp9-svc: Adjust threshold for early exit on goldenMarco Paniconi
Use the avg_frame_low_motion to reduce/turnoff this early exit for higher motion content. Get some quality back for higher motion clips and keep the same exit thresh for low motion clips. Change-Id: I95daf754dc0048b3e935d1a753f7f1101e6ffb77
2018-06-27vp9-svc: Fix to early golden exit nonrd-pickmodeMarco Paniconi
For SVC: apply the sse_zeromv early exit also to the case where golden is second temporal reference. Set the thresh_svc_golden threshold for this case. This is reduce the encode time for case where golden is second temporal reference for SVC. Change-Id: I8c0c87dd746579d3c4f5e983c7f9dd0a1e1476e0
2018-06-25vp9: Fixes for lossless mode for real-time mode.Marco Paniconi
Fixes to nonrd coding mode for lossless mode: keep skip_txfm to 0 (no skip) and disable the encoder breakout. This makes the encoding lossless when that mode is selected for real-time (nonrd pickmode). Also the disable the cyclic refresh for lossless mode. Change-Id: I20a11ef6df08accec472d26fabebd14d51f4d337
2018-06-11vp9 svc: Denoise golden when it's a temporal ref.Jerome Jiang
When golden was the inter-layer reference, a block that selected the golden ref would not be denoised. But when golden is used as a second temporal reference then we should denoise blocks that select the golden reference. This changes allows for that. Change-Id: Ifdea2ac88f6a74f73520fedcd7fec2f32c559ec9
2018-06-07vp9 svc: add control to set using second temporal ref.Jerome Jiang
Bump up ABI version. Change-Id: I4498d7ea4ed72994c5f847aa98e75b0150dd7f82
2018-06-04vp9-svc: Allow usage of second (long term) temporal reference.Jerome Jiang
Allow for second temporal reference for top spatial layer in SVC, when inter-layer prediction is disabled on INTER frames. The second temporal reference is labelled as the golden reference and the update/refresh of this reference buffer is only on base temporal layer superframes. For now the period of refresh is fixed at every 20 TL0 superframes. Average gain is ~4% on RTC set, several clips up by ~8-12%. Speed loss is about ~2% on mac. Feature is disabled as default for now. Change-Id: I2e5db5052c62dbe958a3b14be97d043823b7a529
2018-05-31VP9: Allow for bilinear subpel interp at speed 9 for high motion.Jerome Jiang
Fixed some settings in nonrd pick mode to allow for frame-level bilinear to be set. On Galaxy S8+ it has 4% speed up on high motion clips. Almost the same for low motion. 0.17% quality loss on RTC. Change-Id: I044a7de020183754ba08bb6c96c5a78ba5c7fea2
2018-05-21vp9-svc: Small code cleanup in nonrd-pickmode.Marco Paniconi
Rename a flag to indicate it is for the inter_layer reference. Change-Id: Ib198d3df95fb912259efde854613592c724b7c49
2018-05-17vp9-svc: Skip find_predictors based on ref_frame_flags.Marco Paniconi
Has some effect for SVC on base spatial layers (which only reference LAST) or on upper spatial layers when inter_layer prediction is disabled. Small speedup on Mac of ~1%, for 3 layer SVC with inter-layer prediction disabled. Change-Id: I05be5da8843e0d32e9d85f6eb951cf1894e781d8