Commit graph

233 commits

Author SHA1 Message Date
Ari Koivula 7a7110ff7a Move chroma transformation and reconstruction to it's own functions.
Just a simple copy and paste with minimal changes.
2014-01-15 16:55:05 +02:00
Ari Koivula 35ba873abc Move transform unit coding to its own function. 2014-01-14 18:47:02 +02:00
Ari Koivula a38a5fd647 Improve transform tree coding.
- Clean up code and comment.
- Change terminology to match H.265 specification where possible.
- Move transform splitting for depth==0 out of the coding part. It's not
  possible to do it here anyway because intra reconstruction is different
  if the transform is split.
- Add checking for transform hierarchy depth when coding split flag.
- Fixes bug with cu_data.tr_depth being set. The CU struct was being reused
  for inter coded CUs, which did not initialize the tr_depth.
2014-01-14 18:39:24 +02:00
Ari Koivula d5745aa31a Fix encode_transform_tree to handle 4x4 luma.
- Add room to cu_data.coeff_top_yuv arrays for the 4x4 PUs data. Will probably have to do the same to other coeff flags. The flags could also probably be combined as they are a bit redundant.
2014-01-13 18:37:47 +02:00
Ari Koivula 73fdc35c4f Try to implement 4x4 luma transform coding.
- Doesn't work yet so it's disabled.
- Change encode_transform_coeff to accept PU (Prediction Unit) coordinates
  instead of CU coordinates because CUs are 8x8.
2014-01-09 19:30:54 +02:00
Ari Koivula c3f4a628af Try to fix stuff related to NxN intra transform splitting. 2014-01-03 16:47:27 +02:00
Ari Koivula 1b7e44c4d4 Add NxN to intra reconstruction. 2014-01-03 13:01:54 +02:00
Ari Koivula 5083e6db10 Change cu_info.intra into an array to support NxN split. 2014-01-02 15:13:20 +02:00
Ari Koivula 80cd172f75 Clean up SAO encoding.
- Fixes a bug when pic->slice_sao_chroma == false.
2014-01-02 15:10:07 +02:00
Ari Koivula f1d8aae5b4 Clean up SAO encoding.
- Fixes a bug when pic->slice_sao_chroma == false.
2013-12-19 13:54:32 +02:00
Ari Koivula 8e2a7ef6ed Start implementing NxN prediction coding. 2013-12-18 14:55:05 +02:00
Ari Koivula 553bcdc324 Rewrite intra prediction mode coding to be simpler.
Should work exactly the same, but with the prediction mode selection done
separately from the binarization it's easier to see that the implementation
is correct.
2013-12-18 14:16:04 +02:00
Ari Koivula cf0d314d03 Clean up prediction mode coding.
This was done as preparation for adding NxN intra.

- Monochrome coding was removed as it's not part of the standard.
- No other functional changes.
2013-12-18 11:25:44 +02:00
Ari Koivula 8f610176d8 Add NxN part_mode coding. 2013-12-18 10:50:24 +02:00
Ari Koivula 3af65b8477 Add SAO searching and reconstruction for chroma.
One I frame and 99 P frames encoded with SAO off and on.
Processed 100 frames,    6693224 bits AVG PSNR: 30.7248 37.8978 37.8287
Processed 100 frames,    6295072 bits AVG PSNR: 32.2511 38.9373 38.9818
2013-11-12 11:55:39 +02:00
Ari Koivula 692ef3e9d9 Add guard against illegal SAO edge offsets. 2013-11-08 16:13:48 +02:00
Ari Koivula 43ae719ddb Tweak implementation of SAO reconstruction to be a bit more clear. 2013-11-08 15:04:06 +02:00
Ari Koivula f9061d322a Fix handling of incomplete LCU's in SAO reconstruction. 2013-11-06 23:09:56 +02:00
Ari Koivula 7a20e797be Fix incorrect SAO encoding. 2013-11-06 22:50:26 +02:00
Ari Koivula 3eccdc0d7b Move deblocking filtering to happen before SAO reconstruction.
-Re-enable deblocking.
2013-11-06 22:50:14 +02:00
Ari Koivula 98f2a1aedc Fix LCU borders in sao reconstruction. 2013-11-06 11:23:01 +02:00
Ari Koivula f21df00386 Save a copy of luma for sao. 2013-11-04 20:33:29 +02:00
Ari Koivula a57b938270 Add new module sao.
- Move sao-stuff not directly related to encoding to sao-module.
- Calculate sao for all LCUs before encoding any of them. This is in
  preparation to doing the reconstruction line at a time instead of
  LCU at a time.
