summaryrefslogtreecommitdiff
path: root/vp8/encoder/onyx_if.c
AgeCommit message (Collapse)Author
2011-02-17Merge "Fix relative include paths"John Koleszar
2011-02-16Merge "Allocate source buffers to be multiples of 16"Yunqing Wang
2011-02-16Allocate source buffers to be multiples of 16Yunqing Wang
Currently, when the video frame width is not multiples of 16, the source buffer has a stride of non-multiples of 16, which forces an unaligned load in SAD function and hurts the performance. To avoid that, this change allocates source buffers to be multiples of 16. Change-Id: Ib7506e3eb2cea06657d56be5a899f38dfe3eeb39
2011-02-15Remove redundant ptr checks in calls to vpx_freeJames Zern
vpx_free if used contains this check. If replaced, well behaved free will behave similarly. Change-Id: I25483aaa8b39255b9a8cf388d6e5eaa20a908ae1
2011-02-14mem leak fix for cpi->tplistJames Berry
checks added to make sure that cpi->tplist is freed correctly in vp8_dealloc_compressor_data and vp8_alloc_compressor_data. Change-Id: I66149dbbd25c958800ad94f4379d723191d9680d
2011-02-11Merge "Add improved_mv_pred flag in real-time mode"Yunqing Wang
2011-02-11Add improved_mv_pred flag in real-time modeYunqing Wang
As mentioned in check-in "Improve motion search in real-time mode", MV prediction calculation causes speed loss for speed 7 and above. This change added a flag to turn off this calculation for speed>6 in real-time mode. Change-Id: I9f4ae5a8bf449222d1784b54e7d315fc8347b2d1
2011-02-10Merge "Redefining good quality speed settings"Yaowu Xu
2011-02-10Merge "Improve motion search in real-time mode"Yunqing Wang
2011-02-10Fix relative include pathsJohn Koleszar
Allow compiling without adding vp8/{common,encoder,decoder} to the include paths. Change-Id: Ifeb5dac351cdfadcd659736f5158b315a0030b6c
2011-02-10Improve motion search in real-time modeYunqing Wang
Applied better MV prediction in real-time mode, which improves the encoding quality. Used quarter-pixel search instead of iterative sub-pixel search for speed >=5 to improve encoding performance. Tests on the test set showed: 1. For speed=-5, quality improvement: 1.7% on AvgPSNR and 2.1% on SSIM, performance improvement: 3.6% (This counts in the performance lose caused by MV prediction calculation in "Improve MV prediction in vp8_pick_inter_mode() for speed>3"). 2. For speed=-8, quality improvement: 2.1% on AvgPSNR and 2.5% on SSIM. but, 6.9% performance decrease because of MV prediction calculation. This should be improved later. Change-Id: I349a96c452bd691081d8c8e3e54419e7f477bebd
2011-02-09Redefining good quality speed settingsScott LaVarnway
Created a new speed 1 which is in the middle of the old speed 0 and speed 1. (for both quality and performance) Change-Id: I4802133cdb43f359ca787646c090899679dd5d84
2011-02-09Put more code under #if CONFIG_MULTITHREAD.Gaute Strokkenes
Change-Id: Icf4b692099d7d249fe3553852b1022b027b28e4b
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-04Merge "Delay auto key frame insertion in realtime configuration"John Koleszar
2011-02-03Merge "Improved encoder threading"Yunqing Wang
2011-02-02Delay auto key frame insertion in realtime configurationAttila Nagy
Whe auto keyframe insertion is enabled and conditions are right (scene change) the encoder can decide to insert a key frame and does a re-encoding. This can introduce extra latency. In RT mode we do not do the re-encoding of the current frame but force the next frame to key frame. Change-Id: I15c175fa845ac4c1a1f18bea3676e154669522a7
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-27Merge "Removed unused members from VP8_COMP"Scott LaVarnway
2011-01-27Merge "Refine motion vector prediction for NEWMV mode"Yunqing Wang
2011-01-26Removed unused members from VP8_COMPScott LaVarnway
Change-Id: I8f3f2642b02975fbdb14982984a29821f80d30d3
2011-01-26Merge "Correction to buffer update for non-viewable frames."Paul Wilkins
2011-01-26Correction to buffer update for non-viewable frames.Paul Wilkins
The code previously tested cpi->common.refresh_alt_ref_frame but there are situations where this flag may be set for viewable frames. The correct test should be !cm->show_frame. Change-Id: Ia1a600622992a4a68fe1d38ac23bf6b34b133688
2011-01-25cap the best quantizer for 2nd order DCYaowu Xu
This commit also removes artificial RDMULT cap for low quantizers. The intention is to address some abnormal behavior of mode selections at the low quantizer end, where many macroblocks were coded with SPLITMV with all partitions using same motion vector including (0,0). This change improves the compression quality substantially for high quality encodings in both PSNR and SSIM terms. Overall effect on mid/low rate range is also positive for all metrics, but smaller in magnitude. Change-Id: I864b29c4bd9ff610d2545fa94a19cc7e80c02667
2011-01-25Refine motion vector prediction for NEWMV modeYunqing Wang
Adjust checking points in motion vector prediction to better cover possible movements, and get a better prediction. Tests on test clips showed a 0.1% improvement in SSIM, and no change in PSNR and performance. Change-Id: Ifdab05d35e10faea1445c61bb73debf888c9d2f8
2011-01-20Further work to reduce pulsing.Paul Wilkins
These changes are specifically targeted at fade transitions to static scenes. Here we want to place a GF/ARF immediately after the fade and prevent an ARF just before the fade. Also some code lines and comment lines shortened to 80 chars while I was there. Change-Id: Iefdc09a4fa7b265048fc017246b73e138693950f
2011-01-18vp8e -removed undefined max callJim Bankoski
Change-Id: I42a86b0488f44115f09551fc5ad6d711fd470f0d
2011-01-18Merge "Further CQ, Key frame and ARF changes"Paul Wilkins
2011-01-18Further CQ, Key frame and ARF changesPaul Wilkins
This code fixes a bug in the calculation of the minimum Q for alt ref frames. It also allows an extended gf/arf interval for sections of clips that completely static (or nearly so). Change-Id: I1a21aaa16d4f0578e5f99b13bebd78d59403c73b
2011-01-18Fix encoder real-time only configuration.Attila Nagy
Remove allocation/deallocation of stats storage. Remove full search functions in machine specific encoder inits. Remove last pass validation in validate_config. Change-Id: I7f29be69273981a4fef6e80ecdb6217c68cbad4e
2011-01-17Fix CQ range and experimental KF sizing changes.Paul Wilkins
The CQ level was not using the q_trans[] array to convert to a 0-127 range as per min and maxq Experimental change to try and match the reconstruction error for forced key frames approximately to that of the previous frame by means of the recode loop. Though this may cause extra recodes and the recode behavior has not been optimized, it can only happen on forced key frames. Change-Id: I1f7e42d526f1b1cb556dd461eff1a692bd1b5b2f
2011-01-14KF/GF PulsingPaul Wilkins
This change is designed to try and reduce pulsing effects when moving with a complex transition like a fade, into an easy or static section in an otherwise difficult clip in CQ mode. The active CQ level is relaxed down to the user entered level for frames that are generating less than the passed in minimum bandwidth. Change-Id: Id6d8b551daad4f489c087bd742bc95418a95f3f0
2011-01-13One pass rate control correction.Paul Wilkins
Fixed discrepancy cpi->ni_frames vs cm->current_video_frame > 150. Make one pass path explicit. There is still scope for some odd behaviour around the transition point at cpi->ni_frames > 150. Change-Id: Icdee130fe6e2a832206d30e45bf65963edd7a74d
2011-01-12Limit key frame quantizer for forced key frames.Paul Wilkins
Where a key frame occurs because of a minimum interval selected by the user, then these forced key frames ideally need to be more closely matched in quality to the surrounding frame. Change-Id: Ia55b1f047e77dc7fbd78379c45869554f25b3df7
2011-01-11Merge "Add no_skip_block4x4_search flag in SPLITMV mode"Yunqing Wang
2011-01-11Add no_skip_block4x4_search flag in SPLITMV modeYunqing Wang
Add a flag to always enable block4x4 search for speed=0 (good quality) to guarantee no quality loss for speed0. Change-Id: Ie04bbc25f7e6a33a7bfa30e05775d33148731c81
2011-01-11Remove unused local variablesHenrik Lundin
Removing unused local variables causing compiler warnings in Visual Studio. Change-Id: I0e2096303be1fdbc01428a6e57cca9796bb32c8a
2011-01-10Two Pass VBR changePaul Wilkins
Further experiment with restriction of the Q range. This uses the average non KF/GF/ARF quantizer, instead of just relying on the initial value. It is not such a strong constraint but there may be a reduced risk of rate misses. Change-Id: I424fe782a37a2f4e18c70805e240db55bfaa25ec
2011-01-07Merge "CQ Mode"Paul Wilkins
2011-01-07CQ ModePaul Wilkins
The merge includes hooks to for CQ mode and other code changes merged from the test branch. CQ mode attempts to maintain a more stable quantizer within a clip whilst also trying to adhere to a guidline maximum bitrate. The existing target data rate parameter is used to specify the guideline maximum bitrate. A new parameter allows the user to specify a target CQ level. For normal (non kf/gf/arf) frames, the quantizer will not drop BELOW the user specified value (0-63). However, in some cases the encoder may choose to impose a target CQ that is above that specified by the user, if it estimates that consistent use of the target value is not compatible with guideline maximum bitrate. Change-Id: I2221f9eecae8cc3c431d36caf83503941b25e4c1
2011-01-07Merge "Disable some features for first pass."Paul Wilkins
2011-01-07Merge "Removed cpi->target_bits_per_mb"Scott LaVarnway
2011-01-07Removed cpi->target_bits_per_mbScott LaVarnway
cpi->target_bits_per_mb is currently not being used, so delete it. Also removed other unused code in rdopt.c. Change-Id: I98449f9030bcd2f15451d9b7a3b9b93dd1409923
2011-01-06Disable some features for first pass.Paul Wilkins
The following features don't make sense for the first pass in its current form and have a significant impact on its speed (up to 50%). Slow quantizer, slow dct and trellis optimization. Change-Id: Id9943f6765ffbd71fc0084ec7dfbc9d376fd6fcd
2010-12-29Always update last_frame_typeYunqing Wang
Scott pointed out that last_frame_type only gets updated while loopfilter exists. Since last_frame_type is also needed in motion search now, it needs to be updated every frame. Change-Id: I9203532fd67361588d4024628d9ddb8e391ad912
2010-12-28Use the fast quantizer for inter mode selectionScott LaVarnway
Use the fast quantizer for inter mode selection and the regular quantizer for the rest of the encode for good quality, speed 1. Both performance and quality were improved. The quality gains will make up for the quality loss mentioned in I9dc089007ca08129fb6c11fe7692777ebb8647b0. Change-Id: Ia90bc9cf326a7c65d60d31fa32f6465ab6984d21
2010-12-22temporal filter naming changesJohann
be more consistant with the naming pattern, especially wrt rtcd Change-Id: I3df50686a09f1dab0a9620b5adbb8a1577b40f2f
2010-12-22abstract apply_temporal_filterJohann
allow for optimized versions of apply_temporal_filter (now vp8_apply_temporal_filter_c) the function was previously declared as static and appears to have been inlined. with this change, that's no longer possible. performance takes a small hit. the declaration for vp8_cx_temp_filter_c was moved to onyx_if.c because of a circular dependency. for rtcd, temporal_filter.h holds the definition for the rtcd table, so it needs to be included by onyx_int.h. however, onyx_int.h holds the definition for VP8_COMP which is needed for the function prototype. blah. Change-Id: I499c055fdc652ac4659c21c5a55fe10ceb7e95e3
2010-12-16Changed segmentation check orderScott LaVarnway
In SPLITMV, the 8x8 segment will be checked first. If the 8x8 rd is better than the best, we check the other segments. Otherwise bail. Adjustments to the thresh_mult were necessary to make up for the initial quality loss. The performance improved by 20% (average) for good quality, speed 0 and speed 1, while the overall quality remained the same. Change-Id: I717aef401323c8a254fba3e9777d2a316c774cc3
2010-12-14Fix a bug in motion search codeYunqing Wang
The MV's range is 256. Since the new motion search uses a different starting MV than the center ref MV, a MV range checking needs to be done to avoid corruption. Change-Id: I8ae0721d1bd203639e13891e2e54a2e87276f306