summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2012-02-08Fix dual prediction recode loop.Ronald S. Bultje
We should only change the dual prediction mode if we actually entered the recode branch. Else, it may potentially undo beneficial changes to the dual prediction mode in the first encode iteration. Change-Id: I79fc53e5fd0bb551092ed422c797619f1566f002
2012-02-08Remove write-only variable "mbs_dual_count".Ronald S. Bultje
Change-Id: Icf7a6749ca2f8ad6a032f86c34540d1c5880cf68
2012-02-08Fix dual prediction recode loop.Ronald S. Bultje
Some conditions were conditional under a threshold, whereas they should always execute. Also, some conditions were testing an array instead of the values within it. Change-Id: Ia6892945cfbbe07322e6af6be42cd864bf9479c1
2012-02-06Move update of ref frame probabilities in encode loop.Paul Wilkins
The existing code updated the reference frame probabilities before the test to evaluate the impact of using updated probabilities in vp8_estimate_entropy_savings(). The estimate of cost and savings is still basic and does not reflect the new prediction code but this would require per MB costings and the benefit is probably marginal, as this is really just used for rate estimation in the loop. Change-Id: Id6ba88ae6e11c273b3159deff70980363ccd8ea1
2012-02-06Merged NEWNEAR experimentPaul Wilkins
This commit merges the NEWNEAR experiment such that it is effectively always on. The fact that there were changes in the threading code again highlights the need to strip out such features during the bitstream development phase as trying to maintain this code (especially as it is not being tested) slows the development cycle. Change-Id: I8b34950a1333231ced9928aa11cd6d6459984b65
2012-02-06Coding the hybrid dual prediction signal.Paul Wilkins
Initial modifications to make limited use of common prediction functions. The only functional change thus far is that updates to the probabilities are no longer "damped". This was a testing convenience but in fact seems to help by a little over 0.1% over the derf set. Change-Id: I8b82907d9d6b6a4a075728b60b31ce93392a5f2e
2012-02-06Moved prob_dualpred to common.Paul Wilkins
Moved the prob_dualpred[] sturcture to common. Created common prediction entry for Dual flag. Change-Id: I9ac3d128bae6114f09e5c18216d4b95cf36453d5
2012-02-06Modified prediction behavior for reference frame.Paul Wilkins
Trial of a modified prediction function that ranks each possible reference frame based on a combination of local usage and frame level probability. The code is a bit cleaner and simpler. In direct comparison with old unpredicted method with segment level coding turned off for mode,ref & EOB the prediction gives a gain on derf of around 0.4%. There is some further gain from bug fixes over earlier code. With segment coding on the prediction method is slightly -ve on some very easy clips (at low rates) due to slightly higher overheads, but better on harder clips. Overall neutral on derf in direct comparison on latest code base, but compared to earlier code without bug fixes about +0.7% overall psnr +0.3% SSIM. Change-Id: I5b8474658b208134d352d24f6517f25795490789
2012-02-03Reference frame prediction:Paul Wilkins
Extended prediction and coding of reference frame where a subset of options are flagged as available at the segment level. Updated copyright notices. Switch to SAD in mbgraph code as SATD problematic for the foreground and background separation as it can ignore large DC shifts. Change-Id: I661dbbb2f94f3ec0f96bb928c1655e5e415a7de1
2012-02-02Added encoding in Superblock OrderAdrian Grange
As a precursor to encoding 32x32 blocks this cl adds the ability to encode the frame superblock (=32x32 block) at a time. Within a SB the 4 indiviual MBs are encoded in raster-order (NW,NE,SW,SE). This functionality is added as an experiment which can be enabled by ispecifying --enable-superblocks in the command line specified to configure (CONFIG_SUPERBLOCKS macro in the code). To make this work I had to disable the two intra prediction modes that use data from the top-right of the MB. On the tests that I have run the results produce almost exactly the same PSNRs & SSIMs with a very slightly higher average data rate (and slightly higher data rate than just disabling the two intra modes in the original code). NOTE: This will also break the multi-threaded code. This replaces the abandoned change: Iebebe0d1a50ce8c15c79862c537b765a2f67e162 Change-Id: I1bc1a00f236abc1a373c7210d756e25f970fcad8
2012-02-02Comment out segref segmentation filter changes.Paul Wilkins
Commented out changes from earlier checking: "Change Iab7f1eff: vpnext use segref segmentation filter" Which in its current state breaks the decoder. Change-Id: I9185098aeda8ce65310f338c4c9375f4a39005d3
2012-02-01Fixes a decoder bugYaowu Xu
The bug was introduced by the commit that added I8X8 intra prediction mode for inter frames, the decoder was not update to accept the additional probability update from encoder. This causes the decoder typicall to crash when encoder sends intra mode probability update. Change-Id: Ib7dc42dc77a51178aa9ece41e081829818a25016
2012-02-01Import another decoder bug fix from public stable branchAuthor: John Koleszar
Please see the following for details: https://gerrit.chromium.org/gerrit/#change,10925 Change-Id: Ie692261c255c58d7762df22eeca566a7d13adcba
2012-02-01Import a decoder bug fix from public stable branchScott LaVarnway
Please see the following public commit for details: https://gerrit.chromium.org/gerrit/#change,7608 Change-Id: I589eed0b6078e2c5c9c74e942886e503bd02b273
2012-01-31Correctly capped minqtarget to maxqAdrian Grange
This line of code incorrectly set maxq = maxq rather than capping minqtarget. Change-Id: Ifbc86df8b0ff2779e7b2a5f7349724d04a18bd62
2012-01-31Merge "Refining the 8-tap interpolation filters." into experimentalDeb Mukherjee
2012-01-31Implementation of new prediction model for reference frame coding.Paul Wilkins
This check in uses the common prediction interface functions to code reference frame. Some updates made regarding the impact of the new code in rd loop but there remain TODOs in this regard. Change-Id: I9da3ed5dfdaa489e0903ab33258b0767a585567f
2012-01-31Use common prediction interface for segment coding.Paul Wilkins
This does not change any functionality just modifies the code to use the common prediction module interface for coding the segment data. Change-Id: Ifd43e9153573365619774a4f5572215e44fb5aa3
2012-01-31Added common prediction modules.Paul Wilkins
This function adds the common prediction modules, some data structures and a config option but does not use them. It also corrects a bug in clearing down the MODE_INFO border and introduces a new element that indicates if an entry corresponds to an "in image" macro block or is part of the border. Change-Id: Ib69eec0876173ebe9d1de9df9537d0b2447702e0
2012-01-31Moved some reference frame data structures into common.Paul Wilkins
Encoder side changes Change-Id: I8921800e4fccec5e5a9e4755b80cbd472623107b
2012-01-31Moved some reference frame data structures into common.Paul Wilkins
In this commit only the decoder side was updated. Change-Id: Ia9bd58da07d1a943f028e330f0489344e62b0d02
2012-01-31Moved some segmentation data structures.Paul Wilkins
Moved some segmentation data structures into VP8_COMMON Change-Id: I59c6e2edf7a0176e35319936eea450027aeb3b39
2012-01-30Refining the 8-tap interpolation filters.Deb Mukherjee
Fixes a rounding issue with the 8-tap filters, which allows us to use sharper filters that before with a little better performance. Results on derf (0verall gain 0.76): http://www.corp.google.com/~debargha/vp8_results/enhinterp.html Results on a 720P set (Overall gain 0.61): http://www.corp.google.com/~debargha/vp8_results/enhinterp_hd.html Change-Id: I4cd7bdf3583db974dc5589fa64857bc31ac861fa
2012-01-27vpnext use segref segmentation filterJim Bankoski
Goes through set of ref frames used by each macroblock and sets seg_lvl_ref_frame flags accordingly.. http://www.corp.google.com/~jimbankoski/no_crawl/segref.html Change-Id: Iab7f1effd75a839b34eb310d7168692c8f105411
2012-01-27vpnext: pick loop filter segment by segmentJim Bankoski
Picks a per segment loopfilter. Adapts the algorithm to search for a loopfilter value for each separate segment. Further todo fix the bias Improvements .06 % ov psnr, .11% ssim http://www.corp.google.com/~jimbankoski/no_crawl/segmentedpicklpf.html Change-Id: Ic6a571c16fcd6ec0139f4de1f8061f87c6515a10
2012-01-27Merge "fixed an issue with 8x8 token cost in trellisquant" into experimentalYaowu Xu
2012-01-26fixed an issue with 8x8 token cost in trellisquantYaowu Xu
changed the token cost for 8x8 transformed macroblock used in trellisquant from those derived from 4x4 transform coefficient distribution to those derived from 8x8 transform coefficient distribution. Test results show this fix help 8x8 transform based compression consistently on cif and hd sets: http://www.corp.google.com/~yaowu/no_crawl/t8x8/cif_cost8x8only.html (avg psnr:.14% glb psnr: .17% ssim: .20%) http://www.corp.google.com/~yaowu/no_crawl/t8x8/hd_cost8x8only.html (avg psnr:.17% glb psnr: .18% ssim: .58%) Note: To test the effect of this change, 8x8 transform was forced to be used only on 16x16 predicted macroblocks on inter frames, the effect would be bigger had all macroblocks been forcd to use 8x8 transform. Change-Id: If9b7868b75357c66541f511e5ee78e4d2d4929a4
2012-01-26Adds support for enhanced interpolation for subpel motionDeb Mukherjee
using an 8-tap filter. The results with 3 different 8-tap filters on the derf set are in: http://www.corp.google.com/~debargha/vp8_results/enhinterp.html The one that gives the most gain achieves an overall gain of about 0.6%. The results for a set of 12 hd (720p) videos are in: http://www.corp.google.com/~debargha/vp8_results/enhinterp_hd.html with max gain of 0.55% with the same filter. The best filter apparently achieves the best trade-off between pass band ripple and stop band attenuation. Change-Id: I919e28ae245c0493147fa0864f8c9d048a9dd530
2012-01-24Merge "changed loop filter for MBs using 8x8 transform" into experimentalYaowu Xu
2012-01-24vpn common -> implicit segmentationJim Bankoski
This introduces base functions for introducing implicit segmentation. The code that actually stores the results to the segment map isn't here yet. This just prints out the segmentation map results if you call it. Uses connected component labeling technique on mbmi info so that only if 2 mbs are horizontally or vertically touching do they get the same segment. vp8next - plumbing for rotation code to produce taps for rotation ( tapify. py ), code for predicting using rotation ( predict_rotated.c ) , code for finding the best rotation find_rotation.c. didn't checkin code that uses this in the codec. still work in progress. Fixed copyright notice Change-Id: I450c13cfa41ab2fcb699f3897760370b4935fdf8
2012-01-20changed loop filter for MBs using 8x8 transformYaowu Xu
This commit added a set of loop filter functions for macroblocks using 8x8 transform. First we turned off the regular loop filtering on 4x4 block boundaries that do not exist in macroblocks using 8x8 transform. Second, we change to use the same loop filter(mask and 7 tap filter) that used for macroblock edge filtering. Change-Id: I3a00460b7674ced116917d86812ffc32578c1d3a
2012-01-19Added code to prevent I8X8_PRED mode for MBs using 8x8 transformYaowu Xu
This fixed a conflict introduced by the change of adding 8x8 intra prediction modes. The 8x8 intra prediction mode code assumed the use of 4x4 transform, and causes encoder crashes when the codec is configured with --enable-t8x8. Change-Id: I00cc94df63e9725377ffba9eb51be6b77fe3fcf9
2012-01-19reverted an accidental code deletingYaowu Xu
commit cf561bad accidentally deleted a line of code that sets the base_qindex for each frame, which leads to every frame is encoded at Q of 0. Change-Id: Ib5f8022e856bf3b3bd0d4147405e46241e3dcf2d
2012-01-18Merge "new loop filter functions for macroblock boundaries" into experimentalYaowu Xu
2012-01-18new loop filter functions for macroblock boundariesYaowu Xu
The commit adds a new set of loop filter for macroblock edge filtering. The new loop filter has a mask to detect so-called "flat" regions. The detection checks 5 pixels of each side of an edge. If the all pixels have value with +/-1 from the edge pixel on the same side, the region is treated as a "flat" region. For such case, a 7 tap filter is used to change 3 pixel values on each side. The 7 taps are: [1, 1, 1, 2, 1, 1, 1]/8 The furthest away pixels used as input are +/-5 away from edge. For non-flat region, we fall back to old filtering. It should be noted here that the thresholds and filter taps may require more optimization for best possible results. Tests on a set of hd clips showed consistent gains: http://www.corp.google.com/~yaowu/no_crawl/mblpf_hd.html (avg psnr: .83% glb psnr: .77% ssim: .82%) Tests on derf set also showed consistent gains: http://www.corp.google.com/~yaowu/no_crawl/mblpf_derf.html (avg psnr: .24% glb psnr: .22% ssim: .48%) Change-Id: I0855b1ff48e79e1175c20b81967137e18b2af352
2012-01-18Possible divide by 0 error.Paul Wilkins
Put traps to prevent two possible divide by 0 errors. Change-Id: Ia415b945244253dcdd12f54f1f157f9ca8c94d6b
2012-01-17Rate control on static scenes plus Y2dc delta Q fix.Paul Wilkins
A problem can arise on static clips with force key frames where attempts to avoid popping lead to a progressive reduction in key frame Q that ultimately may lead to unexpected overspend against the rate target. The changes in this patch help to insure that in such clips the quality of the key frames across the clip is more uniform (rather than starting bad and getting better - especially at low target rates). This patch also includes a fix that removes a delta on the Y2DC when the baseline q index < 4 as this is no longer needed. There is also a fix to try and prevent repeat single step Q adjustment in the recode loop leading to lots of recodes, especially where the use of forced skips as part of segmentation has made the impact of Q on the number of bits generated much smaller. Patch 2: Amend "last_boosted_qindex" calculation for arf overlay frames. Change-Id: Ia1feeb79ed8ed014e4239994fcf5e58e68fd9459
2012-01-11Merge "Added an emms to prevent invalid stats output" into experimentalYaowu Xu
2012-01-05Added an emms to prevent invalid stats outputYaowu Xu
In certain hardware configuration, where mmx code is enabled and other simd (sse2/sse3) disabled, lacking of this emms caused invalid internal stats outputs. Change-Id: I77c61cf6e0448d3f3b8c11781aa9e42f31d231c9
2011-12-22Fix more warnings.Christian Duvivier
Change-Id: Ifadf65026a11bdb5d39840748613880bcfb364bb
2011-12-22Add script to test all builds.Christian Duvivier
Change-Id: I6bbed8bcb2dfa3458ffc59179dfba66c92e18125
2011-12-21Fix a couple of warnings.Christian Duvivier
2011-12-21changed mode_context update strategyYaowu Xu
Previously, the mode context is always udpated based on stats of current frame, when there is no count, 50% is used for both left and right branch. However, it is observed that with such strategy, a small count or no count at all can skew the probability distribution significantly. This commmit changed the mode_context update strategy to prevent small counts from skewing the probability distributions. Tests on derf set showed a small gain: .06% in psnr and .09% in ssim Change-Id: Ic812e64ae5f70251c170b0717f7b7fa587055488
2011-12-20Merge "Extended Q:" into experimentalPaul Wilkins
2011-12-20Merge "Extend to 256 Q steps." into experimentalPaul Wilkins
2011-12-20Merge "QRange experiements." into experimentalPaul Wilkins
2011-12-20Merge "Further QIndex realted Fixes:" into experimentalPaul Wilkins
2011-12-19Extended Q:Paul Wilkins
Cleanup and switch to Q extended at low end too. Change-Id: Ie22676bb9e961097d75dbd1d81745208b63e5f4b
2011-12-19Extend to 256 Q steps.Paul Wilkins
This commit extends the number of Q steps to 256 from 128. The q_trans[] array has been altered to distribute available Q index values (using the current 64 steps available as input parameters) evenly across the available range. This is coupled with the fact that each Q step where possible now equates to a fixed % change in the quantizer. This may want refinement later especially in terms of the granularity at the high quality end but is a reasonable starting point. Change-Id: I2aaa6874fa10ce05c958dd182947ce39f6f1eecb
2011-12-19QRange experiements.Paul Wilkins
High Q end extended a little. Some clean up. Slightly better on SSIM, Slightly worse on PSNR over derf set. Change-Id: I3dceea8a39e11c26e1a389a40e40b86efc76d28c