summaryrefslogtreecommitdiff
path: root/vp8
AgeCommit message (Collapse)Author
2012-12-07Moved denoiser frame copy/updates out of loopfilter threadScott LaVarnway
The loopfilter thread from the previous frame can be running while starting the current frame. cpi->Source will change during this time causing the wrong data to be copied. The refresh_x_frame flags also change, which will cause incorrect updates of the denoised buffers. Change-Id: I7d982b4fcb40a0610801332aa85f3b792c64e4c3
2012-12-06Merge "added work buffer for denoiser"Scott LaVarnway
2012-12-05added work buffer for denoiserScott LaVarnway
The denoiser was writing to LAST_FRAME buffer. If LAST_FRAME isn't being updated, the reference frame buffers were out of sync between the encoder and the denoised raw buffers. This patch resolves the discrepancy by always writing to a work buffer (INTRA_FRAME) and then copying from that buffer to any buffers that needs to be updated. Change-Id: I6dd855b9749978b542bc3d515914d5f16faf25df
2012-12-05Disable background update on non-base layer framesAdrian Grange
Multi-threaded code was not updated to disable background refresh for non base-layer frames at the time it was disabled in the main C-code. Change-Id: Id6cc376130b7def046942121cfd0526b4f0a71d4
2012-12-05Removed check_gf_quality()Scott LaVarnway
and various unused members in VP8_COMP along with other code cleanups. Change-Id: I56c6c0a77a51f5ac5cbd6071017bcbfd2623b7df
2012-12-04Moving mbs_tested_so_far, mode_test_hit_counts to macroblock structScott LaVarnway
Change-Id: Ifa78c0a953fab3e5dd7af0446924846c7022cd09
2012-12-03Merge "Moving rd_thresh_mult, rd_threshes to macroblock struct"Scott LaVarnway
2012-12-03Merge "Moving count_mb_ref_frame_usage to macroblock struct"Scott LaVarnway
2012-11-26Updates to qp-regulate and rate correction factor.Marco Paniconi
Don't use the switch to gf_rate_correction factor when temporal layers is used (i.e., cpi->oxcf.number_of_layers > 1). In temporal layers, we prefer to avoid this as any frame (e.g., base layer frame at anchor of pattern) may update both last and golden (and possibly alt-ref), and so we would get different rate correction factors within the same layer. This change will make sure one rate correction factor exists for each layer. Also, made some other code in qp-regulate that depends on alt/golden update specific to the 1 layer case. Change-Id: I41a6d085bd477f9307ef3b3c311695214273892c
2012-11-26Merge "vp8_intra_pred_y_tm_sse2: save/restore xmm registers"James Zern
2012-11-20Merge "vp8_loop_filter_bh_y_sse2: save/restore xmm registers"John Koleszar
2012-11-20vp8_filter_block1d4_h6_ssse3: add missing xmm restoreJames Zern
Change-Id: Ia8f6b6c2a9ed60bee7949dd06fcc18b392e91d76
2012-11-20vp8_loop_filter_bh_y_sse2: save/restore xmm registersJames Zern
xmm[6-11] should be saved and restored for Windows x64; prevents an encoder mismatch and some datarate issues. Change-Id: I03c38eb18ec20c6c441cae19416393058baad1ee
2012-11-19vp8_intra_pred_y_tm_sse2: save/restore xmm registersJames Zern
xmm6/xmm7 should be saved and restored for Windows x64; prevents an encoder mismatch and some datarate issues. Change-Id: Ifa1a82ab25fbdc5112d66f5332e14b16e69ac164
2012-11-15Each make file is responsible for its own directoryJohann
Change-Id: Ia8a59ce79045af209e49c68810bae44616422db5
2012-11-09Merge "use calloc() instead of malloc()"John Koleszar
2012-11-06Incorrect parameter passed into vp8_stuff_mbScott LaVarnway
Should be MACROBLOCK, not MACROBLOCKD Change-Id: I0353bbdf085a181ae2ac1f0b96849b38566e9f6a
2012-11-06Moving count_mb_ref_frame_usage to macroblock structScott LaVarnway
Change-Id: I44e4e3869f231ae270cca98c9565f23c512e3ddf
2012-11-06Merge "Removed mb_norm_activity_map"Scott LaVarnway
2012-11-06Moving rd_thresh_mult, rd_threshes to macroblock structScott LaVarnway
Change-Id: I650a593162280ab40e71e527ec6518303e2d5723
2012-11-06use calloc() instead of malloc()Pascal Massimino
So that, in case of error, the arrays are not filled with trash pointers that are attempted a free() during vp8mt_de_alloc_temp_buffers() Change-Id: Ic074549c2903a43316510eb42e4f393e7d3ee528
2012-11-06Removed mb_norm_activity_mapScott LaVarnway
Not used. Change-Id: I07ba929e3ff82b4b0c86f731769cdf5434c7a816
2012-11-06Moving _error counts to macroblock structScott LaVarnway
Change-Id: I28ac1519d1594801fef9a623cb64598d3d751eb0
2012-11-06Moving MVcount to macroblock structScott LaVarnway
Change-Id: Ie22841d096f3c86694b95bd06fc3a8ce1f032a10
2012-11-05Moving ymode_count, uv_mode_count to macroblock structScott LaVarnway
Change-Id: Ib73c7b2bee4cb2eb2528fa6b381fffe9503079a0
2012-11-05Moved skip_true_count to macroblock structScott LaVarnway
Change-Id: Ie9a26be7c9baa54a0e43a63ed6c77f2746477a9c
2012-11-05Moving coef_counts to macroblock structScott LaVarnway
Change-Id: I289564a5a27f0d03ddc6f19c7838542ff22719be
2012-11-05Merge "Removed unnecessary VP8_COMP *cpi parameters"Scott LaVarnway
2012-11-02Removed unnecessary VP8_COMP *cpi parametersScott LaVarnway
Code cleanup Change-Id: I82f9d787a2f511d39895fd8dfd5347a1676d9dbc
2012-10-31vp8dx_receive_compressed_data() cleanupScott LaVarnway
Change-Id: I6edf0626d00ae177c7c04eec64e1ec0dd861dfbe
2012-10-25Use vp8_clear_system_state helper functionJohann
Change-Id: I4dd192c3297e31b8eadd108ca8d0934e58f502f7
2012-10-25variance.h uses defines in vpx_config.hJohann
Change-Id: Ibd3e4425a3bf8aae8aa33b70da2b84e1cda8c07f
2012-10-23postproc_sse2: avoid reading off the end of the limits arrayJohn Koleszar
Rather than unconditionally reading in the next MB's limits, test the loop exit condition first. Change-Id: I105d1e92698fb5561aa87160816787604aed03a2
2012-10-22postproc: allocate enough memory for limits bufferJohn Koleszar
The vp8_post_proc_down_and_across_mb_row_sse2() needs space for an even number of macroblocks, as they are read two at a time for the chroma planes. Round up the width during the allocation of pp_limits_buffer to support this. Change-Id: Ibfc10c7be290d961ab23ac3dde12a7bb96c12af0
2012-10-16Fix to rd cost computation for mv bias.Marco Paniconi
This prevents the rd cost from wrapping around and going negative. Change-Id: Id61390537d2ad47762e410918bb4e18f6a0912d4
2012-10-11Clean up error return code in alloccommon.cYunqing Wang
Clean up the duplicate code as Pascal suggested. Change-Id: I685fcbb488502e969f6cb73a46db3ea79b90910d
2012-10-10post-proc: fix 0 or negative threshold handlingYunqing Wang
If the threshold(limits) <= 0, skipped filtering and copied the frame directly. Also, fixed memory allocation checking. Change-Id: If3d79d5b2bcb71b9777e6eb5cba1384585131e22
2012-10-09multi-res: disable intra on forced ref framesJohn Koleszar
If a reference frame is forced because of low dissimilarity, then shut off the search of intra modes. This change has mixed results. On one clip (QVGA), it hurt quality by ~1.5% with negligible speed impact. On another (VGA) it had negligible affect on quality, but a ~0.2% speed impact. Change-Id: Ic8b07648979d732f489de5f094957e140f84d2eb
2012-10-09Merge "multi-res: add parent_ref_valid flag"John Koleszar
2012-10-09multi-res: add parent_ref_valid flagJohn Koleszar
Rather than overloading the parent_ref_frame value to shut off the search in some cases, add a new validity flag. This cleans up some of the duplicated mr_encoder_id && mr_low_res_mv_avail checks as well, for readability. Change-Id: Iddad93a27066c3d85ff2f25a361ac113b288ab7b
2012-10-09Merge "post-proc: deblock filter optimization"Yunqing Wang
2012-10-08post-proc: deblock filter optimizationYunqing Wang
1. Algorithm modification: Instead of having same filter threshold for a whole frame, now we allow the thresholds to be adjusted for each macroblock. In current implementation, to avoid excessive blur on background as reported in issue480(http://code.google.com/p/webm/issues/detail?id=480), we reduce the thresholds for skipped macroblocks. 2. SSE2 optimization: As started in issue479(http://code.google.com/p/webm/issues/detail?id=479), the filter calculation was adjusted for better performance. The c code was also modified accordingly. This made the deblock filter 2x faster, and the decoder was 1.2x faster overall. Next, the demacroblock filter will be modified similarly. Change-Id: I05e54c3f580ccd427487d085096b3174f2ab7e86
2012-10-08multi-res: work around reference mismatchJohn Koleszar
In some situations, believed to be an interaction between temporal scalability and dropped frames, the references available to an encoder may not be the same references available to its parent. Previously, the code tried to force the reference frame chosen by the parent to be used on this frame, even if it was disabled. This was preventing the pick mode loop from running even once, which led to a crash. Attempts to reproduce this bug locally were unsuccessful, so it is still undetermined what the underlying cause of this issue is. In the specific case that was failing, the application did not set any flags which influenced the reference selection on that frame. ref_frame_flags indicated that the golden frame was disabled, believed to be because the last frame updated the last and golden frames, so golden was shut off by default. It's not clear why this wouldn't have also been true in the lower res encoder, ie, why the lower res encoder decided to use and/or was allowed to use the golden frame. We weren't able to debug into the non-crashing lower res encoder as the crash couldn't be reproduced locally. Change-Id: Ifb265253d26963ac2afde0e20cf6792788be6af7
2012-10-03fix uninitialized value in multi-res encodingJohn Koleszar
If a parent mb is available but is intra coded, then parent_ref_mv is invalid. Check that the parent is inter coded before trying to access the parent_ref_mv. Previously the parent_ref_mv was being read from an uninitialized stack allocation, causing potential OOB reads and other undefined behavior. Change-Id: I0c93cd412a19c3a184bcf6decaa145b3a036a6c0
2012-10-03Merge "rtcd/win32: use InitializeCriticalSection explicitly"John Koleszar
2012-10-03rtcd/win32: use InitializeCriticalSection explicitlyJohn Koleszar
Protect the call to {Initialize,Delete}CriticalSection() with an Interlocked{Inc,Dec}rement() pair, rather than the previous static initialization. This should play better with AppVerifier, and fix issue http://code.google.com/p/webm/issues/detail?id=467 Change-Id: I06eadbfac1b3b4414adb8eac862ef9bd14bbe4ad
2012-10-01Disable keyframe in real time that's placed one frame after a cut.Jim Bankoski
The codec as it stood placed a keyframe one frame after a real cut scene - and ignored datarate and other considerations. TODO: Its possible that we should detect a keyframe and recode the frame ( in certain circumstances) to improve quality. Change-Id: Ia1fd6d90103f4da4d21ca5ab62897d22e0b888a8
2012-09-27Resetting of the cyclic_refresh_mode_index:Marco Paniconi
Reset the cyclie refresh mode index in alloc_compressor_data(). This is needed to handle both cases of internal and external spatial resizing. Change-Id: I2697e12d45135eae2e8f0d45161811f24722312a
2012-09-26Reset the cyclic_refresh_mode_index to 0 on resize.Marco Paniconi
On an internal spatial resize, this mode index was not reset to 0, and therefore could exceed dimensions of seg_map or cyclic_refresh_map. Change-Id: I6fe85dbd2765eb0207a9d9f71fda8d8b8c34f075
2012-09-25Merge "disable segmentation on enhancement layers"Jim Bankoski