Commit graph

3916 commits

Author SHA1 Message Date
siivonek b8e36bbc4a [isp] Fix storing cbfs for small ISP splits. Fix pdpc filtering. Cannot be used if width or height is less than 4. Fix dct related CI errors. 2023-08-14 12:21:20 +03:00
siivonek 99495c331b [isp] Fix some asserts to allow log2_dim 1 block sizes. Fix coefficient group scan order for small dimensions. 2023-08-14 12:21:19 +03:00
siivonek d39fddf0d8 [isp] Implement DCT for small blocks. 2023-08-14 12:21:19 +03:00
siivonek 910501012f [isp] Fix referene building for depth 2 blocks. Flip horizontal mode dimensions during prediction. Fix reference length during prediction when ISP enabled. 2023-08-14 12:21:18 +03:00
siivonek 7ba557af6b [isp] Fix luma cbf writing for ISP splits. Do not write luma cbf if first three splits had luma cbf 0. 2023-08-14 12:21:17 +03:00
siivonek a28e61eff7 [isp] Fix CI errors. 2023-08-14 12:21:17 +03:00
siivonek 4794104ecc [isp] Fix errors in reference building. Use cubic filter during prediction if ISP enabled. 2023-08-14 12:21:16 +03:00
Joose Sainio 662f31d61d [isp] Use correct coordinates for depth 4 chroma tu cost calculation 2023-08-14 12:17:36 +03:00
Joose Sainio 08942a5394 [tr-skip] fix transform skip flag writing 2023-08-14 12:17:35 +03:00
siivonek a261d4c5b3 [isp] WIP 2023-08-14 12:17:34 +03:00
siivonek 6340dfe4ce [isp] Fix mistake in pu_loc argument passing, was not used after passing. 2023-08-14 12:17:33 +03:00
Joose Sainio 88c33c0489 [lfnst] Fix lfnst constraint checking for the new coeff order 2023-08-14 12:17:33 +03:00
Joose Sainio e0e96068cc [lfnst] lfnst is not allowed for transform split 2023-08-14 12:17:32 +03:00
Joose Sainio cb7f9919e3 [jccr] Fix jccr coefficient copying 2023-08-14 12:17:32 +03:00
Joose Sainio 3e23fd0601 [cabac] fix cbf_y context for tr splits 2023-08-14 12:17:31 +03:00
siivonek 59292d8808 [isp] Add extra logic to reference building to accommodate ISP. Remove some asserts which were invalidated by ISP. 2023-08-14 12:17:31 +03:00
siivonek 33cd44f11b [isp] Fix chroma coeff writing for ISP. 2023-08-14 12:17:30 +03:00
siivonek d8d206365c [isp] Fix jccr coeffs. 2023-08-14 12:17:29 +03:00
siivonek 7398e58431 [isp] Fix coeff cost calculation. Coeff arrays were indexed wrongly. 2023-08-14 12:17:29 +03:00
siivonek d050efcb87 [isp] Fix error in last sig coeff function call. Height was not used. Fix cbf writing. Fix transform skip flag writing. 2023-08-14 12:17:28 +03:00
siivonek 33ae02aae0 [isp] Fix mistake in isp cbf writing. Loop index was increased twice. 2023-08-14 12:17:28 +03:00
siivonek 4a21039e23 [isp] Fix mistake in function declaration. 2023-08-14 12:17:27 +03:00
siivonek b8506c757c [isp] Convert functions to handle new coeff array order. Add function for getting coeff array subset. Fix assert. 2023-08-14 12:17:26 +03:00
siivonek 69dcb04c99 [isp] Use temporary coeff array when quantizing coeffs. After deriving coeffs, copy temp coeffs from linear order to correct arrays with cu order. 2023-08-14 12:17:26 +03:00
siivonek 0ae71feae4 [isp] Fix assert. 2023-08-14 12:17:25 +03:00
siivonek 2e8f008de4 [isp] Redo call hierarchy to include x, y coordinates. 2023-08-14 12:17:24 +03:00
siivonek 10f9b2be26 [isp] Keep lfnst constraint up to date during search. 2023-08-14 12:16:42 +03:00
siivonek 39f30563c5 [isp] Fix chroma width error when writing cu loc. Remove redundant IPS mode checks. 2023-08-14 12:16:42 +03:00
siivonek b53308f258 [isp] Fix mistake in setting cbfs. Skip stting if ISP is not used. 2023-08-14 12:16:41 +03:00
siivonek 56ebea7358 [isp] Set cbfs for isp splits after search. Add helper function for isp split number. 2023-08-14 12:16:40 +03:00
siivonek 510798cb3d [isp] Fix mistake in isp cabac write. Intra luma mpm flag bit was checking isp when it did not need to. 2023-08-14 12:16:40 +03:00
siivonek f86dc29ce7 [isp] Fix mistake in cost calculation. Remove some commented out code blocks. 2023-08-14 12:16:39 +03:00
siivonek bbb8faea98 [isp] Modify encode transform coeff func to handle non-square blocks, use cu_loc_t where possible. Fix mistake in mts idct generic. 2023-08-14 12:16:38 +03:00
siivonek 7062697beb [isp] Resolve TODOs. Make scan order tables const. 2023-08-14 12:16:37 +03:00
siivonek 93317cafa4 [isp] Write isp config bit to sps. 2023-08-14 12:16:37 +03:00
siivonek 182d0f4e66 [isp] Remove old_scan tables and related asserts. Fix coefficient group indexing. 2023-08-14 12:16:36 +03:00
siivonek f8641f7436 [isp] Fix assert. Implement coef cost calculation for isp splits. 2023-08-14 12:16:35 +03:00
siivonek ae0336fdfc [isp] Add non-square block handling to functions. 2023-08-14 12:16:34 +03:00
siivonek 031a758d6c [isp] Count isp cbfs. 2023-08-14 12:16:01 +03:00
siivonek 75175ee2e2 [isp] Fix isp search. 2023-08-14 12:16:00 +03:00
siivonek 8d914ce849 [isp] Implement coefficient encoding for isp splits. Make get_split_dim non static, it was needed elsewhere after all. 2023-08-14 12:15:59 +03:00
siivonek 573ecf80e3 [isp] Move can_use_lfnst_with_isp to intra.c. Remove duplicate functions. Move isp related functions from search to intra. Make isp_split_dim static. Move isp related defines from search to intra. 2023-08-14 12:15:58 +03:00
siivonek bcbd952dfd [isp] Add height handling to avx2 reconstruction. 2023-08-14 12:15:57 +03:00
siivonek 7c340fd92b [isp] Add height to inverse transform skip. 2023-08-14 12:15:56 +03:00
siivonek 318d925028 [isp] Add new convert_to_log2 table. Change all instances which used old convert_to_bit table to change dimensions into log2. 2023-08-14 12:15:55 +03:00
siivonek 6922157ed3 [isp] Fix quantization function calls. Some were not getting height as input. 2023-08-14 12:15:54 +03:00
siivonek 50ad91a94e [isp] Modify quantization functions to work with non-square blocks. 2023-08-14 12:15:53 +03:00
siivonek 31c8f1356f [isp] Add height to sig coeff group context calculation function. 2023-08-14 12:15:53 +03:00
siivonek 936256e750 [isp] Fix sig coeff flag context calculation function call. Width & height was swapped. 2023-08-14 12:15:52 +03:00
siivonek 9e7f4eac99 [isp] Change variable name 'type' to 'color'. 2023-08-14 12:15:51 +03:00
siivonek 09b905c6c4 [isp] Add height to get_tr_type function. 2023-08-14 12:15:51 +03:00
siivonek 8b7d573ae7 [isp] Add height to idct getter function. Check block dimensions in transform 2d functions. 2023-08-14 12:15:50 +03:00
siivonek 370bd07c55 [isp] Fix error in mts dct and idct. 2023-08-14 12:15:49 +03:00
siivonek 3a874ab5dd [isp] Comment out dct non square function. It is not needed since mts dct function will handle transform for non square blocks. 2023-08-14 12:15:49 +03:00
siivonek f9116441da [isp] Fix avx2 function call. Missing height parameter. 2023-08-14 12:15:48 +03:00
siivonek 6f756e831d [isp] Uncomment old scan order code to test against new one. Add assert to ensure old and new tables are the same. 2023-08-14 12:15:47 +03:00
siivonek c4d1f80f8f [isp] Fix error in scan order getter. Change define names to better reflect what they do. Add more accurate bookmark comments to scan order buffer table. 2023-08-14 12:15:46 +03:00
siivonek 8131e970e5 [isp] Modify existing scan table calls to use new getter. Add safety assert to getter. 2023-08-14 12:15:46 +03:00
siivonek 6ff9ae074e [isp] Add scan order getter. Add bookmark comments to scan order buffer. 2023-08-14 12:15:45 +03:00
siivonek 55d77c6b50 [isp] Add scan order tables for all possible block sizes. 2023-08-14 12:15:45 +03:00
siivonek 35271648db [isp] Fix some errors. Pass height to functions. Some WIP comments. 2023-08-14 12:15:44 +03:00
siivonek a9090c99b5 [isp] Fix error in inverse transform shifting. 2023-08-14 12:15:43 +03:00
siivonek cd7e091992 [isp] Fix mistake in transform if clause. 2023-08-14 12:15:43 +03:00
siivonek 6a3ddfd0bc [isp] Modify inverse transform to handle non-square blocks. 2023-08-14 12:15:42 +03:00
siivonek 626c9b02ea [isp] Modify transform and quantization functions to handle non-square blocks. Add strategy headers to CMakelist. 2023-08-14 12:15:41 +03:00
siivonek 06532dce02 [isp] Implement ISP search and partitioning. Add helper function for constructing cu_loc types. WIP stuff for transform. 2023-08-14 12:15:40 +03:00
siivonek 6236cc29be [isp] Fix avx2 function call. 2023-08-14 12:15:39 +03:00
siivonek ec4909095c [isp] Do not filter references if ISP is used. 2023-08-14 12:15:38 +03:00
siivonek 96df3ffd64 [isp] Change function calls to cu_loc_t. 2023-08-14 12:15:38 +03:00
siivonek 9406c5c31d [isp] Modify generic intra pred functions to handle non-square blocks. 2023-08-14 12:15:37 +03:00
siivonek 03b22e561e [isp] Add ISP command line option. 2023-08-14 12:15:36 +03:00
Marko Viitanen 1a1fea1a19 Merge branch 'implement_ibc' 2023-08-09 09:34:29 +03:00
Marko Viitanen 18b4a8be79 [ibc] Include the chroma in crc 2023-07-27 10:58:20 +03:00
Marko Viitanen 20875a9819 [ibc] Calculate hashes every 4 pixels and change the IBC costs a bit 2023-07-27 10:29:55 +03:00
Marko Viitanen 0fefd3f621 [ibc] Add hash based starting point finder for reqular inter search *experimental* 2023-07-24 22:55:52 +03:00
Marko Viitanen 6f4d538f4f [ibc] Clean up the ibc search, utilize hash based starting points if ibc=2 2023-07-24 22:07:22 +03:00
Marko Viitanen 6fe629e666 [ibc] A bit of cleanup and skip IBC search if cost is already less than 500 2023-07-21 20:40:00 +03:00
Marko Viitanen 3cef3c0119 Change the hardcoded general_level_idc from 5.2 to 6.3 2023-07-21 20:19:43 +03:00
Marko Viitanen 95dc4aa0cb [ibc] Fix the IBC buffer limitation, 256x64 pixels allowed 2023-07-21 20:15:24 +03:00
Marko Viitanen 8ff184a6b3 [ibc] Fill the IBC hashmap at the start of LCU search and use reverse map for "pos to hash" 2023-07-21 20:14:23 +03:00
Marko Viitanen 457d650f49 [ibc] Fix for CRC calculations
- Input for the 64bit crc intrinsic was 32bit
2023-07-19 09:57:24 +03:00
Marko Viitanen 15fb6f8183 [ibc] Add first version of the IBC hash search 2023-06-29 21:57:06 +03:00
Marko Viitanen 8cec02280f [ibc] Use IBC hashmap in LCU row basis 2023-06-28 23:06:04 +03:00
Marko Viitanen 76d66591c5 [ibc] Implement CRC for 8x8 block and generate a full hashmap at the frame load 2023-06-26 21:24:10 +03:00
Marko Viitanen 4b1f5ca7e2 [ibc] Add the hashmap to the frame and fix some small issues with hashmap and crc32c
- crc32c_4x4 strategy was not working, made some changes to the initialization
2023-06-22 21:44:49 +03:00
Marko Viitanen 30321e6dd4 [ibc] Fix uvg_hashmap_hash definition 2023-06-22 14:45:05 +03:00
Marko Viitanen a32a318d18 [ibc] Add CRC32C functions, with SSE 4.2 optimized CRC calculations 2023-06-22 14:39:56 +03:00
Marko Viitanen 7252befc17 [ibc] Add a hashmap implementation for IBC hash search 2023-06-22 14:39:56 +03:00
Marko Viitanen 68382f9e25 [ibc] Handle 4x4 block cases 2023-06-22 14:39:55 +03:00
Marko Viitanen 31fbf453c1 [ibc] Fix IBCFlag writing with I-frames and clean up some code 2023-06-22 14:39:55 +03:00
Marko Viitanen 8aded6406b [ibc] Fix issue in search 2023-05-08 12:26:06 +03:00
Marko Viitanen 34c7c432f9 [ibc] Fix deblocking for the IBC blocks 2023-05-08 11:58:40 +03:00
Joose Sainio e636db489f [cfg] Parameterize intra rough search granularity 2022-09-28 08:49:38 +03:00
Joose Sainio ed6a0528fe Further make things faster 2022-08-30 15:17:05 +03:00
Joose Sainio b0b2b0e536 Try making ultrafast all intra a bit faster 2022-08-29 14:11:08 +03:00
Marko Viitanen 6de2e2d581 [ibc] Fix some git merge issues and IBC merge candidate selection 2022-08-03 10:46:02 +03:00
Marko Viitanen 6a0e2a062d [ibc] Implement a proper search for IBC based on Inter search 2022-07-29 11:53:11 +03:00
Marko Viitanen 65c017c2f2 [ibc] Add check for above block in IBC search 2022-07-29 11:53:11 +03:00
Marko Viitanen 09e62a68fe [ibc] Fix merge candidate selection bug and IBC HMVP size reset at the start of the lcu row 2022-07-29 11:53:10 +03:00
Marko Viitanen d288cc46e9 [ibc] Fix coding of IBC in P and B slices, enable in search 2022-07-29 11:53:10 +03:00
Marko Viitanen 48584eead9 [ibc] Reset the jccr flags to fix a bug with IBC 2022-07-29 11:53:10 +03:00
Marko Viitanen 7ce01b4826 [ibc] Tune search costs a bit and revert debug vector scaling 2022-07-29 11:53:09 +03:00
Marko Viitanen 0fdf96fab2 [ibc] Change internal MV storage to INTERNAL_MV_PREC and code it as full-pel 2022-07-29 11:53:09 +03:00
Marko Viitanen cc4c757695 [ibc] Fix bugs on IBC reconstruction and add a simple search for I-frames 2022-07-29 11:53:08 +03:00
Marko Viitanen d9164f3cfe [ibc] Simplify the IBC merge candidate and mv cand selection 2022-07-29 11:53:08 +03:00
Marko Viitanen a46a4531a3 [ibc] Add HMVP for IBC and correct AMVP selection 2022-07-29 11:52:17 +03:00
Marko Viitanen dbc2006ba9 [ibc] Implement IBC reconstruction function when blocks are completely in the ibc buffer 2022-07-29 11:52:16 +03:00
Marko Viitanen b49d32af21 [ibc] Add IBC buffers 2022-07-29 11:52:15 +03:00
Marko Viitanen 6ec4c37b47 [ibc] Add IBC Flag context and code the bits, disable by default for now 2022-07-29 11:49:49 +03:00
Marko Viitanen 20d0a9b65e [ibc] Add --ibc parameter and config values for Intra Block Copy 2022-07-29 11:49:49 +03:00
Marko Viitanen cd2d4066d5 Fix scaled MV clipping and remove some unused variables 2022-07-28 13:59:11 +03:00
Marko Viitanen 3dd738ebb5 Fix mv_t rounding problems in some functions 2022-07-27 13:02:37 +03:00
Marko Viitanen 5ce1035291 [debug] Fix Motion Vector debug code not to overflow on videos not divisible by LCU_WIDTH 2022-07-27 12:48:39 +03:00
Marko Viitanen b7b7c22e44 Change mv_t to int32_t because of possible overflow in large videos 2022-07-27 12:48:39 +03:00
Joose Sainio ea32ef33ac [lfnst] handle transform skip correctly during search 2022-07-08 10:57:26 +03:00
Joose Sainio 03fb6ce92e [lfnst] Fix lfnst+tr_skip for dual tree 2022-07-08 10:57:26 +03:00
Joose Sainio 450cd00290 [mts] Fix cost calculation 2022-07-08 10:56:35 +03:00
Joose Sainio f9212b4e44 [mts] Don't do tr-skip when tr-skip is disabled 2022-07-06 15:15:28 +03:00
Joose Sainio dc7c8eeb41 [tr-skip] fix uvg_encode_ts_residual 2022-07-06 10:51:01 +03:00
Joose Sainio 427d611a00 [intra] Perform chroma search for rd2 2022-07-05 12:29:27 +03:00
Joose Sainio e2c34e7c25 [lfnst] Fix lfnst for --rd 2 2022-07-05 12:19:21 +03:00
Joose Sainio 02aa36f1a2 [tests] Fix final issue with avx2 satd and update test results 2022-07-05 10:28:59 +03:00
Joose Sainio 42adfb52a7 [satd] Satd scaling on avx2 implementations and re-enable satd tests 2022-07-05 09:34:59 +03:00
Joose Sainio 1f6a62e70e [fix-up] Force lfnst off when trying the mode from below depth block 2022-07-04 13:45:16 +03:00
Joose Sainio 3de4b99aec [jccr] Fix cost calculation 2022-07-04 13:41:14 +03:00
Joose Sainio 3a6414c31d [dual-tree] Fix deblock 2022-06-30 14:21:03 +03:00
Joose Sainio 5fefea025f [lfnst] get constarints for jccr mode 2022-06-29 16:35:55 +03:00
Joose Sainio b35a75b2eb [lfnst] Fix lfnst with rdoq 2022-06-29 16:25:25 +03:00
Joose Sainio 6ef532775b [intra] Fix various issues with cclm, mip, dual-tree, and lfnst 2022-06-29 15:09:34 +03:00
Joose Sainio 06d277bc78 [doc] update manpage and readme 2022-06-28 16:25:25 +03:00
Joose Sainio 68243e284f [cleanup] fix warnings 2022-06-28 16:02:22 +03:00
Joose Sainio b4ab9debf1 [lfnst] fix lfnst with cclm 2022-06-28 15:32:34 +03:00
Joose Sainio e25ea52f6f [lfnst] Fix mistakes 2022-06-28 15:32:33 +03:00
Joose Sainio 2fbbae834b [cclm] fix cclm for 4x4 2022-06-28 15:32:33 +03:00
Joose Sainio b8b603feb7 [lfnst] fix compile 2022-06-28 15:32:33 +03:00
Joose Sainio a0dd412811 [cclm] fix cclm bound calculation 2022-06-28 15:32:32 +03:00
Joose Sainio 75e500da10 [lfnst] LFNST working with dual tree 2022-06-28 15:32:32 +03:00
Joose Sainio faba18fe17 [dual-tree] only perform lfnst search when lfnst is enabled 2022-06-28 15:32:32 +03:00
Joose Sainio d16d6e3dd8 [dual-tree] [lfnst] allow counting lfnst bits for chroma in dual-tree 2022-06-28 15:32:31 +03:00
Joose Sainio 37590add20 [lfnst] [dual-tree] LFNST should work with dual tree 2022-06-28 15:32:31 +03:00
Joose Sainio 6c7dc9004c [dual-tree] Fix split context state updating 2022-06-28 15:32:31 +03:00
Joose Sainio b0d616b03c [dual-tree][tests] Fix some issues and enable cabac state test to test for dual tree 2022-06-28 15:32:30 +03:00
Joose Sainio 345c50ecee [dual-tree] rename kvz_ to uvg_ 2022-06-28 15:32:30 +03:00
Joose Sainio 3f12ee58b0 [dual-tree] fix --pu-depth-intra 4-4 for dual tree 2022-06-28 15:32:30 +03:00
Joose Sainio b8215baa30 [dual-tree] Fix CCLM+dual tree 2022-06-28 15:32:30 +03:00
Joose Sainio cf144e2724 [dual-tree] Works for all depths with basic tools 2022-06-28 15:32:29 +03:00
Joose Sainio 1c313e9c19 [dual-tree] works for depths 1 and 2 2022-06-28 15:32:29 +03:00
Joose Sainio 15cb06ded1 [dual-tree] Fix at least for implicit splits 2022-06-28 15:32:29 +03:00
Joose Sainio ed8496e57e [dual-tree] Matches except for cutoff bottom CTUs for forced depth=1 2022-06-28 15:32:28 +03:00
Joose Sainio 2017cb122a [dual-tree] Actually does whole frame 2022-06-28 15:32:28 +03:00