2013-11-04 19:41:01 +02:00
Ari Koivula 03f2967899 Block based sao dead end.
This will never work because the adjacent blocks require the original values
of the boundary pixels to make category decisions.
2013-11-04 17:55:29 +02:00
Ari Koivula 31af7e3929 Fix sao offsets. Reconstruction kind of works. 2013-11-04 13:05:05 +02:00
Ari Koivula 66fe302520 Fix cabac context for sao. HM accepts encoded sao. 2013-11-04 13:03:51 +02:00
Ari Koivula b6c5c87fb7 Merge branch 'master' into sao
SAO needs to be coded before LCU data has been searched. Searching
has already been moved to happen before encoding in the master branch.

Conflicts:
	src/encoder.c
	src/picture.c
	src/picture.h
2013-11-04 12:44:01 +02:00
Ari Koivula 7bd0902727 Implement fast distortion estimation for sao.
Add function for blitting pixels from one buffer to another.

Several commits have been squashed to this one.
2013-11-04 12:37:37 +02:00
Marko Viitanen caa010a972 Changed scalinglist_process() to be done on frame level 2013-10-28 11:47:54 +02:00
Marko Viitanen ded4c18bf6 Fixed merge candidate duplicate removal and implemented skip mode selection 2013-10-25 15:39:19 +03:00
Ari Koivula e9819cbb5e Fix coding of sao chroma type idx. 2013-10-25 10:51:11 +03:00
Ari Koivula 3244c98b29 Fix sao cabac contexts.
According to HM implementation, sao luma and chroma use the same contexts.
2013-10-25 10:51:10 +03:00
Ari Koivula 291be9507b Start adding Sample Adaptive Offset capability. 2013-10-25 10:39:42 +03:00
Marko Viitanen e1f0274b51 Merge mode working on blocks > 8x8 2013-10-23 15:14:26 +03:00
Marko Viitanen 8883fb27aa Implemented skip/merge mode checking, disabled for now because it's not working 2013-10-22 17:40:55 +03:00
Marko Viitanen bb9d8ee9dd Fixed motion vector difference calculation 2013-10-22 16:53:18 +03:00
Marko Viitanen b20b583d9b Moved all residual/coeff functionality to encode_block_residual() 2013-10-22 16:27:50 +03:00
Marko Viitanen 0cce17453c Simplified chroma-coeff-coded-flag derivation on transform split 2013-10-22 13:04:58 +03:00
Marko Viitanen 4cec2963ac Fixed transform splitting to allow 64x64 inter blocks 2013-10-22 12:33:11 +03:00
Marko Viitanen bcb900371f Added top_coeff array to cu_info and implemented derivation logic 2013-10-22 12:09:18 +03:00
Marko Viitanen 2efcc12678 Fixed DC-filtering stride 2013-10-18 17:42:16 +03:00
Marko Viitanen bc9ddb64e5 Fixed luma reconstruction overflow/underflow 2013-10-18 16:54:11 +03:00
Marko Viitanen 927155de2b Set correct block residual bit -> fixes deblocking 2013-10-18 16:23:15 +03:00
Marko Viitanen c44f0ff540 Refactoring: all int16_t pixel info in intra to pixel typedef 2013-10-18 16:19:17 +03:00
Marko Viitanen dda53f48a7 Refactoring encoder transform/quant related functions, cu_info and picture 2013-10-18 11:41:52 +03:00
Marko Viitanen db266e74ff Added merge mode selection (NOT WORKING!) and a function to get candidates 2013-10-18 11:39:32 +03:00
Marko Viitanen 96a0f03298 Refactoring encoder.c in preparation for adding merge-mode 2013-10-18 11:39:31 +03:00
Ari Koivula 202aec69f2 Change more 8-bit pixels to pixel typedef. 2013-10-15 16:02:06 +03:00
Ari Koivula b8dd664026 Move all 8-bit pixels into new pixel typedef. 2013-10-15 14:36:30 +03:00
Marko Viitanen 7a53bddead Fixed inter deblocking by setting correct CU residual info on transform split 2013-10-10 17:47:08 +03:00
Marko Viitanen 1b2b3c19bb Added option to enable residual coding skip when residual under threshold 2013-10-10 16:31:00 +03:00
Marko Viitanen 3d8e14f58b Fixed dequantization of inter-blocks 2013-10-10 15:22:25 +03:00
Marko Viitanen bc815e8cd2 Fixed scan_idx selection on quantization 2013-10-10 14:59:20 +03:00
Marko Viitanen 82eca02ec8 Fixed deblocking condition on residual and deblocking disabling 2013-10-09 17:39:26 +03:00
Marko Viitanen c9cf75775b Deblocking fix: store block residual status and use it in deblocking 2013-10-09 17:39:23 +03:00
Marko Viitanen 2b5159d8ab Bugfix: residual coding almost working 2013-10-09 17:39:07 +03:00
Marko Viitanen bcd29cba5c Refactoring: residual related variable renaming and code styling 2013-10-09 11:01:16 +03:00
Marko Viitanen ef0bea32e1 Merge branch 'master' into inter_residual
Conflicts:
	src/encoder.c
