summaryrefslogtreecommitdiff
path: root/vp9/encoder/vp9_mcomp.c
AgeCommit message (Collapse)Author
2013-11-18Constrain encoder motion search rangeJingning Han
Explicitly constrain the upper limit of motion search range (in the unit of full pixel) to be [-1023, +1023]. It is intended to control the effective motion search range for 4K sequences. Change-Id: I645539c70885eec0f155781f439d97d333336e88
2013-10-17Adding allow_hp as an argument to mv search functions.Dmitry Kovalev
Making this change in order to move allow_high_precision_mv field from MACROBLOCKD structure to VP9_COMMON (because it is a frame level flag). Change-Id: I1d006ba36d938e0caf4d40fa051e2e38df9c1108
2013-10-05cpplint issues resolved in vp9_mcomp.cJim Bankoski
Change-Id: I2c2f83f4dfa2782fc6b0aa6db3ba2c4e6e423ffa
2013-09-25Moving from int_mv* to MV* (3).Dmitry Kovalev
Change-Id: I9795d0937bc07793c13d067281995e0750f694d9
2013-09-24Moving from int_mv* to MV* (2).Dmitry Kovalev
Updating fractional_mv_step_fp and fractional_mv_step_comp_fp function types. Change-Id: I601c4378bc39ac3ffd4e295d9cbd8e1f74829d46
2013-09-24Merge "Moving from int_mv to MV."Dmitry Kovalev
2013-09-23Correct 3 step search site initialziationYaowu Xu
39c7b01d accidently reverted the row/col initialization, which broke mv clamps, which is dependent on the sites for valid motion vector range. This commit fixed the issue. Change-Id: Ibcce0226e0360b1ef483fe760b2e33f1af4bf494
2013-09-20Moving from int_mv to MV.Dmitry Kovalev
Converting vp9_mv_bit_cost, mv_err_cost, and mvsad_err_cost functions for now. Change-Id: I60e3cc20daef773c2adf9a18e30bc85b1c2eb211
2013-09-20Cleanup in vp9_init3smotion_compensation.Dmitry Kovalev
Change-Id: Ie47f53e76bc9530475c8c6d24e9b7a5a0189de56
2013-09-19fix integer overflow errorsYaowu Xu
Change-Id: I76f440a917832c02d7a727697b225bac66b99f56
2013-09-18Removing redundant code from vp9_mcomp.c.Dmitry Kovalev
Replacing ((1 << MV_MAX_BITS) - 1) with MV_MAX, adding const qualifiers, reusing computed values. Change-Id: I7b46d47f6c644b079d9c3478116a9de465a9baec
2013-09-11New mode_info_context storage -- undo revertScott LaVarnway
mode_info_context was stored as a grid of MODE_INFO structs. The grid now constists of pointers to MODE_INFO structs. The MODE_INFO structs are now stored as a stream (decoder only), eliminating unnecessary copies and is a little more cache friendly. Change-Id: I031d376284c6eb98a38ad5595b797f048a6cfc0d
2013-09-09Revert "New mode_info_context storage"James Zern
This reverts commit dae17734ece414091ba1184f7becd0aa6c0004f1 Encode crashes, leaks and increases integer overflow errors. Change-Id: I595aa2649bb8d0b6552ff91652837a74c103fda2
2013-09-06New mode_info_context storageScott LaVarnway
mode_info_context was stored as a grid of MODE_INFO structs. The grid now constists of a pointer to a MODE_INFO struct and a "in the image" flag. The MODE_INFO structs are now stored as a stream, eliminating unnecessary copies and is a little more cache friendly. For the test clips used, the decoder performance improved by ~4.3% (1080p) and ~9.7% (720p). Patch Set 2: Re-encoded clips with latest. Now ~1.7% (1080p) and 5.9% (720p). Change-Id: I846f29e88610fce2523ca697a9a9ef2a182e9256
2013-08-19fix a bug when null function pointer is used.Yaowu Xu
For certain partition size, the function poniter may not be intialized at all. The patch prevent the call if the pointer is not set. Change-Id: I78b8c3992b639e8799a16b3c74f0973d07b8b9ac
2013-08-12Using MV* instead of int_mv* as argument of vp9_clamp_mv_min_max.Dmitry Kovalev
Change-Id: I3c45916a9059f11b41e9d798e34ffee052969a44
2013-08-08General code cleanup.Dmitry Kovalev
Removing redundant parenthesis and curly braces. Combining declarations with initializations. Adding useful intermediate variables instead of recalculating expressions every time. Change-Id: I00106f404afd60bfc189905b0fded881684f941a
2013-08-08Adds a new subpel motion functionDeb Mukherjee
Adds a new subpel motion estimation function that uses a 2-level tree-structured decision tree to eliminate redundant computations. It searches fewer points than iterative search (which can search the same point multiple times) but has the same quality roughly. This is made the default setting at speeds 0 and 1, while at speed 2 and above only a 1-level search is used. Also includes various cleanups for consistency and redundancy removal. Results: derf: +0.012% psnr stdhd: +0.09% psnr Speedup of about 2-3% Change-Id: Iedde4866f5475586dea0f0ba4cb7428fba24eee9
2013-08-06Clean ups of the subpel search functionsDeb Mukherjee
Removes some unused code and speed features, and organizes the interfaces for fractional mv step functions for use in new speed features to come. In the process a new speed feature - number of iterations per step during the subpel search - is exposed. No change when this parameter is set as the original value of 3. Results: subpel_iters_per_step = 3: baseline subpel_iters_per_step = 2: psnr -0.067%, 1% speedup subpel_iters_per_step = 1: psnr -0.331%, 3-4% speedup Change-Id: I2eba8a21f6461be8caf56af04a5337257a5693a8
2013-08-06Flexible support for various pattern searchesDeb Mukherjee
Adds a few pattern searches to achieve various tradeoffs between motion estimation complexity and performance. The search framework is unified across these searches so that a common pattern search function is used for all. Besides it will be easier to experiment with various patterns or combinations thereof at different scales in the future. The new pattern search is multi-scale and is capable of using different patterns at different scales. The new hex search uses 8 points at the smallest scale and 6 points at other scales. Two other pattern searches - big-diamond and square are also added. Big diamond uses 4 points at the smallest scale and 8 points in diamond shape at the larger scales. Square is very similar conceptually to the default n-step search but is somewhat faster since it keeps only one survivor across all scales. Psnr/speed-up results on derf300: hex: -1.6% psnr%, 6-8% speed-up big-diamond: -0.96% psnr, 4-5% speedup square: -0.93% psnr, 4-5% speedup Change-Id: I02a7ef5193f762601e0994e2c99399a3535a43d2
2013-08-02Cleanups around allow_high_precision_mv flag.Dmitry Kovalev
Change-Id: Ic07f5f8ffeaedd5b7513b464871f83afc82dcd5c
2013-08-01Nice looking motion vector clamping functions.Dmitry Kovalev
Removing assign_and_clamp_mv function, making implementation of clamp_mv and clamp_mv2 more clear and consistent. Change-Id: Iecd08e1c1bf0379f8314ebe01811f8253f4ade58
2013-07-31Removing unused "ishp" arguments.Dmitry Kovalev
Using different variable names "allow_hp" and "use_hp" instead of "usehp". Change-Id: I0cd5996ddeb46bd754473b680a993c0aaf8eb879
2013-07-22Diamond search change to accelerate movementDeb Mukherjee
Optional change in diamond search to continue in the best move direction until that move turns worse. This is still WIP since the exact way the new method is to be used is under investigation. One option is to make it an option in diamond search and use it only when motion is large. Overall slightly positive on derfraw300 +0.02%, stdhdraw +0.13%, but works a lot better for high motion sequences (ex. football : +1%). Change-Id: If88e01a6021daa0cda934680cdc70be1ee04f798
2013-06-26Auto adapt step size feature.Paul Wilkins
Also tweaks to other features and experiments with what is on and off at different speed settings. Change-Id: I3e1d0be0d195216bf17c2ac5df67f34ce0b306b2
2013-06-26Change meaning of cpi->sf.first_step and rename.Paul Wilkins
Renamed cpi->sf.first_step to cpi->sf.reduce_first_step_size and changed its meaning such that it is a delta applied to reduce the default first step size (>> x) in the motion search rather than an absolute value. The default first step size is already changed according to the image dimensions (smaller for smaller images). cpi->sf.reduce_first_step_size now applies a further correction from the default. Change-Id: Ia94e08bc24c67b604831f980909af7e982fcd16d
2013-06-25Add averaging-SAD functions for 8-point comp-inter motion search.Ronald S. Bultje
Makes first 50 frames of bus @ 1500kbps encode from 3min22.7 to 3min18.2, i.e. 2.3% faster. In addition, use the sub_pixel_avg functions to calc the variance of the averaging predictor. This is slightly suboptimal because the function is subpixel-position-aware, but it will (at least for the SSE2 version) not actually use a bilinear filter for a full-pixel position, thus leading to approximately the same performance compared to if we implemented an actual average-aware full-pixel variance function. That gains another 0.3 seconds (i.e. encode time goes to 3min17.4), thus leading to a total gain of 2.7%. Change-Id: I3f059d2b04243921868cfed2568d4fa65d7b5acd
2013-06-24Don't re-allocate comp_pred buffers for each call to comp motion search.Ronald S. Bultje
Instead, just allocate a few bytes on the stack, this is 4k, which isn't all that much. Change-Id: I82af6ee89e6ed01faaa23ff891ee7ced76df8c16
2013-06-18Renaming 'nmv' to 'mv' for several functions.Dmitry Kovalev
Change-Id: I183a38997a9d01e4a1b869e92509f6915216fa09
2013-05-22Merge CONFIG_COMP_INTER_JOINT_SEARCH.Paul Wilkins
Merge this experiment so that it is under a speed feature flag not a configuration flag. Change-Id: I536f7f125a4ff5149bb3a64f791e835c324535fd
2013-05-16New inter mode context.Paul Wilkins
This patch creates a new inter mode contest that avoids a dependence on the reconstructed motion vectors from neighboring blocks. This was a change requested by a hardware vendor to improve decode performance. As part of this change I have also made some modifications to stats output code (under a flag) to allow accumulation of inter mode context flags over multiple clips Some further changes will be required to accommodate the deprecation of the split mv mode over the next few days. Performance as stands is around -0.25% on derf and std-hd but up on the YT and YT-HD sets. With further tuning or some adjustment to the context criteria it should be possible to make this change broadly neutral. Change-Id: Ia15cb4470969b9e87332a59c546ae0bd40676f6c
2013-05-10Add joint motion search in comp_inter_inter mode(experiment)Yunqing Wang
In current code, motion vectors got from single prediction mode are used in compound prediction mode directly. These motion vectors may not give accurate prediction since they are searched independently. In this patch, we took Pascal's suggestion, and did joint motion search in compound prediction mode to find better motion vectors in this situation. Test results: Overall PSNR: 0.570%(derf), 0.918%(stdhd); SSIM: 0.572%(derf), 1.009%(stdhd); The encoder is a little slower. This can be improved since some c code is used in motion search. Change-Id: Ib30c9240f6c56c9b070867b4ca89412a76d9f3c6
2013-04-26Remove BLOCKD structureJohn Koleszar
All members can be referenced from their per-plane counterparts, and removes assumptions about 24 blocks per macroblock. Change-Id: I7ff2fa72d22c29163eb558981c8193765a8113d9
2013-04-26Removed bmi from blockdScott LaVarnway
This originally was "Removed update_blockd_bmi()". Now, this patch removed bmi from blockd and uses the bmi found in mode_info_context. Eliminates unnecessary bmi copies between blockd and mode_info_context. Change-Id: I287a4972974bb363f49e528daa9b2a2293f4bc76
2013-04-25Remove predictor pointers from BLOCKDJohn Koleszar
Access these members from MACROBLOCKD instead. Change-Id: I2574622e577bb9feede47f6b7ccbb11f3e928ca8
2013-04-25Remove BLOCK structureJohn Koleszar
All members can be referenced from their per-plane counterparts, and removes assumptions about 24 blocks per macroblock. Change-Id: I593fb0715e74cd84b48facd1c9b18c3ae1185d4b
2013-04-18Fixing rounding inside vp9_mv_bit_cost function.Dmitry Kovalev
Change-Id: I7209a05919162a8155520bc543658ddb69ba12ce
2013-04-17Changing argument type of vp9_get_mv_joint from MV to MV*.Dmitry Kovalev
Change-Id: I28c3026946fc1bde7074e6e0198da93bb0d75dfe
2013-04-11Encoder code cleanup.Dmitry Kovalev
Removing duplicated code from vp9_encodemv.c and reusing ROUND_POWER_OF_TWO macro definitions. Change-Id: I9caf0c17f761ada7905cb99a3e2a31f871fef0f9
2013-03-18Changes to rd error_per_bit calculation.Paul Wilkins
Specifically changes to retain more precision especially at low Q through to the point of use. Change-Id: Ief5f010f2ca4daaabef49520e7edb46c35daf397
2013-03-08Extend diff MV limit from +/-256 to +/-1024Jingning Han
Increase the motion search range by 4x. Change MV_CLASS tree of the entropy coding to allow two additional mv classes to cover the extended motion vector limit. The codec determines the effective motion search range conditioned on the actual frame dimension. It provides coding gains: stdhd 0.39% yt 0.56% hd 0.47% Major coding performance gains are packed in several sequences with intense motion activities, e.g., ped_1080p gains 7% at high bit-rates, and on average 3%. TODO: Need to further tune the rate control and motion search units. Change-Id: Ib842540a6796fbee5a797809433ef6a477c6d78d
2013-02-28Code cleanup.Dmitry Kovalev
Lower case variable names, converting while loops to for loops. Change-Id: Ic3b973391eef7472a99d18d02fe79cfef5e04e62
2013-02-28this commit converts all sad ptrs to uint32Jim Bankoski
sse4_1 code used uint16_t for returning sad, but that won't work for 32x32 or 64x64. This code fixes the assembly for those and also reenables sse4_1 on linux Change-Id: I5ce7288d581db870a148e5f7c5092826f59edd81
2013-02-20Entropy stats output code.Paul Wilkins
Fixes to make Entropy stats code work again Change-Id: I62e380481a4eb4c170076ac6ab36f0c2b203e914
2013-02-08Replace as_mv struct with arrayJohn Koleszar
Replace as_mv.{first, second} with a two element array, so that they can easily be processed with an index variable. Change-Id: I1e429155544d2a94a5b72a5b467c53d8b8728190
2013-01-08Merge superblocks (32x32) experiment.Ronald S. Bultje
Change-Id: I0df99742029834a85c4933652b0587cf5b6b2587
2013-01-08Merge vp9-preview changes into experimental branchJohn Koleszar
Incorportate vp9-preview changes by merging master branch into experimental. Conflicts: test/test.mk vp9/common/vp9_filter.c vp9/common/vp9_idctllm.c vp9/common/vp9_invtrans.h vp9/common/vp9_mbpitch.c vp9/common/vp9_rtcd_defs.sh vp9/common/vp9_systemdependent.h vp9/common/vp9_type_aliases.h vp9/common/x86/vp9_asm_stubs.c vp9/common/x86/vp9_subpixel_mmx.asm vp9/decoder/vp9_decodframe.c vp9/decoder/vp9_dequantize.c vp9/decoder/vp9_dequantize.h vp9/decoder/vp9_onyxd_int.h vp9/encoder/vp9_bitstream.c vp9/encoder/vp9_encodeframe.c vp9/encoder/vp9_rdopt.c Change-Id: I17f51c3666d1b59cf1a699f87607cbc5d30a87c5
2013-01-0564x64 blocksize support.Ronald S. Bultje
3.2% gains on std/hd, 1.0% gains on hd. Change-Id: I481d5df23d8a4fc650a5bcba956554490b2bd200
2012-12-26Build fixes to merge vp9-preview into masterJohn Koleszar
Various fixups to resolve issues when building vp9-preview under the more stringent checks placed on the experimental branch. Change-Id: I21749de83552e1e75c799003f849e6a0f1a35b07
2012-12-18Use standard integer types for pixel values and coefficients.Ronald S. Bultje
For coefficients, use int16_t (instead of short); for pixel values in 16-bit intermediates, use uint16_t (instead of unsigned short); for all others, use uint8_t (instead of unsigned char). Change-Id: I3619cd9abf106c3742eccc2e2f5e89a62774f7da