summaryrefslogtreecommitdiff
path: root/vp8/encoder/encodeframe.c
AgeCommit message (Collapse)Author
2011-06-20adjusting the calculation of errorperbitYaowu Xu
RDMULT/RDDIV defines a bit worth of distortion in term of sum squared difference. This has also been used as errorperbit in subpixel motion search, where the distortions computed as variance of the difference. The variance of differences is different from sum squared differences by amount of DC squared. Typically, for inter predicted MBs, this difference averages around 10% between the two distortion, so this patch introduces a 110% constant in deriving errorperbit from RDMULT/RDDIV. Test on CIF set shows small but positive gain on overall PSNR (.03%) and SSIM (.07%), overall impact on average PSNR is 0. Change-Id: I95425f922d037b4d96083064a10c7cdd4948ee62
2011-06-14Fix RT only buildTero Rintaluoma
Moved encode_intra function from firstpass.c to encodeintra.c to prevent linking problem in real-time only build. Also changed name of the function to vp8_encode_intra because it is not a static. Change-Id: Ibf3c6c1de3152567347e5fbef47d1d39564620a5
2011-06-13Calc ref_frame_cost once per frameScott LaVarnway
instead of every macro block. Change-Id: I2604e94c6b89e3a8457777e21c8c38406d55b165
2011-06-09bug fix mode_info_context not initialized for error-resilientJames Berry
uninitialized xd->mode_info_context would crash vpxenc for --error-resilient=1. Change-Id: I31849e40281e3d65ab63257cfec5e93398997f0b
2011-06-09Update keyframe activity in non-RD modeJohn Koleszar
Activity update is no longer dependent on being in RD mode, so update it unconditionally. Change-Id: Ib617a6fc210dfc045455e3e4467d7ee5e3d1fa0e
2011-06-08Merge "Move RD intra block mode selection to rdopt.c"John Koleszar
2011-06-08Adjust errorperbit according to RDMULT in activity maskingYaowu Xu
In activity masking, RDO constant RDMULT is adjusted on a per MB basis adaptive to activity with the MB. errorperbit, which is defined as RDMULT/RDDIV, is a constant used in motion estimation. Previously, in activity masking, errorperbit is not changed even when RDMULT is changed. This commit changed to adjust errorperbit according to the change in RDMULT. Test in cif set showed a very small but consistent gain by all quality metrics (average, overall psnr and ssim) when activity masking is on. Change-Id: I07ded3e852919ab76757691939fe435328273823
2011-06-08Merge "Further activity masking changes:"Yaowu Xu
2011-06-08Move RD intra block mode selection to rdopt.cJohn Koleszar
This change is analogous to I0b67dae1f8a74902378da7bdf565e39ab832dda7, which made the move for the non-RD path. Change-Id: If63fc1b0cd1eb7f932e710f83ff24d91454f8ed1
2011-06-08Move intra block mode selection to pickinter.cJohn Koleszar
This commit moves the intra block mode selection from encodeframe.c to pickinter.c (in the non-RD case). This allowed pick_intra_mbuv_mode and pick_intra4x4mby_modes to be made static, and is a step towards refactoring intra mode selection in the main pickinter loop. Gave a small perf increase (~0.5%). Change-Id: I0b67dae1f8a74902378da7bdf565e39ab832dda7
2011-06-08Further activity masking changes:Paul Wilkins
Some further re-structuring of activity masking code. Still has various experimental switches. Supports a metric based on intra encode. Experimental comparison against a fixed activity target rather than a frame average, for altering rd and zbin. Overall the SSIM performance is similar to TT's original code but there is a much smaller PSNR hit of circa 0.5% instead of 3.2% Change-Id: I0fd53b2dfb60620b3f74d7415e0b81c1ac58c39a
2011-06-06remove redundant functionsYaowu Xu
The encoder defined about 4 set of similar functions to calculate sum, variance or sse or a combination of them. This commit removed one set of these functions, get8x8var and get16x16var, where calls to the later function are replaced with var16x16 by using the fact on a 16x16 MB: variance == sse - sum*sum/256 Change-Id: I803eabd1fb3ab177780a40338cbd596dffaed267
2011-06-06Merge "neon fast quantize block pair"Johann
2011-06-02Removed B_MODE_INFOScott LaVarnway
Declared the bmi in BLOCKD as a union instead of B_MODE_INFO. Then removed B_MODE_INFO completely. Change-Id: Ieb7469899e265892c66f7aeac87b7f2bf38e7a67
2011-06-01neon fast quantize block pairTero Rintaluoma
vp8_fast_quantize_b_pair_neon function added to quantize two adjacent blocks at the same time to improve performance. - Additional 3-6% speedup compared to neon optimized fast quantizer (Tanya VGA@30fps, 1Mbps stream, cpu-used=-5..-16) Change-Id: I3fcbf141e5d05e9118c38ca37310458afbabaa4e
2011-05-25Return sse value in vp8_variance SSE2 functionsYunqing Wang
Minor modification. Change-Id: I09511d38fd1451d5c4106a48acdb3f766ce59cb7
2011-05-24MODE_INFO size reductionScott LaVarnway
Declared the bmi in MODE_INFO as a union instead of B_MODE_INFO. This reduced the memory footprint by 518,400 bytes for 1080 resolutions. The decoder performance improved by ~4% for the clip used and the encoder showed very small improvements. (0.5%) This reduction was first mentioned to me by John K. and in a later discussion by Yaowu. This is WIP. Change-Id: I8e175fdbc46d28c35277302a04bee4540efc8d29
2011-05-19Remove unused members of VP8_COMPJohn Koleszar
Various members that were either completely unreferenced or written and not read. Change-Id: Ie41ebac0ff0364a76f287586e4fe09a68907806e
2011-05-19Make activity masking functions staticJohn Koleszar
These don't need extern linkage. Change-Id: I21220ada926380a75ff654f24df84376ccc49323
2011-05-19Move quantizer init functions to quantize.cJohn Koleszar
Group related functions together. Change-Id: I92fd779225b75a7204650f1decb713142c655d71
2011-05-18Merge "Modify MVcount in pick_inter_mode to eliminate calling of ↵Yunqing Wang
vp8_find_near_mvs"
2011-05-17Modify MVcount in pick_inter_mode to eliminate calling of vp8_find_near_mvsYunqing Wang
Moved MVcount modification in pick_inter_mode, and eliminated calling of vp8_find_near_mvs. Change-Id: Icd47448a1dfc8fdf526f86757d0e5a7f218cb5e8
2011-05-13Merge "Restructure of activity masking code."Paul Wilkins
2011-05-13Restructure of activity masking code.Paul Wilkins
This commit restructures the mb activity masking code to better facilitate experimentation using different metrics etc. and also allows for adjustment of the zero bin either for encode only or both the encode and mode selection stages It also uses information from the current frame rather than the previous frame and the default strength has been reduced. Change-Id: Id39b19eace37574dc429f25aae810c203709629b
2011-05-12Using int_mv instead of MVScott LaVarnway
The compiler produces better assembly when using int_mv for assignments. The compiler shifts and ors the two 16bit values when assigning MV. Change-Id: I52ce4bc2bfbfaf3f1151204b2f21e1e0654f960f
2011-05-10Merge "fix a bug related to gf_active_flags in multi-threaded encoder"Yaowu Xu
2011-05-06fix a bug related to gf_active_flags in multi-threaded encoderYaowu Xu
Paul pointed out that the pointer to the gf_active_flags is not being properly incremented in multithreaded encoder. This commit fixes the issue by making sure the gf_active_ptr points to the starting of next group of mb rows. Change-Id: I3246e657d23beabb614dfb880733a68a5fd7e34c
2011-04-28Consolidated build inter predictorsScott LaVarnway
Code cleanup. Change-Id: Ic8b0167851116c64ddf08e8a3d302fb09ab61146
2011-04-27Removed unused code in reconinterScott LaVarnway
The skip flag is never set by the encoder for SPLITMV. Change-Id: I5ae6457edb3a1193cb5b05a6d61772c13b1dc506
2011-04-21Removed dc_diff from MB_MODE_INFOScott LaVarnway
The dc_diff flag is used to skip loopfiltering. Instead of setting this flag in the decoder/encoder, we now check for this condition in the loopfilter. Change-Id: Ie2b9cdf9e0f4e8b932bbd36e0878c05bffd28931
2011-04-20Removed force_no_skipScott LaVarnway
force_no_skip is always set to zero. Change-Id: I89b61c5e0bee34627a9c07c05f3517e1db76af77
2011-04-20Removed redundant checks of the mode_info_context flagsScott LaVarnway
Code cleanup. The build inter predictor functions are redundantly checking the mode_info_context for either INTRA_FRAME or SPLITMV. Change-Id: I4d58c3a5192a4c2cec5c24ab1caf608bf13aebfb
2011-04-13store quant_shift as an unsigned charJohann
in encodframe.c, quant_shift is set to 0 or 1 in vp8cx_invert_quant only use 8 bits to store this, instead of 16. will allow saving an xmm register in an updated version of the regular quantize Change-Id: Ie88c47fe2aff5af0283dab1147fb2791e4b12f90
2011-04-11Set cpu_used range to [-16, 16] in real-time modeYunqing Wang
Remove encoding speed limitation in real-time mode. Change-Id: Ib5e35d8bb522b2a25f3e4ad5cfe2788ebebb3617
2011-04-11Define RDCOST only onceYunqing Wang
Clean up the code. Change-Id: I7db048efa4d972b528d553a7921bc45979621129
2011-04-08Error accumulator stats bug.Paul Wilkins
The error accumulator stats values cpi->prediction_error and cpi->intra_error were being populated with rd values not distortion values. These are only "currently" used in a limited way for RT compress key frame detection. Change-Id: I2702ba1cab6e49ab8dc096ba75b6b34ab3573021
2011-04-01Use full-pixel MV in mvsadcost calculationYunqing Wang
MV sad cost error is only used in full-pixel motion search, which only need full-pixel resolution instead of quarter-pixel resolution. This change reduced mvsadcost table size, and removed unneccessary pamameter passing since this table is constant once it is generated. Change-Id: I9f931e55f6abc3c99011321f1dfb2f3562e6f6b0
2011-03-18Fix multithreaded encoding for 1 MB wide frameAttila Nagy
Thread synchronization was not correct when frame width was 1 MB. Number of allocated encoding threads is limited by the sync_range. There is no point having more because each thread lags sync_range MBs behind the thread processing the row above. http://code.google.com/p/webm/issues/detail?id=302 Change-Id: Icaf67a883beecc5ebf2f11e9be47b6997fdf6f26
2011-03-11Move build_intra_predictors_mby to RTCD frameworkJohn Koleszar
The vp8_build_intra_predictors_mby and vp8_build_intra_predictors_mby_s functions had global function pointers rather than using the RTCD framework. This can show up as a potential data race with tools such as helgrind. See https://bugzilla.mozilla.org/show_bug.cgi?id=640935 for an example. Change-Id: I29c407f828ac2bddfc039f852f138de5de888534
2011-02-10Fix relative include pathsJohn Koleszar
Allow compiling without adding vp8/{common,encoder,decoder} to the include paths. Change-Id: Ifeb5dac351cdfadcd659736f5158b315a0030b6c
2011-02-09Merge "Put more code under #if CONFIG_MULTITHREAD."John Koleszar
2011-02-09Put more code under #if CONFIG_MULTITHREAD.Gaute Strokkenes
Change-Id: Icf4b692099d7d249fe3553852b1022b027b28e4b
2011-02-08Added early breakout for vp8_rd_pick_intra4x4mby_modesScott LaVarnway
Improved performance of good quality, speed 0 (3% average) with no average quality loss. Change-Id: Ica34473f99bd74260eaebde6b132185e09e3c09d
2011-02-04correct quantizer initializationJohn Koleszar
The encoder was not correctly catching transitions in the quantizer deltas. If a delta_q was set, then the quantizer would be reinitialized on every frame, but if they transitioned to 0, the quantizer would not be reinitialized, leading to a encode-decode mismatch. This bug was triggered by commit 999e155, which sets a Y2 delta Q for very low base Q levels. Change-Id: Ia6733464a55ee4ff2edbb82c0873980d345446f5
2011-02-03Merge "Improved encoder threading"Yunqing Wang
2011-02-01Moved rd calculation into vp8_pick_intra4x4mby_modesScott LaVarnway
Then removed unnecessary code. Change-Id: I142658815d843c9396b07881dbdd8d387c43c90e
2011-02-01Removed intra_modes from vp8cx_encode_intra_macro_blockScott LaVarnway
Restructured function in order to eliminate the prediction modes save/restore. Code cleanup also. Change-Id: I816e3b910de64d0f0f0ddc2398805c63263191e8
2011-02-01Improved encoder threadingAttila Nagy
Reduce the number of sync points by letting each thread continue imediatly with a new MB row. Better multicore scaling, improves performance by 5-20% on ARM multicore. Change-Id: Ic97e4d1c4886a842c85dd3539a93cb217188ed1b
2011-01-31Removed prediction_error accumulationScott LaVarnway
from vp8cx_encode_intra_macro_block. prediction_error is used when deciding if a frame should be a keyframe. After reviewing this with Yaowu, it was pointed out that vp8cx_encode_intra_macro_block is only called for keyframes, so the accumulation is unnecessary. Change-Id: Id79dc81b80d4f5d124f3a0dba1b923887e2e1ec8
2011-01-31Possible bug in vp8cx_encode_intra_macro_blockScott LaVarnway
vp8_pick_intra4x4mby_modes uses the passed in distortion for an early breakout. The best distortion was never saved and the distortion for TM_PRED was always used. Change-Id: Idbaf73027408a4bba26601713725191a5d7b325e