summaryrefslogtreecommitdiff
path: root/vp9
AgeCommit message (Collapse)Author
2019-01-31Add dist scale in get_mv_distAngie Chiang
Add MACRO VP9_DIST_SCALE_LOG2 represents distortion's log scale Change-Id: Ic496a31e6d3f04626510f8c4661af464a002e361
2019-01-30Implement get_mv_cost()Angie Chiang
The mv_cost contains mv_mode cost and mv_diff cost. The mv_mode cost is inferred from default_inter_mode_probs. The mv_diff cost is estimated used the log2 function. Change-Id: I62702bdb5c3fec018e3302765f5dd749fceebc12
2019-01-30Add assertion in get_block_src_pred_bufAngie Chiang
Print error message and assert when ref_frame_idx is invalid Change-Id: Ice6d06c53ddae0a77d578671b896c4e4d04d5366
2019-01-29Fix bug in predict_mv_modeAngie Chiang
Use kMvPreCheckLines in the for loops. Change-Id: I60204c6294560d47421a8621d907dfa95c9dde18
2019-01-29Allocate memory for mv_mode_arr[]Angie Chiang
Change-Id: Ib9fdf65e263dbaace8d4c86766eba2c6f35f652b
2019-01-28Add predict_mv_mode_arr()Angie Chiang
The function predicts the mv_mode for each prediction block in diagonal order. Change-Id: I7dcfcdb317ffa334cb40bb435baa71b5db62252b
2019-01-28Add predict_mv_mode()Angie Chiang
This function evaluate the impact of setting NEW_MV_MODE on a block and its neighbor blocks. Change-Id: Ie0b2c67bdc5cd14e0efd8ebc5dc3f3f873bcf3fe
2019-01-24Add find_best_ref_mv_mode()Angie Chiang
This function compute the rd cost for each mv_mode and return the one with minimum rd cost. eval_mv_mode() Evaluate the rd cost for a given mv_mode. Change-Id: Ia1b3ec7e1dd538e443e1bc79f2cab352408cd0a0
2019-01-24Add get_mv_distAngie Chiang
Given an mv_mode, get_mv_dist() obtains the mv and uses it to compute distortion. Change-Id: I58b8c7137b99c2736d651e678f0cd013dbd94877
2019-01-24Add get_mv_from_mv_mode()Angie Chiang
Given an mv_mode, this function will return the corresponding mv. find_ref_mv() A helper function finds the nearest and near mvs from the neighbor blocks. select_mv_arr[] An array used for storing selected motion vectors. Change-Id: Ibeb434007f65b2c6e461360f208d99455e76bcbf
2019-01-23Add set_block_src_pred_buf()Angie Chiang
This function sets src and pre buffer of MACROBLOCK and MACROBLOCKD. Will add static decorator once this function is called. Change-Id: I0fb46784dd97839e4d87c9e027fe8c59683e70d8
2019-01-23[cleanup] Move get_feature_score to a proper placeAngie Chiang
Add static decorator to it as well. Change-Id: I6c89fae456561b6975ab49af139a45a7483507c6
2019-01-18Change temporal filter's search_method on speed 1chiyotsai
This commit introduces a new speed feature that determines the SEARCH_METHOD used by temporal filter when doing 16x16 block on full_pixel_motion_search. On speed 0, the most exhaustive method MESH is used. On speed 1 and above, a faster method NSTEP is used. Performance: | AVG_PSNR | AVG_SPDUP | AVG_SPDUP:AVG_PSNR MISRES | 0.007% | 2.818% | 402:1 HDRES | 0.004% | 4.897% | 1224:1 In the case of midres, there is a small quality gain of -0.021% on OVR_PSNR. Performance measurement is done on speed 1 with auto_alt_ref=1. Quality is measured on full midres set over 60 frames. Speed is measured on 5 midres clips over 4 bitrates over 30 frames. STATS_CHANGED Change-Id: Ic1879d2237f8734529e194767a6cf5e43e20b47b
2019-01-18Merge changes Id99ca6fc,I34cdbc6e,Iac7fee46Angie Chiang
* changes: Correct pyramid_mv_arr's memory size Adjust lambda with bsize in build_motion_field() Free pyramid_mv_arr properly
2019-01-18Merge "Add unit test for temporal filter on VP9"Chi Yo Tsai
2019-01-16Add unit test for temporal filter on VP9chiyotsai
The current unit tests for temporal filtering only tests single channel version of temporal filter. Since VP9 currently uses both luma and chroma channel information for temporal filtering on low bitdepth, there is no unit case in this scenario. This commit adds some basic unit tests to facilitate further development on temporal filtering. BUG=webm:1591 Change-Id: Id38ceba5305865d7148e9b2bc636acddae54d6c2
2019-01-16Merge "mips highbd: resolve missing declarations"Johann Koenig
2019-01-16Merge "mips: add rtcd.h to resolve missing declarations"Johann Koenig
2019-01-15Merge "vp9-svc: Fix to buffer update under frame_drops"Marco Paniconi
2019-01-15mips: add rtcd.h to resolve missing declarationsJohann
BUG=webm:1584 Change-Id: Ifdebf33356abcc6869f695d129165ba17e042dcd
2019-01-15mips highbd: resolve missing declarationsJohann
BUG=webm:1584 Change-Id: I4cbfafe8ea72b3d4523aabcaed4848fa29bb19fe
2019-01-15vp9-svc: Fix to buffer update under frame_dropsMarco Paniconi
For svc with frame dropping in full_superframe_drop or constrained dropped mode: the buffer level for a given layer may be capped from increasing too much. This is because that layer may be dropped even though its buffer is stable (the dropped is forced due to underflow in other layers in full/constrained svc-drop mode). This capping is needed to prevent decrease in qp over consecutive frame drops. The capping already exists and has been used, but this change introduce an error that prevented its usage: https://chromium-review.googlesource.com/c/webm/libvpx/+/1330875 The fix here is to also cap the bits_off_target as well, since after the change mentioned above, its the bits_off_target that is used to update buffer on next frame (which in turn affects qp for next frame/layer). Change-Id: Ifdab5d478e91cce20ecec51faa574eed375ee36b
2019-01-15Merge " highbd_iadst16_neon: resolve missing declaration"Johann Koenig
2019-01-15Merge "vp9-svc: Rate control fix for key base layer"Marco Paniconi
2019-01-14vp9-svc: Rate control fix for key base layerMarco Paniconi
After encoding key frame on base spatial layer, if the overshoot is significant, reset the avg_frame_qindex[INTER] on base spatial layer for all temporal layers. This forces the active_worst_quality to increase on subsequent frames/layers and reduces frame dropping. Change-Id: I53a3cd14131d69120e59a649b7ed1bfde3e940ee
2019-01-15Merge "Fix typo: exhuastive"Jerome Jiang
2019-01-14clean up debug print.Jerome Jiang
printf -> assert(0 & ...) Change-Id: I7bd6c0127ad816e8a5b555e86d54961b33da2bc4
2019-01-14Fix typo: exhuastiveJerome Jiang
Change-Id: Ia00570a00b871eb1f929bd7e0af221d2c0b5ed21
2019-01-14Merge "Fix typo."Jerome Jiang
2019-01-14Fix typo.Jerome Jiang
Blocking libvpx update into google3. Change-Id: I18c29f0a68568e65ae5e0c7fcdb5097b08b586a6
2019-01-12Fix segmentation fault in hbd pathDeepa K G
When CONFIG_VP9_HIGHBITDEPTH is enabled, lowbd modules were called in the hbd path. This patch fixes the issue. Change-Id: I59820180fbed120697b6ef1fc1a02be0d35ac1d5
2019-01-10Correct pyramid_mv_arr's memory sizeAngie Chiang
Change-Id: Id99ca6fc846ebe11a9f5363da4e6449e976303a1
2019-01-10Adjust lambda with bsize in build_motion_field()Angie Chiang
Change-Id: I34cdbc6e8625c0de8595860af02ca277c3448a19
2019-01-10Free pyramid_mv_arr properlyAngie Chiang
Change-Id: Iac7fee461759599a7e167f8e6716ae3c6414a7d1
2019-01-09 highbd_iadst16_neon: resolve missing declarationJohann
Only used in a local array. Similar to lowbd iadst16 naming. BUG=webm:1584 Change-Id: Ie07c2fb9599fb54fab221e5c0ccec0e95d69b893
2019-01-09Merge changes Icec98e6f,I63614e65,I25ea05f4Angie Chiang
* changes: Add full_pixel_exhaustive_new Add sse cost in vp9_full_pixel_diamond_new Use motion field for mv inconsistency in mv search
2019-01-08ppc: resolve missing declarationsJohann
Add rtcd headers and make local functions static. BUG=webm:1584 Change-Id: Ic19aec1dc90703b0b89d1092baee487d0fd0cb4e
2019-01-07vp9_get_blockiness: resolve missing declarationJohann
BUG=webm:1584 Change-Id: I719c64734f4eae07def2d700006834a2420891a7
2019-01-07fix vp9 fdct_quantJohann
Values in [q]coeff1 were not correctly stored. This caused a segfault in the sse2 libvpx__nightly_optimization jobs. Broken in: commit 85032bac388917916f7a149173db8b34e93e8f6e Author: Johann <johannkoenig@google.com> Date: Fri Dec 21 00:27:00 2018 +0000 fdct_quant: resolve missing declarations BUG=webm:1584 Change-Id: I5f5fad34ec5e32023f5b40ff3691125754c11ced
2019-01-04Merge "VP9 firstpass: Bugfix when mi_col_start/end is odd"Urvang Joshi
2019-01-04VP9 firstpass: Bugfix when mi_col_start/end is oddUrvang Joshi
Before this patch, if mi_col_end was odd, then the for loop for 'mb_col' was looping once LESS than it should have been. For example, if mi_col_end = 47, then the loop was terminating when mb_col == 23. However, the correct behavior would be to terminate when mb_col == 24. The issue was introduced in: https://chromium-review.googlesource.com/c/webm/libvpx/+/423279 This can lead to many of the stats being inaccurate, for such videos (with mi_col_start/end having an odd value). As an example: Even for very static content, fp_acc_data->intercount can never reach the same value as num_mbs. And in turn, pcnt_inter can never reach the value 1 (that is, 100%). This would lead to very static videos NOT being marked static, and encoded like regular videos. Note: this is just one possible effect based on observation. Other issues are also possible based on other stats. Improvement on some test clips: ------------------------------- - One test clip saw a gain of -2.580% in VBR mode (and -3.153% in Q mode). The reason for improvement: a wrongly detected scene cut was avoided due to corrected value in 'this_frame->pcnt_inter'. - Some very static clips correctly marked as having 100% zero motion. This avoided addition of unncecessary alt-refs, thereby reducing the bitrate. BDRate (PSNR) on regular sets (VBR mode): ----------------------------------------- lowres: 0.0 midres: -0.027 (some clips were better/worse, but I double checked that changes were as expected, given correction in stats calculation). hdres: 0.0 STATS_CHANGED for the types of videos described above. Change-Id: Ifbc2c0c0815d23ec4015475680bdf8886f158dcc
2019-01-04Add full_pixel_exhaustive_newAngie Chiang
Add full_pixel_exhaustive_new() and exhuastive_mesh_search_new(). The two functions are variants from full_pixel_exhaustive() and exhuastive_mesh_search(). In the new versions, we use mv inconsistency in place of mv entropy cost. Change-Id: Icec98e6fae24f2771806a3e78276734624ec0303
2019-01-04Add sse cost in vp9_full_pixel_diamond_newAngie Chiang
Change-Id: I63614e652686557652985bde882889eea9ecbcad
2019-01-04Use motion field for mv inconsistency in mv searchAngie Chiang
Change-Id: I25ea05f4bfe3c6f420e967c33763909c979a0d1b
2019-01-03Increase memory size in non-greedy-mvAngie Chiang
The smallest block size of motion field is 4x4, but the mi_unit size is 8x8, therefore the number of units of motion field is "mi_rows * mi_cols * 4". Change-Id: I95292904d757705d39b78af5d0cf2d25f376c642
2019-01-03Build pyramid motion fieldAngie Chiang
Change-Id: I43fd61f7946a8a96d444dab5e94a9b01483ffab7
2018-12-27Adaptively choose block sizes in temporal filteringYunqing Wang
Use variable block sizes in temporal filtering. Based on prediction errors of 32x32 or 16x16 blocks, choose the block size adaptively. This improves the coding performance, especially for HD resolutions. Speed 1 borg test result: avg_psnr: ovr_psnr: ssim: lowres: -0.090 -0.075 -0.112 midres: -0.120 -0.107 -0.168 hdres: -0.506 -0.512 -0.547 Change-Id: I8f774e29ecb2e0dd372b32b60c32d8fa30c013a8
2018-12-22Revert "Add Tile-SB-Row based Multi-threading in Decoder"James Zern
This reverts commit 02b3ef7faee5be5ee519856fbb3523d3ab49f6e7. Reason for revert: fails to build under visual studio Original change's description: > Add Tile-SB-Row based Multi-threading in Decoder > > Add the multi-thread function that decodes a video row by row instead > of a tile at a time. Create a job queue for queueing all parse and recon jobs. > Each SB row of a tile is a job. > > Performance Improvement: > > Platform Resolution 3 Threads 4 Threads > ARM 720p 36.81% 18.37% > 1080p 32.27% 14.76% > > ARM Improvement measured on Nexus 6 Snapdragon 805 Quad-core @ 2.65 GHz > > Change-Id: I3d4dd7a932fc2904c90d9546b2de99c809afd29e BUG=webm:1587 Change-Id: Ia4c8f5128922a205cd9fd83aaef8a2e73764d4a7
2018-12-21Merge "vp9_decodeframe.c: resolve missing declarations"Johann Koenig
2018-12-21vp9_highbd_block_error_sse2: resolve missing declarationsJohann
BUG=webm:1584 Change-Id: I43d051c538bf4a6f6210eefa398dc0901ab8d157