2013-10-08 15:04:31 +03:00
Marko Viitanen ac0db59408 Renamed variable to fix a typo 2013-10-08 14:49:02 +03:00
Marko Viitanen 2d38612e9a Inter deblocking changes, not working! 2013-10-02 18:09:22 +03:00
Marko Viitanen 192b077dba Modified residual coding to allow inter block data (BUGGY!) 2013-10-01 10:54:10 +03:00
Ari Koivula 9ad8bf2915 Refactor: encoder.c full cleanup. 2013-09-28 23:31:26 +03:00
Ari Koivula aee54cdcfa Refactor: encoder.c fix [] 2013-09-28 23:29:26 +03:00
Ari Koivula 36119985b5 Refactor: encoder.c variable renaming. 2013-09-28 20:27:36 +03:00
Ari Koivula 7e6aa31c6f Refactor: encoder.h renaming and cleanup. 2013-09-28 20:20:15 +03:00
Ari Koivula 04f1dde8a1 Fix overwriting of motion vectors during search.
- Makes everything besides search to only use the bottom most layer of the
  picture.cu_array structure.
2013-09-25 16:21:51 +03:00
Marko Viitanen 91ff438238 Disabled deblocking filter and changed encoder to use P-slices after the first 2013-09-25 15:52:55 +03:00
Ari Koivula e5cced6b4a Move _CRT_SECURE_NO_WARNINGS to property sheet. 2013-09-24 21:31:48 +03:00
Ari Koivula 6dd049a238 Refactor: picture.h remaining renames. 2013-09-20 12:49:44 +03:00
Ari Koivula 8d5dd67f76 Refactor: Change name of CU_info.CU to cu_array. 2013-09-20 12:47:53 +03:00
Ari Koivula d09e2bd214 Refactor: picture.c/.h full cleanup. 2013-09-20 11:15:18 +03:00
Ari Koivula f750c24948 Refactor: nal.c/.h full cleanup.
- Move constant from the signature of calc_checksum into a macro.
2013-09-19 16:03:02 +03:00
Ari Koivula adf619f9dd Refactor: Update file comments. 2013-09-18 18:01:20 +03:00
Ari Koivula de447ee18b Refactoring: intra.h renaming. 2013-09-18 15:13:45 +03:00
Marko Viitanen a018567854 Refactor: picture.h renaming. 2013-09-18 14:58:46 +03:00
Marko Viitanen 0bf4f65a55 Refactor: encoder.h renaming 2013-09-18 14:49:01 +03:00
Marko Viitanen 0a6c38a8e9 Refactor: context.h renaming 2013-09-18 14:33:47 +03:00
Ari Koivula 81cb6264ab Refactor: cabac.h renaming. 2013-09-18 14:06:45 +03:00
Ari Koivula 44a5498e30 Reorder includes to avoid hidden dependencies.
- Includes of global.h have been moved to headers because most headers
  require stdint.h.
