summaryrefslogtreecommitdiff
path: root/vp9/encoder/vp9_encodeframe.c
AgeCommit message (Collapse)Author
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-09-03Attempt to fix speed 4Paul Wilkins
Speed 4 fixed partition size. Use fixed size unless it does not fit inside image, in which case use the largest size that does. Change-Id: I250f7a80506750dd82ab355721624a1344247223
2013-08-29Merge "Renaming txfm_size to tx_size."Dmitry Kovalev
2013-08-28General code cleanup.Dmitry Kovalev
Switching from mi_{width, height}_log2 and b_{width, height}_log2 to num_8x8_blocks_{wide, high} and num_4x4_blocks_{wide, high}. Removing redundant code, adding const. Change-Id: Iaab2207590fd24d0b76999071778d1395dc5cd5d
2013-08-27Renaming txfm_size to tx_size.Dmitry Kovalev
Change-Id: I752e374867d459960995b24d197301d65ad535e3
2013-08-27Renaming BLOCK_SIZE_TYPE to BLOCK_SIZE in the encoder.Dmitry Kovalev
Change-Id: I62bb07c377f947cb72fac68add7a6b199e42c6b9
2013-08-27Merge "Using num_8x8_* lookup tables instead of mi_*_log2."Dmitry Kovalev
2013-08-27Merge "Renaming D27 to D207."Dmitry Kovalev
2013-08-26Using num_8x8_* lookup tables instead of mi_*_log2.Dmitry Kovalev
Change-Id: I8a246b3d056c98be614d05a90bc261e2441ffc10
2013-08-23cosmetics: strip 'VP9_' from defines in vp9 only codeJames Zern
Change-Id: I481d9bb2fa3ec72b6a83d5f04d545ad8013f295c
2013-08-23Renaming D27 to D207.Dmitry Kovalev
I've already renamed d27_predictor to d207_predictor but forgot about the corresponding constant. Change-Id: Id312aa80fc5b5a1ab8a709a33418a029552a6857
2013-08-23Limit mv range to be based on partition sizeYaowu Xu
Previous change c4048dbd limits the mv search range assuming max block size of 64x64, this commit change the search range using actual block size instead. Change-Id: Ibe07ab02b62bf64bd9f8675d2b997af20a2c7e11
2013-08-22Merge "Fix rectangular partition check flag"Jingning Han
2013-08-22Merge "vp9_encodeframe.c cleanup."Dmitry Kovalev
2013-08-22Fix rectangular partition check flagJingning Han
Put rectangular partition check flag change according to the rd costs of NONE and SPLIT partition types under the speed feature. Change-Id: If681e1e078a8d43d86961ea4b748da5cd1b6c331
2013-08-22vp9_encodeframe.c cleanup.Dmitry Kovalev
Removing unused get_sbuv_perpixel_variance function, using has_second_ref/ is_inter_block functions, organizing includes. Change-Id: I016de4af12fbbb8b4ece26a70759b2392651b095
2013-08-22rename LOG2_* defines to *_LOG2James Zern
gets rid of a mix of styles Change-Id: I3591d312157bc6f53a25438bf047765c671fd8a8
2013-08-22Refactor rd_pick_partition for parameter controlJingning Han
This commit changes the partition search order of superblocks from {SPLIT, NONE, HORZ, VERT} to {NONE, SPLIT, HORZ, VERT} for consistency with that of sub8x8 partition search. It enable the use of early termination in partition search for all block sizes. For ped_area_1080p 50 frames coded at 4000 kbps, it makes the runtime goes down from 844305ms -> 818003ms (3% speed-up) at speed 0. This will further move towards making the in-search partition types configurable, hence unifying various speed-up approaches. Some speed 1 and 2 features are turned off during the refactoring process, including: disable_split_var_thresh using_small_partition_info Stricter constraints are applied to use_square_partition_only for right/bottom boundary blocks. Will bring back/refine these features subsequently. At this point, it makes derf set at speed 1 about 0.45% higher in compression performance, and 9% down in run-time. Change-Id: I3db9f9d1d1a0d6cbe2e50e49bd9eda1cf705f37c
2013-08-22Fixes on feature disabling split based on varianceDeb Mukherjee
Adds a couple of minor fixes, which may be absorbed in Jingning's patch. Thanks to Guillaume for pointing these out. Also adjusts the thresholds for speed 1 and 2 to 16 and 32 respectively, to keep quality drops small. Results: -------- derfraw300: threshold = 16, psnr -0.082%, speedup 2-3% threshold = 32, psnr -0.218%, speedup 5-6% stdhdraw250: threshold = 16, psnr -0.031%, speedup 2-3% threshold = 32, psnr -0.273%, speedup 5-6% Change-Id: I4b11ae8296cca6c2a9f644be7e40de7c423b8330
2013-08-22Merge "Initialize mb_skip_coeff before picking modes"Scott LaVarnway
2013-08-22Initialize mb_skip_coeff before picking modesScott LaVarnway
It appears that the above/left mb_skip_coeff used during the pick modes, is left over from the previously encode frame. This patch initializes the flag to the default value of zero. Change-Id: Ida4684cc99611d6e3e82628db35ed717e28ce550
2013-08-21Cleaning up sum_intra_stats function.Dmitry Kovalev
Using size_group_lookup table and better variable names. Change-Id: I6e67f2ce091845db43ace7d21b7ae31c6f165aec
2013-08-21Fix typos and minor stylistic cleanupAdrian Grange
Change-Id: I32e43474e8651ef2eb181d24860a8f118cfea7bf
2013-08-20Changes to auto partition size selection.Paul Wilkins
Changes to code to auto select a partition size range based on data from spatial neighbors. Now looks at the sb_type in each 8x8 block of above and left SB64. The effect on speed 1 is now weaker giving better quality but less speed gain. Now also used in speed 2. Change-Id: Iace33a97d5c3498dd2a9a8a4067351941abcbabc
2013-08-19Change to limit the mv search rangeYaowu Xu
As the pixel values beyond image border are duplicates of pixels on edge, the change limits the mv search range, any mv beyond the limits no longer produce new/different prediction values as entire block with pixels used for subpel interpolation are outside image border. Change-Id: I4c6fdf06e33c1cef1489f5470ce0fb4e5e01fb79
2013-08-16Removing unused or redundant arguments from *_args structures.Dmitry Kovalev
Redundant dst, pre[2] from build_inter_predictors_args, unused cm from encode_b_args. Change-Id: I2c476cd328c5c0cca4c78ba451ca6ba2a2c37e2d
2013-08-15Moving segmentation struct from MACROBLOCKD to VP9_COMMON.Dmitry Kovalev
VP9_COMMON is the right place to segmentatation struct because it has global segmentation parameters, not something specific to macroblock processing. Change-Id: Ib9ada0c06c253996eb3b5f6cccf6a323fbbba708
2013-08-15Speed feature to skip split partition based on varDeb Mukherjee
Adds a speed feature to disable split partition search based on a given threshold on the source variance. A tighter threshold derived from the threshold provided is used to also disable horizontal and vertical partitions. Results on derfraw300: threshold = 16, psnr = -0.057%, speedup ~1% (football) threshold = 32, psnr = -0.150%, speedup ~4-5% (football) threshold = 64, psnr = -0.570%, speedup ~10-12% (football) Results on stdhdraw250: threshold = 32, psnr = -0.18%, speedup is somewhat more than derf because of a larger number of smoother blocks at higher resolution. Based on these results, a threshold of 32 is chosen for speed 1, and a threshold of 64 is chosen for speeds 2 and above. Change-Id: If08912fb6c67fd4242d12a0d094783a99f52f6c6
2013-08-14Renaming in MB_MODE_INFOPaul Wilkins
The macro block mode info context originally contained an entry for each 16x16 macroblock. In VP9 each entry refers to an 8x8 region not a macro block, so the naming is misleading. This first stage clean up changes the names of 3 entries in the structure to remove the mb_ prefix. TODO clean up the nomenclature more widely in respect of mbmi and bmi. Change-Id: Ia7305c6d0cb805dfe8cdc98dad21338f502e49c6
2013-08-13Honor min_partition_size properly for non-square splitsGuillaume Martres
Don't do vertical or horizontal splits if subsize < min_partition_size, except for edge blocks where it makes sense. Change-Id: I479aa66ba1838d227b5de8312d46be184a8d6401
2013-08-13Merge "Honor min_partition_size properly"Paul Wilkins
2013-08-12Entropy context related cleanups.Dmitry Kovalev
Adding set_skip_context() function used from both encoder and decoder. Change-Id: Ia22cfad3211a00a63eb294f64f857b78f4aa9b85
2013-08-09Renaming BLOCK_SIZE_TYPES constant to BLOCK_SIZES.Dmitry Kovalev
There will be another change set to rename BLOCK_SIZE_TYPE enum to BLOCK_SIZE. Change-Id: I8d1dfc873d6186fa5e554262f5169e929978085e
2013-08-09Honor min_partition_size properlyGuillaume Martres
It represents the minimum partition size, so don't split if bsize == min_partition_size . Change-Id: Id77c32d6afef7d2ddec0368eaae18fb13227d30e
2013-08-09Moving loopfilter struct to VP9_COMMON.Dmitry Kovalev
Loop filter configuration doesn't belong to macroblock, so moving it from MACROBLOCKD to VP9_COMMON. Also moving the declaration of loopfilter struct from vp9_blockd.h to vp9_loopfilter.h. Change-Id: I4b3e34be9623b47cda35f9b1f9951f8c5b1d5d28
2013-08-09Bug fix: call set_offsets before rd_auto_partition_rangeScott LaVarnway
The set_offsets call is necessary inorder to set the mode_info_context ptr correctly. Change-Id: I644910cc5bacc50ee9cd78458843274ad8ee636d
2013-08-08Moved fast motion search level decision to functionAdrian Grange
Moving this block of code into a function makes the code easier to read and change. Change-Id: If4ede570cce1eab1982b188c4d3e4fd3d4db236e
2013-08-08Simplify & fix potential bug in rd_pick_partitionAdrian Grange
Different partitionings were not being evaluated against best_rd and there were unnecessary calls to RDCOST. This could have resulted in a non-optimal partioning being selected. I simplified the variables used to track the rate, distortion and RD values throughout the function. Change-Id: Ifa7085ee80d824e86791432a5bc6d8fea5a3e313
2013-08-07Use low precision 32x32fdct for encodemb in speed1Jingning Han
The low precision 32x32 fdct has all the intermediate steps within 16-bit depth, hence allowing faster SSE2 implementation, at the expense of larger round-trip error. It was used in the rate-distortion optimization search loop only. Using the low precision version, in replace of the high precision one, affects the compression performance by about 0.7% (derf, stdhd) at speed 0. For speed 1, it makes derf set down by only 0.017%. Change-Id: I4e7d18fac5bea5317b91c8e7dabae143bc6b5c8b
2013-08-06Inlining vp9_get_pred_probs_switchable_interp function.Dmitry Kovalev
There was no benefit having this function. For example, inside read_switchable_filter_type switchable filter context was calculated twice. Change-Id: I79cd5bf95cbc0f6d8bf91a2e32289e01b18dcff1
2013-08-06Merge "Finally removing all old block size constants."Dmitry Kovalev
2013-08-06Merge "Changing the order switchable filter enum constants."Dmitry Kovalev
2013-08-06Merge "Add variance based mode/skipping"Deb Mukherjee
2013-08-05Finally removing all old block size constants.Dmitry Kovalev
Change-Id: I3aae21e88b876d53ecc955260479980ffe04ad8d
2013-08-05Add variance based mode/skippingDeb Mukherjee
Adds a speed feature to skip all intra modes other than DC_PRED if the source variance is small. This feature is made part of speed 1 and up. Results on derf300: psnr -0.07%, speedup about 1-2% Also uses the source variance to fine-tune the early termination criteria when FLAG_EARLY_TERMINATE is on. This feature is made part of speed 2 and up. Results on derf300: psnr -0.52%, speedup about 5-7% Change-Id: I59e38aa836557cfa5405ae706fc64815cbfe4232
2013-08-05Merge "cleanups after bw bh code"Jim Bankoski
2013-08-05Changing the order switchable filter enum constants.Dmitry Kovalev
This changeset allows to remove vp9_switchable_interp and vp9_switchable_interp_map arrays and make code much clear. Actually we still have to use these mapping but only inside read_interp_filter_type and write_interp_filter_type functions. Change-Id: I4026c6f8c4acefba6c81421b7bacbaa52cc45f50
2013-08-05cleanups after bw bh codeJim Bankoski
Cons bw/bh parms that should have been const. Additional formatting. Change-Id: Icd36a5c9dc17dadd7284315ac0d6fef1a565ca16
2013-08-05Replacing long block size enum values with shorter ones (2).Dmitry Kovalev
Change-Id: I428c4d42212b757112e3acfe5b81314cfbb5fd6b