summaryrefslogtreecommitdiff
path: root/vp9/encoder/vp9_pickmode.c
AgeCommit message (Collapse)Author
2015-06-17Take out assertion for block_yrd in rtc coding flowJingning Han
The internal behavior of block_yrd differs in high bit depth settings from 8-bit one. This causes the assertion condition not true for high bit depth. Change-Id: I15dc02e7162d27cabe78c451941d769d488b1174
2015-06-16Fix integer overflow issue in rtc coding flow intra mode searchJingning Han
The overflow issue affects a variable that is only used in inter mode. This commit fixes the ioc warning triggered in the intra mode. It does not affect the compression performance. Change-Id: I593d1b5650599de07f3e68176dd1442c6cb7bdbc
2015-06-11inline vp9_get_segdata()Scott LaVarnway
and change name. Change-Id: I706645cf9d9dc04f1b3b6ac80df80edb7f101854
2015-06-11inline vp9_segfeature_active()Scott LaVarnway
and changed name. Change-Id: Ie023ca66cc2c823032f58d4faeb53fd1863c94f3
2015-06-10Merge "Reducing size of MODE_INFO struct"Scott LaVarnway
2015-06-05Fix to spatial svc: set reference_frame masking.Marco
For real-time mode: keep reference_frame masking off for spatial svc. Change-Id: I15e123c06f67ea040172b8d4042a672f3525b9d8
2015-06-04Reducing size of MODE_INFO structScott LaVarnway
Reduced size from 124 bytes to 104 bytes. For decode only builds, it is reduced to 68 bytes. Change-Id: If9e6b92285459425fa086ab5a743d0a598a69de3
2015-05-28For non-rd pickmode: remove VAR_PARTITION condition.Marco
Keep the logic, transform size based on cyclic refresh and bsize, (that was conditioned on VAR_PARTITION conditions) the same for all speeds in non-rd mode (speeds >= 5). No change to speeds >=6. Small improvement for speed 5, ~0.5/1.5% gain for avg psnr/ssim. Change-Id: If9c5657f3d30efd3c7f147166bba7cb69ea55114
2015-05-28Merge "Re-worked header files"Scott LaVarnway
2015-05-26Merge "Move variance functions to vpx_dsp"Johann
2015-05-26Move variance functions to vpx_dspJohann
subpel functions will be moved in another patch. Change-Id: Idb2e049bad0b9b32ac42cc7731cd6903de2826ce
2015-05-22Fix integral projection motion search for frame resizeJingning Han
This commit fixes the integral projection motion search crash when frame resize is used. It fixes issue 994. Change-Id: Ieeb52619121d7444f7d6b3d0cf09415f990d1506
2015-05-22Re-worked header filesScott LaVarnway
Various header/test files had to be re-worked in order to build "Remove cm parameter from vp9_decode_block_tokens()". This patch reverts the "Remove cm" part and only contains the re-worked header files. Change-Id: I520958a88d1991fee988a3c784d0eac40e117a32
2015-05-13Merge "Relocate memory operations for common code"Johann
2015-05-13Relocate memory operations for common codeJohann
With the sad functions, and hopefully the variance functions soon, moving to the vpx_dsp location, place the defines used in the reference C code in a common location. Change-Id: I4c8ce7778eb38a0a3ee674d2f1c488eda01cfeca
2015-05-12Remove unneeded variable declarationYunqing Wang
This patch fixed the following warning: src\third_party\libvpx\source\libvpx\vp9\encoder\vp9_pickmode.c(1607) : warning C6246: Local declaration of 'this_mode' hides declaration of the same name in outer scope. Change-Id: I1d93c4a47a13cb13089fec5bd61e8b58e6cd8d58
2015-05-07replace DECLARE_ALIGNED_ARRAY w/DECLARE_ALIGNEDJames Zern
this macro was used inconsistently and only differs in behavior from DECLARE_ALIGNED when an alignment attribute is unavailable. this macro is used with calls to assembly, while generic c-code doesn't rely on it, so in a c-only build without an alignment attribute the code will function as expected. Change-Id: Ie9d06d4028c0de17c63b3a27e6c1b0491cc4ea79
2015-05-06Remvoe EIGHTTAP_SHARP filter check for non-rd mode.Marco
Using EIGHTTAP and EIGHTTAP_SMOOTH seem sufficient. Hard to see any visual gain from allowing EIGHTTAP_SHARP, and it is rarely selected. PSNR/SSIM metrics go up by ~0.18/0.14%. Change-Id: I96fa0d98f9321b913e3ebcd464d4ff3c63018791
2015-05-05Add intra mode early termination in non-rd modeYunqing Wang
Added the intra mode early termination in order to speed up the mode search in non-rd case since we started to include more intra modes in the search list. Borg tests(rtc set) showed a 0.048% PSNR gain and 0.061 SSIM gain. No speed change. Change-Id: I6f255fe534dc50b736e6a66a726ad458eb9b4443
2015-05-04Allow for H and V intra modes for non-rd mode.Marco
For non-rd mode (speed >=5): use mask based on prediction block size, and (for non-screen content mode) allow for checking horiz and vert intra modes for blocks sizes < 16x16. Avg psnr/ssim metrics go up by about ~0.2%. Only allowing H/V intra on block sizes below 16x16 for now, to keep encoding time increase very small, and also when allowing H/V on 16x16 blocks, metrics went down on a few clips which need to be further examined. Change-Id: I8ae0bc8cb2a964f9709612c76c5661acaab1381e
2015-04-30Reduce intra_cost_penalty for BLOCK_8X8Yunqing Wang
This patch reduced the BLOCK_8X8's intra_cost_penalty, which allows 8x8 blocks to conduct intra mode search. Borg test result(rtc set): 0.077% PSNR gain, 0.228% SSIM gain. No speed changes. Change-Id: Icfe90c4f6969de24bda8ecacbd3da50330bf22b2
2015-04-28vpx_mem: remove vpx_memsetJames Zern
vestigial. replace instances with memset() which they already were being defined to. Change-Id: Ie030cfaaa3e890dd92cf1a995fcb1927ba175201
2015-04-28vpx_mem: remove vpx_memcpyJames Zern
vestigial. replace instances with memcpy() which they already were being defined to. Change-Id: Icfd1b0bc5d95b70efab91b9ae777ace1e81d2d7c
2015-04-21Revert "Remove mi_grid_* structures."Scott LaVarnway
(see I3a05cf1610679fed26e0b2eadd315a9ae91afdd6) For the test clip used, the decoder performance improved by ~2%. This is also an intermediate step towards adding back the mode_info streams. Change-Id: Idddc4a3f46e4180fbebddc156c4bbf177d5c2e0d
2015-04-15Fix Tsan errorsYunqing Wang
This patch fixed 2 reported Tsan errors while running VP9 real-time encoder. Change-Id: Ib0278fe802852862c3ce87c4a500e544d7089f67
2015-04-09Merge "Compute prediction filter type cost only when needed"Jingning Han
2015-04-07Merge "Optimize the checking for transform skipping"Yaowu Xu
2015-04-07Merge "move ref_frame_cost computations into a function"Yaowu Xu
2015-04-07Merge "Enable Hadamard transform based cost estimate for all block sizes"Jingning Han
2015-04-07Merge "Account for eob cost in the RTC mode decision process"Jingning Han
2015-04-07Compute prediction filter type cost only when neededJingning Han
Skip redundant prediction filter type cost in filter search loop, if the rate value will be reset in Hadamard transform based rate distortion estimate. Change-Id: Ie5221f4bc8da9461c449df367251aeeac52c6e5d
2015-04-06Optimize the checking for transform skippingYaowu Xu
If U is not skippable, then do not perform the check on V. Change-Id: Iba5e8362bd42390197f373c44388a426a4404549
2015-04-04Enable Hadamard transform based cost estimate for all block sizesJingning Han
This commit turns on the Hadamard transform based rate distortion estimate for all block sizes in RTC coding mode. It conditionally skips the rate distortion estimation if all zero block flag is set on. No significant encoding speed change is observed. The compression performance of speed -6 is improved by 1.7% over using it only for block sizes of 32x32 and below. Change-Id: I768145e6f05c737b05b5b5f1ee674e929532cafb
2015-04-03Fix the scaling factor in UV skipping testYunqing Wang
The threshold scaling factor was calculated wrong using partition size "bsize". Thank Yaowu for pointing it out. It was fixed and no speed change was seen. Change-Id: If7a5564456f0f68d6957df3bd2d1876bbb8dfd27
2015-04-03Account for eob cost in the RTC mode decision processJingning Han
This commit accounts for the transform block end of coefficient flag cost in the RTC mode decision process. This allows a more precise rate estimate. It also turns on the model to block sizes up to 32x32. The test sequences shows about 3% - 5% speed penalty for speed -6. The average compression performance improvement for speed -6 is 1.58% in PSNR. The compression gains for hard clips like jimredvga, mmmoving, and tacomascmv at low bit-rate range are 1.8%, 2.1%, and 3.2%, respectively. Change-Id: Ic2ae211888e25a93979eac56b274c6e5ebcc21fb
2015-04-02move ref_frame_cost computations into a functionYaowu Xu
Change-Id: Iebf2ad2b1db7e2874788fda8d55e67f4cb1149f1
2015-04-02Small fix to segment check in pickmode.Marco
Change-Id: Id5fd82a504def2523292466fbaad5dade9424c72
2015-04-01Merge "Simplify effective src_diff address computation"Jingning Han
2015-04-01Merge "Refactor block_yrd function for RTC coding mode"Jingning Han
2015-04-01Simplify effective src_diff address computationJingning Han
Remove redundant offset calculation for effective src_diff address. Change-Id: I4aab241a36abcef7fd8adf74aed5e12b8b88e0ef
2015-04-01Refactor block_yrd function for RTC coding modeJingning Han
This commit separates Hadamard transform/quantization operations from rate and distortion computation in block_yrd. This allows one to skip SATD computation when all transform blocks are quantized to zero. It also uses a new block error function that skips repeated computation of sum of squared residuals. It reduces the CPU cycles spent on block error calculation in block_yrd by 40%. Change-Id: I726acb2454b44af1c3bd95385abecac209959b10
2015-04-01Enhance the transform skipping decision-making in non-rd modeYunqing Wang
For large partition blocks(block_size > 32x32), the variance calculation is modified so that every 8x8 block's variance is stored during the calculation, which is used in the following transform skipping test. Also, the variance for every tx block is calculated. The skipping test checks all tx blocks in the partition, and sets the skip flag only if all tx blocks are skippable. If the skip flag of Y plane is 1, a quick evaluation is done on UV planes. If the current partition block is skippable in YUV planes, the mode search checks fewer inter modes and doesn't check intra modes. The rtc set borg test(at speed 6) showed that: Overall psnr: -0.527%; Avg psnr: -0.510%; ssim: -0.573%. Average single-thread speedup on rtc set was 3.5%. For 720p clips, more speedups were seen. gipsrecmotion: 13% gipsrestat: 12% vidyo: 5 - 9% dark: 15% niklas: 6% Change-Id: I8d8ebec0cb305f1de016516400bf007c3042666e
2015-03-31Tuning SATD rate calculation for speedJingning Han
This commit allows the encoder to check the eob per transform block to decide how to compute the SATD rate cost. If the entire block is quantized to zero, there is no need to add anything; if only the DC coefficient is non-zero, add its absolute value; otherwise, sum over the block. This reduces the CPU cycles spent on vp9_satd_sse2 to one third. Change-Id: I0d56044b793b286efc0875fafc0b8bf2d2047e32
2015-03-31Allow block skip coding option in RTC modeJingning Han
When the estimated rate-distortion cost of skip coding mode is lower than that of sending quantized coefficients, allow the encoder to drop these coefficients. This improves the compression performance of speed -6 by 0.268% and makes the encoding speed slightly faster. Change-Id: Idff2d7ba59f27ead33dd5a0e9f68746ed3c2ab68
2015-03-30Enable 16x16 Hadamard transform in SATD based mode decisionJingning Han
This commit replaces the 16x16 2D-DCT transform with Hadamard transform for RTC coding mode. It reduces the CPU cycles cost on 16x16 transform by 5X. Overall it makes the speed -6 encoding speed 1.5% faster without compromise on compression performance. Change-Id: If6c993831dc4c678d841edc804ff395ed37f2a1b
2015-03-30Use SATD based mode decision for block sizes below 16x16Jingning Han
This commit makes the encoder to select between SATD/variance as metric for mode decision. It also allows to account chroma component costs for mode decision as well. The overall encoding time increase as compared to variance based mode selection is about 15% for speed -6. The compression performance is on average 2.2% better than variance based approach, with about 5% compression performance gains for hard clips (e.g., jimredvga, nikas720p, and mmmoving) at lower bit-rate range. Change-Id: I4d04a31d36f4fcb3f5f491dacd6e7fe44cb9d815
2015-03-30Reuse inter prediction pixel block for Hadamard transformJingning Han
It saves one unnecessary motion compensated prediction constructed by using 8-tap filter. Change-Id: I101215131e6f38621d5935885f94cc74de6a5377
2015-03-30Hadamard transform based coding mode decision processJingning Han
This commit uses Hadamard transform based rate-distortion cost estimate for rtc coding mode decision. It improves the compression performance of speed -6 for many hard clips at lower bit-rates. For example, 5.5% for jimredvga, 6.7% for mmmoving, 6.1% for niklas720p. This will introduce extra encoding cycle costs at this point. Change-Id: Iaf70634fa2417a705ee29f2456175b981db3d375
2015-03-20vp9_pred_mv(): misc fixes and optimizationsYaowu Xu
1. skip near if it is same as nearest 2. correct rounding for converting mv to fullpel position 3. update pred_mv_sad after new mv search. Overall .1%~.25% compression gains on rtc set for speed 5, 6, 7, 8. Change-Id: Ic300ca53f7da18073771f1bb993c58cde9deee89
2015-03-18Speed up non-rd mode decision searchJingning Han
This commit makes the encoder to explicitly calculate the SAD associated with the LAST_FRAME motion vector and compare it to that of the GOLDEN_FRAME given by integral projection motion estimation. It skips the expensive sub-pixel motion search over GOLDEN_FRAME when the LAST_FRAME can provide fairly good motion compensated prediction quality. For dark720p speed -6 single thread goes from 33304 b/f, 40.070 dB, 18156 ms -> 33319 b/f, 40.061 dB, 17611 ms Change-Id: I01bc94b9b598075567a392111046b97a9bc30efe