summaryrefslogtreecommitdiff
path: root/vp8
AgeCommit message (Collapse)Author
2012-02-16Merge "revised the rate distortion computation for UV" into experimentalYaowu Xu
2012-02-16revised the rate distortion computation for UVYaowu Xu
this commit changed the UV r/d calculation in the mode decision process to properly account for the rate of 8x8 transform coefficients. Change-Id: I485f8f35f2b61db0b6539beb32e83481b1cf083b
2012-02-16Merge "optmized rounding for transforms" into experimentalYaowu Xu
2012-02-16Merge "re-scaled 2nd order haar transform" into experimentalYaowu Xu
2012-02-16Merge "moved scaling from dequantization to inverse transform for T8x8" into ↵Yaowu Xu
experimental
2012-02-16optmized rounding for transformsYaowu Xu
the changes are still temporary, the final transforms, especially inverse ones should take in account both accuracy, complexity, and sign-bias, which should be decided at a later time. Change-Id: I116b0c70b25f5ee324ae5713d4564f5d0aa27151
2012-02-16re-scaled 2nd order haar transformYaowu Xu
During the work of extend_qrange, we have rolled a factor of 2 from quantization/dequatnization into 2nd order walsh-hadamard transform. This commit does the same for the 2nd order haar transform. so they can share the same quantizaiton process as the 2nd order WHT. Change-Id: I734af4a20ea8149a01b5b1971a065092977dfe33
2012-02-16moved scaling from dequantization to inverse transform for T8x8Yaowu Xu
Previously, the scaling related to extended quantize range happens in dequantization stage, which implies the coefficients form forward transform are in different scale(4x) from dequantization coefficients This worked fine when there was not distortion computation done based on 8x8 transform, but it completely wracked the distortion estimation based on transform coefficients and dequantized transform coefficients introduced in commit f64725a00 for macroblocks using 8x8 transform. This commit fixed the issue by moving the scaling into the stage of inverse 8x8 transform. TODO: Test&Verify the transform/quantization pipeline accuracy. Change-Id: Iff77b36a965c2a6b247e59b9c59df93eba5d60e2
2012-02-15Remove dual prediction frame re-encoding loop.Ronald S. Bultje
I'm basically not convinced that the concept works at all, let alone that this is the right place to do it. I think if we want something like this at all, I should integrate it with the main encoding loop and re-encode checks in onyx_if.c, and show that it has a significant benefit (which right now, it doesn't; removing this re-encode check actually increases all metrics by ~0.15%). Change-Id: I1b597385dc17f468384a994484fb24813389411f
2012-02-15Fix overflows in dual prediction mode selection.Ronald S. Bultje
Change-Id: I265ad46e01a307bca21e6223725e4055f5e08648
2012-02-15Experimental code base simplification.Paul Wilkins
Remove error concealment code. Change-Id: I882705174fbfea212e96f7f684e47a671dbe5c67
2012-02-15moved segment based LPF level selection under CONFIG_FEATUREUPDATESYaowu Xu
This commit moved segment based loop filter level selection into the experiment of CONFIG_FEATUREUPDATES. As previous commit noted, the segment based loop filter selection helps the compression by ~0.1% on cif set, the ongoing experiment CONFIG_FEATUREUPDATES made encoding updates of the segment based LPF level more efficient, hence, another .04% gain on cif set. The commit also fixed an issue previously where encoder/decoder may use different loop filter level for one of the segments. Change-Id: Ia978b14aae95bb107d561ba53a7a2bb6ff01faf3
2012-02-14added 8x8 based Rate estimation for dualpred caseYaowu Xu
This commmit added logic for MB using dual-pred to compute rate estimation based on correct transform size. The section of code was previously located under #if CONFIG_DUALPRED, that was made to be working with T8x8 experiment at the same time. Change-Id: Iebc2518c03f11378b9c2e72905520f088b54d5c0
2012-02-14Simplification of experimental code base.Paul Wilkins
Removed ~CONFIG_REALTIME_ONLY code. Change-Id: I5fafff29a08acd8928699f9ddce8744787024d8c
2012-02-13vp8 - config_featureupdatesJim Bankoski
Added a bit to signify that the feature changed since the last time we sent it, or not so that we don't need to send all the databits for every feature change. added config Change-Id: I8d3064ce90d4500bf0d5c6b87c664e46138dfcac
2012-02-13Changed how coefficient probability table is updatedYaowu Xu
Added a frame level flag to indicate if coef probabilities are updated at all for the frame. During the experimental work with 8x8 transform, it is discovered that even in the case of no probability is ever update, cost of transmitting "no update" for each of probabilities can run up to become a significant overhead cost. A single bit to indicate no-update for all coef probs is therefore helpful, which is also demonstrated by the test results: 1. On Cif set: http://www.corp.google.com/~yaowu/no_crawl/t8x8/cif_t8x8_updprob.html (avg psnr: .14%, glb psnr: .14% SSIM: .13%) 2. On HD set: http://www.corp.google.com/~yaowu/no_crawl/t8x8/HD_t8x8_updprob.html (avg psnr: .02% glb psnr: .01% SSIM: .02%) It should be noted that the gain on HD is smaller because the average bit rate is much higher in contrast to the overhead bit cost. Change-Id: I46db270e693ee8799fef34a14d8260868ce4cd16
2012-02-13Fixed typo on #define namePaul Wilkins
SE_LVL_EOB => SEG_LVL_EOB Change-Id: I6d10169878a709bc9b82f03e5d5903c629fa7679
2012-02-10fixed an issue related to 2nd order size due to merge artifacts.Yaowu Xu
For 8x8 transformed macroblock, the 2nd order transform is a 2x2 haar transform, here there is only 4 coefficients total. A previous merge changed these to 64, causing crashes when encoding with 8x8 transform enabled. (i.e. when input video image size > 640x360 ) This commit reverts them back to 4 and fixes the crashes. Change-Id: I3290b81f8c0d32c7efec03093a61ea57736c0550
2012-02-10Removal of threading code.Paul Wilkins
For the experimental branch we are trying to slim the codebase down removing features such as threading for now which complicate the process of development and testing. Change-Id: I657c0246aef4d1fa8c8ffc6a1adfeee45bce8e24
2012-02-10Improved coding using 8x8 transformRonald S. Bultje
In summary, this commit encompasses a series of changes in attempt to improve the 8x8 transform based coding to help overall compression quality, please refer to the detailed commit history below for what are the rationale underly the series of changes: a. A frame level flag to indicate if 8x8 transform is used at all. b. 8x8 transform is not used for key frames and small image size. c. On inter coded frame, macroblocks using modes B_PRED, SPLIT_MV and I8X8_PRED are forced to using 4x4 transform based coding, the rest uses 8x8 transform based coding. d. Encoder and decoder has the same assumption on the relationship between prediction modes and transform size, therefore no signaling is encoded in bitstream. e. Mode decision process now calculate the rate and distortion scores using their respective transforms. Overall test results: 1. HD set http://www.corp.google.com/~yaowu/no_crawl/t8x8/HD_t8x8_20120206.html (avg psnr: 3.09% glb psnr: 3.22%, ssim: 3.90%) 2. Cif set: http://www.corp.google.com/~yaowu/no_crawl/t8x8/cif_t8x8_20120206.html (avg psnr: -0.03%, glb psnr: -0.02%, ssim: -0.04%) It should be noted here, as 8x8 transform coding itself is disabled for cif size clips, the 0.03% loss is purely from the 1 bit/frame flag overhead on if 8x8 transform is used or not for the frame. ---patch history for future reference--- Patch 1: this commit tries to select transform size based on macroblock prediction mode. If the size of a prediction mode is 16x16, then the macroblock is forced to use 8x8 transform. If the prediction mode is B_PRED, SPLITMV or I8X8_PRED, then the macroblock is forced to use 4x4 transform. Tests on the following HD clips showed mixed results: (all hd clips only used first 100 frames in the test) http://www.corp.google.com/~yaowu/no_crawl/t8x8/hdmodebased8x8.html http://www.corp.google.com/~yaowu/no_crawl/t8x8/hdmodebased8x8_log.html while the results are mixed and overall negative, it is interesting to see 8x8 helped a few of the clips. Patch 2: this patch tries to hard-wire selection of transform size based on prediction modes without using segmentation to signal the transform size. encoder and decoder both takes the same assumption that all macroblocks use 8x8 transform except when prediciton mode is B_PRED, I8X8_PRED or SPLITMV. Test results are as follows: http://www.corp.google.com/~yaowu/no_crawl/t8x8/cifmodebase8x8_0125.html http://www.corp.google.com/~yaowu/no_crawl/t8x8/hdmodebased8x8_0125log.html Interestingly, by removing the overhead or coding the segmentation, the results on this limited HD set have turn positive on average. Patch 3: this patch disabled the usage of 8x8 transform on key frames, and kept the logic from patch 2 for inter frames only. test results on HD set turned decidedly positive with 8x8 transform enabled on inter frame with 16x16 prediction modes: (avg psnr: .81% glb psnr: .82 ssim: .55%) http://www.corp.google.com/~yaowu/no_crawl/t8x8/hdintermode8x8_0125.html results on cif set still negative overall Patch 4: continued from last patch, but now in mode decision process, the rate and distortion estimates are computed based on 8x8 transform results for MBs with modes associated with 8x8 transform. This patch also fixed a problem related to segment based eob coding when 8x8 transform is used. The patch significantly improved the results on HD clips: http://www.corp.google.com/~yaowu/no_crawl/t8x8/hd8x8RDintermode.html (avg psnr: 2.70% glb psnr: 2.76% ssim: 3.34%) results on cif also improved, though they are still negative compared to baseline that uses 4x4 transform only: http://www.corp.google.com/~yaowu/no_crawl/t8x8/cif8x8RDintermode.html (avg psnr: -.78% glb psnr: -.86% ssim: -.19%) Patch 5: This patch does 3 things: a. a bunch of decoder bug fixes, encodings and decodings were verified to have matched recon buffer on a number of encodes on cif size mobile and hd version of _pedestrian. b. the patch further improved the rate distortion calculation of MBS that use 8x8 transform. This provided some further gain on compression. c. the patch also got the experimental work SEG_LVL_EOB to work with 8x8 transformed macroblock, test results indicates it improves the cif set but hurt the HD set slightly. Tests results on HD clips: http://www.corp.google.com/~yaowu/no_crawl/t8x8/HD_t8x8_20120201.html (avg psnr: 3.19% glb psnr: 3.30% ssim: 3.93%) Test results on cif clips: http://www.corp.google.com/~yaowu/no_crawl/t8x8/cif_t8x8_20120201.html (avg psnr: -.47% glb psnr: -.51% ssim: +.28%) Patch 6: Added a frame level flag to indicate if 8x8 transform is allowed at all. temporarily the decision is based on frame size, can be optimized later one. This get the cif results to basically unchanged, with one bit per frame overhead on both cif and hd clips. Patch 8: Rebase and Merge to head by PGW. Fixed some suspect 4s that look like hey should be 64s in regard to segmented EOB. Perhaps #defines would be bette. Bulit and tested without T8x8 enabled and produces unchanged output. Patch 9: Corrected misalligned code/decode of "txfm_mode" bit. Limited testing for correct encode and decode with T8x8 configured on derf clips. Change-Id: I156e1405d25f81579d579dff8ab9af53944ec49c
2012-02-09Reindent some code after merging the dualpred experiment.Ronald S. Bultje
Change-Id: Idb328dd29ebcd360e39886abe48694f90f2e1140
2012-02-09Merge dualpred (compound prediction) experiment.Ronald S. Bultje
Change-Id: Ieaaa07c50eae41118596197f6a4d848135946e41
2012-02-09Removal of SEGFEATURES placeholder commentsPaul Wilkins
This commit only involves the removal of placeholder comments //#if CONFIG_SEGFEATURES. Change-Id: I94b350daaf998ee0cfdde5aa25b1d3b0522ab816
2012-02-09Merge Extended Q experiment.Paul Wilkins
Merge the extended Q experiment as indicated by the Change-Id: I02d9e654fff9998cc7e9e2f1f5cd838dad8fb431
2012-02-09Merge COMPREDPaul Wilkins
Merged in most of the current common prediction changes that were under the #if CONFIG_COMPRED option. Change-Id: If4e6f61dbe7b86dd449f6effbe93b5eb7e893885
2012-02-09Dual pred flagPaul Wilkins
Further changes to make experiments with the context used for coding the dual pred flag easier. Current best performing method tested on derf is a two element context based on reference frame. I also tried various combinations of mode and reference frame as shown in commented out case using up to 6 contexts. Derf +0.26 overall psnr +0.15% ssim vs original method. Change-Id: I64c21ddec0abbb27feaaeaa1da2e9f164ebaca03
2012-02-09Changes to coding of dual_pred flag.Paul Wilkins
Further use of common prediction functions and experiments with alternate contexts based on mode and reference frame. For the Derf set using reference frame as basis of context gives +0.18% Overall Psnr and +0.08 SSIM Change-Id: Ie7eb76f329f74c9c698614f01ece31de0b6bfc9e
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