summaryrefslogtreecommitdiff
path: root/vp8
AgeCommit message (Collapse)Author
2012-03-01Merge "vp8e - force at least some change in over and under shoots"Jim Bankoski
2012-03-01vp8e - force at least some change in over and under shootsPaul Wilkins
Change-Id: Ie1796f272dc33bf5a1c8ac990da625961d272aa9
2012-02-29Packing bitstream on-the-fly with delayed context updatesAttila Nagy
Produce the token partitions on-the-fly, while processing each MB. Context is updated at the beginning of each frame based on the previoud frame's counters. Optimally encoder outputs partitions in separate buffers. For frame based output, partitions are concatenated internally. Limitations: - enabled just in combination with realtime-only mode - number of encoding threads has to be equal or less than the number of token partitions. For this reason, by default the encoder will do 8 token partitions. - vpxenc supports partition output (-P) just in combination with IVF output format (--ivf) Performance: - Realtime encoder can be up to 13% faster (ARM) depending on the number of threads and bitrate settings. Constant gain over the 5-16 speed range. - Token buffer reduced from one frame to 8 MBs Quality: - quality is affected by the delayed context updates. This again dependents on input material, speed and bitrate settings. For VC style input the loss seen is up to 0.2dB. If error-resilient=2 mode is used than the effect of this change is negligible. Example: ./configure --enable-realtime-only --enable-onthefly-bitpacking ./vpxenc --rt --end-usage=1 --fps=30000/1000 -w 640 -h 480 --target-bitrate=1000 --token-parts=3 --static-thresh=2000 --ivf -P -t 4 -o strm.ivf tanya_640x480.yuv Change-Id: I127295cb85b835fc287e1c0201a67e378d025d76
2012-02-28Merge changes Ifb450710,I61c4a132Scott LaVarnway
* changes: Eliminated reconintra_mt.c Eliminated vp8mt_build_intra_predictors_mbuv_s
2012-02-28Merge "Removed duplicate code in threading.c"Scott LaVarnway
2012-02-28Eliminated reconintra_mt.cScott LaVarnway
Reworked the code to use vp8_build_intra_predictors_mby_s, vp8_intra_prediction_down_copy, and vp8_intra4x4_predict_d_c functions instead. vp8_intra4x4_predict_d_c is a decoder-only version of vp8_intra4x4_predict. Future commits will fix this code duplication. Change-Id: Ifb4507103b7c83f8b94a872345191c49240154f5
2012-02-28Removed duplicate code in threading.cScott LaVarnway
Change-Id: Id7e44950ceda67b280e410e541510106ef02f1da
2012-02-28Merge "Only do uv intra-mode evaluation when intra mode is checked"Yunqing Wang
2012-02-28Only do uv intra-mode evaluation when intra mode is checkedYunqing Wang
When we encode slide-show clips, for the majority of the time, only ZEROMV mode is checked, and all other modes are skipped. This change delayed uv intra-mode evaluation until intra mode is actually checked. This gave big performance gain for slide-show video encoding (2nd pass gain: 18% to 28%). But, this change doesn't help other types of videos. Also, zbin_mode_boost is adjusted in mode-checking loop, which causes bitstream mismatch before/after this change when --best or --good with --cpu-used=0 are used. Change-Id: I582b3e69fd384039994360e870e6e059c36a64cc
2012-02-27bugfix: use oxcf width/height for reinit checkJames Berry
use oxcf instead of common in check to Reinit the lookahead buffer if the frame size changes prior behavior would cause assertion fail/crash first observed in: support changing resolution with vpx_codec_enc_config_set Change-Id: Ib669916ca9b4f206d4cc3caab5107e49d39a36aa
2012-02-27Merge "Fix skippable evaluation in mode decision"Yunqing Wang
2012-02-27Merge "decoder: reset segmentation map on keyframes"John Koleszar
2012-02-27Fix skippable evaluation in mode decisionYunqing Wang
Yaowu fixed the skippable evaluation by correcting 2nd order block's eob. Change-Id: Id47930cbc74a90a046c0c0e324efb03477639ee0
2012-02-23Merge "Add unit tests for idctllm_test and idctllm_mmx"James Berry
2012-02-23Merge "Remove the frame rate factor for key frame size."Jim Bankoski
2012-02-22Remove the frame rate factor for key frame size.Marco Paniconi
When temporal layers is used (i.e., number_of_layers > 1), we don't use the frame rate boost for setting the key frame target size. The factor was forcing the target size to be always at its minimum (2* per_frame_bandwidth) for low frame rates (i.e., base layer frame rate). Generally we should modify or remove this frame rate factor; for now we turn if off for number_of_layers > 1. Change-Id: Ia5acf406c9b2f634d30ac2473adc7b9bf2e7e6c6
2012-02-21Eliminated vp8mt_build_intra_predictors_mbuv_sScott LaVarnway
Reworked the code to use vp8_build_intra_predictors_mbuv_s instead. This is WIP with the goal of eliminating all functions in reconintra_mt.h Change-Id: I61c4a132684544b24a38c4a90044597c6ec0dd52
2012-02-21Add unit tests for idctllm_test and idctllm_mmxJames Berry
add unit tests for vp8_short_idct4x4llm_c Change-Id: I472b7c0baa365ba25dc99a3f6efccc816d27c941
2012-02-21Merge changes I0341554f,I64e110c8John Koleszar
* changes: Consolidate C version of token packing functions Multithreaded encoder, late sync loopfilter
2012-02-21Merge "Remove redundant init of segment_counts in vp8_encode_frame"Scott LaVarnway
2012-02-21Merge "Update encoder mb_skip_coeff and prob_skip_false calculation"John Koleszar
2012-02-17Merge "Fix incorrect use of uv eobs in intra modes"Yunqing Wang
2012-02-17Fix incorrect use of uv eobs in intra modesYunqing Wang
In vp8_rd_pick_inter_mode(), if total of eobs is zero, rate needs to be adjusted since there are no non-zero coefficients for transmission. The uv intra eobs calculated in rd_pick_intra_mbuv_mode() need to be saved before they are overwritten by inter-mode eobs. Change-Id: I41dd04fba912e8122ef95793d4d98a251bc60e58
2012-02-17Update encoder mb_skip_coeff and prob_skip_false calculationAttila Nagy
mode_info_context->mbmi.mb_skip_coeff has to always reflect the existence or not of coeffs for a certain MB. The loopfilter needs this info. mb_skip_coeff is either set by the vp8_tokenize_mb or has to be set to 1 when the MB is skipped by mode selection. This has to be done regardless of the mb_no_coeff_skip value. prob_skip_false is needed just when mb_no_coeff_skip is 1. No need to keep count of both skip_false and skip_true as they are complementary (skip_true+skip_false = total_mbs) Change-Id: I3c74c9a0ee37bec10de7bb796e408f3e77006813
2012-02-17Remove redundant init of segment_counts in vp8_encode_frameAttila Nagy
segment_counts was zero init twice in the beginning of vp8_encode_frame. Change-Id: Ibc29f6896dabd9aab1d0993f3941cf6876022e70
2012-02-16Clarify 'max_sad' usageJohann
Depending on implementation the optimized SAD functions may return early when the calculated SAD exceeds max_sad. Change-Id: I05ce5b2d34e6d45fb3ec2a450aa99c4f3343bf3a
2012-02-16decoder: reset segmentation map on keyframesJohn Koleszar
Refactoring some of the mode decoding logic introduced a bug where the segmentation maps would not be properly reset on keyframes. http://code.google.com/p/webm/issues/detail?id=378 The text of the bug is somewhat misleading as I initially read it to imply the bug was present in v0.9.7-p1 (Cayuga), but note the text "master", which indicates this was something subsequent. This issue bisects back to v0.9.7-p1-84-ga99c20c, so unfortunately it was broken during the Duclair release. Thanks to Alexei Leonenko for investigating the root cause. Change-Id: I9713c9f070eb37b31b3b029d9ef96be9b6ea2def
2012-02-16Support Android x86 NDK buildMakoto Kato
On Android NDK, rand() is inlined function. But, on our SSE optimization, we need symbol for rand() Change-Id: I42ab00e3255208ba95d7f9b9a8a3605ff58da8e1
2012-02-16Simplify mb_to_x_edge calculation during mode decodingScott LaVarnway
Change-Id: Ibcb35c32bf24c1d241090e24c5e2320e4d3ba901
2012-02-16Merge "decodemv cleanup/improvements"Scott LaVarnway
2012-02-16decodemv cleanup/improvementsScott LaVarnway
Removed unnecessary variables, unrolled functions, eliminated unnecessary mv bounds checks and branches. Change-Id: I02d034c70cd97b65025d59dd67c695e1db529f0b
2012-02-16Consolidate C version of token packing functionsAttila Nagy
Replace inner loops of pack_mb_row_tokens_c and pack_tokens_into_partitions_c with a call to pack_tokens_c. Change-Id: I0341554fb154a14a5dadb63f8fc78010724c2c33
2012-02-16Multithreaded encoder, late sync loopfilterAttila Nagy
Second shot at this... Sync with loopfilter thread as late as possible, usually just at the beginning of next frame encoding. This returns control to application faster and allows a better multicore scaling. When PSNR packets are generated the final filtered frame is needed imediatly so we cannot delay the sync. Same has to be done when internal frame is previewed. Change-Id: I64e110c8b224dd967faefffd9c93dd8dbad4a5b5
2012-02-10Merge "support changing resolution with vpx_codec_enc_config_set"John Koleszar
2012-02-10Missed some variance castsJohann
Change-Id: I9fb510f9421fb3c317a8e32e3058cee977ddf9fa
2012-02-10Merge "max_sad check is not always implemented"Johann
2012-02-09max_sad check is not always implementedJohann
As an optimization some architectures use the max_sad argument to break out early from the SAD. Pass in INT_MAX instead of 0 to prevent this. Change-Id: I653c476834b97771578d63f231233d445388629d
2012-02-09Fix variance overflowJohann
In the variance calculations the difference is summed and later squared. When the sum exceeds sqrt(2^31) the value is treated as a negative when it is shifted which gives incorrect results. To fix this we cast the result of the multiplication as unsigned. The alternative fix is to shift sum down by 4 before multiplying. However that will reduce precision. For 16x16 blocks the maximum sum is 65280 and sqrt(2^31) is 46340 (and change). PPC change is untested. Change-Id: I1bad27ea0720067def6d71a6da5f789508cec265
2012-02-08Merge "Add OS/2 supports"John Koleszar
2012-02-08Add OS/2 supportsKO Myung-Hun
Change-Id: I792d5236451905eb20a8ebe444ef5b2274e4f7a4
2012-02-07support changing resolution with vpx_codec_enc_config_setJohn Koleszar
Allow the application to change the frame size during encoding. This is only supported when not using lagged compress. Change-Id: I89b585d703d5fd728a9e3dedf997f1b595d0db0f
2012-02-07Align internal mfqe framebuffer dimensionsJohn Koleszar
MFQE postproc crashed with stream dimensions not a multiple of 16. The buffer was memset unconditionally, so if the buffer allocation fails we end up trying to write to NULL. This patch traps an allocation failure with vpx_internal_error(), and aligns the buffer dimensions to what vp8_yv12_alloc_frame_buffer() expects. Change-Id: I3915d597cd66886a24f4ef39752751ebe6425066
2012-02-06Merge "Allow to skip highest-resolution encoding in multi-resolution encoder"Yunqing Wang
2012-02-03Allow to skip highest-resolution encoding in multi-resolution encoderYunqing Wang
Sometimes, a user doesn't have enough bandwidth to send high-resolution (i.e. HD) video even though the camera catches HD video. This change allowed users to skip highest-resolution encoding by setting that level's target bit rate to 0. To test it, modify the following line in vp8_multi_resolution_encoder.c. unsigned int target_bitrate[NUM_ENCODERS]={1400, 500, 100}; To skip the highest-resolution level, change it to unsigned int target_bitrate[NUM_ENCODERS]={0, 500, 100}; To skip the first and second highest resolution levels, change it to unsigned int target_bitrate[NUM_ENCODERS]={0, 0, 100}; This change also fixed a small problem in mapping, which slightly helped quality and performance. Change-Id: I977bae9a9fbfba85c8be4bd5af01539f2b84bc81
2012-02-02Moved ref_frame_cost from MACROBLOCKD to MACROBLOCKScott LaVarnway
Change-Id: I05788522e9cde4322cfb12032483bdbf184bdf0b
2012-02-02Removed frames_till_alt_ref_frame from MACROBLOCKDScott LaVarnway
Change-Id: Ieb05270ac332a4cc38ec4b7b995fc0150e0fffdf
2012-02-02Removed frames_since_golden from MACROBLOCKDScott LaVarnway
Change-Id: I10efa441d663fceb6bc97a3bfad518cd3d9a5128
2012-01-31Merge "Improved uv mv calculations in build inter predictor"Scott LaVarnway
2012-01-31BLOCKD structure cleanupScott LaVarnway
Removed redundancies. All of the information can be found in the MACROBLOCKD structure. Change-Id: I7556392c6f67b43bef2a5e9932180a737466ef93
2012-01-30RTCD: remove unimplemented vp8_short_walsh4x4_mmxJohn Koleszar
This function does not exist. Change-Id: I84b72fb17d572d5cccee92220467b84c15842d4d