- Includes required by the header have been moved from the .c to the header.
- Spaces have been added between includes to distinguish classes of includes.
2013-09-18 12:29:23 +03:00
Marko Viitanen c87d3870ce Fixed inter_get_mv_cand and added new define ENABLE_TEMPORAL_MVP 2013-09-18 10:15:05 +03:00
Marko Viitanen 3ff3318980 Fixed bug(s) in inter_recon() 2013-09-16 17:15:54 +03:00
Marko Viitanen 6a4011a90a Added motion vector candidate selector 2013-09-16 16:51:13 +03:00
Marko Viitanen 8e776366dc Added (basic) motion vector prediction 2013-09-16 16:37:24 +03:00
Marko Viitanen 182381a23c Merge branch 'fador' of Z:/Work/HEVC_encoder
Conflicts:
	src/encoder.c
2013-09-12 19:15:05 +03:00
Marko Viitanen beef362624 Implemented inter reconstruction inter_recon() 2013-09-12 18:50:11 +03:00
Marko Viitanen 10485ab51a One reference picture is now kept on encoder->ref list 2013-09-12 17:38:08 +03:00
Marko Viitanen 81f584742c Added picture_init() and changed cur_pic to pointer in encoder_input struct
Also contains few inter coding changes
2013-09-12 16:28:40 +03:00
Marko Viitanen 8d44f29d89 Fixed temporal_id to be always zero 2013-09-12 15:45:42 +03:00
Marko Viitanen b7c074f8c3 Fixed temporal_id to be always zero 2013-09-12 15:26:03 +03:00
Ari Koivula 7da00bc51a Merge branch 'funny-sizes' 2013-09-11 20:10:28 +03:00
Ari Koivula 116d5b14be Fix handling of non factor of 8 resolution.
- Reimplement bit filling routines to copy bits form the edge, instead of
  using a constant.

- Add real_width and real_height to encoder_input and store the actual input
  resolution in them instead of in encoder_input.width and height. This fixed
  a crash. It's also clearer.

- Correctly scale conf_win offsets to be in terms of chroma.
2013-09-11 20:02:38 +03:00
Marko Viitanen 6ede4c60df Merge branch 'master' of Z:/Work/HEVC_encoder into fador
Conflicts:
	src/context.c
	src/search.c
2013-09-11 14:38:23 +03:00
Ari Koivula 7cd57087da Fix string constant. 2013-09-11 00:31:13 +03:00
Ari Koivula 850e8b2586 Add filling out the blanks for reading non multiple of 8 resolutions. 2013-09-09 22:19:16 +03:00
Ari Koivula 2426a4bc1f Move file reading to encoder module. 2013-09-09 21:19:49 +03:00
Ari Koivula 2b9e2485db Add handling of resolutions that are not multiples of the smallest block size.
- When resolution is not a multiple of 8, increase the size of the picture.

- Add conformance window information to the SPS NAL. Thested to work in all
  dimensions with YUVplayer.
2013-09-09 20:43:14 +03:00
Marko Viitanen d6e51374e3 Added new context for root cbf, fixed a bug in MVD coding 2013-09-09 17:37:49 +03:00
Ari Koivula 5acb280407 Change "ToDo" to "TODO".
Visual Studio recognized only TODO.
2013-09-09 14:22:53 +03:00
Marko Viitanen dce892dce8 Merge branch 'master' of Z:/Work/HEVC_encoder into fador
Conflicts:
	.gitignore
2013-09-09 12:11:09 +03:00
Ari Koivula 2b94b9db4c Rename NAL type names to the ones used in the standard. 2013-09-09 11:04:09 +03:00