summaryrefslogtreecommitdiff
path: root/vp9/encoder/vp9_ratectrl.h
AgeCommit message (Collapse)Author
2016-10-111 pass vbr: Allow for lookahead alt-ref in real-time mode.Marco
For 1 pass vbr real-time mode: Allow for the usage of alt-ref frame when non-zero lag-in-frames is used. Use non-filtered alt-ref, and select usage based on fast scene/content analysis/detection within the lag of frames. Positive gains on ytlive set: overall avgPSNR ~3-4%. Several clips are up between 5-14%, a few clips are neutral/small change. Current speed decrease is about ~5-10%. Use the flag USE_ALTREF_FOR_ONE_PASS to enable this feature (off by default for now). Change-Id: I802d2bf3d44f9cf01f6d15c76be9c90192314769
2016-08-02vp9/encoder: apply clang-formatclang-format
Change-Id: I45d9fb4013f50766b24363a86365e8063e8954c2
2016-07-18vp9: Allow usage of lookahead for real-time, 1 pass vbr.Marco
Allow usage of lookahead for VBR in real-time mode, for 1 pass vbr. Current usage is for fast checking of future scene cuts/changes, and adjusting rate control (gf interval and active_worst/target size). Added unittests (datarate) for 1 pass vbr mode, with non-zero lag. Added an experimental option to limit QP based on lookahead. Overall positive gain in metrics on ytlive set: avgPNSR/SSIM up on average ~1-3%; several clips up by 5, 7%. Change-Id: I960d57dfc89de121c4824b9a9bf88d2814e74b56
2016-07-07vp9: Adjustment of gfu_boost and af_ratio for 1 pass vbr.Marco
Modify the gfu_boost and af_ratio setting based on the average frame motion level. Change only affects 1 pass vbr. Metrics overall positive on ytlive set. On average up by ~1%, several clips up by 2-4%. Change-Id: Ic18c49eb2df74cb4986b63cdb11be36d86ab5e8d
2016-06-07vp9: Replace the avg_size_inter metric, for 1 pass vbr.Marco
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-05-13vp9: Update to rc-metric for keeping track of average frame size.Marco
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-04-25vp9: Add rc quantity to track amount of low motion in scene.Marco
Use it for now in noise estimation to bypass estimation if motion level is high. Change-Id: I033662dc909f2060e4e81abf562a7ad262dc8170
2016-04-19vp9: Adjust gf period for high average Q and overshoot.Marco
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-13vp9: Adjustment to scene-cut detection.Marco
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
2015-12-15Fixed interval, fixed Q 1 pass test patch.paulwilkins
For testing implemented a fixed pattern and delta, 1 pass, fixed Q, low delay mode. This has not in any way been tuned or optimized. Change-Id: Idf5ee179b277fa15d07a97f14f2ce5bbaae80a04
2015-10-02Turn on two-steps scaling in VP9 encoder dynamic resizing.JackyChen
First do a 3/4 scaling and then go down to 1/2 when necessary. Change-Id: I5689c5228ca7e1606baea7f960eb24d0dab04d4d
2015-10-01Two-steps scaling in VP9 encoder dynamic resizing.jackychen
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
2015-08-18Allow for re-encoding frame if high overshoot.Marco
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
2015-07-06Expose params min-gf-interval/max-gf-intervalDebargha Mukherjee
Adds two new vp9 parameters --min-gf-interval and --max-gf-interval to enable testing based on frequency of alt-ref frames. Also adds a unit-test to test enforcement of min-gf-interval. For both these parameters the default value is 0, which indicates they are picked by the encoder, based on resolution and framerate considerations. If they are greater than zero, the specified parameter is honored. (Additional note by paulwilkins) Note that there is a slight oddity in that key frames are also GFs and considered part of GF only group. However they are treated as not being part of an arf group because for arf groups the previous GF is assumed to be the terminal or overlay frame for the previous group. (end note) Change-Id: Ibf0c30b72074b3f71918ab278ccccc02a95a70a0
2015-06-18Add dynamic resize logic for 1 pass CBR.Marco
Decision to scale down/up is based on buffer state and average QP over previous time window. Limit the total amount of down-scaling to be at most one scale down for now. Reset certain quantities after resize (buffer level, cyclic refresh, rate correction factor). Feature is enable via the setting rc_resize_allowed = 1. Change-Id: I9b1a53024e1e1e953fb8a1e1f75d21d160280dc7
2015-05-20Fast feedback of bits on undershoot.paulwilkins
This patch provides a partial rapid feedback of bits resulting from extreme undershoot. Some improvement on some problem animated material but in its current form only a small impact on the metrics results of our standard test sets. Change-Id: Ie03036ea8123bc2553437cb8c8c9e7a9fc5dac5d
2015-05-15vp9: correct some function signaturesJames Zern
silences missing prototype warnings Change-Id: Idaf68d83d2cb03847f3ee002c4d00c2ac79da604
2015-05-01Adjust ARF min and max interval.paulwilkins
Previously limit on max interval set to 0.5 seconds. Though this helped some low frame rate material it appears to be a bit too aggressive for some 24 and 25 fps content. This patch relaxes the limit to 0.75 seconds. The patch also adds a new minimum interval variable to replace the current hard wired value. This allows us to impose a limit on the maximum number of primary arfs per second for high frame rate (e.g. 50 & 60fps) content. This is to address concerns regarding playback performance on some platforms if there is a high base frame rate and very frequent arfs. Change-Id: I373e8b6b2a8ef522eced6c6d2cceb234ff763fcf
2015-02-10Auto-adaptive encoder frame resizing logicAdrian Grange
Note: This feature is still in development. Add an option for the encoder to decide the resolution at which to encode each frame. Each KF/GF/ARF goup is tested to see if it would be better encoded at a lower resolution. At present, each KF/GF/ARF is coded first at full-size and if the coded size exceeds a threshold (twice target data rate) at the maximum active Q then the entire group is encoded at lower resolution. This feature is enabled in vpxenc by setting: --resize-allowed=1 In addition, if the vpxenc command line also specifies valid frame dimensions using: --resize-width=XXXX & --resize_height=YYYY then *all* frames will be encoded at this resolution. Change-Id: I13f341e0a82512f9e84e144e0f3b5aed8a65402b
2015-01-28Change to update of rate control factors.Paul Wilkins
Remove damping parameter and use the damping formula introduced by Yaowu Xu in all cases. Change-Id: I18db7e0d0f262d5140102f259ab07821d374d285
2015-01-21Bug when last group before forced key frame is short.Paul Wilkins
Just before a forced key frame we often get a foreshortened arf/gf group. In such a case, we do not want to update rc->last_boosted_qindex, which is used to define the Q range for the forced key frame itself. This gives a small average metrics gain for the YT and YT-HD sets (eg. YT SSIM +0.141%). Change-Id: Ie06698bc4f249e87183b8f8fb27ff8f3fde216d9
2014-12-01Cyclic refresh: factor segment delta-q into rate control.Marco Paniconi
Incorporate segment delta-q into estimated bits. This generally improves the rate control under cyclic refresh (aq=3) mode. Change-Id: I1dc60fb230e7d08357fae18909d8ed27bf58e037
2014-11-18Prevent severe rate control errors in CBR modeYaowu Xu
In rare cases, the interaction between rate correction factor and Q choices may cause severe oscillating frame sizes that are way off target bandwidth. This commit adds tracking of rate control results for last two frames, and use the information to prevent oscillating Q choices. Change-Id: I9a6d125a15652b9bcac0e1fec6d7a1aedc4ed97e
2014-11-13Prepare for dynamic frame resizing in the recode loopAdrian Grange
Prepare for the introduction of frame-size change logic into the recode loop. Separated the speed dependent features into separate static and dynamic parts, the latter being those features that are dependent on the frame size. Change-Id: Ia693e28c5cf069a1a7bf12e49ecf83e440e1d313
2014-10-13Add adaptation option for VBR.Paul Wilkins
Allow min and maxQ to creep when the undershoot or overshoot exceeds thresholds controlled by the command line under_shoot_pct and over_shoot_pct values. Default is 100%,100% which ~disables adaptation. Derf results for example undershoot% / overshoot%:- Head:- Mean abs (%rate error) = 14.4% This check in:- 25%/25% - Mean abs (%rate error) = 6.7% PSNR hit -1% SSIM -0.1% 5% / 5% - Mean abs (%rate error) = 2.2% PSNR hit -3.3% SSIM - 1.1% Most of the remaining error and most of the quality hit is at extreme data rates. The adaptation code still has an exception for material that is in effect static so that we don't over adjust and over spend on YT slide show type content. (Rebase of If25a2449a415449c150acff23df713e9598d64c9 to resolve a auto-merge error) Change-Id: Iec4e1613ef0d067454751d8220edb7058dfbd816
2014-10-10Revert "Add adaptation option for VBR."Alex Converse
This reverts commit 869d4ca51957614dcf5093ebb9e322cc8a8405ca. This breaks the build via conflict with e18edd5eb651f9b7563cbd829744807402bfe0d8. Change-Id: If544b99e367a449452834eb8cce600f58c34ec0d
2014-10-10Add adaptation option for VBR.Paul Wilkins
Allow min and maxQ to creep when the undershoot or overshoot exceeds thresholds controlled by the command line under_shoot_pct and over_shoot_pct values. Default is 100%,100% which ~disables adaptation. Derf results for example undershoot% / overshoot%:- Head:- Mean abs (%rate error) = 14.4% This check in:- 25%/25% - Mean abs (%rate error) = 6.7% PSNR hit -1% SSIM -0.1% 5% / 5% - Mean abs (%rate error) = 2.2% PSNR hit -3.3% SSIM - 1.1% Most of the remaining error and most of the quality hit is at extreme data rates. The adaptation code still has an exception for material that is in effect static so that we don't over adjust and over spend on YT slide show type content. Change-Id: If25a2449a415449c150acff23df713e9598d64c9
2014-09-18Substantial reworking of code for arf and kf groups.Paul Wilkins
Substantial restructuring of the way we estimate the rate of decay in prediction quality and determine the arf interval and amount of boost used. Also other changes to support moving to a lower first pass Q which exposes some new features and allows us to better distinguish genuinely static blocks from low motion or noisy blocks. Net gains now visible on all the test sets with std-hd PSNR up 1.87%. There are still some bad outlier cases but most of these are low motion or slide show type content where the metrics are already high at any given rate. The best + case is up by more than 10%. Change-Id: I18e25170053bdf3188f493ff8062f48a74515815
2014-09-16Adds high bitdepth quantization functionsDeb Mukherjee
Adds various high bitdepth quantization functions. Change-Id: I36fc0bf75a1bd15128ed271df8723de0ac134b0c
2014-07-14[spatial svc]Implement alt reference framesMinghai Shang
All changes are for spatial svc only. 1. Enable encoding hidden frames in each layer and use alt reference idex to reference the hidden frame in each layer 2. Use golden reference idx for spatial reference 3. For those layers that don't have hidden frames (caused by lack of frame buffers), reference a hidden frame in lower layers 4. Add "auto-alt-refs" in svc options Change-Id: Idf27d1fd2fb5f3ffd9e86d2119235e3dad36c178
2014-06-24Experiment for mid group second arf.Paul Wilkins
This patch implements a mechanism for inserting a second arf at the mid position of arf groups. It is currently disabled by default using the flag multi_arf_enabled. Results are currently down somewhat in initial testing if multi-arf is enabled. Most of the loss is attributable to the fact that code to preserve the previous golden frame (in the arf buffer) in cases where we are coding an overlay frame, is currently disabled in the multi-arf case. Change-Id: I1d777318ca09f147db2e8c86d7315fe86168c865
2014-06-03Using 2 instead of 3 elements for avg_frame_qindex array.Dmitry Kovalev
The third array element was unused. 2 elements now: key- and interframe. Change-Id: I5b8b9f5d889cc96a204cedfc432059293256298e
2014-06-03Adding buffer levels to RATE_CONTROL struct.Dmitry Kovalev
Change-Id: Ib35ff854378764dc3c6745844c67a33dee545663
2014-05-30Merge "Re-factor some duplicate code."Paul Wilkins
2014-05-28Re-factor some duplicate code.Paul Wilkins
Change-Id: I89a1dbea39c50c7633f746d9c93fec3a289f1b42
2014-05-27Using 2 instead of 3 elements for last_q array.Dmitry Kovalev
Change-Id: I2c6950e7d79fc89c6f97e6dcf47317ef66c453a5
2014-04-30Moving #defines to *.c from *.h.Dmitry Kovalev
Change-Id: I7cc6f441f414ca1b4d95dad3f789fff6faf8c3c4
2014-04-21Merge "Add experimental VBR adaptation method."Yaowu Xu
2014-04-18Renaming VP9_CONFIG to VP9EncoderConfig.Dmitry Kovalev
Change-Id: Id48edd12c6f649c82113128491ef6ea7410e93b2
2014-04-16Add experimental VBR adaptation method.Paul Wilkins
Add code to monitor over and under spend and apply limited correction to the data rate of subsequent frames. To prevent the problem of starvation or overspend on individual frames (especially near the end of a clip) the maximum adjustment on a single frame is limited to a % of its un-modified allocation. Change-Id: I6e1ca035ab8afb0c98eac4392115d0752d9cbd7f
2014-04-15Renaming av_per_frame_bandwidth to avg_frame_bandwidth.Dmitry Kovalev
Just to be consistent with min_frame_bandwidth & max_frame_bandwidth names. Change-Id: I36702c708cba9ad1a5c36393f37758a2edeadb90
2014-04-11Adding vp9_rc_update_framerate() function.Dmitry Kovalev
Change-Id: Ie0c905b6f32a37e4360bbb44ceeae77c42ad1dc5
2014-04-10Moving last_frame_type update out from vp9_rc_postencode_update.Dmitry Kovalev
Change-Id: Ib00a694b9cf8e0c276dfefddab8cb36b8693e022
2014-04-08Merge "Moving init_rate_control() to vp9_ratectrl.{c, h}."Dmitry Kovalev
2014-04-08Merge "vp9_firstpass: Get rid of magic number in bits per MB calculation"Yaowu Xu
2014-04-07Moving compute_qdelta functions into vp9_ratectrl.{h, c}.Dmitry Kovalev
Change-Id: I512f2a287dd8765879a2d1144e2f028dc65f71ff
2014-04-07Moving init_rate_control() to vp9_ratectrl.{c, h}.Dmitry Kovalev
Change-Id: Iab3effc39064f265426c82b455ef38d37dcce5a8
2014-04-07Moving {restore, save}_coding_context to vp9_onyx_if.cDmitry Kovalev
These functions do nothing about rate control. Change-Id: I714e80b1c1f4f9aa157a56df705247fce6db138d
2014-04-07vp9_firstpass: Get rid of magic number in bits per MB calculationGuillaume Martres
Change-Id: Ib3886cb7cafc211581f4f9e7f76782d9d1984434
2014-04-02Rate ctrl changes to track target bitrates closerDeb Mukherjee
Turns off the DISABLE_RC_LONG_TERM_MEM macro and makes other changes in the way the bits are updated, to make 2-pass rate control track target bitrates closer. Change-Id: I5f3be4b11c2908e6a9a9a1dd4fcf4e65531c44d8