- 21 Apr, 2015 1 commit
-
-
paulwilkins authored
The existing test was triggering a lot of false positives on some types of animated material with very plain backgrounds. These were triggering code designed to catch key frames in letter box format clips. This patch tightens up the criteria and imposes a minimum requirement on the % blocks coded intra in the first pass and the ratio between the % coded intra and the modified inter % after discounting neutral (flat) blocks that are coded equally well either way. On a particular problem animation clip this change eliminated a large number of false positives including some cases where the old code selected kf several times in a row. Marginal false negatives are less damaging typically to compression and in the problem clip there are now a couple of cases where "visual" scene cuts are ignored because of well correlated content across the scene cut. Replaced some magic numbers related to this with #defines and added explanatory comments. Change-Id: Ia3d304ac60eb7e4323e3817eaf83b4752cd63ecf
-
- 16 Apr, 2015 1 commit
-
-
paulwilkins authored
This patch limits the maximum arf interval length to approximately half a second. In some low fps animations in particular the existing code was selecting an overly long interval which was hurting visual quality. For a sample problem test clip (360P animation , 15fps, ~200Kbit/s) this change also improved metrics by >0.5 db. There may be some clips where this hurts metrics a little, but the worst case impact visually is likely to be less than having an interval that is much too long. On more normal material at 24 fps or higher, the impact is likely to be nil/minimal. Change-Id: Id8b57413931a670c861213ea91d7cc596375a297
-
- 07 Apr, 2015 1 commit
-
-
Debargha Mukherjee authored
Modifies a special handling that improves rate control accuracy in the constrained quality mode, when the undershoot and overshoot limits are set tighter. Change-Id: If62103f0ef3ed1cac92807400678c93da50cf046
-
- 23 Mar, 2015 1 commit
-
-
paulwilkins authored
Set the GF group adaptive max Q compile flag to 1 by default. This change has a quite big visual impact in some clips and also contributes to tighter rate control. For short test clips that have consistent content the impact is quite small on metrics but for more varied long form clips there is a drop in overal psnr but a sharp rise in average psnr caused by greater expenditure on some easier sections and tighter rate clipping in hard sections. In chunck'ed encodes some of the effect will already be present due to the independent rate control in each chunk but this change takes the control down to a smaller scale. yt hd +10.67%, - 3.77%, -1.56% yt +9.654%, - 3.6%, - 1.82% std hd +0.25%, -0.85%, -0.42% derf +0.25%, - 1.1%. - 0.87% Change-Id: Ibbc39b800d99d053939f4c6712d715124082843e
-
- 20 Mar, 2015 1 commit
-
-
paulwilkins authored
Revised adjustment for rd based on source complexity. Two cases: 1) Bias against low variance intra predictors when the actual source variance is higher. 2) When the source variance is very low to give a slight bias against predictors that might introduce false texture or features. The impact on metrics of this change across the test sets is small and mixed. derf -0.073%, -0.049%, -0.291% std hd -0.093%, -0.1%, -0.557% yt +0.186%, +0.04%, - 0.074% ythd +0.625%, + 0.563%, +0.584% Medium to strong psycho-visual improvements in some problem clips. This feature and intra weight on GF group length now turned on by default. Change-Id: Idefc8b633a7b7bc56c42dbe19f6b2f872d73851e
-
- 11 Mar, 2015 1 commit
-
-
paulwilkins authored
This patch accounts in the first pass stats for blocks that while not coded as intra, are complex and have an intra error / best error ratio below a threshold. The modification shortens the GF arf interval for a particular class of content that contains a lot of blocks matching the above criteria. (In one short problem test sequence the average interval dropped from about 14-15 to 10-11) The change results in small net gains in metrics results for the Yt(~0.2%) and yt-hd (~0.5%) sets and is approximately neutral for the other test sets. The change is currently shielded by a flag and off by default pending verification that it does not cause other regressions in tests on a wider YT test set. Change-Id: I6b803daa6a4ac09a6f428fb3a18be1ecedd974b7
-
- 09 Mar, 2015 1 commit
-
-
paulwilkins authored
Adjustment previously only enabled in VBR mode. This patch allows adjustment of min and max q for CBR and adjustment of max q only for CQ mode. Change-Id: Id5e583f3d50453cd544fc57249acacd946457482
-
- 04 Mar, 2015 2 commits
-
-
Adrian Grange authored
Change-Id: I87cc0e038171c60a957298827e312fead500f7fb
-
Adrian Grange authored
Frame buffers are now allocated dynamically on-demand. Entries in the reference frame map, cm->ref_frame_map, may now be set to -1 (INVALID_IDX) to indicate that there is not a valid reference buffer in that "slot". All slots in the reference frame map are now initialized to the empty state (-1) and each buffer is initialized to have a reference count of 0. Change-Id: Id1afe98de98db4ae8b2dfefed7889c3b28c68582
-
- 23 Feb, 2015 1 commit
-
-
paulwilkins authored
When GF group adaptive maxQ is enabled this patch accounts somewhat for accumulated error in the rate control. This improves accuracy quite a bit on many clips especially when there is overshoot. Examples when the overshoot and undershoot command line parameters are set to 100: Hall @ 1200 overshoot is reduced from 67-24%. Akiyo @ 400 undershoot is reduced from 28%-15%. Setting a lower value for undershoot or overshoot still reduces the error further. Impact on metrics is mixed with some gains in average psnr but generally a little lower (e.g. 0.5%) on overall and ssim. The GF group adaptation is still off by default in this patch. Compared to with the head, enabling this mode now gives big average psnr gains on the YT sets (e.g. YT_HD >11.2%), a drop in overall PSNR (YT-HD 3.9%) and a smaller drop or neutral for SSIM. Change-Id: If4b32cd0740d3fb941317b374f9c2951954eee90
-
- 19 Feb, 2015 1 commit
-
-
Adrian Grange authored
20 items in the control string but only 19 arguments. Change-Id: I51dab9aa1c58c653b52395005a9cb41f09feb484
-
- 10 Feb, 2015 1 commit
-
-
Adrian Grange authored
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
-
- 31 Jan, 2015 1 commit
-
-
hkuang authored
In frame parallel decode, libvpx decoder decodes several frames on all cpus in parallel fashion. If not being flushed, it will only return frame when all the cpus are busy. If getting flushed, it will return all the frames in the decoder. Compare with current serial decode mode in which libvpx decoder is idle between decode calls, libvpx decoder is busy between decode calls. Current frame parallel decode will only speed up the decoding for frame parallel encoded videos. For non frame parallel encoded videos, frame parallel decode is slower than serial decode due to lack of loopfilter worker thread. There are still some known issues that need to be addressed. For example: decode frame parallel videos with segmentation enabled is not right sometimes. * frame-parallel: Add error handling for frame parallel decode and unit test for that. Fix a bug in frame parallel decode and add a unit test for that. Add two test vectors to test frame parallel decode. Add key frame seeking to webmdec and webm_video_source. Implement frame parallel decode for VP9. Increase the thread test range to cover 5, 6, 7, 8 threads. Fix a bug in adding frame parallel unit test. Add VP9 frame-parallel unit test. Manually pick "Make the api behavior conform to api spec." from master branch. Move vp9_dec_build_inter_predictors_* to decoder folder. Add segmentation map array for current and last frame segmentation. Include the right header for VP9 worker thread. Move vp9_thread.* to common. ctrl_get_reference does not need user_priv. Seperate the frame buffers from VP9 encoder/decoder structure. Revert "Revert "Revert "Revert 3 patches from Hangyu to get Chrome to build:""" Conflicts: test/codec_factory.h test/decode_test_driver.cc test/decode_test_driver.h test/invalid_file_test.cc test/test-data.sha1 test/test.mk test/test_vectors.cc vp8/vp8_dx_iface.c vp9/common/vp9_alloccommon.c vp9/common/vp9_entropymode.c vp9/common/vp9_loopfilter_thread.c vp9/common/vp9_loopfilter_thread.h vp9/common/vp9_mvref_common.c vp9/common/vp9_onyxc_int.h vp9/common/vp9_reconinter.c vp9/decoder/vp9_decodeframe.c vp9/decoder/vp9_decodeframe.h vp9/decoder/vp9_decodemv.c vp9/decoder/vp9_decoder.c vp9/decoder/vp9_decoder.h vp9/encoder/vp9_encoder.c vp9/encoder/vp9_pickmode.c vp9/encoder/vp9_rdopt.c vp9/vp9_cx_iface.c vp9/vp9_dx_iface.c This reverts commit a18da976. Change-Id: I361442ffec1586d036ea2e0ee97ce4f077585f02
-
- 26 Jan, 2015 1 commit
-
-
Paul Wilkins authored
Currently disabled by default: enabled using #define GROUP_ADAPTIVE_MAXQ In this patch the active max Q is adjusted for each GF group based on the vbr bit allocation and raw first pass group error. This will tend to give a lower q for easy sections and a higher value for very hard sections. As such it is expected to improve quality in some of the easier sections where quality issues have been reported. This change tends to hurt overall psnr but help average psnr. SSIM also shows a small gain. Average results for derf, yt, std-hd and yt-hd test sets were as follows (%change for average psnr, overal psnr and ssim):- derf +0.291, - 0.252, -0.021 yt +6.466, -1.436, +0.552 std-hd +0.490, +0.014, +0.380 yt-hd +5.565, - 1.573, +0.099 Change-Id: Icc015499cebbf2a45054a05e8e31f3dfb43f944a
-
- 23 Jan, 2015 1 commit
-
- 21 Jan, 2015 1 commit
-
-
Paul Wilkins authored
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
-
- 25 Nov, 2014 1 commit
-
-
Yunqing Wang authored
This patch modified struct VP9_COMP. Created a struct ThreadData to include data that need to be copied for each thread. In multiple thread case, one thread processes one tile. all threads share one copy of VP9_COMP, (refer to VP9_COMP *cpi in the code) but each thread has its own copy of ThreadData, (refer to ThreadData *td in the code). Therefore, within the scope of encode_tiles(), both cpi and td need to be passed as function parameters. In single thread case, the FRAME_COUNTS pointer in ThreadData points to "counts" in VP9_COMMON. Change-Id: Ib37908b2d8e2c0f4f9c18f38017df5ce60e8b13e
-
- 21 Nov, 2014 1 commit
-
-
Paul Wilkins authored
Make the midpoint variance used in AQ mode 1 segmentation depend on the overall complexity of the frame in two pass. Change-Id: I452814ec57f7a32352e41bb250e78066abe952dd
-
- 20 Nov, 2014 2 commits
-
-
Paul Wilkins authored
Correct calculation of number of mbs in two pass code when frame resizing is enabled. Always use initial number of mbs if scaling is enabled, as this is what was used in the first pass. Change-Id: I49a4280ab5a8b1000efcc157a449a081cbb6d410
-
Yunqing Wang authored
This reverts commit 6906d218. Another way will be used to handle mb struct. Change-Id: Ic1111a46b2b1ee00f8f9e3fcd4cf3eb6030b2dc4
-
- 14 Nov, 2014 1 commit
-
-
Yunqing Wang authored
Modified VP9_COMP struct to include MACROBLOCK *mb. This change makes it feasible in multi-thread case to allocate a mb for each thread. Change-Id: I624d6d1aa9c132362200753e5d90b581b1738d6e
-
- 13 Nov, 2014 2 commits
-
-
Adrian Grange authored
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
-
Paul Wilkins authored
Add extra vp9_clear_system_state() calls to fix double / mmx issue introduced into first pass code for 32 bit builds. Change-Id: I84cd2986b80d83650a091ab25c43755efeb82e03
-
- 07 Nov, 2014 1 commit
-
-
Paul Wilkins authored
Removed redundant weighting function tied for AQ1 from first pass code. Improvment in baseline AQ1 results:- Derf opsnr +0.142% SSIm +0.258% YT opsnr +0.173% SSIm +0.3% Change-Id: I16ef91caf2d7f302cd5940cc5e2626d48ebcb212
-
- 06 Nov, 2014 1 commit
-
-
Paul Wilkins authored
The aim of this patch is to apply a positive weighting to frames that have a significant number of blocks that are of low spatial complexity and are dark. The rationale behind this is that artifacts tend to be more visible in such frames. In this patch the weight is only applied in regard to the distribution of bits between frames. Hence if all the frames share similar characteristics (as is the case for most of our short test clips) there will be little or no net effect. However, the effect can be seen on some longer form test content. For example Tears of steel baseline test: 2323.09 Kbit/s opsnr 39.915 ssim 74.729 With this patch:- 2213.34 Kbit/s opsnr 39.963 ssim 74.808 (Sligtly better metrics and about 5% smaller) The weighting may well need some further tuning along side changes to the aq modes. Change-Id: Ieced379bca03938166ab87b2b97f55d94948904c
-
- 28 Oct, 2014 1 commit
-
-
Paul Wilkins authored
Added code to relax the active maximum Q in response to extreme local overshoot to reduce bandwidth peaks. The impact is small in metrics terms, but it this helps reduce bandwidth spikes and overall overshoot in a number of clips in our tests sets (especially the YT test set). In particular this should help prevent very big spikes where a clip is mainly easy but has a short hard section. In such a case a choice of maximum Q for the clip as a whole may allow us to hit the overall target rate but give some extreme spikes. The chunked encoding in YT mitigates this problem but it can show up where a longer clip is coded as a single chunk. Change-Id: I213d09950ccb8489d10adf00fda1e53235b39203
-
- 23 Oct, 2014 1 commit
-
-
Adrian Grange authored
The point at which frames are scaled to their coded dimensions is moved into the re-code loop. This is in preparation for a further patch that will add logic into the re-code loop to reduce the coded frame size if the encoder is struggling to hit the target data rate at the native frame size. Change-Id: Ie4131f5ec6fb93148879f6ce96123296442bf2d1
-
- 17 Oct, 2014 1 commit
-
-
Paul Wilkins authored
Delete gfboost_qadjust() and move Q based adjustment into calc_frame_boost(). Also remove clamping. Making the adjustment here means that it influences not just the boost level but also the selection of the GF/ARF interval. This change gives a small average gain in PSNR but larger gains in SSIM, especially for harder std-hd set (1.5%) Change-Id: I3aa81b8feccaeff93d915e19fb9cf5cd64c86327
-
- 16 Oct, 2014 3 commits
-
-
Minghai Shang authored
We encode a empty invisible frame in front of the base layer frame to avoid using prev_mi. Since there's a restriction for reference frame scaling factor, we have to make it smaller and smaller gradually until its size is 16x16. Change remerged. Change-Id: I9efab38bba7da86e056fbe8f663e711c5df38449
-
Paul Wilkins authored
This reverts commit 452dc215. This change has introduced a significant quality regression on content with forced key frames. (e.g. the YT and yt-hd set). It is most noticeable in static content where the kf bits dominate. Here, despite key frames being apparently coded at the same Q, there is a drop in all metrics of ~20% (e.g clXR and BFa0). Change-Id: Iba14cc61778c0846fa0a59c33c55a9fc49512cb4
-
Paul Wilkins authored
This reverts commit c113457a. Temporary revert to allow clean revert of another commit. Change-Id: Ia9b7b755e6c48e1b6e383329f121fef175a24b27
-
- 14 Oct, 2014 2 commits
-
-
Minghai Shang authored
We encode a empty invisible frame in front of the base layer frame to avoid using prev_mi. Since there's a restriction for reference frame scaling factor, we have to make it smaller and smaller gradually until its size is 16x16. Change-Id: I60b680314e33a60b4093cafc296465ee18169c19
-
Adrian Grange authored
Move the point at which input frames are scaled into the recode loop. This will allow us to change the coded frame size dynamically in response to previous attempts to encode the frame at a higher resolution. A following patch will implement a scheme for resizing the frame in the recode loop. Change-Id: I6a59c02d6ac1626512edad6de8b60063b79433e6
-
- 13 Oct, 2014 2 commits
-
-
Paul Wilkins authored
Add back clamp which ensures that the Q adaptation is turned off when the over_shoot_pct and under_shoot_pct parameters are set to 100. Change-Id: Id0161b114d39a3029cd3eb28020caab0c3914922
-
Paul Wilkins authored
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
-
- 10 Oct, 2014 2 commits
-
-
Alex Converse authored
This reverts commit 869d4ca5. This breaks the build via conflict with e18edd5e. Change-Id: If544b99e367a449452834eb8cce600f58c34ec0d
-
Paul Wilkins authored
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
-
- 09 Oct, 2014 2 commits
-
-
Deb Mukherjee authored
Uses highbd_ prefix convention consistently. Change-Id: I58f7f799a7ff8e32701bcd71c955bcf1cdd4581e
-
Yunqing Wang authored
In model_rd_for_sb function, the spatial domain SSE and variance are checked to see if transform coefficients are quantized to 0. Besides that, this patch adds another set of thresholds that are much more strict. These thresholds are used to conduct a partition block level check to measure if all its TX blocks are skippable for YUV planes. If it is true, x->skip is set for this partition block, and thus its mode search is terminated. This speeds up the encoding at very low prediction error case, such as screen sharing application. This patch covers what rd_encode_breakout_test() does, so that function is removed. Borg test at speed 3 shows: For stdhd set, psnr: +0.008%, ssim: +0.014%; For derf set, psnr: +0.018%, ssim: +0.025%. No noticeable speed change. Change-Id: I4e5f15cf10016a282a68e35175ff854b28195944
-
- 06 Oct, 2014 1 commit
-
-
Paul Wilkins authored
Adjustments to the GF interval choice and minimum boost. Adjustment to the calculation of 2 pass worst q. Compared to 09/29 head there is metrics hit on derf of (-0.123%,-0.191%) Compared to the September 29 head and a baseline on September 18 baseline the accuracy of the VBR rate control measured on the derf set is as follows:- Mean error % / Mean abs(error %) Sept 18 baseline (-7.0% / 14.76%) Sept 29 head (-15.7%, 19.8%) This check in (-1.5% / 14.4%) The mean undershoot is reduced slightly but the worst case overshoot on e.g. harbour/highway is increased. This will be addressed in a later patch. Change-Id: Iffd9b0ab7432a131c98fbaaa82d1e5b40be72b58
-