Pauli Oikkonen
db1e475e02
Use i32 instead of i8 for x/y offsets
...
Doesn't matter too much, because this number isn't used in SIMD
computation, only as a memory reference offset.
2019-08-07 16:35:24 +03:00
Pauli Oikkonen
12de466ef5
Reimplement non-band SAO color reconstruction in AVX2
...
Streamline things to work on 32 pixels at once instead of 8
2019-08-07 16:35:24 +03:00
Pauli Oikkonen
e8bff99329
Redo the SAO_TYPE_BAND subsection of AVX2 SAO color reconstruction
...
Vectorize it all, hope this helps with perf
2019-08-07 16:35:24 +03:00
Pauli Oikkonen
7b5dffa855
Implement calc_sao_offset_array in AVX2
...
To be efficient, the AVX2 color reconstruction algorithm will need
offsets in byte, not dword, arrays. This is completely specific to 8-bit
pixels and the function signature is fundamentally distinct from the
generic algorithm, so it's better to not strategize SAO offset array
calculation.
2019-08-07 16:35:24 +03:00
Pauli Oikkonen
29563b7039
Make kvz_calc_sao_offset_array more obvious
...
Name temporary values from array lookups etc that are referred multiple
times to, to make the behavior of the mechanism more transparent. Define
all the constant values at the beginning of the function and declare as
const.
2019-08-07 16:35:24 +03:00
Pauli Oikkonen
08881f5e9b
(TEMP) (TODO) (whatever) Avoid compiler warnings
...
I want the CI to not crash on its -Wall -Werror, but instead to actually
build the thing and report me about actual memory errors etc
2019-08-07 16:35:24 +03:00
Pauli Oikkonen
c18adc5ee0
Redo sao_band_ddistortion_avx2
...
Avoid branching and do the entire thing on 32 pixels at once in YMMs.
Also make the sao_bands function parameter const.
2019-08-07 16:35:24 +03:00
Pauli Oikkonen
2827c3e3ab
Make calc_sao_bands less opaque
2019-08-07 16:35:24 +03:00
Pauli Oikkonen
1bb9a079a8
Fix indentation
2019-08-07 16:35:24 +03:00
Reima Hyvönen
7bc959c7c5
3 sao functions are now working
2019-08-07 16:35:24 +03:00
Reima Hyvönen
0e0f2d3490
made to clear sum vector after it has been set to memory
2019-08-07 16:35:24 +03:00
Reima Hyvönen
f146de7acb
removed some variables to prevent memory losses
2019-08-07 16:35:24 +03:00
Reima Hyvönen
247c3a7a71
conversed gined to unsigned int
2019-08-07 16:35:24 +03:00
Reima Hyvönen
ac5c216974
Some more memory error preventing to sao_edge_ddistortion_avx2
2019-08-07 16:35:24 +03:00
Reima Hyvönen
3fb1cbca35
more editing sao_edge_ddistortion_avx2
2019-08-07 16:35:24 +03:00
Reima Hyvönen
afbb6fb960
some more modifications to sao_edge_ddistortion_avx2 to prevent memory failures
2019-08-07 16:35:24 +03:00
Reima Hyvönen
3496a57f7a
Edited sao_edge_ddistortion_avx2 to avoid memory overflow
2019-08-07 16:35:24 +03:00
Reima Hyvönen
267ba1d6ce
Modified sao_band_ddistortion_avx2
2019-08-07 16:35:24 +03:00
Reima Hyvönen
e70663b245
added some sub commands to avoid memory read errors
2019-08-07 16:35:24 +03:00
Reima Hyvönen
59dfb4570c
Converted some loads to load int8_t instead ints
2019-08-07 16:35:24 +03:00
Reima Hyvönen
8b253209a8
Found false address load from calc_sao_edge_dir. Should now work like generic
2019-08-07 16:35:24 +03:00
Reima Hyvönen
50e0a47b7a
Took away __restrict
2019-08-07 16:35:24 +03:00
Reima Hyvönen
8a39eb674e
Removed c-variable from calc_sao_edge_dir_avx2
2019-08-07 16:35:24 +03:00
Reima Hyvönen
bc0a36830d
Clerified some 6 pixel loads
2019-08-07 16:35:24 +03:00
Reima Hyvönen
1a8b211e05
Added break to line 170
2019-08-07 16:35:24 +03:00
Reima Hyvönen
d05e750ebe
Added some switches to prevent segmentation fault from reading
2019-08-07 16:35:24 +03:00
Reima Hyvönen
203580047d
Defined some AVX functions
2019-08-07 16:35:24 +03:00
Reima Hyvönen
c884c738b1
Updated some commands to match the standard
2019-08-07 16:35:24 +03:00
Reima Hyvönen
b412ed2f59
Removed some setr and used loads calc_sao_edge_dir_avx2
2019-08-07 16:35:24 +03:00
Reima Hyvönen
c6cc063534
converted some hadd operations at calc_sao_edge_dir_avx2 to cast and extract
2019-08-07 16:35:24 +03:00
Reima Hyvönen
47ac109b10
optimated some sao_reconstruct_color_avx2 when sao->type == SAO_TYPE_BAND
2019-08-07 16:35:24 +03:00
Reima Hyvönen
96dc60a1ed
first working optimation
2019-08-07 16:35:24 +03:00
Reima Hyvönen
c148aff9fb
Some optimation done to function sao_reconstruct_color_avx2
2019-08-07 16:35:24 +03:00
Reima Hyvönen
bf16ba6cc4
Remade sao_edge_ddistortion_avx2 and calc_sao_edge_dir_avx2
2019-08-07 16:35:24 +03:00
Reima Hyvönen
79dc39a676
Some editing for sao_edge_ddistortion_avx2
2019-08-07 16:35:24 +03:00
Reima Hyvönen
06ee52924e
some reconst done to calc_sao_edge_dir_avx2
2019-08-07 16:35:24 +03:00
Reima Hyvönen
5fbc65d823
reconst optimation doesn't work yet
2019-08-07 16:35:24 +03:00
Reima Hyvönen
d29f834a69
Remove useless function
2019-08-07 16:35:24 +03:00
Reima Hyvönen
a232a12160
calc_sao_edge_dir_avx2 updated
2019-08-07 16:35:24 +03:00
Reima Hyvönen
b1febc02a5
sao_edge_ddistortion_avx2 now working proberly
2019-08-07 16:35:24 +03:00
Reima Hyvönen
cd6092a1ec
Still too much bits, looking for where they appear
2019-08-07 16:35:24 +03:00
Reima Hyvönen
7853be8eeb
Incomple optimation
2019-08-07 16:35:24 +03:00
Marko Viitanen
dfa5621024
Intrapred cleanup
2019-07-16 14:23:10 +03:00
Ari Lemmetti
40609aa865
Add missing headers to Makefile.am
2019-07-12 19:15:51 +03:00
Ari Lemmetti
5db3a78499
Bump versions for release 1.3
2019-07-09 22:09:32 +03:00
Ari Lemmetti
d513ab1999
Add missing newline
2019-07-09 21:06:05 +03:00
Ari Lemmetti
4967072625
Do not bypass search on skip cu if early_skip is not enabled
2019-07-09 20:20:12 +03:00
Ari Lemmetti
b20992a9f3
Rename functions more descriptive
2019-07-09 20:20:11 +03:00
Ari Lemmetti
a348a0ec23
Fix transform depth in early skip
2019-07-09 20:05:48 +03:00
Pauli Oikkonen
8d48bee180
Tidy fast coeff cost code
2019-07-09 18:01:54 +03:00
Pauli Oikkonen
201a43b08e
Clean up the RD-estimation code
2019-07-09 18:01:54 +03:00
Pauli Oikkonen
b111df5073
Create preliminary version of improved cost estimator
2019-07-09 18:01:54 +03:00
Ari Lemmetti
be08a87d94
Add missing parameter max-merge to the help message
2019-07-09 16:28:46 +03:00
Ari Lemmetti
d0bb9b4a6d
Add parameter max-merge to presets
2019-07-09 16:26:03 +03:00
Ari Lemmetti
4097331fd6
Early skip
2019-07-09 15:59:31 +03:00
Marko Viitanen
10d850e98a
Use index_offset in intra angular and change the offset to width+1
2019-07-08 14:23:19 +03:00
Marko Viitanen
3d1fa2a9cf
Fixing angular intra prediction reference pixels
2019-07-08 14:00:02 +03:00
Marko Viitanen
0656c54cab
Fix some problems with reference pixels in angular intra prediction kvz_angular_pred_generic()
2019-07-05 15:54:51 +03:00
Marko Viitanen
89ca2d4ba1
Use correct type for modedisp2sampledisp array
2019-07-05 14:12:10 +03:00
Marko Viitanen
2e8a0d08f9
Fix mvp_idx_model initialization and use
2019-07-05 14:11:29 +03:00
Joose Sainio
977e885ea2
Fix issue with gop=0 introduced in 1c36f68d0c
2019-07-05 12:57:27 +03:00
Marko Viitanen
c6217e236f
Enable 4-tap filtering for the intra angular
2019-07-04 16:26:10 +03:00
Marko Viitanen
cda6d951c0
Change DCT arrays back to 8-bit -> some frames are now correct
2019-07-04 15:59:10 +03:00
Marko Viitanen
8280bd3217
Add channel info to angular_pred and fix the displacement tables.
...
Also includes 4-tap intra filtering code commented out
2019-07-04 09:35:47 +03:00
Marko Viitanen
5e4369d6b0
Fix the kvz_cabac_encode_aligned_bins_ep function -> cabac coding now correct
2019-07-03 15:55:52 +03:00
Marko Viitanen
3fad4b0a98
Disable kvz_cabac_encode_aligned_bins_ep for now and add a ToDo message
2019-07-03 15:44:35 +03:00
Sami Ahovainio
ce1e67cc3a
Modified header flags to match VTM commit b9080ff45bec368c44f0c43a32dcd6804ef9f5d6
2019-07-01 13:58:15 +03:00
Sami Ahovainio
3863064d90
Fixed bugs in split decision and coefficient coding.
2019-07-01 13:00:43 +03:00
Mikko Pitkänen
a7f09c8114
Merge branch 'threadwrapper'
2019-06-24 16:54:59 +03:00
Sami Ahovainio
db5c0230e5
Fixed coefficient sign hiding
2019-06-20 16:26:01 +03:00
Sami Ahovainio
b51254cafd
Fixed significant coefficient group context calculation
2019-06-20 15:47:13 +03:00
Sami Ahovainio
5e0bea962c
Fixed split context decision
2019-06-20 15:30:49 +03:00
Sami Ahovainio
12322144f0
Removed debug print from context.c
2019-06-20 15:18:22 +03:00
Sami Ahovainio
3a9800d07d
Fixed coefficient coding. Fixed headers to match VTM commit e65075531471a68632bc9252d607655a0feeabc6
2019-06-20 14:43:03 +03:00
Mikko Pitkänen
3dd606ce2e
Add new threadwrapper
2019-06-18 18:45:45 +03:00
Sami Ahovainio
2c78aa0642
Fixes to coeff coding.
2019-06-13 12:01:29 +03:00
Joose Sainio
c94077d15e
remove hardcoded value
2019-06-12 14:37:41 +03:00
Joose Sainio
ac68c8444d
remove negation that wasn't supposed to be there
2019-06-12 14:35:24 +03:00
Joose Sainio
5851dcc3be
missing negation
2019-06-12 14:08:18 +03:00
Joose Sainio
1c36f68d0c
Fix owf>=9 gop=8 and add test to catch such problem in future
2019-06-12 14:04:41 +03:00
Sami Ahovainio
3564b4829e
Fixed split context decision. Modified intra mode initialization to match VTM version aa76fc5c04cf43390f43d63f9977bea8ee31997a.
2019-06-12 12:59:16 +03:00
Sami Ahovainio
a8a53e15b5
Fixed headers to match VTM commit aa76fc5c04cf43390f43d63f9977bea8ee31997a. Added multi_ref_line flag coding.
2019-06-07 13:37:45 +03:00
Ari Lemmetti
933ff6ed55
Merge branch 'set-qp-in-cu-fix'
2019-06-07 09:01:03 +03:00
Sami Ahovainio
8d2581e58c
Fixed issue with kvz_go_rice_par_abs where passing a unsigned argument caused MIN function to return wrong value. Modified coefficient coding to match VTM 5.0. Some issues still remain.
2019-06-05 15:57:18 +03:00
Sami Ahovainio
367f1b2129
Fixed splitting bug caused by wrong values in the headers. Fixed header flags to match VTM commit 5703e81b2de677d976ec15423f5768b17619ba6a
2019-06-05 11:21:02 +03:00
Sami Ahovainio
76d56290ed
Fixed VUI header writing. Fixed debug prints of NAL headers and rbsp_stop_one_bit.
2019-05-31 11:13:11 +03:00
Ari Lemmetti
c6da839002
Set lcu sqrt lambda according to lcu lambda instead of frame lambda when ROI is used
2019-05-29 18:32:10 +03:00
Marko Viitanen
8282a18c36
Fixed headers and NAL writing to match the latest VTM master 988c22cbb9c58584cac3ef0ec7794cafbea6dfd6
2019-05-29 16:18:35 +03:00
Sami Ahovainio
4768ba0628
Minor fixes to header writing. Added contexts for multi_ref_line and BDPCM. Functions added for writing both in bitstream, but they are both disabled for now.
2019-05-29 13:00:19 +03:00
Sami Ahovainio
3339e12169
Fixed some header flags
2019-05-27 09:56:56 +03:00
Ari Lemmetti
9339845e8b
Set QP completely at CU level as the name '--set-qp-in-cu' implies
...
-Move slice delta QP to CU level when using --set-qp-in-cu
-Separate functionality from roi
2019-05-24 20:38:39 +03:00
Pauli Oikkonen
081d16fc33
Fix intrinsics that may be missing on some systems
...
Create a header to collect all the workarounds for missing intrinsics
in one place
2019-05-23 19:59:40 +03:00
Sami Ahovainio
5b46fbd878
Added multi_ref_idx variable for intra coding (is 0 throughout the code for now). Modified prediction flag writing. Chroma pred flag remains unchanged (ToDo). Added bitstream debug printing on VERBOSE mode.
2019-05-21 12:28:05 +03:00
Sami Ahovainio
ed4e218702
Updated coefficient coding to match VTM 5.0
2019-05-13 15:30:43 +03:00
Sami Ahovainio
504c3dfd1b
Modified the headers to match current VTM headers
2019-05-07 16:30:06 +03:00
Marko Viitanen
30a8a7b97c
WIP fixing the last significant xy coding
2019-05-07 15:01:02 +03:00
Pauli Oikkonen
87a9208db8
Eliminate cvtsi64_si128 intrinsic
...
Apparently it'll cause Win32 builds to break because it emits the movq
instruction or something..
2019-04-17 16:30:40 +03:00
Pauli Oikkonen
7175d20bb2
Still include stdint.h for non-vector builds
2019-04-15 19:36:01 +03:00
Pauli Oikkonen
1315c7e2b0
Do not compile any vector code for non-SSE4/AVX2 builds
2019-04-15 19:10:48 +03:00
Pauli Oikkonen
f5f70e7bc5
Merge branch 'sad-optimization'
2019-04-15 19:02:01 +03:00
Jan Beich
85f46e17a9
Detect AltiVec via elf_aux_info() on FreeBSD 12+
2019-04-01 13:08:04 +00:00
Jan Beich
82486255da
Simplify AltiVec detection on Linux
2019-04-01 13:08:04 +00:00
Marko Viitanen
1546acfdb9
New NAL unit IDs and header changes
2019-03-28 10:11:36 +02:00
Marko Viitanen
36eab9c170
New cabac context models with "rate"
2019-03-27 12:38:19 +02:00
Marko Viitanen
3bdc8ac8d3
Fix intra_chroma_pred_mode and cbf contexts
2019-03-26 09:10:09 +02:00
Marko Viitanen
d15f58517f
Changed intra coding to use 6 MPM, implemented merge sort and MPM selection
2019-03-20 15:20:31 +02:00
Marko Viitanen
1081336868
Updated intra pred mode init values
2019-03-20 15:18:32 +02:00
Marko Viitanen
f3acd245ae
New cabac coding function: kvz_cabac_encode_trunc_bin
2019-03-20 15:17:54 +02:00
Marko Viitanen
80d6e4bf05
New split flag calculations
2019-03-20 09:07:58 +02:00
Marko Viitanen
8c84348010
New entropy bit table
2019-03-20 09:07:22 +02:00
Marko Viitanen
2d0348aa6d
New context models
2019-03-20 09:06:57 +02:00
Marko Viitanen
052080747e
New CABAC functions
2019-03-20 09:06:26 +02:00
Marko Viitanen
20667fdba6
Update header bits to VTM 4.0+
2019-03-11 14:02:12 +02:00
Pauli Oikkonen
6d43759604
Create a border-respecting 32-wide AVX hor_sad
2019-03-07 18:01:22 +02:00
Pauli Oikkonen
f218cecb38
Remove offending hor_sad_avx2_w32 function
...
Consider possibly creating a non-offending AVX2 version instead, the
way hor_sad_sse41_w32 works. Or maybe there's more essential work to
do.
2019-03-05 22:51:41 +02:00
Pauli Oikkonen
df2e6c54fd
4-unroll hor_sad_sse41_arbitrary
...
This may not increase perf though because it's so rarely used
function, so keeping icache footprint may be more essential...
2019-03-05 22:45:23 +02:00
Pauli Oikkonen
448eacba7b
Avoid overreading block borders in hor_sad_sse41_arbitrary
2019-03-05 22:34:50 +02:00
Eemeli Kallio
c159e275b7
Merge branch 'max_merge'
2019-03-05 14:39:03 +02:00
Pauli Oikkonen
41f51c08c4
Avoid overrunning buffer in hor_sad_sse41_w32
2019-03-01 15:37:38 +02:00
Pauli Oikkonen
bcd9879359
Include quant coeff range check in non-scaling list execution path too
2019-02-27 17:26:44 +02:00
Pauli Oikkonen
24e6363f64
Remove the kvz_quant_avx2 wrapper function
2019-02-27 16:32:58 +02:00
Pauli Oikkonen
748820f3c5
Eliminate unnecessary loading of coeffs if scaling lists are off
2019-02-27 16:26:35 +02:00
Pauli Oikkonen
5994350f40
Allow quant_flat_avx2 to be used with scaling lists on
2019-02-27 16:25:59 +02:00
Eemeli Kallio
7f4e0acf41
Added check if max-merge is out of bounds
2019-02-19 13:53:42 +02:00
Pauli Oikkonen
9b0e079262
Use SSE instructions for 64-bit SADs instead of MMX
...
VC++ seems to choke on MMX instructions
2019-02-18 20:13:33 +02:00
Pauli Oikkonen
d8b8923028
Add LGPL notices to reg_sad headers
2019-02-18 17:52:47 +02:00
Eemeli Kallio
2a40560888
some variables to const
2019-02-12 11:24:10 +02:00
Eemeli Kallio
8f8e7bb53c
Added possibility to reduce number of maximum number of merge candidates.
2019-02-12 09:21:03 +02:00
Marko Viitanen
1165219842
Update PTL, SPS ext and SPS flags to match VTM 4rc1
2019-02-07 10:00:04 +02:00
Pauli Oikkonen
770db825b9
Create hor_sad_w8 and w4 epol mask the way w16 works
2019-02-06 19:34:26 +02:00
Pauli Oikkonen
aa19bcac8a
Avoid branching in creating shuffle mask in hor_sad_w16
2019-02-06 18:58:46 +02:00
Pauli Oikkonen
2d05ca8520
Remove width from constant-width hor_sad func params
...
They should kinda know it already
2019-02-04 20:41:40 +02:00
Pauli Oikkonen
57db234d95
Move 32-wide SSE4.1 hor_sad to picture-sse41.c
...
It's not used by picture-avx2.c that also includes the header, so
it should not be in the header
2019-02-04 20:41:40 +02:00
Pauli Oikkonen
dd7d989a39
Implement 32-wide hor_sad on AVX2
2019-02-04 20:41:40 +02:00
Pauli Oikkonen
ff70c8a5ec
Utilize horizontal SAD functions for SSE4.1 as well
2019-02-04 20:41:40 +02:00
Pauli Oikkonen
f5ff4db01f
4-wide hor_sad border agnostic
2019-02-04 20:41:40 +02:00
Pauli Oikkonen
35e7f9a700
Fix hor_sad w8 to work with both borders
2019-02-04 20:41:40 +02:00
Pauli Oikkonen
836783dd6e
Use hor_sad_w32 for both left and right borders
2019-02-04 20:41:40 +02:00
Pauli Oikkonen
69687c8d24
Modify hor_sad_sse41_w16 to work over left and right borders
2019-02-04 20:41:40 +02:00
Pauli Oikkonen
51c2abe99a
Modify image_interpolated_sad to use kvz_hor_sad
2019-02-04 20:41:40 +02:00
Pauli Oikkonen
1e0eb1af30
Add generic strategy for hor_sad'ing an non-split width block
2019-02-04 20:41:40 +02:00
Pauli Oikkonen
686fb2c957
Unroll arbitrary-width SSE4.1 hor_sad by 4
2019-02-04 20:41:40 +02:00
Pauli Oikkonen
768203a2de
First version of arbitrary-width SSE4.1 hor_sad
2019-02-04 20:41:40 +02:00
Pauli Oikkonen
ccf683b9b6
Start work on left and right border aware hor_sad
...
Comes with 4, 8, 16 and 32 pixel wide implementations now, at some point
investigate if this can start to thrash icache
2019-02-04 20:41:40 +02:00
Pauli Oikkonen
760bd0397d
Pad the image buffer by 64 bytes from both ends
...
This will be necessary for an efficient and straightforward
implementation of hor_sad for blocks over 16 pixels wide, because they
cannot use the shuffle trick because inter-lane shuffling is so hard to
do
2019-02-04 20:41:40 +02:00
Pauli Oikkonen
c36482a11a
Fix bug in 24-wide SAD
...
*facepalm*
2019-02-04 20:41:40 +02:00
Pauli Oikkonen
f781dc31f0
Create strategy for ver_sad
...
Easy to vectorize
2019-02-04 20:41:40 +02:00
Pauli Oikkonen
ca94ae9529
Handle extrapolated blocks with unmodified width using optimized_sad pointer
2019-02-04 20:41:40 +02:00
Pauli Oikkonen
91b30c7064
Tidy up kvz_image_calc_sad
2019-02-04 20:41:40 +02:00
Pauli Oikkonen
9db0a1bcda
Create get_optimized_sad func for SSE4.1
2019-02-04 20:41:40 +02:00
Pauli Oikkonen
91380729b1
Add generic get_optimized_sad implementation
...
NOTE: To force generic SAD implementation on devices supporting
vectorized variants, you now have to override both get_optimized_sad
and reg_sad to generic (only overriding get_optimized_sad on AVX2
hardware would just run all SAD blocks through reg_sad_avx2). Let's
see if there's a more sensible way to do it, but it's not trivial.
2019-02-04 20:41:40 +02:00
Pauli Oikkonen
45f36645a6
Move choosing of tailored SAD function higher up the calling chain
2019-02-04 20:41:40 +02:00
Pauli Oikkonen
91cb0fbd45
Create strategy for directly obtaining pointer to constant-width SAD function
2019-02-04 20:41:40 +02:00
Pauli Oikkonen
94035be342
Unify unrolling naming conventions
2019-02-04 20:41:40 +02:00
Pauli Oikkonen
517a4338f6
Unroll SSE SAD for 8-wide blocks to process 4 lines at once
2019-02-04 20:41:40 +02:00
Pauli Oikkonen
0f665b28f6
Unroll arbitrary width SSE4.1 SAD by 4
2019-02-04 20:41:40 +02:00
Pauli Oikkonen
cbca3347b5
Unroll 64-wide AVX2 SAD by 2
2019-02-04 20:41:40 +02:00
Pauli Oikkonen
84cf771dea
Unroll 32 and 16 wide SAD vector implementations by 4
2019-02-04 20:41:40 +02:00
Pauli Oikkonen
5df5c5f8a4
Cast all pointers to const types in vector SAD funcs
...
Also tidy up the pointer arithmetic
2019-02-04 20:41:40 +02:00
Pauli Oikkonen
a711ce3df5
Inline fixed width vectorized SAD functions
2019-02-04 20:41:40 +02:00
Pauli Oikkonen
6504145cce
Remove 16-pixel wide AVX2 SAD implementation
...
At least on Skylake, it's noticeably slower than the very simple
version using SSE4.1
2019-02-04 20:41:40 +02:00
Pauli Oikkonen
4cb371184b
Add SSE4.1 strategy for 24px wide SAD and an AVX2 strategy for 16
2019-02-04 20:41:40 +02:00
Pauli Oikkonen
796568d9cc
Add SSE4.1 strategies for SAD on widths 4 and 12 and AVX2 strategies for 32 and 64
2019-02-04 20:41:40 +02:00
Pauli Oikkonen
4d45d828fa
Use constant-width SSE4.1 SAD funcs for AVX2
2019-02-04 20:41:40 +02:00
Pauli Oikkonen
2eaa7bc9d2
Move SSE4.1 SAD functions to separate header
2019-02-04 20:41:40 +02:00
Pauli Oikkonen
d2db0086e1
Create constant width SAD versions for 8 and 16 pixels
2019-02-04 20:41:40 +02:00
Pauli Oikkonen
a13fc51003
Include a blank AVX2 strategy registration function even in non-AVX2 builds
2019-02-04 19:52:24 +02:00
Pauli Oikkonen
d55414db66
Only build AVX2 coeff encoding when supported
...
..whoops
2019-02-04 19:34:30 +02:00
Pauli Oikkonen
3fe2f29456
Merge branch 'encode-coeffs-avx2'
2019-02-04 18:52:31 +02:00
Pauli Oikkonen
722b738888
Fix more naming issues
2019-02-04 16:05:43 +02:00
Pauli Oikkonen
e26d98fb75
Rename a couple variables and add crucial comments
2019-02-04 15:57:07 +02:00
Pauli Oikkonen
f186455619
Move encode_last_significant_xy out of strategy modules
...
It's the exact same in both AVX2 and generic, and does not seem to
be worth even trying to vectorize
2019-02-04 14:55:41 +02:00
Pauli Oikkonen
3f7340c932
Fine-tune pack_16x16b_to_16x2b
...
Avoid mm_set1 operation when it's possible to create the constant with
one bit-shift operation from another instead. Thanks Intel for
3-operand instruction encoding!
2019-02-04 14:44:47 +02:00
Pauli Oikkonen
314f5b0e1f
Rename 16x2b cmpgt function, comment it better, optimize it slightly
...
Eliminate an unnecessary bit masking to make it even more messy
2019-02-04 14:44:32 +02:00
Pauli Oikkonen
d8ff6a6459
Fix _andn_u32 to work on old Visual Studio
2019-02-01 15:34:42 +02:00
Pauli Oikkonen
26e1b2c783
Use (u)int32_t instead of (unsigned) int in reg_sad_sse41
2019-01-10 14:37:04 +02:00
Pauli Oikkonen
3a1f2eb752
Prefer SSE4.1 implementation of SAD over AVX2
...
It seems that the 128-bit wide version consistently outperforms the
256-bit one
2019-01-10 13:48:55 +02:00
Pauli Oikkonen
9b24d81c6a
Use SSE instead of AVX for small widths
...
Highly dubious if this will help performance at all
2019-01-07 20:12:13 +02:00
Pauli Oikkonen
b2176bf72a
Optimize SSE4.1 version of SAD
...
Make it use the same vblend trick as AVX2. Interestingly, on my test
setup this seems to be faster than the same code using 256-bit AVX
vectors.
2019-01-07 19:40:57 +02:00
Pauli Oikkonen
887d7700a8
Modify AVX2 SAD to mask data by byte granularity in AVX registers
...
Avoids using any SAD calculations narrower than 256 bits, and
simplifies the code. Also improves execution speed
2019-01-07 18:53:15 +02:00
Pauli Oikkonen
7585f79a71
AVX2-ize SAD calculation
...
Performance is no better than SSE though
2019-01-07 16:26:24 +02:00
Pauli Oikkonen
ab3dc58df6
Copy SAD SSE4.1 impl to AVX2
2019-01-03 18:31:57 +02:00
Pauli Oikkonen
45ac6e6d03
Tidy pack_16x16b_to_16x2b comments
2019-01-03 16:37:05 +02:00
Ari Lemmetti
cd818db724
Add missing quantization and residual in cost calculation (inter rd=2).
2018-12-21 15:55:29 +02:00
Pauli Oikkonen
016eb014ad
Move packing 16x16b -> 16x2b into separate function
2018-12-20 10:51:44 +02:00
Ari Lemmetti
b234897e8a
Fix smp and amp blocks in fme and revert previous change.
...
Filter 8x8 (sub)blocks even with 8x4, 4x8, 16x4, 4x16 etc.
Calculate SATD on the 8x4, ... part
2018-12-19 21:30:53 +02:00
Pauli Oikkonen
9aaa6f260d
Fixes to enable portability
2018-12-18 20:42:09 +02:00
Pauli Oikkonen
2fdbbe9730
Move CG reordering code from quant-avx2 to shared header
2018-12-18 19:42:18 +02:00
Pauli Oikkonen
d02207306d
Create a header file for shared AVX2 code
2018-12-18 19:41:09 +02:00
Pauli Oikkonen
361bf0c7db
Precompute >=2 coeff encoding loop with 2-bit arithmetic
...
Who needs 16x16b vectors when you can do practically the same with
16x2b pseudovectors in 32-bit general purpose registers!
2018-12-18 19:41:09 +02:00
Pauli Oikkonen
940b0e9e6a
Require BMI2 for AVX2 build
...
Any processor implementing AVX2 should also implement BMI2
2018-12-18 19:41:09 +02:00
Pauli Oikkonen
f66cb23d5b
Optimize greater1 encoding loop
...
Calculating the c1 variable need not be a serial operation!
2018-12-18 19:41:09 +02:00
Pauli Oikkonen
8c8b791c35
Vectorize kvz_context_get_sig_ctx_inc
2018-12-18 19:41:09 +02:00
Pauli Oikkonen
033261eb74
Eliminate two branches using bit magic
2018-12-18 19:41:09 +02:00
Pauli Oikkonen
c4434e8d04
Scan CG's in forward order to simplify finding last significant
2018-12-18 19:41:09 +02:00
Pauli Oikkonen
efd097f5a5
Vectorize the coeff group loop to some extent
2018-12-18 19:41:09 +02:00
Pauli Oikkonen
a01362e638
use the efficient method of reordering raster->scan
2018-12-18 19:41:09 +02:00
Pauli Oikkonen
50a888e789
Use the efficient method to find first and last nz coeffs in block
2018-12-18 19:41:09 +02:00
Pauli Oikkonen
7e9203f566
Scan coeff groups in scan order to help find last significant one
2018-12-18 19:41:09 +02:00
Pauli Oikkonen
9a5a6fdbc7
Simplify two ifs in encode_coeff_nxn-avx2
2018-12-18 19:41:09 +02:00
Pauli Oikkonen
37a2a8bac8
See if loop can be optimized by rearranging
2018-12-18 19:41:09 +02:00
Pauli Oikkonen
584f2f74b6
Vectorize significant coeff group scanning loop
2018-12-18 19:41:09 +02:00
Pauli Oikkonen
1bfed73221
Add AVX2 strategy for encode_coding_tree
2018-12-18 19:41:09 +02:00
Pauli Oikkonen
c3a6f3112a
Add generic strategy group for encode_coding_tree
2018-12-18 19:41:09 +02:00
Marko Viitanen
1ef851ab4b
Disable FME on amp/smp blocks with width or height not divisible by 8
2018-12-18 10:28:21 +02:00
Joose Sainio
b71c5573f0
Merge branch 'rate_control_fix'
2018-12-17 12:39:27 +02:00
Sergei Trofimovich
68a70e45a1
x86 asm: mark stack as non-executable
...
Gentoo's `scanelf` QA tool detects writable/executable stack
of assembly-writtent files as:
```
$ scanelf -qRa .
0644 LE !WX --- --- ./src/strategies/x86_asm/.libs/picture-x86-asm-sad.o
0644 LE !WX --- --- ./src/strategies/x86_asm/.libs/picture-x86-asm-satd.o
0644 LE !WX --- --- ./src/strategies/x86_asm/picture-x86-asm-sad.o
0644 LE !WX --- --- ./src/strategies/x86_asm/picture-x86-asm-satd.o
```
Normally C compiler emits non-executable stack marking (or GNU assembler
via `-Wa,--noexecstack`).
The change adds non-executable stack marking for yasm-based assmbly files.
https://wiki.gentoo.org/wiki/Hardened/GNU_stack_quickstart has more details.
Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
2018-12-16 11:31:56 +00:00
Reima Hyvönen
1fcc5c6a8d
Merge branch 'bipred_recon'
2018-12-11 09:59:35 +02:00
Reima Hyvönen
e4a10880f3
Added case 12 to bipred_recon no mov
2018-12-11 09:52:17 +02:00
Marko Viitanen
a4f3968e52
Fix Visual Studio errors by initializing some variables used in AVX2 signhiding
2018-12-11 09:33:26 +02:00
Ari Lemmetti
ac943147e3
Calculate satd cost for whole non-square blocks as well.
2018-12-10 17:04:29 +02:00
Pauli Oikkonen
c465578048
Add a descriptive comment to coefficient reordering
2018-12-03 15:36:32 +02:00
Pauli Oikkonen
f78bf2ebcb
Optimize q_coefs usage for indexed fetch
2018-12-03 15:36:32 +02:00
Pauli Oikkonen
d9591f1b49
Eliminate midway buffering of reordered coefs
...
TODO: For some mysterious reason seems slightly slower than the
buffered one
2018-12-03 15:36:32 +02:00
Pauli Oikkonen
7fe454c51f
Optimize get_cheapest_alternative()
2018-12-03 15:36:32 +02:00
Pauli Oikkonen
6bbd3e5a44
Optimize rearrange_512 function
2018-12-03 15:36:32 +02:00
Pauli Oikkonen
cb8209d1b3
Vectorize transform coefficient reordering loop
2018-12-03 15:36:32 +02:00
Pauli Oikkonen
7cf4c7ae5f
Rename "reduce" functions to hsum
...
That's what the functions fundamendally do anyway
2018-12-03 15:36:32 +02:00
Pauli Oikkonen
316cd8a846
Fix ALIGNED keyword and grow alignment to 64B
2018-12-03 15:36:32 +02:00
Pauli Oikkonen
1befc69a4c
Implement sign bit hiding in AVX2
2018-12-03 15:36:32 +02:00
Pauli Oikkonen
c5cd03497e
Require BMI and ABM instruction sets for AVX2 build
...
AVX2 support on a processor should always imply BMI and ABM support.
The lzcnt and tzcnt instructions have more suitable semantics in the
corner case that source word is 0, and allow us to even handle that
scenario without a branch. Apparently Visual Studio will already
include this support when building with AVX2 enabled, so only the
automake files need to be tweaked.
2018-12-03 15:36:32 +02:00
Reima Hyvönen
f8696b54a4
Updated bipred_recon_avx2 in avx2/picture-avx2.c. Now it detects blocks that can be not equal to 8 (ie. width = 12)
2018-11-20 17:09:19 +02:00
Marko Viitanen
a5a10a33c3
Enable --scaling-list parameter and add to the documentation
2018-11-19 10:47:30 +02:00
Reima Hyvönen
710ba288db
Chroma has some problems
2018-11-15 16:42:48 +02:00
Sami Ahovainio
8f98d4aac7
Added square search
2018-11-14 14:50:31 +02:00
Marko Viitanen
6871490dd5
Simplify get_mvd_coding_cost(), only include golomb coding
2018-11-14 14:33:31 +02:00
Ari Lemmetti
a832206bb6
Replace 32-bit incompatible instrinsics
2018-11-12 18:54:33 +02:00
Ari Lemmetti
5c774c4105
Rewrite most of FME and interpolation filters
...
Changes had to break a lot of stuff and were just squashed into this horrible code dump
2018-11-08 20:21:16 +02:00
Joose Sainio
1c8a1f24e2
Don't assume anything about bits spent
2018-11-07 16:03:38 +02:00
Joose Sainio
3471e2470d
Fix using uninitialized value for the first frame
2018-11-07 08:17:39 +02:00
Joose Sainio
d95ac11a3b
Fix rate_control for other LP-GOPS
2018-11-06 14:20:44 +02:00
Joose Sainio
67a6ba667e
Fix rate control for flat lp-gop
2018-11-06 09:38:17 +02:00
Reima Hyvönen
7406c33a42
Some more cleaning
2018-10-26 12:25:18 +03:00
Reima Hyvönen
4c71546b2e
Cleaned some coding
2018-10-26 12:19:44 +03:00
Reima Hyvönen
4fe3909e48
Switched luma to use 32bits size ints intstead of 16bit size
2018-10-24 18:24:46 +03:00
Marko Viitanen
465bc2cfee
[EMT] make functions static and prefix arrays with kvz_g
2018-10-18 10:54:33 +03:00
Marko Viitanen
b133e7de1e
VTM 2.2 changed -> remove high_precision_motion_vectors flag
2018-10-17 12:41:14 +03:00
Marko Viitanen
169febd1c4
[EMT] Simplify DCT8, DCT5, DST1 and DST7 definitions
2018-10-17 12:17:54 +03:00
Marko Viitanen
e015d7eb2b
Fix compiler warnings
2018-10-17 10:43:11 +03:00
Marko Viitanen
ad310c77d3
Added EMT transforms to the strategies
2018-10-17 08:56:49 +03:00
Eemeli Kallio
284e73839e
Calculating zero cost moved to its own function
2018-10-16 11:02:01 +03:00
Reima Hyvönen
381e786e10
Trying to find the bug in luma
2018-10-11 18:08:41 +03:00
Marko Viitanen
c589e5ed36
Fix closed-gop frame feed, the ordering was incorrect after the first GOP
2018-10-10 11:12:03 +03:00
Reima Hyvönen
2f5f81bac3
removed the non-optimated bipred function
2018-10-09 11:19:23 +03:00
Marko Viitanen
75dce4f3ce
Fix low-delay-gop usage with --no-open-gop
2018-10-04 15:16:02 +03:00
Marko Viitanen
de71b58f76
Change closed GOP structure to include an additional IDR between GOPs
2018-10-04 11:17:03 +03:00
Marko Viitanen
1e1a80e4a6
[TMVP] fix clamping of block offsets and clean up the code a bit
2018-10-03 12:34:48 +03:00
Reima Hyvönen
212a8e68fa
Modified to avoid memory overflow, still some bug inside luma
2018-10-02 20:23:32 +03:00
Marko Viitanen
954f07e3d7
Add --(no-)open-gop option
2018-10-02 10:05:32 +03:00
Marko Viitanen
027359c3c3
Implement TMVP duplicate checking as in VTM 2.1
2018-09-28 11:50:36 +03:00
Marko Viitanen
571a545416
Fix spatial merge candidate selection
2018-09-26 15:10:31 +03:00
Marko Viitanen
63760ca0cf
Use kvz_cabac_bins_verbose flag to control cabac debug printing
2018-09-26 12:01:23 +03:00
Marko Viitanen
7c37f456f9
Fix implicit Qt split for p-frames
2018-09-26 12:00:18 +03:00
Marko Viitanen
b6f2c66c73
Fixed intra Most Probable Mode (mpm) derivation to conform VTM 2.1
2018-09-21 10:33:54 +03:00
Sami Ahovainio
a2b2275d87
Fixed array sizes in search_intra_rough from 35 to 67
2018-09-18 11:49:15 +03:00
Sami Ahovainio
82fb80ab6e
Fixed couple of if-clauses which still used the old intra mode range.
2018-09-17 08:56:43 +03:00
Marko Viitanen
a437d4c508
Fixed intra chroma mode bitstream writing (chroma search not used)
2018-09-13 15:05:00 +03:00
Marko Viitanen
389aeebe07
Added 2x2 transform functions
2018-09-13 14:51:07 +03:00
Marko Viitanen
445c059b4a
Fix transforms for VTM 2.0, generated new transform matrices and added a shift by 2 for forward and inverse
2018-09-13 14:39:49 +03:00
Marko Viitanen
35fa8e9785
Fix kvz_intra_get_dir_luma_predictor -> Intra working
2018-09-13 12:32:17 +03:00
Marko Viitanen
f75b0b11c3
Simplify intra filtered ref pixel selection
2018-09-13 10:09:52 +03:00
Sami Ahovainio
4bb484a86a
Fixed if-clause at search_intra.c to use new wider range of intra modes
2018-09-13 09:58:48 +03:00
Marko Viitanen
82de0fbee7
Switch intra search to use the actual 67 modes
2018-09-13 09:43:45 +03:00
Marko Viitanen
382917bcd3
New table for choosing angular intra filtered references and a small bugfix on the end condition of angular intra
2018-09-13 09:35:55 +03:00
Marko Viitanen
4aad2fa383
Fix intra mode writing
2018-09-12 10:34:58 +03:00
Marko Viitanen
d4ed0ee3ad
Fixed some array offsets in intra angular prediction
2018-09-12 08:53:17 +03:00
Marko Viitanen
20c96366ed
fix kvz_context_get_sig_ctx_idx_abs() parameter for "type" -> decoding with VVC
2018-09-10 12:51:02 +03:00
Marko Viitanen
a7ca09108c
Improve CABAC debugging by including similar info as in VTM
2018-09-10 11:00:00 +03:00
Sami Ahovainio
ce84407c69
Fixed coeff_remain writing to use the correct rice_param instead of using 0 all the time.
2018-09-07 11:24:24 +03:00
Sami Ahovainio
78ea24bcf1
Fixed sig_coeff_flag writing condition.
2018-09-06 15:48:45 +03:00
Marko Viitanen
4bebb4bb2c
Fix temp_diag and temp_sum initialization and coeff array usage in context derivation
2018-09-05 17:09:50 +03:00
Marko Viitanen
f5b6c386bc
Fix incorrect sig_flag implicity parameters and some temp variable initializations
2018-09-03 16:22:05 +03:00
Marko Viitanen
8bef85e056
Merge branch 'set-qp-in-cu'
2018-09-03 08:33:33 +03:00
Ari Lemmetti
2fdcc2b79d
Add option --set-qp-in-cu
2018-09-03 08:32:45 +03:00
Marko Viitanen
52be2f0bbe
Fixed kvz_encode_coeff_nxn and renamed some variables to match VTM
2018-08-31 15:10:17 +03:00
Sami Ahovainio
787264f568
Fixed dst indexing in kvz_angular_pred_generic
2018-08-31 10:36:28 +03:00
Sami Ahovainio
d2291fea83
Intra mode scaling moved from angular prediction to kvz_intra_predict. pdpc implemented in kvz_intra_predict.
2018-08-31 10:01:28 +03:00
Marko Viitanen
49a116ed3a
Bugfix correct array sizes for cu_ctx_last_x/y
2018-08-30 16:14:08 +03:00
Sami Ahovainio
84cef127dc
Fixed cu_gtx_flag_model_chroma initialization.
2018-08-30 15:21:16 +03:00
Marko Viitanen
7d491e639b
Add new values to last_x/y coding
2018-08-30 15:04:04 +03:00
Marko Viitanen
809805b185
Bugfixes for kvz_encode_coeff_nxn()
2018-08-30 14:50:29 +03:00
Marko Viitanen
0680f240d7
Converted kvz_encode_coeff_nxn and related helper functions to VVC K0072 format
2018-08-30 14:24:03 +03:00
Marko Viitanen
84e78c6c50
Disable writing of cabac flags not currently available
2018-08-30 11:21:44 +03:00
Marko Viitanen
e3dbaf99a9
Started implementing new coeff coding function
...
- added kvz_context_get_sig_ctx_idx_abs for abs sig context derivation
2018-08-30 11:09:42 +03:00
Marko Viitanen
e00319b832
Fix cu_sig_coeff_group_model init and some instances of cu_sig_model usage
2018-08-30 09:08:08 +03:00
Marko Viitanen
4429e0b89d
Expand cu_sig_coeff_group_model according to VVC
2018-08-29 16:20:34 +03:00
Sami Ahovainio
578122ed43
Context changes for chroma pred modes. BT flag init and chroma pred mode init moved inside a loop.
2018-08-29 16:00:08 +03:00
Sami Ahovainio
54ebadfc43
Clarifying comments and changes towards WAIP
2018-08-29 16:00:08 +03:00
Marko Viitanen
7f119e8bdd
Added new ctx models for sig, parity and gtx, removed models for one and abs
2018-08-29 15:57:40 +03:00
Marko Viitanen
46d02c1734
Implemented JVET-K0072 based cbf context selections
2018-08-29 10:12:07 +03:00
Marko Viitanen
bb9dc22336
Disable PCM
2018-08-29 09:59:53 +03:00
Marko Viitanen
23a1292f52
Added max_binary_tree_unit_size and more comments
2018-08-29 08:23:41 +03:00
Marko Viitanen
37caa451c6
Fix VVC split flag condition for hor and ver splits at the edges
...
- Split flag is no longer implicit when the block can be split with the BT after QT in horizontal or vertical way
2018-08-28 16:03:02 +03:00
Reima Hyvönen
896034b7cf
Some renamed functions back
2018-08-28 15:31:10 +03:00
Reima Hyvönen
e8b5e6db4c
Did some merging
2018-08-28 15:26:27 +03:00
Reima Hyvönen
7de5c74434
Updated bipred_recon to work faster
2018-08-28 15:12:31 +03:00
Reima Hyvönen
47b357cca2
Comment one test
2018-08-27 18:52:14 +03:00
Reima Hyvönen
2ca99a44e8
Updated shuffle operation to be in right order
2018-08-27 18:16:38 +03:00
Sami Ahovainio
42741a2c40
Some changes for PCM and Intra towards VTM 2.0 compatibility.
2018-08-27 09:18:15 +03:00
Marko Viitanen
3dc5f65fba
Add an extra bit to intra mode and map 33 angular modes to 65
2018-08-17 15:09:48 +03:00
Marko Viitanen
9aaf53fcd7
Add dep_quant_enable_flag to slice header
2018-08-17 14:58:57 +03:00
Marko Viitanen
dc92fa6fb3
Added missing ALF flag to SPS
2018-08-17 12:53:27 +03:00
Marko Viitanen
dbc74c592d
Add VTM 2.0 new flags to SPS
2018-08-17 12:47:29 +03:00
Marko Viitanen
17505c8306
Disable vertical and horizontal scan order with small blocks
...
- Intra now working down to 8x8 luma
2018-08-17 11:38:40 +03:00
Marko Viitanen
4f7da86285
Commented out sign hiding code, which is not used in VVC
2018-08-17 09:38:11 +03:00
Marko Viitanen
c9cbdd5dc3
Added couple of ToDo comments for large CTU support
2018-08-17 09:37:14 +03:00
Marko Viitanen
daf041406f
Disable DST
2018-08-16 16:05:32 +03:00
Marko Viitanen
b85ae3688e
Signal QP in slice header if tiles and slices=tiles are enabled
...
Keeps the PPS constant for various purposes
2018-08-16 08:44:39 +03:00
Sami Ahovainio
5baab86597
Added BT split flags
2018-08-14 15:28:06 +03:00
Marko Viitanen
b33aa37484
Enable max_trans_hier_depth values and disable DC and angular filtering
2018-08-14 15:24:21 +03:00
Marko Viitanen
00a827007a
Use normal split flags
2018-08-14 10:57:32 +03:00
Reima Hyvönen
508b218a12
some modifications made to prevent reading too much
2018-08-14 10:50:39 +03:00
Reima Hyvönen
1d935ee888
some useless stuff removed
2018-08-13 16:47:11 +03:00
Reima Hyvönen
ce3ac4c05e
some modifications to no_mov
2018-08-13 16:41:02 +03:00
Reima Hyvönen
15a613ae94
test if no_mov breaks testing
2018-08-13 16:02:56 +03:00
Reima Hyvönen
97a2049e58
removed pointer declaration out from switch
2018-08-10 16:42:26 +03:00
Reima Hyvönen
aa94bcedbc
Stream is now pointer
2018-08-10 16:38:49 +03:00
Reima Hyvönen
fa5b227ece
256 to 32 doesn't work, made them by hand
2018-08-10 16:01:20 +03:00
Reima Hyvönen
408dedbcc8
removed _mm256_extract_epi8 and replaced with _mm_stream
2018-08-10 15:53:26 +03:00
Reima Hyvönen
31c35091c6
_mm256_cvtsi256_si32 removed
2018-08-10 10:06:40 +03:00
Reima Hyvönen
99dc43074f
_mm256_cvtsi256_si32 breaks system, too much bits. back to extract
2018-08-10 09:59:33 +03:00
Reima Hyvönen
4f1f80b2cb
Transformed convert from 256 to cast 256 -> 128 and then convert from 128
2018-08-09 15:35:54 +03:00
Reima Hyvönen
4957555eb3
Removed leftover from 939
2018-08-09 15:25:03 +03:00
Reima Hyvönen
28b165c971
Clearified some sections, added _MM_SHUFFLE macro
2018-08-09 15:23:01 +03:00
Reima Hyvönen
dd04df8667
testing if error in both avx2 functions
2018-08-03 11:49:00 +03:00
Reima Hyvönen
ed50d71fde
Switched some variables to different location, altered inter_recon_bipred_avx2 function
2018-08-02 16:08:59 +03:00
Reima Hyvönen
f5739a0028
Renaming and removing useless prints
2018-08-02 14:47:17 +03:00
Reima Hyvönen
bc09f59bb6
Edited some definitions
2018-08-02 11:54:53 +03:00
Marko Viitanen
ffbc178cf9
An attempt to fix checksums
2018-07-27 14:38:05 +03:00
Marko Viitanen
84b6a61193
Hack to fix split flag model for PCM use -> valid VVC bitstream
2018-07-27 14:29:31 +03:00
Marko Viitanen
90174f1143
Add more values to cabac debugging
2018-07-27 13:59:54 +03:00
Marko Viitanen
c6572d644f
Updated split_flag initialization to support Large CTUs in VVC
2018-07-27 12:32:45 +03:00
Marko Viitanen
7abadaafe4
Disable CTU splitting and configure max CTU sizes to 64x64
2018-07-27 11:04:21 +03:00
Marko Viitanen
6921e31502
Fix debugging functions
2018-07-27 11:03:16 +03:00
Marko Viitanen
37b5ce3d33
Change configurations to ease VVC debugging, max-BT-depth = 0
2018-07-26 16:12:11 +03:00
Marko Viitanen
792da1b7e0
Force PCM coding and fix PCM sample output
2018-07-26 11:05:31 +03:00
Marko Viitanen
5d4a2a004f
Remove depentent slice, wpp/tile and scaling list parameters from PPS
2018-07-26 10:43:21 +03:00
Marko Viitanen
31a6cbfe6d
Disable sign bit hiding
2018-07-26 10:41:35 +03:00
Marko Viitanen
9f2b429c66
Disable some features not used in VVC
...
- Part mode coding not used
- split transform flag not used
- last significant coeff pos swapping not used
2018-07-26 10:33:27 +03:00
Marko Viitanen
e84276f7f6
Fixed version string
2018-07-26 08:17:55 +03:00
Marko Viitanen
e38109d102
Enable QTBT and set correct general_profile_idc for Next
2018-07-25 12:24:17 +03:00
Marko Viitanen
079ca9b8b2
Disable tile/wpp flags in slice header
2018-07-25 11:19:53 +03:00
Marko Viitanen
b0ac7002e5
Disable VPS
2018-07-25 11:02:09 +03:00
Marko Viitanen
c5bf6a3774
Bugfix: add missing parameters to WRITE_U
2018-07-25 10:18:48 +03:00
Marko Viitanen
9befe35961
Modify slice header to conform VVC
2018-07-25 10:17:42 +03:00
Marko Viitanen
95ce1e1a25
Modify parameter sets to conform VVC
2018-07-25 10:05:11 +03:00
Arttu Ylä-Outinen
83555c3d6d
Enable --fast-residual-cost with fastest presets
2018-07-16 12:31:20 +03:00
Arttu Ylä-Outinen
c438bb4a19
Add an option to skip CABAC for residual costs
...
Adds command line option --fast-residual-cost=<limit>. When QP is below
the limit, estimates the cost of coding the residual coefficients from
the sum of absolute coefficients. Skipping CABAC is not worth it with
high QPs because there are fewer coefficients so CABAC is not as slow.
2018-07-16 12:31:20 +03:00
Reima Hyvönen
a4bf77f208
Tested some extract functions
2018-07-12 09:29:32 +03:00
Reima Hyvönen
c05033a893
Even more useless vectors removed
2018-07-11 15:09:14 +03:00
Reima Hyvönen
884cb77238
Removed some not used vectors
2018-07-11 15:06:11 +03:00
Reima Hyvönen
792689a5ff
Removed for-loops, added extract instead
2018-07-11 14:56:41 +03:00
Reima Hyvönen
f9c7f6ee66
Added some break-operations for avx2 optimation
2018-07-11 14:15:38 +03:00
Reima Hyvönen
cc064da143
some more optimation for bipred
2018-07-11 11:27:54 +03:00
Reima Hyvönen
9a339eef89
Merge branch 'bipred_recon' of https://gitlab.tut.fi/TIE/ultravideo/kvazaar into HEAD
...
# Conflicts:
# build/kvazaar_lib/kvazaar_lib.vcxproj
2018-07-10 16:21:04 +03:00
Reima Hyvönen
a22cf03ddb
Updated to have no movement function to avx2 strategies
2018-07-10 16:07:15 +03:00
Arttu Ylä-Outinen
b7474eb532
Fix SAO buffer sizes
...
Increases sizes of buffers used for SAO reconstruction to avoid stack
buffer overflow in AVX2 SAO reconstruction.
2018-07-05 15:56:30 +03:00
Arttu Ylä-Outinen
b37470e80f
Merge pull request #207 from jbeich/maltivec
...
Unbreak build on PowerPC if AltiVec isn't supported
2018-07-04 11:06:41 +03:00
Reima Hyvönen
ea83ae45f0
Toimiva ratkaisu
2018-07-03 11:18:51 +03:00
Jan Beich
4f4bea7496
Check -maltivec is supported before using
...
PowerPC target may lack or have non-standard FPU:
$ cc -dumpmachine
powerpcspe-undermydesk-freebsd
$ cc -c -maltivec -Isrc src/strategies/altivec/picture-altivec.c
src/strategies/altivec/picture-altivec.c:1: error: AltiVec and E500 instructions cannot coexist
2018-07-02 23:25:23 +00:00
Jan Beich
b892d820f8
Clean up macOS includes on powerpc* after 93e1c9f1c3
...
strategyselector.c:426:25: machine/cpu.h: No such file or directory
2018-07-02 21:52:45 +00:00
Reima Hyvönen
17babfffa4
25.6 working optimation, ~50% faster than original
2018-06-25 17:06:16 +03:00
Arttu Ylä-Outinen
2f995f4325
Merge pull request #205 from jbeich/powerpc
...
Unbreak build on non-Linux powerpc*
2018-06-19 13:28:00 +03:00
Arttu Ylä-Outinen
c1398ef818
Permit --period=1 with any GOP structure
...
All intra coding is a special case so it can be permitted even though
Kvazaar normally only supports intra periods that are divisible by the
GOP length.
2018-06-18 12:26:11 +03:00
Arttu Ylä-Outinen
abdebe0bf9
Fix --owf help message
...
The number of parallel frames is --owf plus one, not --owf minus one.
Fixes #204 .
2018-06-18 09:33:36 +03:00
Jan Beich
93e1c9f1c3
Add AltiVec detection for BSDs
...
strategyselector.c:377:26: linux/auxvec.h: No such file or directory
2018-06-17 15:38:24 +00:00
Miika Metsoila
98972d26c2
Document that the high tier requires level 4 or higher
2018-06-14 12:41:03 +03:00
Miika Metsoila
62b44efaa4
Write the encoding tier (main/high) into the bitstream
2018-06-14 12:41:03 +03:00
Arttu Ylä-Outinen
a343f6d587
Prepare for delta QPs at CU-level
...
- Replaces lcu_dqp_enabled with max_qp_delta_depth in encoder_control_t.
- Fixes set_cu_qps so that it can handle quantization groups of
arbitrary size.
- Fixes computation of QP predictors so that it works for quantization
groups of arbitrary size.
2018-06-13 15:36:19 +03:00
Arttu Ylä-Outinen
dc6b2024ea
Modify reference count asserts to fix data races
...
Changes asserts on the reference count of objects to assert the value
after KVZ_ATOMIC_INC instead of directly checking the value. Fixes some
data races detected by TSan.
2018-06-12 09:35:07 +03:00
Ari Lemmetti
4fb1c16c61
Add early termination for intra rdo when a zero coefficient block is found.
2018-06-08 21:03:07 +03:00
Ari Lemmetti
492529fb7a
Add the same comment to help message as well...
2018-05-30 14:13:15 +03:00
Ari Lemmetti
0d5972bf03
Add missing sort to intra transform split search so mode at 0 is the best
2018-05-21 13:10:38 +03:00
Sebastien Alaiwan
954bca7d6e
Fix memset parameter
2018-05-17 11:24:49 +02:00
Jaakko Laitinen
f9466efcbb
Close file on error
2018-05-15 11:50:16 +03:00
Reima Hyvönen
9fed29f950
optimation for inter_recon_bipred
2018-04-18 15:25:44 +03:00
Arttu Ylä-Outinen
5c585c4fbc
Update help message
...
Updates the default option values to match the medium preset.
2018-04-03 10:40:37 +03:00
Arttu Ylä-Outinen
2b4e22111a
Update presets
...
The new presets are slower but have better coding efficiency.
2018-04-03 10:37:30 +03:00
Arttu Ylä-Outinen
7185519a1b
Update command line help
...
- Adds missing default values.
- Adds help for --crypto and --key.
- Adds help for --rd=3.
- Adds help for --sao options.
- Some changes to help wording.
2018-03-23 14:33:04 +02:00
Arttu Ylä-Outinen
3606860504
Add --no-cpuid option
...
Equivalent to --cpuid=0.
2018-03-23 12:32:27 +02:00
Arttu Ylä-Outinen
fb462b25ef
Fix transform skip for inter
...
The transform skip flag in cu_info_t was stored under the intra
substruct even though transform skip can be used for inter as well. This
caused bitstream errors. Fixed by moving the flag out of the substruct.
2018-03-20 11:01:33 +02:00
Arttu Ylä-Outinen
b64e46707d
Skip raster scan step in TZ search
...
Raster scan is very slow and the BD-rate improvement is marginal.
2018-03-01 14:04:03 +02:00
Arttu Ylä-Outinen
6877064230
Add zero neighborhood check to TZ search
...
Adds an additional grid search step that starts from the zero motion
vector after the normal grid search. The search range for this step is
half of the normal range.
2018-03-01 14:02:13 +02:00
Arttu Ylä-Outinen
74a413c46a
Switch to star refinement in TZ search
2018-03-01 13:06:14 +02:00
Arttu Ylä-Outinen
ebee428ee1
Add loop termination to TZ grid search
...
Terminates the grid search if no better motion vector was found in the
last three iterations.
2018-03-01 13:06:06 +02:00
Arttu Ylä-Outinen
4c175621dd
Fix TZ grid search and star refinement
...
- Changes TZ grid search and star refinement to keep the origin constant
instead of moving to the best position after each iteration.
- Changes star refinement to loop until there is no more improvement,
instead of running the step only once.
2018-03-01 12:56:57 +02:00
Arttu Ylä-Outinen
9c2d0074a2
Add rounding of motion vectors in inter search
...
When the starting point for integer motion estimation was selected among
the merge candidates, the candidate motion vectors were always rounded
down. This commit changes the rounding so that they are rounded to the
nearest integer MV instead.
2018-03-01 09:39:21 +02:00
Ari Lemmetti
662430d441
Select CU type based on SSD, transform unit tree and mode cost of luma and chroma on --rd=2
2018-02-22 19:26:48 +02:00
Arttu Ylä-Outinen
cb06cfeadb
Drop temporary arrays in bipred search
...
Changes bipred search to use the original source and reconstruction
arrays directly instead of copying them.
2018-02-14 11:20:51 +02:00
Arttu Ylä-Outinen
0ea516ba30
Move bipred search to a separate function
2018-02-14 09:56:53 +02:00
Arttu Ylä-Outinen
6f506be12d
Drop dynamic allocation from bipred search
...
Moves the temporary LCU struct used in bipred search from the heap to
the stack. The single malloc call was a huge bottleneck in bipred.
2018-02-14 09:55:02 +02:00
Arttu Ylä-Outinen
7155dd0db7
Add negative references to L1 list
...
Changes reference index list creation so that the negative references
are added to L1 in addition to L0 when biprediction is enabled and no
reordering of pictures is done. Biprediction can now be used with the
low-delay GOP structure.
2018-02-07 14:54:52 +02:00
Arttu Ylä-Outinen
4b24cd03a2
Update for crypto++ 6.0.0 compatibility
...
Changes the crypto module to use unsigned char instead of byte. The byte
typedef is no longer included in the global namespace in crypto++ 6.0.0.
See https://github.com/weidai11/cryptopp/issues/442 .
Fixes #184 .
2018-02-05 13:35:03 +02:00
Arttu Ylä-Outinen
8c53417006
Check zero coefficient cost for inter
...
Checks the cost of flushing all coefficients of an inter block to zero.
This is much faster than doing full RDOQ but can still reduce bitrate
significantly. Encoding speed is increased since fewer coefficient bits
have to be coded with CABAC.
2018-01-29 12:41:56 +02:00
Arttu Ylä-Outinen
018b5ffa64
Move inter CU reconstruction to a new function
...
Moves code for reconstructing all PUs in an inter CU to a new function
kvz_inter_recon_cu in inter.c.
2018-01-24 15:05:39 +02:00
Arttu Ylä-Outinen
405b8c1069
Refactor inter MVD cost functions
...
Moves duplicate code for writing the MVD of a single motion vector from
kvz_get_mvd_coding_cost_cabac and encoder_inter_prediction_unit to a new
function.
2018-01-19 08:29:17 +02:00
Arttu Ylä-Outinen
c1cca1ad7f
Refactor inter MV candidate selection
...
Moves duplicate code for checking the best MV candidate from functions
calc_mvd_cost, search_pu_inter_ref and search_pu_inter to a new
function.
2018-01-19 08:29:17 +02:00
Arttu Ylä-Outinen
9067aa4535
Remove an unnecessary copy in SMP/AMP search
...
SMP/AMP search is performed using a lower work tree level than the
normal inter search so the prediction info must be copied up if an
SMP/AMP mode is chosen. Previously pixels and coefficient were copied as
well. Changed to only copy prediction info.
2018-01-18 10:36:26 +02:00
Arttu Ylä-Outinen
89a930d6dd
Add part mode bitcost when using SMP/AMP blocks
2018-01-18 10:36:26 +02:00
Arttu Ylä-Outinen
fc43643ba5
Use a transform split for SMP and AMP blocks
2018-01-18 10:36:25 +02:00
Arttu Ylä-Outinen
c74ede148b
Fix CBF flags for 4x4 luma blocks
...
CBF flags were not being propagated to the upper level from blocks of
size 4x4.
2018-01-18 10:36:25 +02:00
Arttu Ylä-Outinen
0a69e6d18f
Fix selection of transform function for 4x4 blocks
...
DST function was returned for inter luma transform blocks of size 4x4
even though they must use DCT. Fixed by checking the prediction mode of
the block in addition to whether it is chroma or luma.
2018-01-18 10:36:25 +02:00
Miika Metsoila
bcedfd6669
Remove the usage of errno in me-steps argument parsing
2018-01-16 14:38:43 +02:00
Miika Metsoila
39ed36830e
Merge branch 'me_steps'
2018-01-16 14:22:59 +02:00
Miika Metsoila
61213e3ad9
Improve step parameter parsing and usage
2018-01-10 15:16:52 +02:00
Arttu Ylä-Outinen
649113a821
Fix inter search being used for 4x4 blocks
...
When 4x4 intra blocks are enabled and inter search is limited to 16x16
and larger blocks, it is possible that inter search is accidentally done
for 4x4 blocks. Fixed by checking that block size is at least 8x8 before
doing inter search.
2018-01-10 14:21:48 +02:00
Miika Metsoila
e8e0e7596a
Add a step-cutoff parameter for motion estimation search
2017-12-22 14:04:25 +02:00
Miika Metsoila
4e13608b01
Merge branch 'diamond_search'
2017-12-18 14:11:53 +02:00
Miika Metsoila
2cde0d1a18
Document diamond search option
2017-12-12 14:45:01 +02:00
Miika Metsoila
b923b63b42
Add diamond search
2017-12-12 14:40:14 +02:00
Ari Lemmetti
14892fda00
Replace simple coefficient cost estimation with CABAC. Substantial improvement.
...
Approximation proved to be too inaccurate while not giving actually that much speedup.
2017-12-10 01:23:48 +02:00
Miika Metsoila
ea79069dc8
Fix a type warning in encmain.c
2017-12-08 16:22:40 +02:00
Miika Metsoila
6aa4cd7528
Fix type warnings
2017-12-08 16:16:36 +02:00
Miika Metsoila
b3486b5114
Fix gcc/clang warnings and errors in cfg.c
2017-12-08 16:09:00 +02:00
Miika Metsoila
bac07457ea
Merge branch 'hevc_level'
2017-12-08 15:57:38 +02:00
Miika Metsoila
c67a24e6ec
Update readme and --help text
2017-12-07 12:32:46 +02:00
Ari Lemmetti
713e694d82
Define HAVE_STRUCT_TIMESPEC on Visual Studio 2015 and later
...
Fixes redefinition of timespec that Pthreads-Win32 does even if it has been already defined.
2017-12-05 18:26:12 +02:00
Miika Metsoila
f64d42169f
Improve bitrate checking to accommodate non-integer and less than 1 framerates
2017-12-01 17:20:12 +02:00
Miika Metsoila
57cf92d35f
Implement level's bitrate limit checking during encoding
2017-11-28 16:19:44 +02:00
Miika Metsoila
021fb27787
Add high-tier flag
2017-11-20 16:05:28 +02:00
Miika Metsoila
d249059d61
Minor refactoring of level checking
2017-11-20 13:25:26 +02:00
Arttu Ylä-Outinen
cf85d52b9d
Kvazaar version 1.2.0
2017-11-17 15:23:33 +02:00
Miika Metsoila
4c1512e8c5
Add a check for maximum picture width and height for the given level
2017-11-15 16:39:59 +02:00
Arttu Ylä-Outinen
4cb054295a
Fix linkers
...
Overrides the linkers used for kvazaar, libkvazaar.la and kvazaar_tests.
When crypto++ is enabled, the C++ linker is used and when it is
disabled, the C linker is used.
This removes the need to explicitly specify -lstdc++ in configure when
crypto++ is used and fixes the build with crypto++ when libstd++ is not
installed.
2017-11-13 15:09:38 +02:00
Miika Metsoila
f9a4aba867
Update documentation, fix input fps default value, remove 0 as default level
2017-11-09 16:53:31 +02:00
Miika Metsoila
ebba0a4f01
Test if input conforms to it's level's limits (excluding bitrate)
2017-11-08 16:15:41 +02:00
Miika Metsoila
fb4d0c3cf2
Move level argument parsing to the correct place and give it initial values
2017-11-03 15:47:35 +02:00
Miika Metsoila
61a31054e1
Add level command-line parameter
2017-11-03 13:04:05 +02:00
Arttu Ylä-Outinen
9974380cdd
Fix bipred and temporal MVP
...
- Fixes two errors in calculating the POC for the reference frame for
temporal candidate MV scaling.
- Fixes using the MV for the wrong direction when the temporal MV
predictor block uses bi-prediction.
Fixes #160 .
2017-10-25 12:26:41 +03:00
Arttu Ylä-Outinen
841597e123
Fix picture and slice types
...
Changes handling of intra pictures for --gop=8 so that every picture
with POC divisible by the intra period is intra. The first picture is
IDR and the rest of the intra pictures are CRA. POC is not reset at CRA
pictures. The leading pictures that follow the CRA picture are changed
to RASL so they are allowed to refer to pictures before the CRA picture.
Changes inter slice types to P when the L1 reference list is empty and
to B otherwise.
In all-intra, all pictures are now IDR pictures with POC zero.
2017-10-20 13:35:26 +03:00
Jaakko Laitinen
957b6850c3
Change ref list printout to match hm decoded printout
2017-09-25 13:48:56 +03:00
Arttu Ylä-Outinen
20aea8df63
Fix POCs when using --gop=8
...
When using --gop=8 with an intra period greater than one, a single POC
would be skipped before every intra frame. This commit fixes the problem
by turning the intra frames into BLA frames with leading pictures when
using --gop=8.
2017-09-19 09:31:58 +03:00
Miika Metsoila
6e00f63469
Remove unused variables from search_pu_inter_ref function
2017-09-18 15:36:37 +03:00
Miika Metsoila
7b0101ce3d
Merge branch 'reflist_changes'
...
# Conflicts:
# src/encoderstate.c
# src/search_inter.c
2017-09-18 14:59:37 +03:00
Miika Metsoila
769b17768d
Change max function to MAX macro for clang/gcc compatibility.
...
Remove couple of unnecessary comments
2017-09-15 14:21:51 +03:00
Miika Metsoila
5f7c5443a3
Remove inter.poc
2017-09-12 14:23:19 +03:00
Miika Metsoila
6bd78a3da7
Reverse L0 list sort direction
2017-09-12 14:23:18 +03:00
Miika Metsoila
83dc7e7f50
Made L0 to sort and fixed mv_ref_coded in search_pu_inter
2017-09-12 14:23:18 +03:00
Timothe FRIGNAC
d3362a238e
changed strtod to strtol
2017-08-31 15:14:31 +02:00
Timothe FRIGNAC
3a1ab54ff0
Fixed memory leaks
2017-08-31 11:51:41 +02:00
Timothe FRIGNAC
466297fd77
Fixed build error
2017-08-29 17:01:18 +02:00
Timothe FRIGNAC
2e130912cb
Add --key opt
2017-08-28 17:15:13 +02:00
Miika Metsoila
a5f4cf09b5
Switched from storing POCs in inter.poc to state->frame->refLXs array
2017-08-21 16:34:57 +03:00
Arttu Ylä-Outinen
409d2114f0
Fix motion vector constraints
...
Fixes integer motion vectors being constrained more than what was
necessary when using --mv-constraint or --wpp.
2017-08-11 14:41:36 +03:00
Arttu Ylä-Outinen
7144a00beb
Rewrite thread queue
...
Changes thread queue so that only the jobs that are ready to run are
stored in the queue. Other jobs are kept track of by pointers in the
reverse dependency lists of other jobs. When a job is ready to run it is
appended to the queue. The job queue is stored as a linked list.
The definitions of threadqueue_queue_t and threadqueue_job_t are moved
to the .c file, turning them into opaque structs.
Makes thread queue code simpler. Fixes some TSan errors.
2017-08-11 14:18:12 +03:00
Arttu Ylä-Outinen
bc47fe94af
Drop thread queue debug code
2017-08-11 14:18:12 +03:00
Eemeli Kallio
e5cbc7a205
--sao now enables full sao
2017-08-11 13:26:55 +03:00
Eemeli Kallio
4c3453d26f
Fixed issue with no-sao argument
2017-08-11 13:12:22 +03:00
Eemeli Kallio
8674c0f5ee
Added paremeter for band and edge sao.
2017-08-11 11:57:09 +03:00
Eemeli Kallio
d9b93ea368
Added possibility to skip edge or band sao.
2017-08-11 11:51:49 +03:00
Arttu Ylä-Outinen
4b73bdd9aa
Skip checked motion vectors in early termination
...
Changes the second iteration of early termination to skip the motion
vectors that were already checked in the first iteration.
2017-08-09 14:29:09 +03:00
Arttu Ylä-Outinen
606d441362
Skip computing MV cost twice in hexagon search
...
Changes the first step of hexagon search to skip the zero offset since
the cost of the motion vector has already been computed.
2017-08-09 14:29:09 +03:00
Arttu Ylä-Outinen
fa4648061d
Add mv, cost and bitcost to inter_search_info_t
2017-08-09 14:29:08 +03:00
Arttu Ylä-Outinen
328f051d7f
Put inter search parameters in a single struct
...
Adds struct inter_search_info_t for holding the parameters that are used
by most function related to inter search. Passing the parameters in
a single struct greatly reduces the number of parameters for many
functions.
2017-08-09 14:27:53 +03:00
Miika Metsoila
0dd069f8af
Fixed using wrong POC in add_temporal_candidate
2017-08-09 13:50:21 +03:00
Miika Metsoila
25e0a954c7
Fixed 2 bugs causing incorrect video output
2017-08-09 13:50:21 +03:00
Arttu Ylä-Outinen
24ecddd2a5
Fix wrong strides in SAO reconstruction
...
Functions kvz_sao_reconstruct and encoder_sao_reconstruct used
frame->width as the stride instead of frame->rec->stride when accessing
frame->rec->data. This caused errors when using tiles and SAO.
2017-08-01 15:40:49 +03:00
Arttu Ylä-Outinen
f0bf959d17
Fix alignment errors in 32-bit build with MSVC
...
Changes the work_tree parameter in search.c functions from an array to
a pointer. Fixes "formal parameter with requested alignment of 8 won't
be aligned" errors.
2017-07-28 09:27:02 +03:00
Arttu Ylä-Outinen
9694bd2fae
Fix build on 32-bit systems
...
Function coeff_abs_sum_avx2 that was added in e950c9b
was outside the
AVX2 #if directive.
2017-07-28 09:19:29 +03:00
Arttu Ylä-Outinen
ecb0275cdd
Store CU arrays as pointers to the main array
...
Changes field state->tile->frame->cu_array->data to point to the CU
array in the main encoder state. Removes the need to copy the CU array
to the main CU array after search.
2017-07-28 08:36:45 +03:00
Arttu Ylä-Outinen
e950c9b101
Add AVX2 implementation for coefficient sum
2017-07-28 07:39:36 +03:00
Arttu Ylä-Outinen
d50ae6990c
Add sum of absolute coefficients to strategies
2017-07-28 07:39:15 +03:00
Arttu Ylä-Outinen
59faca0646
Skip CABAC coefficient cost for --rd=0
2017-07-28 07:33:03 +03:00
Arttu Ylä-Outinen
19e051ea40
Reduce intra threshold
...
Reduces intra threshold for --rd=0 from 20 to 8. Threshold of 20
increased BD-Rate too much.
2017-07-25 13:26:38 +03:00
Arttu Ylä-Outinen
e9cf15465e
Fix inter cost in bipred
...
The cost of coding MV ref indices and MV direction was added to bitcost
but not inter cost. Fixed by adding the extra bits to inter as well.
2017-07-24 15:24:04 +03:00
Arttu Ylä-Outinen
edbe00763e
Drop extra parameter in kvz_image_calc_sad
...
Drops the parameter max_lcu_below which was always set to -1.
2017-07-24 15:21:19 +03:00
Arttu Ylä-Outinen
ffac29061f
Fix extrapolated inter SATD
2017-07-24 15:11:05 +03:00
Arttu Ylä-Outinen
631ef53d2a
Fix inter cost calculations
...
Inter costs are computed using SAD except when fractional motion
estimation or bi-prediction is enabled. This commit changes
search_pu_inter_ref to recalculate the cost with SATD. Fixes inter/intra
cost comparisons since intra costs are always SATD costs.
2017-07-24 15:11:05 +03:00
Arttu Ylä-Outinen
6ce2fb1238
Add pixel offsets to encoder_state_config_tile_t
...
Adds fields offset_x and offset_y to encoder_state_config_tile_t.
2017-07-24 15:11:05 +03:00
Arttu Ylä-Outinen
2380ba0d41
Reduce copying in kvz_get_coeff_cost
...
Changes function kvz_get_coeff_cost to only copy the CABAC contexts and
not the whole encoder state.
Other threads could be simultaneously using the other parts of the
encoder state. Only copying the CABAC fixes a TSan data race warning.
2017-07-24 12:38:41 +03:00
Arttu Ylä-Outinen
24b462f801
Align coefficients to 8 bytes
...
Adds alignment attribute to lcu_coeff_t. The coefficients are sometimes
handled as 64-bit integers containing four coefficients so the arrays
should be aligned to 8 bytes.
Fixes a UBSan error about misaligned reads.
2017-07-24 12:37:37 +03:00
Arttu Ylä-Outinen
5ddb43c6fe
Fix undefined left shifts in rdo
...
Replaces left shifts by multiplications when the operand may be
a negative value. Left shift of a negative value is undefined behavior.
2017-07-24 12:35:10 +03:00
Arttu Ylä-Outinen
d1e64ad62b
Fix undefined left shifts
...
Replaces left shifts by multiplications when the operand may be
a negative value. Left shift of a negative value is undefined behavior.
2017-07-20 11:15:30 +03:00
Arttu Ylä-Outinen
07b5fb9caf
Fix out-of-bounds read in encoderstate
...
When calling encoder_state_encode_leaf with POC 0, index -1 of the GOP
array would be accessed. Fixed by skipping the code for I-frames.
2017-07-20 11:15:30 +03:00
Arttu Ylä-Outinen
8c4a3473a8
Change --owf=auto and --threads=auto selection
...
Changes OWF selection so that it is chosen based on the maximum number
of parallel CTUs. Number of threads is limited to prevent overhead from
extra threads.
2017-07-20 09:42:28 +03:00
Arttu Ylä-Outinen
4fc9b743c1
Drop an unnecessary pthread_cond_broadcast
...
Drop pthread_cond_broadcast on threadqueue->cond in function
kvz_threadqueue_waitfor. The broadcast caused threads to be woken up
more often than necessary.
2017-07-19 11:09:30 +03:00
Arttu Ylä-Outinen
14003c6a30
Disable printing PSNR with --no-psnr
2017-07-19 10:38:37 +03:00
Arttu Ylä-Outinen
e90bde5c62
Clarify PSNR output
...
Adds letters Y, U and V to the PSNR output to make it clearer that the
printed values are the luma and chroma PSNR.
2017-07-19 10:33:43 +03:00
Arttu Ylä-Outinen
fdb3480b54
Enable strategies for SAO reconstruction
...
Re-enables strategies for SAO reconstruction. They were disabled in
commit ec9ff42
.
2017-07-11 10:35:18 +03:00
Arttu Ylä-Outinen
333dba3884
Add static to SAO strategies
2017-07-11 10:02:01 +03:00
Miika Metsoila
e8cc2d8f6a
Small fixes
2017-07-07 13:58:19 +03:00
Arttu Ylä-Outinen
67a60a35e3
Fix invalid calls to normalize_lcu_weights
...
Changes encoder_state_init_new_frame to only call normalize_lcu_weights
when the weights have been written to the array and rate control is
enabled. When rate control is disabled, the weights are not used.
2017-07-07 11:05:31 +03:00
Arttu Ylä-Outinen
563bc26e71
Fix out-of-bounds read in AVX2 SAO
...
AVX2 version of SAO loaded offsets with a 256 bit read even though there
are only five 32 bit integers.
2017-07-06 13:04:52 +03:00
Arttu Ylä-Outinen
0850b17f96
Drop get_wpp_limit in search_inter
...
WPP limit for motion vectors is now computed inside fracmv_within_tile.
2017-07-05 13:22:53 +03:00
Arttu Ylä-Outinen
2a85f0f5a4
Move hard-coded MV limits to encoder_control_t
...
Adds field max_inter_ref_lcu to encoder_control_t. It is used to set up
inter-LCU dependencies in encoder_state_encode_leaf and restrict motion
vectors in fracmv_within_tile.
2017-07-05 13:22:53 +03:00
Arttu Ylä-Outinen
bb5354f7e2
Relax inter-CTU dependencies when SAO is off
...
When using WPP and OWF, the first CTU of a row depends on the last CTU
of the row below in the reference frame. This is necessary when SAO is
enabled since we currently do SAO for a whole CTU row at a time. When
SAO is disabled, however, it is unnecessary to wait for the whole row.
Changes CTUs to depend only on the CTU below in the reference frame
instead of the whole row when WPP and OWF are enabled and SAO disabled.
Gives a significant speedup when running on a machine with many CPU
cores.
2017-07-05 13:21:06 +03:00
Arttu Ylä-Outinen
1efa2708b2
Do SAO reconstruction for a single CTU at a time
...
Moves SAO reconstruction into encoder_state_worker_encode_lcu instead of
doing it in a separate step for the whole CTU row. Reconstruction of the
rightmost 10 pixels and bottommost 10 pixels of a CTU is delayed until
the neighboring CTU has been deblocked.
Doing SAO for the whole CTU row at a time caused unnecessary inter-CTU
dependencies when using WPP and OWF. The first CTU of a row would need
to wait until SAO was done for the row below in the previous frame.
Moving SAO reconstruction to immediately after deblocking each CTU fixes
this problem.
2017-07-04 15:14:31 +03:00
Arttu Ylä-Outinen
ec9ff42077
Rewrite SAO recon to handle arbitrary sized blocks
...
Adds width and height parameters to function kvz_sao_reconstruct and
changes it to take coordinates in units of pixels. This will be useful
for doing SAO for areas smaller than a whole CTU.
2017-06-30 16:09:18 +03:00
Miika Metsoila
dcd7acf4fd
Fixed crash and incorrect info output
2017-06-27 16:05:15 +03:00
Miika Metsoila
f8b6234fdb
Changes to refence lists to behave more like L0/L1 lists from the specification
2017-06-27 16:05:15 +03:00
Arttu Ylä-Outinen
2c66e0bbd2
Fix warnings about invalid reads in AVX2 ipol
...
AVX2 filter functions read pixels in chunks of 8 or 16 bytes. At the end
of the block, the read goes out of the bounds of the pixels array. The
extra pixels do not affect the result.
Fixes valgrind complaining about the invalid reads by allocating 5 extra
pixels in kvz_get_extended_block_avx2
2017-06-22 09:37:55 +03:00
Arttu Ylä-Outinen
4d20e156db
Fix handling intra period not multiple of GOP length
...
With low delay GOP structure, it is possible to use an intra period that
is not a multiple of the GOP structure length. Commit 00c9f52
changed
encoder_state_init_new_frame to reset POC on intra frames. GOP offset,
however, was not reset, resulting in invalid POCs and references for the
following frames.
This commit changes function kvz_encoder_feed_frame so that GOP offset
is correctly reset on intra frames.
2017-06-22 09:29:00 +03:00
Arttu Ylä-Outinen
00c9f52bd4
Fix setting picture type when using GOP
...
Changes encoder_state_init_new_frame to set intra frame pictype to
KVZ_NAL_IDR_W_RADL even when using GOP.
2017-06-21 13:21:47 +03:00
Arttu Ylä-Outinen
f54a25f112
Fix crash when immediately closing encoder
...
When closing the encoder, the pictures stored in the input frame buffer
are freed by repeatedly calling kvz_encoder_feed_frame. If the encoder
was closed immediately after opening it, kvz_encoder_feed_frame would be
called with an unprepared encoder state. This would trigger an assert.
Fixed by changing kvz_encoder_feed_frame so that it does not require the
encoder state to be prepared.
2017-06-15 11:57:46 +03:00
Arttu Ylä-Outinen
b74e0458fd
Set inter transform depth to zero
...
Sets max_transform_hierarchy_depth_inter to 0 in SPS. This saves some
bits because split_transform_flag does not need to be coded for inter
blocks.
When SMP and AMP blocks are enabled the depth is set to 1 instead.
Otherwise inter split flag would default to 1 for SMP and AMP blocks,
resulting in an unnecessary transform split.
2017-06-08 10:08:20 +03:00
Arttu Ylä-Outinen
8dd01ba5a9
Refactor helper functions in search
...
Combines functions lcu_set_intra_mode and lcu_set_inter_pu to a single
function. Removes some duplicated code.
2017-06-06 10:32:09 +03:00
Arttu Ylä-Outinen
1bbecf7584
Refactor work tree copy functions
...
Extracts common code shared by work_tree_copy_up and work_tree_copy_down
to a separate function.
2017-06-06 10:32:00 +03:00
Arttu Ylä-Outinen
2b169d5d63
Fix crash in kvazaar_close
...
Changes kvazaar_close to stop all threads before freeing encoder states.
Fixes a crash when the encoder is closed before all pictures have been
encoded.
2017-06-02 10:05:33 +03:00
Arttu Ylä-Outinen
eb9a05b7ef
Fix memory leak
...
Changes kvazaar_close to free the remaining pictures in the the input
frame buffer. Fixes a memory leak when the encoder is closed while there
are pictures left in the buffer.
2017-06-01 15:39:35 +03:00
Arttu Ylä-Outinen
8b2483ca1c
Combine intra reconstruction functions
...
Replaces function kvz_intra_recon_lcu_luma and
kvz_intra_recon_lcu_chroma in intra.c with function kvz_intra_recon_cu.
The new function can handle reconstruction for both luma and chroma.
Removes some duplicated code.
2017-05-24 12:07:31 +03:00
Arttu Ylä-Outinen
e67fdb853d
Move intra leaf TB recon to a separate function
...
Moves code for intra leaf transform block reconstruction from functions
kvz_intra_recon_lcu_luma and kvz_intra_recon_lcu_chroma to a new
function intra_recon_tb_leaf. Removes some duplicated code.
2017-05-24 12:07:31 +03:00
Arttu Ylä-Outinen
13d2fdbd21
Drop unused kvz_videoframe_get_cu functions
2017-05-24 11:15:31 +03:00
Arttu Ylä-Outinen
f5eef7f33c
Use luma pixel coordinates in encode_coding_tree
...
Changes functions encode_intra_coding_unit and encode_coding_tree to
take coordinate arguments in units of luma pixels instead of 8 px
blocks. This should make the code easier to understand.
2017-05-24 11:15:31 +03:00
Arttu Ylä-Outinen
525a5180ff
Combine intra CU encoding functions
...
Merges functions encode_intra_coding_unit and
encode_intra_coding_unit_encry. Removes a lot of duplicated code.
2017-05-24 11:12:40 +03:00
Arttu Ylä-Outinen
610c91b0c5
Use luma pixel coordinates in TU coding functions
...
Changes functions encode_transform_unit and encode_transform_coeff to
take coordinate arguments in units of luma pixels instead of 4 px
blocks. This should make the code easier to understand.
2017-05-23 15:36:16 +03:00
Arttu Ylä-Outinen
2e8838de6e
Fix crash when crypto compiled in but disabled
...
When kvazaar was built with crypto++ but running without using
encryption features, kvazaar attempted to delete an uninitialized crypto
handle. Fixed by setting the handle to NULL in kvz_encoder_state_init.
2017-05-23 14:01:48 +03:00
Arttu Ylä-Outinen
2f2c281e8e
Fix a memory leak in crypto
...
A CryptoPP::CFB_Mode<CryptoPP::AES>::Encryption was allocated at the
beginning of encoder_state_encode_leaf and was never freed. This commit
changes encoder_state_worker_encode_lcu to delete the CFB_Mode. Also
moves crypto handle from encoder_state_config_tile_t to encoder_state_t
so that it can be safely deleted without affecting other threads in the
same tile.
2017-05-23 11:51:25 +03:00
Arttu Ylä-Outinen
22155950c1
Rewrite crypto to conform to kvazaar code style
2017-05-23 11:51:25 +03:00
Arttu Ylä-Outinen
6829865190
Fix inline declaration in intra_mode_encryption
...
Moves the inline declaration of intra_mode_encryption before the type
and changes it to use the INLINE macro. Inline declaration after type
triggered a warning on GCC.
2017-05-23 11:50:32 +03:00
Arttu Ylä-Outinen
5f8e17d4ba
Eliminate a race condition in threadqueue
...
Fixes the order of acquiring locks for the job and its dependency in
kvz_threadqueue_job_dep_add. The dependency is locked before the job
that depends on it. This is the same order as in threadqueue_worker.
Acquiring the locks in different order in kvz_threadqueue_job_dep_add
and threadqueue_worker would sometimes result in a deadlock.
2017-05-18 12:25:53 +03:00
Arttu Ylä-Outinen
4b213477f0
Return best MV from inter early terminate
...
When using --me-early-termination=sensitive, early termination of inter
search used to always return the starting point if no tested motion
vector was good enough to continue the search. This commit changes
early_termination to always return the best motion vector and cost
found.
2017-05-18 09:05:14 +03:00
Arttu Ylä-Outinen
382636de55
Fix handling too large QPs
...
Changes kvz_config_validate to output an error if the given QP is out of
range and changes kvz_set_picture_lambda_and_qp to clip the QP to the
valid range if is too large after applying QP offset from GOP structure.
2017-05-17 12:41:51 +03:00
Arttu Ylä-Outinen
de8b59c681
Drop unused function kvz_coefficients_blit
2017-05-12 16:48:30 +03:00
Arttu Ylä-Outinen
bcfa5a3cd9
Add a comment explaining the coefficient order
2017-05-12 16:46:57 +03:00
Arttu Ylä-Outinen
95775a1645
Change coefficient storage order
...
Changes coefficient storage order to a zig-zag order. Reduces
unnecessary copying of coefficients to temporary arrays.
2017-05-12 16:46:57 +03:00
Arttu Ylä-Outinen
9395867a9a
Quantize all colors in a single traversal
...
Changes kvz_quantize_lcu_residual to process all three colors in
a single traversal of the TU tree.
2017-05-12 16:42:41 +03:00
Arttu Ylä-Outinen
1e58fd6b16
Split kvz_quantize_lcu_residual
...
Splits kvz_quantize_lcu_residual to two functions that handle the TU
tree recursion and quantization of a single TU.
2017-05-12 16:42:41 +03:00
Arttu Ylä-Outinen
cc87e0dcc7
Combine luma and chroma quantization functions
...
Replaces functions kvz_quantize_lcu_luma_residual and
kvz_quantize_lcu_chroma_residual in transform.c with function
kvz_quantize_lcu_residual. The new function can handle any of the YUV
colors. Removes some duplicated code.
2017-05-12 16:42:41 +03:00
Arttu Ylä-Outinen
1357dd0599
Pass coeffs through encoder state
...
Changes the way coefficients are passed from kvz_search_lcu to
kvz_encode_coding_tree. Drops fields coeff_y, coeff_u and coeff_v in
videoframe_t and instead passes them through field coeff in
endoder_state_t.
2017-05-12 16:42:41 +03:00
Eemeli Kallio
2cad3173ec
Reduced amount of modes for search_intra_rdo
2017-05-12 15:56:07 +03:00
Arttu Ylä-Outinen
26adef4492
Merge branch 'erp-aqp'
2017-05-12 15:05:24 +03:00
Eemeli Kallio
55e0e65733
Added INLINE to kvz_get_ic_rate and kvz_get_coded_level in rdo.c
2017-05-12 15:03:30 +03:00
Arttu Ylä-Outinen
ee3d4d0e78
Add adaptive QP for 360 degree video
...
Adds option --erp-aqp for enabling adaptive QP for 360 degree video with
equirectangular projection. When projected into a spherical surface,
the middle part of the video covers relatively larger area than the top
and bottom parts. Enabling --erp-aqp sets up a ROI delta QP array which
uses higher QPs for the top and bottom of the video and lower QPs for
the middle part.
2017-05-11 12:31:53 +03:00
Arttu Ylä-Outinen
79cb3a2fd3
Permit negative QP deltas in ROI
...
Delta QPs should not be arbitrarily restricted to positive values.
2017-05-11 12:13:47 +03:00
Arttu Ylä-Outinen
edfbd6f122
Add field lcu_dqp_enabled to encoder_control_t
...
Delta QPs for LCUs are enabled when either ROI coding or rate control is
enabled. Having a single field is simpler than always checking whether
ROI or rate control is enabled.
2017-05-11 12:13:47 +03:00
Arttu Ylä-Outinen
2f2405dfe6
Fix crash when PU depth is limited
...
When video width or height was not a multiple of the smallest CU size,
no prediction would be performed at the border CUs. Kvazaar would later
crash at an assertion failure when attempting to write the bitstream for
the CU.
Fixed by permitting inter and intra prediction when the CU split is
forced, even if CUs of that size would otherwise be disabled.
2017-04-27 10:35:48 +03:00
Arttu Ylä-Outinen
9130b5107c
Change handling of infinite PSNR in encmain
...
Changes encmain to print 999.99 as PSNR when SSE is zero. This behavior
is in line with HM. Previously SSE was set to 99 when it was zero.
2017-04-27 10:35:13 +03:00
Arttu Ylä-Outinen
a9c878b535
Fix crash with WPP when threads are disabled
...
When WPP is enabled, a reference to SAO reconstruction job is copied
from the wavefront to the main encoder state. However, when threads are
disabled, the job is a null pointer and dereferencing it crashes the
encoder. Fixed by adding a null pointer check.
2017-04-24 12:59:57 +03:00
Arttu Ylä-Outinen
2991962033
Add reference counting to threadequeue_job_t
...
Both the thread queue and the encoder states hold pointers to the thread
queue jobs. It is possible that a job is removed from the thread queue
and freed while the encoder state is still using it. This commit adds
reference counting to threadqueue_job_t in order to fix the problem.
Fixes #161 .
2017-04-12 16:13:52 +03:00
Arttu Ylä-Outinen
bd8adff43a
Drop unused defines in threads.h
2017-04-12 03:41:07 -07:00
Arttu Ylä-Outinen
7ab0a7aff2
Fix semaphores on Mac
...
POSIX semaphores are deprecated on Mac. This commit replaces POSIX
semaphores by Grand Central Dispatch semaphores when building on Mac.
2017-04-12 03:41:02 -07:00
Arttu Ylä-Outinen
26693e1402
Fix reliance on undefined behaviour in encmain
...
Pthread mutexes were used for synchronization in encmain by locking and
unlocking them from different threads. However, according to the POSIX
standard, unlocking a mutex from a different thread is undefined
behaviour. This commit replaces the mutexes by semaphores which can be
used from different threads.
2017-04-12 03:23:58 -07:00
Ari Lemmetti
47a9f0de04
Modify and use FILL_ARRAY macro to prevent warning on GCC 7
...
Following warning was given and is false positive
error: 'memset' used with length equal to number of elements without multiplication by element size [-Werror=memset-elt-size]
2017-04-11 14:04:25 +03:00
Eemeli Kallio
f7e01b8ba1
Fixed error on rd=3
2017-04-05 13:27:14 +03:00
Eemeli Kallio
9f605152ae
Changed intra to use best rough cost when using inter and rd=2
2017-04-05 13:01:32 +03:00
Ari Lemmetti
33ce101ab5
Revert "Use sizeof(uint32_t) to avoid warning in GCC7."
...
Did not fix the problem.
This reverts commit e3c3e74926
.
2017-04-03 20:21:33 +03:00
Ari Lemmetti
e3c3e74926
Use sizeof(uint32_t) to avoid warning in GCC7.
...
error: 'memset' used with length equal to number of elements without multiplication by element size [-Werror=memset-elt-size]
2017-04-03 19:16:09 +03:00
Arttu Ylä-Outinen
df359b8f95
Fix indentation in encode_coding_tree.c
...
Fixes indentation of a for loop that was causing a misleading
indentation warning on GCC.
Fixes #163 .
2017-03-08 22:56:28 +09:00
Pierre-Loup Cabarat
2b8ce5e47c
Add intra prediction modes encryption
2017-03-06 17:27:39 +01:00
Arttu Ylä-Outinen
aae141f2d3
Fix order of frames with --debug
...
When the decoding and presentation orders of pictures are different
(with GOP), the frames in YUV debug output would be in the decoding
order. This commit changes the kvazaar command line program to store the
reconstructed pictures in a buffer so that they can be output in the
presentation order.
Fixes #101 .
2017-02-28 14:09:24 +09:00
Arttu Ylä-Outinen
094b39e7fc
Refactor inter MV/merge candidate selection
...
Adds struct merge_candidates_t for holding the spatial and temporal
merge candidates. Changes functions with separate parameters for each
candidate to use the struct instead.
2017-02-22 15:56:36 +09:00
Arttu Ylä-Outinen
3409748a8f
Refactor inter MVP candidate selection
...
Adds helper function add_mvp_candidate.
2017-02-22 15:56:27 +09:00
Arttu Ylä-Outinen
ef6503c728
Refactor inter merge candidate selection
...
Adds helper function add_merge_candidate and replaces macro
CHECK_DUPLICATE with function is_duplicate_candidate.
2017-02-22 02:50:52 +09:00
Arttu Ylä-Outinen
f12e09bc40
Refactor inter TMVP selection
...
Adds helper function add_temporal_candidate to inter.c.
2017-02-22 02:08:10 +09:00
Arttu Ylä-Outinen
4f88066740
Refactor MV and merge candidate selection
...
Replaces macros APPLY_MV_SCALING and CALCULATE_SCALE with helper
functions.
2017-02-22 01:14:16 +09:00
Arttu Ylä-Outinen
db08041d9a
Refactor inter TMVP selection
...
Merges three if-clauses to remove two levels of indentation.
2017-02-21 23:56:01 +09:00
Marko Viitanen
85e2a40da3
Clip scaled motion vectors, scale and td/tb values to appropriate limits
...
Fixes #158 .
2017-02-20 15:40:20 +02:00
Ari Koivula
7369f25f64
Bump version to 1.1.0
2017-02-16 20:52:05 +02:00
Ari Lemmetti
b021d2244e
Reduce more unnecessary initializations.
2017-02-16 17:25:26 +02:00
Ari Lemmetti
acd12cba1e
Remove unnecessary memory initialization to zero
...
Values in interval [last_scanpos, 0] are overwritten in following for loop, except for the sig_coeff_inc value.
2017-02-16 16:48:48 +02:00
Ari Koivula
7ff33e1bf2
Fix default reference picture count
...
The default was 3, instead of the intended 1 of the medium preset.
2017-02-13 17:34:28 +02:00
Marko Viitanen
4251607c04
Fix a bug in TMVP reference POC list
2017-02-13 15:19:24 +02:00
Marko Viitanen
4270d451e6
Fixed some errors after rebase
2017-02-13 15:19:24 +02:00
Marko Viitanen
95effb00d0
Disable TMVP in frames with zero L0 references
2017-02-13 15:19:24 +02:00
Marko Viitanen
b4de1878be
Fixed TMVP scaling and candidate selection for B-frames
2017-02-13 15:19:23 +02:00
Marko Viitanen
23be633ad7
Added TMVP merge candidate scaling for L0
2017-02-13 15:19:23 +02:00
Marko Viitanen
e6aa1b9b9a
Renamed get_mv_cand_from_spatial() to get_mv_cand_from_candidates()
2017-02-13 15:19:23 +02:00
Marko Viitanen
1124bb5fd0
Cleaned up TMVP, mv candidate selection working, merge candidate selection not
2017-02-13 15:19:23 +02:00
Marko Viitanen
d65d2ec88d
WIP: add list of POCs used in the image when pushing to reference
2017-02-13 15:19:22 +02:00
Marko Viitanen
6a25cd3248
WIP: work on tmvp on inter
2017-02-13 15:19:22 +02:00
Marko Viitanen
e538a94eda
Enable TMVP with B-frames
2017-02-13 15:19:22 +02:00
Arttu Ylä-Outinen
363b8b49a2
Fix integer overflows with large resolutions
...
Limits video size so that the number of luma and chroma pixels can be
stored in an int. Fixes some integer overflows that resulted in
segmentation faults.
2017-02-12 11:40:13 +09:00
Arttu Ylä-Outinen
a5a925fc28
Replace timed waits by normal waits in threadqueue
...
Replaces calls to pthread_cond_timedwait with pthread_cond_wait in
threadqueue.c. Simplifies code, as there should be no need for the
timeout.
2017-02-11 15:42:03 +09:00
Arttu Ylä-Outinen
fd057498fc
Simplify kvz_config_alloc
2017-02-11 15:42:03 +09:00
Arttu Ylä-Outinen
7f7844caad
Fix finalizing uninitialized encoder states
...
Finalization functions for frame and tile encoder states accessed the
frame and tile fields of the encoder state even though they might be
NULL. This is the case when the initialization of an encoder state
fails. Fixed by adding NULL checks.
2017-02-09 14:05:28 +09:00
Arttu Ylä-Outinen
51786eda67
Drop redundant fields in encoder_control_t
...
Some of the fields in encoder_control_t were simply copies of the
corresponding fields in kvz_config. This commit drops the copied fields
in favor of using the fields in encoder_control_t.cfg directly.
2017-02-09 14:05:28 +09:00
Arttu Ylä-Outinen
6a178dee96
Fix leaking memory when --cqmfile given many times
...
Any previously allocated CQM file name was not freed when allocating
memory for the new file name.
2017-02-09 14:05:28 +09:00
Arttu Ylä-Outinen
63a567ad8a
Fix leaking memory when --roi given many times
...
Any previously allocated delta QP array was not freed when allocating
a new array.
2017-02-09 14:05:21 +09:00
Arttu Ylä-Outinen
bfd89136a4
Fix ROI delta QP array not getting freed
2017-02-09 13:23:55 +09:00
Arttu Ylä-Outinen
e78a8dfcf5
Copy the kvz_config passed to encoder_open
...
The kvz_config struct is created by the user but kvazaar keeps a pointer
to it. It is easy to break things by modifying the configuration outside
kvazaar. In addition, kvazaar modifies the struct even though it is has
a const modifier.
This commit changes the field cfg in encoder_control_t to be a copy of
the kvz_config struct instead of a pointer, removing modifications to
the const struct and allowing users to do whatever they want with it
after opening the encoder.
2017-02-09 13:23:54 +09:00
Ari Koivula
b8e3513a23
Fix crash with sub-LCU frame sizes and WPP
...
The end of slice was being calculated incorrectly, which led to no tile
being created inside the slice, which led to an assert triggering.
This fixes the wrong end of slice calculation, but also disallows
wavefront rows from being created, if there would be only one.
The wavefront initialization code assumes there are always more than
one row, so the inter-frame dependency doesn't get added properly.
Fixes #153 .
2017-02-08 21:41:30 +02:00
Ari Koivula
d893474bab
Fix encoder getting stuck on OS-X
...
Main thread was stuck looping on pthread_cond_timedwait because
the abs time given on OS-X had already passed and the wait
returned immediately without releasing the mutex to allow worker
threads to proceed.
Fix was to use the gettimeofday, which returns real time instead
of monotonic, which is what pthread_cond_timedwait wants.
2017-02-02 17:27:46 +02:00
Ari Koivula
4ceda1908b
Fix OS-X compiler warning
...
rdo.c:475:25: warning: absolute value function 'abs' given an argument of type 'int64_t' (aka 'long long') but has parameter
of type 'int' which may cause truncation of value [-Wabsolute-value]
current.cost = -abs(quant_cost_in_bits) + (bits << PRECISION_INC);
^
rdo.c:475:25: note: use function 'llabs' instead
current.cost = -abs(quant_cost_in_bits) + (bits << PRECISION_INC);
2017-02-01 18:09:17 +02:00
Ari Koivula
c7d536bbcd
Fix OS-X compiler warning
...
cfg.c:1024:74: warning: format specifies type 'size_t' (aka 'unsigned
long') but the argument has type 'unsigned long long'
[-Wformat]
fprintf(stderr, "Too large ROI size: %llu (maximum %zu).\n", size, SIZE_MAX);
2017-02-01 18:09:04 +02:00
Ari Koivula
4467506ef1
Add missing kvz_ prefix
2017-01-31 18:38:02 +02:00
Ari Koivula
ed3bd898fd
Remove Exp-Golomb lookup table
...
This table takes 256kB and isn't used very much. Au revoir!
2017-01-31 18:31:05 +02:00
Ari Koivula
5513744d24
Merge branch 'slices'
2017-01-31 16:14:30 +02:00
Ari Koivula
52904d3e9f
Add --slices=tiles and --slices=wpp
...
This encapsulates tiles or WPP rows into their own slices, making
it possible to send them as soon as they are done, instead of waiting
for the other substreams to finish and coding the substream offsets
in the slice header.
2017-01-31 15:44:23 +02:00
Ari Koivula
0d4d0e869c
Add support for independent slices
...
Not used yet, but they work.
2017-01-31 15:11:50 +02:00
Ari Koivula
46ae382498
Fix bugs with slice header
...
These fixes allow more than one slice to be used to code a picture.
- Use correct number of bits to code the slice segment address.
- Don't offset_len_minus1 for slices without substreams.
2017-01-31 14:01:59 +02:00
Ari Koivula
f1fc0de2bf
Write slice headers to the parent stream
...
Appending to the child stream doesn't work is the child is a leaf
slice state.
Simplifies flow by removing distinction between tile and slice. Now
that slice headers are written in the parent stream, there is zero
difference between tiles and slices from bitstream point of view.
2017-01-31 13:55:05 +02:00
Ari Koivula
04cd875b2c
Move substream finalization to LCU coding job
...
Having some of the termination bits in the LCU coding and some in the
substream finalization was needlessly confusing. Doing substream
finalization directly after LCU coding makes it easy to verify that the
finalization is done correctly.
Removes one job per WPP row from the job queue.
Removes kvz_cabac_flush, because I don't like bits being put into the
bitstream implicitly. Better to have it all in the open.
2017-01-31 13:01:57 +02:00
Ari Koivula
ead490b7b7
Write a new slice NAL for every slice
2017-01-31 12:36:18 +02:00
Ari Koivula
cd496bf50b
Move first_nal_in_au to encoder_state->frame
...
Needed for writing NALs from encoder_state_write_bitstream_children
2017-01-31 12:28:28 +02:00
Arttu Ylä-Outinen
1e6463c08b
Fix inter bipred search
...
When the number of merge candidates was five, biprediction search would
read past the bounds of the priority list arrays. Fixed to limit the
search to the first four candidates.
2017-01-31 18:23:12 +09:00
Ari Lemmetti
2c069a3e5f
Prevent unnecessary cu search
...
Prevent further analysis as soon as it is known that splitting can not improve cost
2017-01-30 16:21:41 +02:00
Arttu Ylä-Outinen
9b889c3fab
Fix reading ROI files
...
- Checks the return value of fopen when opening the ROI file. Fixes
a segfault when the file cannot be opened.
- Check that the width and height are positive. Fixes reading past the
end of the delta QP array in kvz_set_lcu_lambda_and_qp.
- Check for overflow in width * height. Fixes an overflow resulting in
a segfault.
- Properly check that fscanf succeeds. Fixes silently accepting ROI
files that are too short.
- Properly close the FILE pointer.
2017-01-29 18:57:27 +09:00
Arttu Ylä-Outinen
46c9a483c3
Fix inter search for small SMP and AMP blocks
...
The function search_pu_inter_ref incorrectly rounded the coordinates of
the block to down to a multiple 8 pixels. Small SMP and AMP blocks may
start at coordinates that are not multiples of 8. Fixed by removing the
rounding.
Fixes a failing assert when --mv-constraint is used with --smp or --amp.
2017-01-29 13:34:50 +09:00
Arttu Ylä-Outinen
fb10b56b82
Fix checking if a low delay GOP structure is used
...
Stops assuming that having cfg->gop_lowdelay set means that GOP
structure is used since it is possible that cfg->gop_lowdelay is true
but cfg->gop_len is zero. Adds checks for cfg->gop_len where needed.
Fixes a possible division by zero in kvz_encoder_feed_frame.
2017-01-28 21:56:00 +09:00
Arttu Ylä-Outinen
4f56b04239
Drop an unnecessary conditional
...
Drop a conditional for depth > MAX_DEPTH in search_cu. The depth cannot
be greater than MAX_DEPTH (== 3) since an earlier if-clause checks that
it is less than MAX_PU_DEPTH (== 4).
2017-01-28 21:35:27 +09:00
Ari Koivula
937a764987
Fix bug in --mv-constraint
...
Subpixel motion estimation return 0-vector when no subpixel vector is
within the constraint. Fix is to not call subpixel motion estimation
when the integer vector is not within the constraint.
2017-01-26 09:55:57 +02:00
Ari Koivula
4a0121ac42
Add --roi parameter
...
Adds region of interest coding capability.
Works by reading a file of delta QP values which will then be applied
to each frame at LCU level.
2017-01-26 09:14:14 +02:00
Ari Koivula
6f61836989
Refactor kvz_rdoq_sign_hiding
...
Rename and reorder everything to make more sense.
- Moved input tables into their own struct and renamed them to what
they actually represent.
- Renamed pretty much every variable to comform to our style and
to make sense.
- Removed the lastCG stuff, as the function already gets passed the
last coeff anyway. (it was named width, what the hell?)
2017-01-19 23:58:17 +02:00
Ari Koivula
a85390d0ac
Clean up code using the fixed point frac bit tables
...
This is to prepare for changing the code using the floating point table
to use the fixed point table instead.
This also allows reducing the size of the fractional part, which was
useful for finding every place where the the fixed point presentation
is relied upon.
2017-01-19 20:20:51 +02:00
Ari Koivula
24a69c7467
Refactor luma deblocking
...
Changes luma deblocking to use gather and scatter instead of reading
to and writing from here and there in memory. Should make them
faster and easier to vectorize, or at least cleaner.
Splits strong and weak luma deblocking to two functions, as they have
almost nothing in common.
2017-01-17 22:13:39 +02:00
Ari Koivula
4cb2fca924
Refactor deblock decision
2017-01-17 19:34:17 +02:00
Arttu Ylä-Outinen
05794c3548
Add missing static to function lambda_to_qp
2017-01-11 15:53:55 +09:00
Arttu Ylä-Outinen
ee518e8ac4
Take header bits into account in rate control
2017-01-11 15:53:55 +09:00
Arttu Ylä-Outinen
c219d3cd94
Fix deblock when CU QP delta is enabled
...
Fixes deblock functions so that they use the correct QP for the filtered
edge. Adds field qp to cu_info_t.
2017-01-11 15:53:22 +09:00
Arttu Ylä-Outinen
82a98180e4
Clip LCU lambda to reduce quality fluctuation
...
Limits lambdas for each LCU based on the computed lambda from the
previous frame and the frame-level lambda.
2017-01-09 01:24:23 +09:00
Arttu Ylä-Outinen
93172fd251
Use separate alpha, beta and lambda for each LCU
...
Changes rate control to use the alpha and beta values stored in
lcu_stats_t instead of the frame-level values when selecting lambda and
QP for an LCU.
2017-01-09 01:24:23 +09:00
Arttu Ylä-Outinen
3af4e9cc8a
Allocate bits separately for each LCU
...
Bits are allocated based on the costs of the LCUs in the previous
completely coded frame.
Breaks deblock when rate control is used.
2017-01-09 01:24:23 +09:00
Arttu Ylä-Outinen
ff5e5ec6d4
Record info about coded LCUs
...
Adds field lcu_stats to encoder_state_config_frame_t. The following data
is recorded for each LCU:
- number of bits
- squared cost
- used lambda value
- alpha parameter used for rate control
- beta parameter used for rate control
2017-01-09 01:24:23 +09:00
Arttu Ylä-Outinen
2a4243acbe
Refactor rate control
...
Moves all code related to setting QP and lambda values to rate_control
module.
2017-01-09 01:24:23 +09:00
Arttu Ylä-Outinen
71633889ce
Enable CU QP delta when using rate control
...
When rate control is enabled, enable cu_qp_delta_enabled_flag in PPS
with diff_cu_qp_delta_depth set to 0. Also adds code for writing the QP
deltas and a new cabac context.
2017-01-09 01:24:23 +09:00
Arttu Ylä-Outinen
640ff94ecd
Use separate lambda and QP for each LCU
...
Adds fields lambda, lambda_sqrt and qp to encoder_state_t. Drops field
cur_lambda_cost_sqrt from encoder_state_config_frame_t and renames
cur_lambda_cost to lambda.
2017-01-09 01:24:23 +09:00
Arttu Ylä-Outinen
435c387357
Refactor rate control
...
- Defines MIN_LAMBDA and MAX_LAMBDA constants.
- Moves resetting state->frame->cur_gop_bits_coded to rate_control.c.
- Changes gop_allocate_bits to return the number of bits allocated like
pic_allocate_bits does.
2017-01-09 01:24:23 +09:00
Arttu Ylä-Outinen
6c4f2d196a
Move fields from encoder_state_t to frame
...
Moves fields prepared and frame_done from encoder_state_t to
encoder_state_config_frame_t.
2017-01-09 01:24:23 +09:00
Arttu Ylä-Outinen
97863cdaa2
Fail encoder init when CQM file cannot be opened
2017-01-08 19:17:43 +09:00
Arttu Ylä-Outinen
db5e750c7f
Fix --threads=auto
...
When --threads=auto was given on the command line, cfg->threads was
actually set to zero, disabling threads altogether. Fixed to set
cfg->threads to -1, so that the number of threads is chosen
automatically.
2017-01-08 17:58:22 +09:00
Ari Koivula
a9e45efcfc
Add a fast lane for byte-aligned bitstream writes
...
The CABAC engine only writes to the bitstream when it has a full byte.
These writes are also always byte-aligned, so there is no need to even
check for stream alignment.
Speedup was around 3% with ultrafast and low QP.
2016-12-23 17:01:44 +02:00
Jaakko Laitinen
deb63f735f
Fix gop disabling
2016-12-20 14:25:13 +02:00
Ari Lemmetti
70a52f0e48
10-bit: add missing bit depth adjustment to ssd
2016-11-17 19:28:04 +02:00
Ari Koivula
fa078102f1
Fix 32bit compilation
...
Got a warning about implicit cast from uint64_t to void*.
2016-11-17 17:53:57 +02:00
Ari Koivula
5ceec06bd3
Merge pull request #148 from Venti-/crypto
...
Crypto
2016-11-16 21:33:55 +02:00
Ari Lemmetti
c31207ea7d
Optimize intra reference building
...
-Add function with reduced logic for the most common case
2016-11-16 18:28:42 +02:00
Ari Koivula
24f2a23ef8
Remove unnecessary crypto state
...
The frame does not need it's own crypto state, since it always has at
least one sub tile.
2016-11-16 13:58:41 +02:00
Ari Koivula
8951e34fd2
Change crypto.h stubs to print instead of assert
2016-11-16 13:58:41 +02:00
Wassim Hamidouche
ea82c38906
correct memory allocation
2016-11-16 12:35:28 +02:00
Wassim Hamidouche
da3e2d1d07
resolve parallel encryption
2016-11-16 12:35:28 +02:00
Ari Koivula
b8a618e666
Fix problems with >8 bit input
...
Enforce bit depth promised by --input-bitdepth to avoid crashes when
larger values are provided.
Do endianess byte swap for all bytes when the buffer gets extended
to multiple of 8 pixels, and not just the number of input pixels.
Don't swap bytes on a little-endian system.
2016-11-13 19:58:54 +02:00
Ari Koivula
2c005cda25
Fix bug with sub-pixel motion estimation in tiles
...
The width of the tile was being used to index the frame pixel buffer
instead of the width of the buffer.
2016-11-07 15:53:52 +02:00
Ari Koivula
78a28e0338
Reformat --help message
...
- Reduce indentation to 6 spaces
- Word wrap everything to under 80 characters
- Remove defaults from options covered by presets
- Add a dash in front of argument descriptions
- Add --(no-) to names of parameters that accept it and remove mention
of enabling or disabling
- Add executable and scripts as a dependancy to make docs
2016-11-04 15:40:28 +02:00
Ari Koivula
d18de19d8a
Fix DTS and PTS not being passed on through lib API
...
Fixes "cur_dts is invalid" warning from FFmpeg.
2016-10-28 19:05:47 +03:00
Ari Koivula
0c41c2ebd6
Make CLI set PTS for each input picture
...
This value is not represented in the HEVC bitstream, which is why it
was not set previously. FFmpeg sets and needs it however, so make the
CLI set it as well to make sure we handle it correctly.
2016-10-28 19:03:03 +03:00
Ari Koivula
5bf745460d
Re-categorize options in the help message
...
- Move VUI stuff to the bottom
- Merge Parallel processing, WPP, Tiles and slices
- Add more categories for the other options
2016-10-27 03:26:15 +03:00
Ari Koivula
cb6672b452
Disable WPP when Tiles are enabled
...
Closes #142 .
2016-10-27 02:07:10 +03:00
darealshinji
488d042e5f
Bump KVZ_VERSION
2016-10-25 12:32:13 +02:00
Ari Lemmetti
29153ed503
Remove unused variable
2016-10-21 17:28:42 +03:00
Ari Lemmetti
778e46dfd8
Add AVX2 version of SSD
2016-10-21 15:07:53 +03:00
Ari Lemmetti
6f5d7c9e06
Move SSD to strategies
2016-10-21 15:07:23 +03:00
Ari Lemmetti
89b941eab4
Fix typo
2016-10-21 15:07:02 +03:00
Alexis Ballier
1dcc993743
Include i386 & i486 for compiling intel asm.
...
x86_64-pc-linux-gnu-gcc -m32 that I use for building 32bits libraries on amd64 defines only __i386__.
2016-10-14 18:07:37 +02:00
Arttu Ylä-Outinen
5fb7afe8c4
Add --implicit-rdpcm command line parameter.
...
Makes it possible to use lossless coding without implicit residual DPCM.
2016-10-03 20:01:55 +09:00
Arttu Ylä-Outinen
5affc0f527
Use implicit RDPCM in lossless mode.
...
Sets implicit RDPCM flag in SPS when lossy coding is disabled and
applies DPCM to intra residual when prediction mode is horizontal or
vertical.
2016-10-03 19:31:38 +09:00
Ari Koivula
016dbe0894
Further refine presets
...
The rd-complexity of slow presets is better with a less agressive GOP.
Adding the GOP as part of the preset improved BDRate enough, that it
didn't make sense anymore to have a veryslow target the best BDRate.
Instead, push that responsibility to placebo by making it a little bit
faster.
2016-09-29 17:35:12 +03:00
Ari Koivula
31c5ff0f16
Add cross-platform core number detection
...
Well, turns out pthread_num_processors_np isn't standard so we need to
do this crap. Threw in hyper threading detection as a bonus.
2016-09-29 00:03:21 +03:00
Ari Koivula
8c7351eac8
Fix lp-gop with depth 1
...
GOPs with depth 1 had the same structure as those with depth 2:
g4d3t1 = 3 2 3 1
g4d2t1 = 2 2 2 1
g4d1t1 = 2 2 2 1
It now results in the correct:
g4d1t1 = 1 1 1 1
2016-09-29 00:03:21 +03:00
Ari Koivula
a395aeaac9
Set default settings to those of --preset=medium
2016-09-29 00:03:21 +03:00
Ari Koivula
4388fe0d30
Set presets to ratedistortion-complexity optimized versions
2016-09-29 00:03:20 +03:00
Ari Koivula
facb1e16df
Use -p64 -q22 and --gop=lp-g4d3t1 by default
...
Coding inter without GOP of any kind really isn't a very sensible
default. Defaulting to B-GOP of some kind would be more better,
but lp-gop is more robust for now.
2016-09-29 00:03:20 +03:00
Ari Koivula
d7391a9593
Improve default for number of parallel frames
2016-09-29 00:03:20 +03:00
Ari Koivula
19d423ab29
Use all available cores by default
2016-09-29 00:03:20 +03:00
Ari Koivula
3f138f087a
Allow non-gop-length --period for lp-gop
2016-09-29 00:03:19 +03:00
Ari Koivula
16790c9f15
Remove number of references from --gop=lp syntax
...
The number of references should be part of the presets, so gop should
be defined separately.
2016-09-29 00:03:19 +03:00
Ari Koivula
cbfa824d1a
Merge branch 'simd'
2016-09-27 20:49:45 +03:00
Ari Koivula
14a7bcba25
Use a faster function for clipped inter SAD
...
Use the vectorized general SSE41 inter SAD in AVX reg_sad for shapes
for which we don't have AVX versions yet.
Also improves speed of --smp and --amp a lot. Got a 1.25x speedup for:
--preset=ultrafast -q 27 --gop=lp-g4d3r3t1 --me-early-termination=on --rd=1 --pu-depth-inter=1-3 --smp --amp
* Suite speed_tests:
-PASS inter_sad: 0.898M x reg_sad(64x63):x86_asm_avx (1000 ticks, 1.000 sec)
+PASS inter_sad: 2.503M x reg_sad(64x63):x86_asm_avx (1000 ticks, 1.000 sec)
-PASS inter_sad: 115.054M x reg_sad(1x1):x86_asm_avx (1000 ticks, 1.000 sec)
+PASS inter_sad: 133.577M x reg_sad(1x1):x86_asm_avx (1000 ticks, 1.000 sec)
2016-09-27 20:48:30 +03:00
Arttu Ylä-Outinen
4313e56c2d
Add --no-rdoq-skip command line switch
2016-09-11 17:40:16 +09:00
Ari Koivula
a7a33b08ec
Remove --slice-addresses from usage message
...
And give a warning if it's used.
Slices will have to be implemented at some point, but they aren't yet
so let's not advertize them.
2016-09-10 21:06:00 +03:00
Eemeli Kallio
f41e428e5f
Removed kvz_skip_unnecessary_rdoq and reworked --rdoq-skip to skip 4x4 blocks when it is on.
2016-09-09 10:26:07 +03:00
Eemeli Kallio
ed9c0b0416
RDOQ reworked in rdo.c. rdoq_signhide now skips coeffs that are after best_last_idx.
2016-09-09 10:16:51 +03:00
Ari Koivula
02cd17b427
Add faster AVX inter SAD for 32x32 and 64x64
...
Add implementations for these functions that process the image line by
line instead of using the 16x16 function to process block by block.
The 32x32 is around 30% faster, and 64x64 is around 15% faster,
on Haswell.
PASS inter_sad: 28.744M x reg_sad(32x32):x86_asm_avx (1014 ticks, 1.014 sec)
PASS inter_sad: 7.882M x reg_sad(64x64):x86_asm_avx (1014 ticks, 1.014 sec)
to
PASS inter_sad: 37.828M x reg_sad(32x32):x86_asm_avx (1014 ticks, 1.014 sec)
PASS inter_sad: 9.081M x reg_sad(64x64):x86_asm_avx (1014 ticks, 1.014 sec)
2016-09-01 21:36:39 +03:00
Ari Koivula
d0512d25c6
Use fixed point in get_mvd_coding_cost
2016-08-30 21:37:12 +03:00
Ari Koivula
ec7507a935
Further optimize get_ep_ex_golomb_bitcost
...
Unrolled 16-bit log2 calculation.
2016-08-30 21:37:01 +03:00
Ari Koivula
a4ba794587
Optimize get_ep_ex_golomb_bitcost
...
Arrange the decision tree such that there is only 3 branches on the
most common paths and the more likely branch is always fall-through.
A profile guided optimization pass would probably do something similar.
2016-08-30 05:24:16 +03:00
Ari Koivula
82cfab58f8
Improve fast mvd coding cost estimation
...
A lot of time is being taken up by this function on ultrafast, and it
doesn't do a very good job. This change aims to both simplify the
logic and make the estimate better.
The logic is simplified by using a look up for the step mvd bit cost
step function instead of mimicking the binarization process. The
estimation is made better by checking fractional cabac bit costs.
The new function returns the same results as
kvz_get_mvd_coding_cost_cabac, but is also faster than the old
function.
2016-08-30 04:55:09 +03:00
Ari Koivula
d31be8eb27
Make mvd_coding_cost functions take const cabac
2016-08-30 04:46:46 +03:00
Ari Koivula
64d631c174
Fix 8bit to 10bit input conversion regression
2016-08-25 22:09:40 +03:00
Ari Koivula
27789125d8
Fix input bit depth conversion
...
The input was being shifted to the wrong direction.
2016-08-25 22:05:25 +03:00
Ari Koivula
4ec039004b
Add monochrome encoding
...
Write bitstream without chroma when encoding with --input-format=P400.
This reduces bitstream size by 0-1 %, compared to coding monochrome in
420 format, and speeds up encoding slightly due to not processing
chroma.
2016-08-25 20:15:26 +03:00
Ari Koivula
c5b70cf812
Add chroma format support to yuv_t
2016-08-24 19:20:53 +03:00
Ari Koivula
032ed30ff4
Add chroma format support to kvz_picture
...
Add picture_alloc_csp to libkvz api to allocated pictures with chroma
format different from 420.
2016-08-24 19:20:53 +03:00
Ari Koivula
48ccc26839
Add --input-format and --input-bitdepth
...
Adds reading of 10 bit input for 10-bit encoding.
2016-08-24 19:20:53 +03:00
Ari Koivula
cc08073615
Refactor some indexing weirdness in init_lcu_t
...
I thought there might be a bug in this so I cleaned it up.
2016-08-24 19:12:48 +03:00
Ari Koivula
b6d674d66e
Refactor integer vector inter prediction
...
This code was pretty bad, so I cleaned it up a bit.
2016-08-24 19:09:26 +03:00
Ari Lemmetti
28c4174d0e
Fix incorrect shuffle parameters
...
_MM_SHUFFLE uses reverse order
2016-08-23 19:40:46 +03:00
Ari Lemmetti
ce77bfa15b
Replace KVZ_PERMUTE with _MM_SHUFFLE
...
The same exact macro already exists
2016-08-22 19:08:46 +03:00
Jovasa
68eef660bd
Fixed search around mv_in in fullsearch not being saved.
2016-08-19 15:19:29 +03:00
Eemeli Kallio
99d8b9abeb
Changed skip_rdoq name to kvz_skip_unnecessary_rdoq. Changed the order it uses when it goes through CGs and tuned its sum calculation.
2016-08-18 14:02:56 +03:00
Eemeli Kallio
1fb4755f31
Added rdoq-skip to quant-generic.c
2016-08-18 12:17:54 +03:00
Eemeli Kallio
d20ac03ca2
Added --rdoq-skip option
2016-08-18 12:17:53 +03:00
Marko Viitanen
83cf801664
Fixed MV constraint condition in bipred
2016-08-18 08:53:17 +03:00
Marko Viitanen
5ae1c595f2
Fixed slice_temporal_mvp_enabled_flag and disabled TMVP with tiles
...
- slice_temporal_mvp_enabled_flag should be signalled also with non-IDR I-slices
2016-08-10 14:51:41 +03:00
Marko Viitanen
5326519182
TMVP cleanup and const qualifier fixes
2016-08-10 14:10:43 +03:00
Marko Viitanen
f40907260d
Added config parameter for TMVP and cmdline option --no-tmvp
...
- Enabled by default
- Cannot be used with GOP at the moment
2016-08-10 14:09:29 +03:00
Marko Viitanen
fd52dac1f7
Fixed TMVP scaling
2016-08-10 14:09:28 +03:00
Marko Viitanen
c664bc8cf7
Added flag collocated_ref_idx to the slice header
2016-08-10 14:09:28 +03:00
Marko Viitanen
c5f2611a38
Fixes for TMVP to work with the new CU array
2016-08-10 14:09:28 +03:00
Marko Viitanen
d85af5755b
TMVP working when only 1 ref frame
2016-08-10 14:09:28 +03:00
Marko Viitanen
39f0165efe
Fix a bug in TMVP, the reference cu_array was being overwritten
2016-08-10 14:09:27 +03:00
Marko Viitanen
adab8c327e
Clean TMVP code
2016-08-10 14:09:20 +03:00
Marko Viitanen
5fa8226ac9
Temporal merge candidate selection
2016-08-10 14:09:20 +03:00
Marko Viitanen
f83042f4a1
Temporal MV candidate selection
2016-08-10 14:09:19 +03:00
Marko Viitanen
f8671581e3
Implemented function kvz_inter_get_temporal_merge_candidates()
2016-08-10 14:09:19 +03:00
Marko Viitanen
2956bdb379
Added flag slice_temporal_mvp_enabled_flag
2016-08-10 14:09:19 +03:00
Arttu Ylä-Outinen
2a946bd88e
Rename encoder_state_t.global to frame
...
"Frame" is more accurate than "global" since when OWF is used, encoder
states for each frame have their own struct.
2016-08-10 13:22:36 +09:00
Arttu Ylä-Outinen
5fbb0a8c27
Fix includes
2016-08-10 13:05:40 +09:00
Arttu Ylä-Outinen
aabf6ca3ee
Extract encoding code from encoderstate.c
...
Moves functions kvz_encode_coding_tree and kvz_encode_coeff_nxn from
encoderstate.c to encode_coding_tree.c.
2016-08-09 22:16:50 +09:00
Arttu Ylä-Outinen
803f29be8f
Remove reconstructed picture allocation in lossless.
...
Changes encoder_set_source_picture to set the reconstructed picture to
a copy of the source picture instead of allocating a new picture when
lossless coding is used.
2016-08-03 14:25:08 +09:00
Arttu Ylä-Outinen
aaec473a19
Refactor encoder state initialization.
...
- Moves allocation of the reconstructed picture after the source picture
is set.
- Extracts main state initialization to a separate function from
encoder_state_new_frame.
- Changes kvz_encoder_feed_frame to return the frame.
- Renames some functions to better match their purpose.
2016-08-03 14:25:08 +09:00
Arttu Ylä-Outinen
cd7024b3a5
Skip computing SSD when using lossless coding.
...
The SSD is always zero since it is lossless.
2016-08-03 14:25:08 +09:00
Arttu Ylä-Outinen
fbbe5d1844
Use kvz_pixels_calc_ssd for SSD in search.c.
...
Replaces loops for computing SSDs by calling kvz_pixels_calc_ssd in
search.c.
2016-08-03 14:25:08 +09:00
Arttu Ylä-Outinen
22cc97ffb1
Fix missing field initializers.
2016-08-03 14:25:08 +09:00
Arttu Ylä-Outinen
06b82bf888
Disable filters, trskip and signhide in lossless.
...
When lossless coding is used, deblock and SAO are skipped, transform
skip flag is not written and sign hiding is not used.
2016-08-03 14:25:08 +09:00
Arttu Ylä-Outinen
97451ec401
Align assignments in encoder.c.
2016-08-03 14:25:08 +09:00
Arttu Ylä-Outinen
1dc94663c3
Bypass transform and quantization with --lossless.
...
When --lossless is given, set cu_transquant_bypass_flag for every CU and
bypass transform and quantization by directly copying reference pixels
to reconstruction and the residual to coefficients.
2016-08-03 14:25:08 +09:00
Arttu Ylä-Outinen
2113b0182d
Enable PPS-level tq bypass flag with --lossless.
...
Sets transquant_bypass_enable_flag to true in PPS when --lossless is
given.
2016-08-03 14:25:08 +09:00
Arttu Ylä-Outinen
a5897bbece
Make cabac context initialization tables static.
2016-08-03 14:25:08 +09:00
Arttu Ylä-Outinen
23e7d9bb37
Add --lossless command line parameter.
2016-08-03 14:25:08 +09:00
Arttu Ylä-Outinen
5372ea432f
Update README and manpage.
2016-08-03 14:25:08 +09:00
Ari Lemmetti
6bcba004ff
Comment out to fix unused code error on clang.
2016-07-14 14:12:16 +03:00
Ari Lemmetti
c0979ebdcb
Implement AVX2 luma sampling
2016-07-14 12:53:02 +03:00
Ari Lemmetti
6244560426
Add avx2 strategy for kvz_filter_frac_blocks_luma.
2016-07-14 12:53:02 +03:00
Ari Lemmetti
9c4e9e049b
Load only what is needed. Eliminate latency from hadds.
2016-07-14 12:53:01 +03:00
Ari Lemmetti
7f71cb423a
Check 4 fractional pixel positions simultaneously
2016-07-14 12:52:24 +03:00
Ari Lemmetti
ad445ab8a1
Transition to kvz_filter_frac_blocks_luma
2016-07-14 12:51:02 +03:00
Ari Lemmetti
fccfbd2f28
Add strategy for kvz_filter_frac_blocks_luma
2016-07-14 12:51:02 +03:00
Ari Lemmetti
e9c3074d32
Add buffers and definitions for upcoming filtering
...
Samples are to be filtered in separate blocks instead of
making one big picture with interpolated pixels
2016-07-14 12:51:02 +03:00
Ari Lemmetti
7afe7e963b
Use fme_level to control the search accuracy.
2016-07-14 12:51:01 +03:00
Ari Lemmetti
5fa323bf25
Skip searching best hpel twice. Make hpel and qpel loops similar.
2016-07-14 12:51:01 +03:00
Ari Lemmetti
bc98a9affa
Change the search order to suit lighter fme search
2016-07-14 12:51:01 +03:00
Ari Lemmetti
2b0c8db349
Add quad satd for avx2
2016-07-14 12:50:24 +03:00
Ari Lemmetti
0ff69fd6f8
Add any size multi satd
2016-07-14 12:48:37 +03:00
Ari Lemmetti
d17b9e7d6e
Allow subme parameters 0-4
...
Update usage, presets,defaults,lib version
2016-07-12 19:49:38 +03:00
Arttu Ylä-Outinen
62ad57d0bf
Fix kvz_image_list_add for zero-sized lists.
...
When a list does not have space for the new element, its size is
doubled. If the size of the list is zero, it would not be resized. Fixed
to always resize the list so that the new element can be added.
2016-06-22 13:35:16 +09:00
Arttu Ylä-Outinen
433e528af7
Drop unused variable in search_pu_inter.
...
Removes unused variable max_px_below_lcu.
2016-06-22 13:35:16 +09:00
Arttu Ylä-Outinen
7836ff6ec9
Drop unused functions.
...
Removes functions kvz_coefficients_calc_abs, kvz_intra_rdo_cost_compare
and kvz_rdo_cost_intra which are no longer used.
2016-06-22 13:35:15 +09:00
Arttu Ylä-Outinen
e4b5840f56
Add parentheses around macro arguments in cabac.h.
2016-06-22 13:35:15 +09:00
Arttu Ylä-Outinen
a387b74e51
Fix resolution auto-detection.
...
Only try to guess the resolution from filename when neither width nor
height is given.
2016-06-22 13:35:15 +09:00
Arttu Ylä-Outinen
097bf8f3c0
Add a typedef for mvd coding cost functions.
2016-06-20 13:56:10 +09:00
Arttu Ylä-Outinen
d3c0e49286
Update comments.
2016-06-16 20:25:08 +09:00
Arttu Ylä-Outinen
ae832cda8c
Pack cbf flags in cu_info_t to two bytes.
...
Reduces size of cu_info_t.
2016-06-16 20:24:19 +09:00
Arttu Ylä-Outinen
cad2d496b8
Enable 4x8 and 4x16 partition modes
...
Enables search for 2NxN and Nx2N partition modes for 8x8 CUs and 2NxnU,
2NxnD, nLx2N and nRx2N partition modes for 16x16 CUs.
Changes the loop for copying reconstructed luma pixels in
kvz_inter_recon_lcu to use 4 byte chunks instead of 8 byte chunks since
it is now possible to have 4 pixel wide blocks.
2016-06-16 20:23:16 +09:00
Arttu Ylä-Outinen
90df7350f0
Make deblocking work with 4 pixel wide blocks.
2016-06-16 20:21:50 +09:00
Arttu Ylä-Outinen
bf26661782
Add support for 4x4 blocks to SATD_ANY_SIZE.
...
Makes functions satd_any_size_generic and satd_any_size_8bit_avx2 work
on blocks whose width and/or height are not multiples of 8.
2016-06-16 18:53:17 +09:00
Arttu Ylä-Outinen
2ae260e422
Change width of cells in lcu_t to 4 pixels.
...
Intra mode info for NxN partition units is now stored in the
corresponding 4x4 cell in lcu_t.cu array.
2016-06-16 18:53:17 +09:00
Arttu Ylä-Outinen
360f5bb8da
Always use pixel coordinates for indexing lcu_t.
...
Removes macro LCU_GET_CU and uses LCU_GET_CU_AT_PX in its place.
2016-06-16 18:53:17 +09:00
Arttu Ylä-Outinen
46e8122d27
Add functions for indexing cu_array_t structures.
...
Replaces macro CU_ARRAY_AT with functions kvz_cu_array_at and
kvz_cu_array_at_const.
2016-06-16 18:52:19 +09:00
Arttu Ylä-Outinen
c5afabdd3b
Change width of cells in cu_array_t to 4 pixels.
2016-06-15 12:25:11 +09:00
Arttu Ylä-Outinen
57a3d9b4b9
Add a function for copying CU data from LCUs.
...
Adds function kvz_cu_array_copy_from_lcu which CU info data from an
lcu_t structure to a cu_array_t structure.
2016-06-15 12:25:11 +09:00
Arttu Ylä-Outinen
2c85a00a55
Change kvz_cu_array_alloc to use pixel dimensions.
...
Changes function kvz_cu_array_alloc to take width and height parameters
in pixels instead of SCUs.
2016-06-15 12:25:11 +09:00
Arttu Ylä-Outinen
b276a347c0
Add a macro for indexing cu_array_t.
...
Adds macro CU_ARRAY_AT(cu_array, x, y) to cu.h.
2016-06-15 12:25:11 +09:00
Arttu Ylä-Outinen
8ac1f1986e
Move CU array copy to a separate function.
...
Moves code for copying parts of cu_array_t to a new function
kvz_cu_array_copy in cu module.
2016-06-15 12:25:11 +09:00
Arttu Ylä-Outinen
41e75daed7
Fix overlapping memcpy in kvz_search_cu_smp.
...
The destination and source pointers might be equal. Fixed by replacing
the memcpy call with a simple assignment.
2016-06-15 12:25:11 +09:00
Ari Lemmetti
29af8bcd21
Remove const to match function signature
2016-06-14 18:19:40 +03:00
Eemeli Kallio
5af6ab320c
Merge branch 'me_early_terminate'
...
Conflicts:
configure.ac
src/cfg.c
src/cli.c
src/kvazaar.h
src/search_inter.c
2016-06-14 15:03:35 +03:00
Eemeli Kallio
43c7778b82
Updated version number.
2016-06-14 10:53:04 +03:00
Arttu Ylä-Outinen
23fdeeaf10
Move mv_cand and mv_dir into a bitfield in cu_info_t.
...
Reduces size of cu_info_t.
2016-06-14 12:21:57 +09:00
Arttu Ylä-Outinen
35aadf6776
Reduce size of type in cu_info_t to two bits.
...
Reduces size of cu_info_t.
2016-06-14 12:21:57 +09:00
Arttu Ylä-Outinen
1cbe844f79
Move inter and intra into an union in cu_info_t.
...
Reduces size of cu_info_t.
2016-06-14 12:21:57 +09:00
Arttu Ylä-Outinen
b6d793ef33
Drop field inter.mvd from cu_info_t
...
Instead of storing the mv differences in cu_info_t, they are computed
from the mv candidates and the motion vector. Reduces the size of
cu_info_t.
2016-06-14 12:21:57 +09:00
Arttu Ylä-Outinen
98aa906f30
Drop field coded from cu_info_t
...
It can be inferred from the position and size of the CU.
2016-06-14 12:21:57 +09:00
Arttu Ylä-Outinen
ebb10763f1
Drop field inter.mv_ref_coded from cu_info_t.
...
Storing inter.mv_ref_coded in cu_info_t is unnecessary since it can be
computed from refmap and inter.mv_ref.
2016-06-14 12:21:57 +09:00
Arttu Ylä-Outinen
4be5c8f349
Move flags into a bitfield in cu_info_t.
...
Reduces the size of cu_info_t.
2016-06-14 12:21:57 +09:00
Arttu Ylä-Outinen
30e9ee988d
Move bitcost field out of cu_info_t.inter.
...
The bitcost is only needed for the currently searched CU.
Fixes bitcost of the second PU being ignored when using SMP or AMP.
2016-06-14 12:21:57 +09:00
Arttu Ylä-Outinen
16d13ed046
Move cost field out of cu_info_t.inter
...
The cost is only needed for the currently searched CU.
2016-06-14 12:20:05 +09:00
Arttu Ylä-Outinen
c5c2c182d9
Drop unused field mode from cu_info_t.inter.
2016-06-14 12:18:17 +09:00
Eemeli Kallio
e4f1a74512
Added early termination option for motion estimation.
...
Conflicts:
src/search_inter.c
2016-06-13 16:20:35 +03:00
Wassim Hamidouche
5bc7287c67
add fix for crypro
2016-06-09 10:49:31 +03:00
Wassim Hamidouche
35634b5596
correct MV sign encryption
2016-06-09 10:49:31 +03:00
Wassim Hamidouche
15abdc6e81
correct sign encryption
2016-06-09 10:49:31 +03:00
Wassim Hamidouche
73c3203a26
encry coef transfs
2016-06-09 10:49:31 +03:00
Wassim Hamidouche
7ad5f8bbe5
encry coef transf sign
2016-06-09 10:49:31 +03:00
Wassim Hamidouche
02b0712973
fix g++ compilation
2016-06-09 10:48:44 +03:00
Ari Koivula
a2170f0763
Compile the cryptopp wrapper only when used
...
This should allow us to avoid an unnecessary dependancy to a C++
compiler.
Conflicts:
configure.ac
2016-06-07 17:11:12 +03:00
Ari Koivula
182038c743
Don't allow enabling encryption when it's not compiled in
2016-06-07 16:58:09 +03:00
Ari Koivula
8eb087120e
Make VisualStudio ignore the crypto stuff
...
Add stubs for the crypto functions so we can refer to them, even if we
never use them.
2016-06-07 16:58:09 +03:00
Wassim Hamidouche
76cb6dc6c2
add check flags
2016-06-07 10:54:26 +02:00
Ari Koivula
60ea8a359f
Add --crypto parameter
2016-06-07 10:31:40 +02:00
Wassim Hamidouche
02308d1ba6
add MVs encryption
2016-06-07 10:28:30 +02:00
Wassim Hamidouche
4637c8a828
compile Kvazaar encoder with ITpp library
2016-06-07 08:33:04 +02:00
Eemeli Kallio
8f182ac6de
Added functions select_starting_point and mv_in_merge to search_inter.c
2016-06-06 17:16:04 +03:00
Ari Koivula
fe71638a96
Fix problem with ASM compilation
...
When compiling C++ files along with C, libtool would complain about
the --tag missing, even though CC should be the default.
2016-06-06 15:47:56 +03:00
Eemeli Kallio
836a3b1daa
Added functions select_starting_point and mv_in_merge.
2016-06-06 12:18:33 +03:00
Ari Koivula
4eaacbe23e
Fix bug with lp-gop and ratecontrol
...
The first frame was always qp51 due to gop_offset being -1 for the
first frame. This fix makes it so that bits are allocated as if it was
the last (high quality) frame from the previous GOP.
2016-05-27 15:53:55 +03:00
Ari Koivula
3fbd7ed97f
Add GOP layer weights for lowdelay-P
...
When using ratecontrol with lowdelay-P, this improves BDRate by 1-25%.
Strongest effect is when using 4 layers and multiple references.
Also allow using 1 or 2 layers with ratecontrol.
2016-05-27 13:46:26 +03:00
Ari Koivula
67acead4bc
Fix referring over IDR boundary when using --gop
...
This problem resulted in an illegal bitstream with --gop=lp, because it
uses IDR's. The --gop=8 would not code IDR pictures, even when told to
with -p, which masked this problem.
This fix solves the problem with --gop=lp and also prevents references
across the intra picture in --gop=8. The intra pictures should be set
to IDR in a later fix, or an alternate method of differentiating
between IDR and non-IDR intra should be made.
2016-05-27 13:20:53 +03:00
Ari Koivula
a77dc1610e
Refactor encoder_state_remove_refs
...
I needed to debug this, so I rewrote it to make sense. There is an
obvious bug with the IDR handling that I left in place to fix in a
separate commit.
2016-05-27 13:20:45 +03:00
Eemeli Kallio
b5c05e58e0
Fixed typo in strategyselector.c
2016-05-24 11:04:29 +03:00
Ari Lemmetti
68c6f0f7b8
Enable deblocking for every preset
...
Deblocking adds very little complexity
while giving massive coding performance boost
2016-05-17 18:50:31 +03:00
Ari Lemmetti
6a07761b46
Add smp and amp options to presets
2016-05-17 14:26:58 +03:00
Ari Lemmetti
3107a93eaf
Fix avx2 chroma sampling for amp
2016-05-17 14:09:57 +03:00
Ari Koivula
24d0f9f685
Fix usage message for --hash
2016-05-11 15:03:43 +03:00
Ari Koivula
a1c772b696
Merge pull request #136 from MrAsura/cu-split-termination
...
Cu split termination
Closes #133 .
2016-05-10 17:22:08 +03:00
Jaakko Laitinen
7010526b1d
Removed tabs.
2016-05-10 15:52:44 +03:00
Jaakko Laitinen
a77eb5c874
Fixed type conversion error when parsing cu split termination.
2016-05-10 14:34:46 +03:00
Jaakko Laitinen
0d361d5bc7
Moved cu split termination from a pre-processor to a input parameter.
2016-05-10 14:15:41 +03:00
Ari Koivula
1dbe4eb852
Merge branch 'mv-full'
2016-05-10 13:28:07 +03:00
Ari Koivula
f6a9d237a3
Merge pull request #134 from miimiz/testink_eemeli
...
Strategyselector prints
2016-05-10 13:27:23 +03:00
Eemeli Kallio
8cfeed852c
Added print about SIMD optimizations available and in use to strategyselector.
2016-05-10 12:59:15 +03:00
Ari Koivula
f51a68b6fa
Add different sizes of search window for full search
2016-04-21 15:11:35 +03:00
Ari Lemmetti
efbdc5dade
Utilize registers more efficiently for 8x8 and larger blocks
2016-04-21 13:26:38 +03:00
Ari Lemmetti
192cee95b2
Vectorize vertical filtering
2016-04-21 13:26:38 +03:00
Ari Lemmetti
0be35f72b8
Filter 4 pixels simultaneously in x direction
2016-04-21 13:26:38 +03:00
Ari Lemmetti
10484bda9f
Make strategies out of fractional pixel sample functions
2016-04-21 13:26:38 +03:00
Ari Koivula
28e7548387
Fix bug in full mv search
...
This optimization led to some points not being searched.
2016-04-21 12:03:57 +03:00
Ari Koivula
2576aeee0b
Use merge candidates in full mv search
...
Perform a full search window around every mv candidate and the
0-vector.
2016-04-20 20:47:11 +03:00
Ari Lemmetti
8247faf8e0
Remove 64-bit only instruction to fix 32-bit compilation.
2016-04-19 18:05:11 +03:00
Ari Lemmetti
eb55d6b6b9
Fix writing over boundary.
2016-04-19 16:03:43 +03:00
Ari Lemmetti
bcabc6fadd
Remove pixel blit from strategies. Use memcpy instead.
2016-04-06 18:44:04 +03:00
Ari Lemmetti
2140197ccc
Tidy up coeff blit function and use memcpy again.
...
Give memcpy constants for fixed sizes to enable copying many bytes simultaneously.
2016-04-06 18:03:00 +03:00
Ari Koivula
08b4480d94
Re-add time.h include
...
Include-what-you-use wants to include sys/time.h instead, or if I
override it to include time.h it will remove the include completely.
2016-04-02 19:05:16 +03:00
Ari Koivula
61fc3e87ba
Run include-what-you-use fix_includes.py fix_includes.py
...
The includes should make more sense now and not just happen to compile
due to headers included from other headers.
Used a modified version of IWYU. Modifications were to attribute int8_t
and so on to stdint.h instead of sys/types.h and immintrin.h instead of
more specific headers.
include-what-you-use 0.7 (git:b70df35)
based on clang version 3.9.0 (trunk 264728)
2016-04-01 17:46:55 +03:00
Ari Koivula
016810d982
Move COMPILE_ macro to global.h
...
While these are only used for strategies, it's non-intuitive to have
to include strategyselector.h in every file under strategies before
including anything else.
2016-04-01 17:46:55 +03:00
Ari Koivula
8908d85d66
Change all relative includes to absolute
2016-04-01 17:46:44 +03:00
Ari Koivula
4876879b82
Add IWYU pragmas
2016-03-31 12:33:34 +03:00
Marko Viitanen
41a5f9bbbe
Fix filetime conversion to timespec
2016-03-24 10:08:11 +02:00
Ari Koivula
9139e169fe
Fix unnecessary waiting in main thread
...
The main thread has to wait for the worker threads to finish. The
pthread_cond_timedwait call used to accomplish this was given
a relative instead of absolute time, which resulted in the call
returning immediately, because the time had already passed.
This removes the now unnecessary sleeps and fixes the time given to
the pthread_cond_timedwait such that it now waits until a job finishes
or 100ms have passed.
2016-03-23 22:23:04 +02:00
Ari Koivula
e23ed231fb
Fix race condition with owf and non-square motion partitions
...
The OWF wpp limit code assumed square blocks, and as such did not work
correctly when height != width. This changes the relevant code to consider
both height and width.
2016-03-22 16:46:38 +02:00
Arttu Ylä-Outinen
d6a3e02f16
Fix calculating reference CU index in inter search
...
Fixes a possible segfault when SMP or AMP blocks are used.
2016-03-22 12:55:58 +02:00
Ari Lemmetti
f4538ab474
Copy pixels more efficiently in lcu recon.
2016-03-18 20:10:03 +02:00
Ari Koivula
5b66578f71
Add kvz_ prefix to md5 functions
...
The non kvz_ symbols were being exported in the static lib, which got caught
by Travis tests.
2016-03-18 13:13:35 +02:00
Ari Koivula
4125218cfa
Add --hash=md5
...
Add md5 through extras/libmd5 taken from HM with BSD license. It's
implemented as a generic strategy using the same interface as checksum,
so we can write a SIMD version if it seems necessary.
2016-03-18 05:23:57 +02:00
Ari Koivula
883448b8fb
Add --hash parameter
...
Allows decoded picture hash to be selected among none and checksum.
2016-03-18 05:20:15 +02:00
Ari Lemmetti
6d5f8e3aec
Define KVZ_COMPILE_ASM for the correct files.
...
Enables asm strategies again.
2016-03-17 16:21:31 +02:00
Ari Lemmetti
e502292ba8
Remove old function
2016-03-16 20:18:55 +02:00
Ari Lemmetti
c6cc96f5ec
Optimize sao band ddistortion
2016-03-16 20:16:00 +02:00
Ari Lemmetti
ab577f476f
Optimize sao reconstruct color
2016-03-16 20:15:32 +02:00
Ari Lemmetti
48bfddf4ec
Optimize calc sao edge dir
2016-03-16 20:14:50 +02:00
Ari Lemmetti
ba69992941
Optimize sao edge ddistortion
2016-03-16 20:14:19 +02:00
Ari Lemmetti
941b6b3e27
Optimize calc eo cat
2016-03-16 20:13:30 +02:00
Ari Lemmetti
04fbb48a09
Add strategy for avx2. Copy generic functions there.
2016-03-16 20:13:15 +02:00
Ari Lemmetti
4e30a215d8
Create generic strategy for sao.
2016-03-16 20:11:15 +02:00
Ari Koivula
6f431e510c
Comment and tidy threadqueue_worker
...
Carefully avoided making any changes to the logic.
2016-03-14 20:08:04 +02:00
Ari Koivula
1165ae2e1f
Increase --mv-constraint=frametimemargin margin
...
Increase the margin to be 4 luma pixels to every direction.
2016-03-14 16:02:54 +02:00
Arttu Ylä-Outinen
0eda28ced6
Fix Visual Studio warnings
...
Initialization of a struct with addresses of local variables generated
warning C4221 in encmain.
2016-03-14 14:12:21 +02:00
Ari Koivula
e91ca74733
Refactor kvz_encode_last_significant_xy
2016-03-10 18:47:16 +02:00
Ari Koivula
1fc0e8076c
Format kvz_encode_last_significant_xy whitespace
2016-03-10 18:17:45 +02:00
Ari Koivula
df9a958ef2
Merge branch 'log2'
2016-03-10 18:16:41 +02:00
Ari Koivula
4112a4364d
Remove g_to_bits table
2016-03-10 15:59:51 +02:00
Ari Koivula
9fcfba637f
Remove duplicated inline functions
2016-03-10 15:28:31 +02:00
Ari Koivula
e27ec2cc53
Add kvz_math.h for common inline math functions
...
Calling it just math.h would have prevented including system math.h.
2016-03-10 15:26:18 +02:00
Ricardo Constantino
c515796a21
Only use version prefix in kvazaar binary
...
Fixes regression since 54f08f2
causing libkvazaar version checks to not
work (i.e. pkg-config)
2016-03-09 16:13:59 +00:00
Arttu Ylä-Outinen
54f08f2bdb
Use output of git describe as version.
2016-03-09 15:04:29 +02:00
Ari Koivula
f8edf28161
Fix const qualifier warning
...
Also set the warning to an error in VS.
2016-03-09 14:16:15 +02:00
Ari Koivula
b0c3ece31e
Fix race condition when deblocking is on but SAO is off
...
Already suspected this yesterday, but didn't want to add the code to
handle it before confirming that it's actually a problem. It is.
2016-03-09 14:02:46 +02:00
Ari Koivula
1671725c72
Fix non-determinism issue with OWF WPP margin
...
The previous reasoning used deblocking and fractional motion estimation
together to arrive at a margin of 4 pixels. This was wrong, and with
either of these off, half pixel chroma interpolation could use pixels
outside the intended region.
Deblocking does not currently affect the margin needed.
2016-03-08 20:18:38 +02:00
Ari Koivula
674bfa14ce
Comment WPP deblocking and SAO
...
I was a bit unclear about exactly what happens and when regarding SAO
and deblocking when we do frame-parallel WPP parallelism, so I checked
and commented the bits that were unclear to me.
2016-03-08 19:39:04 +02:00
Ari Koivula
aec152c953
Fix OWF mv restriction limit
...
The check was done in regard to the wrong dimension, allowing the
access to unfinished parts of the frame when coding multiple frames
at the same time.
2016-03-08 17:12:43 +02:00
Ari Koivula
fda103aa7c
Refactor cfg->tiles_width_count and cfg->tiles_height_count
...
Change code everywere so these actually mean "width count" and not
"width count minus one".
2016-03-07 17:29:15 +02:00
Ari Koivula
a350eb3a1e
Fix --tiles to have the correct number of tiles.
...
The tiles_width_count etc. actually mean "count minus one".
2016-03-07 17:24:31 +02:00
Ari Koivula
49ea2d7b7f
Fix --mv-constraint=frametile
...
Option --mv-constraint=frametilemargin was being used instead of
frametile.
2016-03-07 16:41:00 +02:00
Ari Koivula
95b8dd99f6
Add --tiles parameter
...
Add new parameter --tiles that accept only uniform split. I considered
supporting the syntax of --tiles-width-split for this, but writing
--tiles=u2xu2 is just not as intuitive as --tiles=2x2, and there is
hardly ever any reason to use anything but uniform split. The more
cumbersome --tiles-width-split and --tiles-height-split parameters
are still there to allow finer control.
2016-03-07 16:33:51 +02:00
Ari Koivula
fd34dd9bc6
Fix race condition with OWF
...
There was an off by one error in the dependance setting code, which
resulted in dependencies not being set resulting in checksum errors.
For example if ref_neg=1 and owf=1.
2016-03-07 13:38:23 +02:00
Ari Koivula
81b439f4da
Optimize starting point selection in tz
...
Avoid checking zero motion vectors multiple times. The merge candidate
list often has only one or two candidates, the other being zeroes.
2016-03-04 16:48:46 +02:00
Ari Koivula
2436702c27
Optimize starting point selection in hexbs
...
Avoid checking zero motion vectors multiple times. The merge candidate
list often has only one or two candidates, the other being zeroes.
2016-03-04 16:48:12 +02:00
Ari Koivula
5327b59b45
Remove KVZ_PERF_SEARCHPX
...
It's too invasive and we don't really need it.
2016-03-04 16:48:12 +02:00
Arttu Ylä-Outinen
348ac4888b
Fix calc_mode_bits.
...
The CUs left and above the current one would be set to NULL when there
was only one CU between the current one and the left or top edge of the
frame.
2016-03-04 14:08:35 +02:00
Ari Koivula
86219aa0fc
Fix non-determinism with tiles
...
Earlier fix that fixed the supply side of the cu_array to take tile
coordinates into account should have been accompanied with this one
that does the same thing to demand side.
2016-03-03 17:39:20 +02:00
Arttu Ylä-Outinen
626b53ce85
Move sao search from encoderstate to sao.
...
Moves sao search from function encoder_state_worker_encode_lcu in
encoderstate.c to function kvz_sao_search_lcu in sao.c. Makes functions
kvz_init_sao_info, kvz_sao_search_chroma and kvz_sao_search_luma static
since they are no longer used outside sao.c.
2016-03-01 14:56:16 +02:00
Ari Koivula
cfa722e448
Reduce parallelism for tiles
...
There is still some race-condition with encoding tiles from multiple
frames, so disable this to keep the bitstream deterministic.
2016-02-29 20:20:21 +02:00
Ari Koivula
3dcc0957f8
Deal with impossible mv constraints
...
If 0,0 vector is illegal, it's possible that no legal movement vector,
is found, in which case a large cost is returned instead. The cost
overflowed and there is all sorts of silliness with converting from
double to int, but I'm not going to fix all of it because when we
remove the doubles it will all get fixed.
2016-02-29 19:18:14 +02:00
Ari Koivula
b1adf1576a
Add --mv-constraint=frametilemargin
...
Add an even stricter motion vector constraint to prevent motion vectors
to fractional pixel positions that would need pixels outside the tile.
2016-02-29 19:18:14 +02:00
Ari Koivula
f808cbf608
Allow increased parallelism for tiles
...
When movement vectors are constrained to tiles, only the same tile in
previous frame needs to be depended upon.
2016-02-29 14:33:06 +02:00
Ari Koivula
f4ebff12b0
Combine tile mv constraint with OWF mv constraint
...
This also fixes movement vectors in tiles when OWF is on. The OWF mv
constraint assumed WPP, so it didn't work with tiles.
2016-02-29 14:33:06 +02:00
Ari Koivula
7981609cd0
Add --mv-constraint=frametile
2016-02-29 14:33:06 +02:00
Ari Koivula
9dbbb7fdbc
Add --mv-constraint argument
2016-02-29 14:33:06 +02:00
Ari Koivula
1be877faf9
Fix chroma reconstruction with tiles
...
An incorrect frame boundary check caused a checksum error, because the
chroma reconstruction of the encoder was wrong. The encoder treated
horizontal tile boundaries as frame boundaries when the vertical
component of the movement vector was a multiple of 8.
2016-02-29 14:32:51 +02:00
Ari Koivula
c0dc490dd1
Fix inter non-determinism with tiles
...
CU data was being copied to the wrong place in the reference frames
cu_array, which led to uninitialized data being used as a starting
point for motion vector search.
Fixes #99 .
2016-02-26 17:05:04 +02:00
Ari Koivula
719d72925b
Add loop-input option
...
This option is useful for testing long encodes, as you don't have to
find an actual infinite input.
2016-02-18 20:00:55 +02:00
Ari Koivula
d23a5a15f1
Fix overflow in rate control
...
A 32 bit int overflowed after 2^31 bits (2Gb). It will still overflow
eventually, after 500 years of outputting 1Gb/s, but by that time,
I recon we will have fixed this properly and it's time to upgrade.
2016-02-18 16:48:21 +02:00
Ari Koivula
eeafe14946
Clean up search initialization
...
Copy lcu explicitly instead of initializing with the same parameters.
2016-02-17 14:57:31 +02:00
Arttu Ylä-Outinen
e5c84c361c
Eliminate a race condition with input thread.
...
Changes communication between the input thread and main thread in
encmain.c so that only one of them uses img_in and retval at a time.
Fixes a race condition which would sometimes result in a deadlock.
2016-02-17 12:09:19 +02:00
Ari Koivula
c40ede56ad
Allow more frame parallelism in LP-gop
...
Add dependency to the reference frame instead of the previous frame,
in order to allow more frames to be encoded in parallel when temporal
stepping >1 in LP-gop (such as --gop=lp-g8d4r1t2).
2016-02-05 17:08:24 +02:00
Arttu Ylä-Outinen
40c7198f7d
Add a script for updating README
...
Adds script tools/update_readme.sh for regenerating the "Using Kvazaar"
section of README.md from the output of "kvazaar --help".
2016-02-05 16:21:39 +02:00
Arttu Ylä-Outinen
aac5373095
Fix typos in documentation
...
Fixes a few typos in README and command line help.
2016-02-05 16:21:27 +02:00
Ari Koivula
a4915dc547
Update man and README
2016-02-04 14:16:58 +02:00
Ari Koivula
e941e21cd6
Enable errors about non-existing CLI options
...
Set opterr and optind to their normal default values.
2016-02-04 13:48:58 +02:00
Ari Koivula
7a4bf94a52
Add --version and --help
...
Also don't print help by default, because it's too long. Print a
shorter usage message instead.
2016-02-04 13:48:48 +02:00
Ari Lemmetti
99e37ec235
Update old pixel type to the current one
2016-01-30 19:33:09 +02:00
Ari Koivula
c76a0951cf
Change version to 0.8.3
2016-01-28 21:21:02 +02:00
Ari Koivula
cb2121b1aa
Double time scale when field coding is used
2016-01-28 21:04:52 +02:00
Ari Koivula
8ad7d2a714
Move interlacing stuff to libkvazaaar API
...
This moves the interlacing from CLI code to api->encoder_encode, in
order to make it possible to use field coding through the lib API.
The field order is now determined per frame, as FFmpeg gives it per
frame and it's signaled per frame.
As a side effect, the CLI also now prints info from frames instead of
fields. While we might want to extend the API in the future to allow
printing of more detailed information about fields, for now it's
more important that the CLI uses the real lib API.
PSNR calculation for interlaced frames disabled until we have a way to
avoid deinterlacing the frame when it's not necessary.
2016-01-27 15:29:45 +02:00
Ari Koivula
6952f0fcc6
Refactor interlaced reading
...
Doesn't change the way it works. Just rearranges things so it's easier
to see what is going on.
2016-01-26 13:42:41 +02:00
Ari Koivula
a46351efe1
Fix out of bounds error in interlacing
...
When field height was padded to a multiple of 8, yuv_io_extract_field
would read outside the buffer.
2016-01-26 13:41:52 +02:00
Arttu Ylä-Outinen
49677810b5
Rename config module to cfg.
...
Prevents a conflict with config.h and src/config.h so that the config.h
generated by configure is included in global.h. Fixes problems with
large input files on 32-bit systems.
2016-01-25 12:26:46 +02:00
Marko Viitanen
8e6c12b859
Merge branch 'input_reading_thread'
2016-01-25 12:00:03 +02:00
Marko Viitanen
b4a4ce848c
Use field parity for extracting correct fields from the interlaced picture
2016-01-25 10:58:12 +02:00
Marko Viitanen
441ce7728f
Fix for input_read_thread() in the case when interlaced source-scan-type is used
2016-01-25 10:57:51 +02:00
Marko Viitanen
198204a20a
Fix when using --source-scan-type=bff, offset was used for output lines
2016-01-25 10:13:51 +02:00
Ari Koivula
22b8ed43dc
Remove global.h include from kvazaar.h
...
It shouldn't have been put there as it's the lib interface.
2016-01-22 15:23:34 +02:00
Ari Koivula
249c88011e
Fix problem with >2GB input files on 32bit
2016-01-22 15:15:02 +02:00
Ari Koivula
fa1af14637
Fix includes to include global.h first everywhere
2016-01-22 15:07:49 +02:00
Ari Koivula
3bf278529c
Fix interlacing when using lib interface
...
Some flags used for interlacing were set in CLI interface, which
meant that interlacing didn't work correctly when used through
libkvazaar.
2016-01-22 14:35:20 +02:00
Marko Viitanen
0128ee26e7
Clear img_in pointer after reading it
2016-01-22 14:29:35 +02:00
Marko Viitanen
b5459c1f23
Fixed performance monitoring by adding KVZ_ prefix to GET_TIME
2016-01-22 11:27:25 +02:00
Marko Viitanen
e36237335e
Fixed memory leaks caused by the input handler thread and cleaned up the code
2016-01-22 11:27:25 +02:00
Marko Viitanen
ad9a1f6539
Input thread implementation
...
- Handle input processing in a separate thread to allow main thread more time with thread handling etc
- Significant speedup can be seen when run on ultrafast settings and on a system with great number of cores
2016-01-22 11:27:25 +02:00
Ari Koivula
5e734593c0
Add psnr argument to CLI
...
To disable calculation of PSNR for frames, printing 0.0dB instead.
2016-01-21 15:08:34 +02:00
Ari Koivula
9eba3a83cc
Add compiler flag checking to configure
2016-01-20 16:32:34 +00:00
Arttu Ylä-Outinen
d452709795
Fix compiling AVX2 strategies.
...
Option -mavx2 was omitted when compiling AVX2 strategies. This commit
moves strategies to convenience libraries so that their compilation
flags can be easily set and adds -mavx2 to CFLAGS of the AVX2 library.
2016-01-20 11:04:12 +02:00
Ari Koivula
8060e2f6ec
Delete kvazaar_version.h
...
It's not used anymore.
2016-01-19 20:40:35 +02:00
Ari Lemmetti
44656aeb19
Remove useless calculation
2016-01-19 16:35:16 +02:00
Marko Viitanen
e822c16659
Removed unneeded cpu flags causing compiling to fail on powerpc, closes #121
2016-01-18 08:55:32 +02:00
Ari Koivula
c8c0b4e8e8
Change version number for v0.8.2
2016-01-15 19:42:07 +02:00
Ari Koivula
e2402c0000
Remove kva_api_get versioning.
...
We have soname versioning now, so we should focus on getting that right
instead. This also serves as an example of correctly incrementing the
lib-version.
2016-01-15 19:39:24 +02:00
Ari Koivula
caf809f26d
Remove scons build scripts
...
Because we are not going to maintain them.
2016-01-15 17:35:35 +02:00
Ari Koivula
15e1110997
Remove reference to Makefile-old
...
Makefile-old was deleted and this reference breaks make dist.
2016-01-15 17:32:54 +02:00
Ari Lemmetti
a9decd2f40
Bump for yet another release
2016-01-14 23:23:11 +02:00
Ari Koivula
7718ac378f
Add fractional FPS support.
...
Now that we put the timing info into the bitstream, the time base must
be precisely known. Represent framerate as a fraction and add timing
info only if the old floating point framerate was not used.
Deprecate cfg->framerate so it can be removed once we get patches to
FFmpeg and libav.
Add support for (num)/(denom) format to --input-fps.
2016-01-14 22:16:53 +02:00
Ari Lemmetti
a9bd7b9e63
Bump version numbers for release v0.8.0
2016-01-14 20:38:28 +02:00
Ari Lemmetti
b605e3866e
Bye bye Makefile
2016-01-14 20:38:01 +02:00
Marko Viitanen
242edf98ad
Added calculation and writing of VUI num_units_in_tick and time_scale
2016-01-14 15:32:33 +02:00
Ari Lemmetti
daf39e348f
Add dedicated handling for blitting NxN coeffs when N is 4, 8 or 16
2016-01-13 19:27:45 +02:00
Ari Lemmetti
a2fc9920e6
Merge branch 'alternative-satd'
2016-01-13 15:00:43 +02:00
Ari Lemmetti
1ed34f2df8
Add some planar pred optimization for blocks larger than 8x8
2016-01-13 14:50:17 +02:00
Ari Lemmetti
0df88697ff
Copy generic function to AVX2 strategy
2016-01-12 23:51:18 +02:00
Ari Lemmetti
62799a9fc3
Create generic strategy of planar prediction
2016-01-12 23:50:47 +02:00
Ari Lemmetti
3cb1cebfe5
Add missing inlines
2016-01-12 23:03:31 +02:00
Ari Lemmetti
6a0b13b8b6
Remove unused functions
2016-01-12 22:55:37 +02:00
Ari Lemmetti
61155f0edd
Add 128-bit version of the functions as well
2016-01-12 22:52:00 +02:00
Ari Lemmetti
a6afb8a8f4
Small refactoring
2016-01-12 22:29:33 +02:00
Ari Lemmetti
a756f6133a
Manually unroll vertical Hadamard transform
2016-01-12 21:45:02 +02:00
Ari Lemmetti
66350aa20e
Experiment with alternative implementation of FWHT
2016-01-11 16:25:56 +02:00
Arttu Ylä-Outinen
e14858f41a
Fix build and tests.
...
- Remove non-existent file interface_main.c from library sources.
- Add file mv_cand_tests.c to test sources.
2015-12-21 16:03:55 +02:00
Arttu Ylä-Outinen
9abdee7cc3
Merge branch 'autotools'
2015-12-21 15:54:30 +02:00
Arttu Ylä-Outinen
eb6fa3d980
Fix exporting functions in library.
...
Rewrites definition of macro KVZ_PUBLIC in kvazaar.h so that
KVZ_STATIC_LIB need not be defined when building a static library.
2015-12-21 14:38:59 +02:00
darealshinji
8427a85d36
Add tests
2015-12-19 08:24:35 +01:00
Ari Koivula
1270da3626
Move files under their modules in Visual Studio
...
Also moves CLI stuff under CLI project, so they are compiled as their
own lib just like when the Makefile is used.
The file interface_main.c was an artifact from a bygone era and should have
been deleted long ago.
2015-12-17 15:39:45 +02:00
Ari Koivula
947bae24f9
Update Doxygen documentation
...
Add module information to all header files.
Update all header file documentations to briefly say what they are, and
to use the javadoc format so the brief actually gets included into the
doxygen documentation.
Remove \file from implementation files, in order to not repeat the info
from the header files.
Add files under strategies and tools to Doxygen and update the Doxygen
settings to be just plain better.
Make README be the main page of Doxygen documentation.
2015-12-17 14:05:50 +02:00
Ari Koivula
a6ea705e19
Add missing lambda to some bit costs
...
Bits were being added to rate distortion without being multiplied by
lambda in a few places. Fixing this bug also finally allows us to remove
the magic bits from the Coding Unit split decision.
I tried to find new optimum value for CU_COST and it turned out to be 2
for veryslow and 0 for superfast. The difference between 0 and 2 on
veryslow was only 0.1% however, so I don't think this parameter is
needed any longer. Before this fix the effect of removing CU_COST would
have been 0.8%.
2015-12-15 16:32:38 +02:00
Arttu Ylä-Outinen
0e33049d9e
Enable full mv search once again.
...
- Updates function search_mv_full so that it compiles and handles
non-square blocks.
- Enables compilation of search_mv_full.
- Sets full search radius to 32.
- Enables selecting full mv search with "--me full".
2015-12-15 12:26:26 +02:00
Arttu Ylä-Outinen
dbb9b0df85
Enable search for AMP blocks.
2015-12-15 11:21:46 +02:00
Arttu Ylä-Outinen
7e4f4538a4
Implement encoding AMP part modes.
...
Also adds parameter --amp for enabling AMP blocks.
2015-12-15 11:21:45 +02:00
Arttu Ylä-Outinen
c3716f7803
Add --smp option for enabling SMP blocks.
2015-12-15 11:21:45 +02:00
Arttu Ylä-Outinen
38b881c36f
Implement search_frac for rectangular blocks.
...
Replaces parameter depth of function search_frac with parameters width
and height.
2015-12-15 11:21:45 +02:00
Arttu Ylä-Outinen
864c77f6eb
Use kvz_satd_any_size in inter search.
...
Changes search_frac and kvz_search_cu_iter to use kvz_satd_any_size for
computing the SATDs instead of getting the SATD function with
kvz_pixels_get_satd_func.
2015-12-15 11:21:45 +02:00
Arttu Ylä-Outinen
056fa09ba5
Add arbitrary-sized SATD functions.
...
Adds strategy satd_any_size for generic and AVX2. The satd_any_size
functions are implemented with macro SATD_ANY_SIZE defined in
strategies-picture.h.
2015-12-15 11:21:45 +02:00
Arttu Ylä-Outinen
6bdc08b6eb
Drop unused function declaration.
...
Removes declaration of non-existent function satd_8bit_8x8_generic in
strategyselector.h.
2015-12-15 11:21:44 +02:00
Arttu Ylä-Outinen
728a6abecc
Extract macro SATD_NxN.
...
Combines definitions of macros SATD_NXN and SATD_NXN_AVX2 to macro
SATD_NxN and moves it to strategies-picture.h.
2015-12-15 11:21:44 +02:00
Arttu Ylä-Outinen
1eebfde0c5
Make tz search work with non-square blocks.
...
Replaces parameter depth with parameters width and height.
2015-12-15 11:21:44 +02:00
Arttu Ylä-Outinen
e203883f3d
Refactor kvz_filter_deblock_lcu.
...
Moves code for filtering the rightmost 4 pixels of an LCU to a separate
function filter_deblock_lcu_rightmost.
2015-12-15 11:21:44 +02:00
Arttu Ylä-Outinen
21ca74fe86
Replace deblock filter with a simple loop.
...
- Adds function is_pu_boundary.
- Moves code for filtering an edge of a single PU or TU to a new
function filter_deblock_unit.
- Replaces recursive CU tree traversal in filter_deblock_cu with
a simple loop and renames it to filter_deblock_lcu_inside.
2015-12-15 11:21:43 +02:00
Arttu Ylä-Outinen
7516fda970
Make fractional recon work with non-square blocks.
...
Adds parameter block_height to functions inter_recon_frac_luma,
inter_recon_14bit_frac_luma and inter_recon_14bit_frac_chroma so that
they can handle SMP blocks.
2015-12-15 11:21:43 +02:00
Arttu Ylä-Outinen
591a1ce6db
Turn some inter recon functions static.
...
Makes the following functions static since they are not used outside
inter.c:
- kvz_inter_recon_frac_luma
- kvz_inter_recon_14bit_frac_luma
- kvz_inter_recon_frac_chroma
- kvz_inter_recon_14bit_frac_chroma
2015-12-15 11:21:43 +02:00
Arttu Ylä-Outinen
0f531362bf
Enable Nx2N partitions.
2015-12-15 11:21:43 +02:00
Arttu Ylä-Outinen
4402e251ae
Fix kvz_get_extended_block functions.
...
The buffers allocated in functions kvz_get_extended_block_avx2 and
kvz_get_extended_block_generic were too small when the width of the
block was less than its height. Fixed to allocate correctly sized
buffers.
2015-12-15 11:21:43 +02:00
Arttu Ylä-Outinen
bdd8b1c0aa
Implement 2NxN partitions in inter search.
...
- Try using 2NxN partitions after the usual 2Nx2N.
- Adds function kvz_search_cu_smp to search_inter module.
2015-12-15 11:21:42 +02:00
Arttu Ylä-Outinen
410064e880
Split lcu_set_inter into two functions.
...
Moves code for setting the inter modes for a single PU to a new function
lcu_set_inter_pu.
2015-12-15 11:21:42 +02:00
Arttu Ylä-Outinen
3236428e4d
Make hexbs search work with non-square blocks.
...
Replaces parameter depth with parameters width and height.
2015-12-15 11:21:42 +02:00
Arttu Ylä-Outinen
31ba8d61c3
Implement fractional chroma recon for SMP blocks.
...
Adds parameter block_height to function kvz_inter_recon_frac_chroma.
2015-12-15 11:21:42 +02:00
Arttu Ylä-Outinen
0b6cef7be5
Remove unused function kvz_inter_set_block.
2015-12-15 11:21:42 +02:00
Arttu Ylä-Outinen
e63486b23f
Make lcu_set_inter work with SMP blocks.
2015-12-15 11:21:41 +02:00
Arttu Ylä-Outinen
7b99eb2970
Call recon functions correctly for SMP blocks.
...
Makes calls to kvz_inter_recon_lcu and kvz_inter_recon_lcu_bipred in
function search_cu work correctly when using SMP blocks.
2015-12-15 11:21:41 +02:00
Arttu Ylä-Outinen
dc4525c0e3
Implement inter recon for non-square blocks.
...
Adds parameter height to functions kvz_inter_recon_lcu and
kvz_inter_recon_lcu_bipred and makes them work on non-square sizes.
Fractional reconstruction functions do not handle non-square blocks yet.
2015-12-15 11:21:41 +02:00
Arttu Ylä-Outinen
f874c8614e
Add part_mode binarization table comment.
2015-12-15 11:21:41 +02:00
Arttu Ylä-Outinen
c77074a7ff
Implement encoding SMP blocks.
2015-12-15 11:21:41 +02:00
Arttu Ylä-Outinen
98707a1288
Move encoding intra CU to a separate function.
...
Moves code for encoding a single intra coding unit from function
kvz_encode_coding_tree to a new function encode_intra_coding_unit.
2015-12-15 11:21:40 +02:00
Arttu Ylä-Outinen
c336674da3
Move encoding part mode to a separate function.
...
Moves code for encoding the part mode from function
kvz_encode_coding_tree to a new function encode_part_mode.
2015-12-15 11:21:40 +02:00
Arttu Ylä-Outinen
ac952cbb44
Move encoding inter PUs to a separate function.
...
Moves code for encoding a single inter prediction unit from function
kvz_encode_coding_tree to function encode_inter_prediction_unit.
2015-12-15 11:21:40 +02:00
Arttu Ylä-Outinen
5ee9f164e8
Add macros for getting PU location and size.
...
- Moves SIZE_* definitions to cu.h.
- Adds constant arrays kvz_part_mode_num_parts, kvz_part_mode_offsets
and kvz_part_mode_sizes for storing the number of PUs, PU offsets and
PU sizes.
- Adds macros PU_GET_X, PU_GET_Y, PU_GET_W and PU_GET_H for getting the
location and size of a PU.
2015-12-15 11:21:40 +02:00
Arttu Ylä-Outinen
a3df13fb99
Make kvz_inter_get_merge_cand work with SMP blocks.
...
- Replaces parameter depth with parameters width and height.
- Adds parameters use_a1 and use_b1 for disabling the use of merge
candidates A1 and B1.
2015-12-15 11:21:40 +02:00
Arttu Ylä-Outinen
1cd149fb97
Check merge/mv candidate types earlier.
...
Moves checks for motion vector prediction and merge candidate block
types (inter/intra) from functions kvz_inter_get_mv_cand and
kvz_inter_get_merge_cand to kvz_inter_get_spatial_merge_candidates.
2015-12-15 11:21:39 +02:00
Arttu Ylä-Outinen
969c91d7c4
Add a test for kvz_inter_get_spatial_merge_candidates.
2015-12-15 11:21:39 +02:00
Arttu Ylä-Outinen
02375bf7e5
Make kvz_inter_get_mv_cand work with SMP blocks.
...
Replaces the depth parameter of kvz_inter_get_mv_cand with parameters
width and height.
2015-12-15 11:21:39 +02:00
Ari Koivula
3a80c7de74
Further optimize coefficient coding
...
Remove the need to count the coefficients by populating the significant
coefficient group map first and finding the last coefficient from the
last group afterward. The speedup is about 2% on ultrafast.
The previous version of this patch was reverted due to a bug, which
has now been fixed.
2015-12-11 16:47:55 +02:00
Ari Lemmetti
b78460b02c
Optimize another loop
2015-12-11 11:21:43 +02:00
Ari Koivula
b32965925e
Revert "Further optimize coefficient coding"
...
This reverts commit 25462124f8
.
That commit broke the bitstream. If it's not good enough to push on Friday
night, it's probably not good enough on Monday morning either.
2015-12-07 15:12:04 +02:00
Ari Koivula
865c86fef2
Remove unused variable
2015-12-07 10:32:18 +02:00
Ari Koivula
91631a1c36
Merge branch 'coeff-optimization'
2015-12-07 10:25:46 +02:00
Ari Koivula
25462124f8
Further optimize coefficient coding
...
Remove the need to count the coefficients by populating the significant
coefficient group map first and finding the last coefficient from the
last group afterward.
2015-12-07 10:23:01 +02:00
Ari Koivula
c94707e6e8
Fix bug with OWF+FME+deblocking
...
Increases the MV safety margin of OWF from 2 to 3 when deblocking
is used and 4 when both deblocking and FME are used.
Fractional pixel motion estimation can move the vector one more pixel
down causing checksum error. This fixes that error by increasing the
OWF safety margin and changes the interface, so that different margin
can be used when FME or deblocking are not in use.
2015-12-04 15:26:56 +02:00
darealshinji
fe2ff12244
fix building with autotools
2015-12-03 22:41:24 +01:00
darealshinji
b6d3510c2e
pkg-config: move -lm to Libs.private
2015-12-03 22:39:27 +01:00
Ari Lemmetti
6fe223c4dc
Nonzero calculation magic
2015-12-03 18:29:44 +02:00
Ari Lemmetti
f2d8cd4d64
Merge branch 'intra-search-multi'
2015-12-03 17:25:52 +02:00
Ari Lemmetti
c4e1552ef6
Replace original rough intra search
2015-12-03 17:13:11 +02:00
Ari Lemmetti
ee8c2d0218
Add 4x4 dual SATD for AVX2
2015-12-03 17:13:11 +02:00
Ari Lemmetti
00736fa708
Generate larger than 8x8 dual satd functions with macro
2015-12-03 17:13:11 +02:00
Ari Lemmetti
bd3e1922cd
Add AVX2 8x8 dual hadamard transform
2015-12-03 17:13:11 +02:00
Ari Lemmetti
d575b94357
Implement generic functions for dual sad / satd
2015-12-03 17:13:11 +02:00
Ari Lemmetti
183ee53f47
Add alternative version of rough intra search.
...
Calculate two costs simultaneously to exploit larger SIMD registers.
Implementation for dual functions missing currently.
2015-12-03 17:12:38 +02:00
darealshinji
8ff28ec974
Make dynamic linking easier
2015-12-01 14:34:08 +01:00
Arttu Ylä-Outinen
21e19067fe
Extract inter search in a single ref frame.
...
Moves code for doing inter search in a single reference frame from
function kvz_search_cu_inter to a new function search_cu_inter_ref.
2015-11-18 11:16:27 +02:00
Arttu Ylä-Outinen
f9f3d5929e
Use macros for indexing cu_array in lcu_t.
...
Replaces accesses cu_array with macro calls and adds macros
LCU_GET_TOP_RIGHT_CU and CU_GET_CU.
2015-11-18 11:16:27 +02:00
Arttu Ylä-Outinen
8db8f3d523
Use macro SUB_SCU where possible.
...
Replaces expressions like (x & 0x3f) with SUB_SCU(x).
2015-11-18 11:16:26 +02:00
Arttu Ylä-Outinen
9532d79adb
Add macros for indexing cu array in lcu_t.
...
- Adds macros LCU_GET_CU and LCU_GET_CU_AT_PX to cu.h.
- Replaces accesses to the cu array of lcu_t by calls to these macros.
2015-11-18 11:16:26 +02:00
Arttu Ylä-Outinen
39302b0328
Refactor inter_clear_cu_unused.
...
Replaces duplicated code with a for loop.
2015-11-18 11:16:26 +02:00
Arttu Ylä-Outinen
33208ac9fb
Add a comment explaining the cu array in lcu_t.
2015-11-18 11:16:25 +02:00
Arttu Ylä-Outinen
e0b02599a5
Refactor filter_deblock_edge_ functions.
...
Replaces repetitive calls to kvz_filter_deblock_luma and
kvz_filter_deblock_chroma with loops in functions
filter_deblock_edge_luma and filter_deblock_edge_chroma.
2015-11-18 11:12:32 +02:00
Arttu Ylä-Outinen
43fc6ac419
Mark deblock functions static.
...
Marks the following functions static and removes them from filter.h
since they are not used outside the filter module.
- kvz_filter_deblock_luma
- kvz_filter_deblock_chroma
- kvz_filter_deblock_edge_luma
- kvz_filter_deblock_edge_chroma
- kvz_filter_deblock_cu
2015-11-18 11:12:31 +02:00
Arttu Ylä-Outinen
c93a190940
Refactor deblocking filter functions.
...
- Replace parameter depth in kvz_filter_deblock_edge_{luma,chroma} with
length.
- Move checking whether an edge needs to be filtered from functions
kvz_filter_deblock_edge_{luma,chroma} to functions
kvz_filter_deblock_{cu,lcu}.
- Use pixel coordinates instead of 8-pixel block coordinates in
kvz_filter_deblock_cu.
- Add comments.
These changes should make it easier to modify the deblocking filter to
handle SMP and AMP blocks.
2015-11-18 11:12:31 +02:00
Arttu Ylä-Outinen
863bd1c55d
Replace EDGE_ macros with an enum in filter.
...
Replaces macros EDGE_HOR and EDGE_VER with enum edge_dir.
2015-11-18 11:12:30 +02:00
Ari Koivula
b6e443f3ce
Fix bug in lp-gop parsing
...
Unnecessary mod operation resulted in 0 as the reference delta.
2015-11-16 11:58:57 +02:00
Ari Koivula
cfe834bb53
Merge branch 'lowdelay_GOP'
...
Conflicts:
README.md
2015-11-14 00:05:13 +02:00
Ari Koivula
5ae97b46c6
Remove redundant LP-GOP structures
...
These structures can now be defined with the LP-GOP syntax.
The syntax for lb is g4d3r4t1 and for ultralow it is g8d3r1t1.
2015-11-14 00:01:29 +02:00
Ari Koivula
d2de2aa6aa
Add "lp-g8d4r2t2" style GOP selection
...
This is my own syntax that I've been using when testing this feature.
It allows for defining some simple type of hierarchical GOP structures.
2015-11-14 00:01:28 +02:00
Ari Koivula
b10866cb1e
Fix SPS ref pic counts for lowdelay GOP
2015-11-13 23:11:11 +02:00
Ari Koivula
a6a713ac02
Use P-slices for lowdelay GOPs
2015-11-13 23:11:11 +02:00
Ari Koivula
0722f461c5
Fix compiling tests on mac
...
The mac version of KVZ_GET_TIME macro has many statements, which
prevented it being used inside a for loop statement. Added brackets
to all versions to prevent this issue arising in the future.
Fixes #115 .
2015-11-13 22:57:29 +02:00
Ari Koivula
93637f4683
Move macros in threads.h to KVZ_ namespace
2015-11-13 22:46:32 +02:00
Arttu Ylä-Outinen
95fb2ed9ed
Fix unexpected behavior of --deblock option.
...
Giving a single number as an argument to --deblock option would enable
deblocking and set both beta and tc to that value. This commit changes
a single number argument to be interpreted as a boolean specifying
whether to enable deblocking or not. As a result, "--deblock 0" can be
now used to disable deblocking.
This fixes deblocking being enabled in all presets.
2015-11-13 14:22:42 +02:00
Arttu Ylä-Outinen
60ad19d0c8
Fix --deblock option.
...
Fixes --deblock option so that it takes a "beta:tc" argument as
advertised in the README and command line help.
2015-11-13 14:22:42 +02:00
Arttu Ylä-Outinen
8960ce369e
Reject extra command line arguments.
...
Changes the command line program to print an error and exit instead of
silently ignoring non-option arguments.
2015-11-13 13:57:00 +02:00
Arttu Ylä-Outinen
e42f1351f9
Call config_parse through the api struct in cli.
...
Replaces a call to kvz_config_parse with api->config_parse.
2015-11-09 14:31:04 +02:00
Arttu Ylä-Outinen
87ca9e1856
Drop an unnecessary call to kvz_threadqueue_flush.
...
Removes threadqueue dependency from the command line program.
2015-11-09 14:31:04 +02:00
Arttu Ylä-Outinen
b1abe65e83
Move kvz_get_padding to encmain.
2015-11-09 14:31:03 +02:00
Arttu Ylä-Outinen
0eb1e710e6
Move PSNR computation from videoframe to encmain.
...
Moves function kvz_videoframe_compute_psnr to encmain and renames it to
compute_psnr. Removes videoframe dependency from the command line
program.
2015-11-09 13:50:43 +02:00
Arttu Ylä-Outinen
940ada4c0d
Mark AVX2 intra filter functions as static.
...
Marks functions filter_4x4_avx2, filter_16x16_avx2 and filter_NxN_avx2
static as they are not used outside strategies/avx2/intra-avx2.
2015-11-09 12:48:20 +02:00
darealshinji
f51e3847b6
Fix cross-building on Linux
2015-11-06 21:53:44 +01:00
Marko Viitanen
94bec1b444
Cleanup of mv-rdo, removed unused functions
2015-11-05 14:40:06 +02:00
Marko Viitanen
0cb57961b0
Use dynamically selected get_mvd_cost function for MV candidate selection
2015-11-05 14:31:37 +02:00
Marko Viitanen
bb4f50aded
Added mv-rdo commandline parameter and use it in presets
2015-11-05 13:59:30 +02:00
Marko Viitanen
4e7e9eefbf
Enable usage of MV RDO with a config parameter (in hexbs, tz, frac, bipred)
2015-11-05 12:24:03 +02:00
Marko Viitanen
9a535e1c56
Added missing kvz_ prefixes and fixed some warnings
2015-11-05 09:07:59 +02:00
Marko Viitanen
822c174377
Set cabac to only count bits
2015-11-05 09:07:59 +02:00
Marko Viitanen
1ed0d85020
Added a function for cabac mvd coding cost get_mvd_coding_cost_cabac()
...
Conflicts:
src/rdo.c
2015-11-05 09:07:59 +02:00
Marko Viitanen
6a2658cc74
Added calc_mvd_cost_cabac() to calculate real bits used for motion vectors
...
Conflicts:
src/rdo.h
src/search_inter.c
Conflicts:
src/rdo.c
2015-11-05 09:07:59 +02:00
Ari Lemmetti
fbd0596114
Merge branch 'avx2-pixels-blit'
2015-11-04 11:06:10 +02:00
Ari Lemmetti
57ea7d223b
Pass SIMD registers to functions as pointers to fix 32-bit compilation in visual studio
2015-11-04 10:51:26 +02:00
Ari Lemmetti
a3855652e9
Add AVX2 version with separate handling of basic blocks and strideless copy.
2015-11-04 10:07:25 +02:00
Ari Lemmetti
0816fbea2c
Create generic strategy of blit function
2015-11-04 10:07:25 +02:00
Ari Koivula
5c1ff57f9f
Add corresponding option for every "--no-X" option
...
Needed in order to turn back options turned off by presets.
2015-11-04 00:12:26 +02:00
Ari Koivula
8d9e8aad73
Fix lambda calculation to match HM
...
The lambda was not being increased for non-key frames and was different
in other ways too. The new implementation matches HM.
2015-11-03 16:49:42 +02:00
Ari Koivula
ba47b3cdb1
Make --preset accept numbers
...
Ultrafast corresponds to 0 and placebo to 9.
2015-11-03 15:46:23 +02:00
Ari Koivula
74ee2f3b27
Redefine presets and include them in README.
2015-11-03 15:26:34 +02:00
Marko Viitanen
27e743a507
Added a commandline option for using a preset
...
- Defined presets: ultrafast, superfast, veryfast, faster, fast, medium,
slow, slower, veryslow, placebo
2015-11-03 12:25:06 +02:00
Marko Viitanen
641c204277
Use lowdelay flag in GOP for not using input picture caching
...
- Reduced layers to 3 in LB
2015-11-02 12:36:41 +02:00
Marko Viitanen
9a99f7972f
New GOP structure for ultralow delay
2015-11-02 11:33:16 +02:00
Marko Viitanen
388986399f
Added a definition for low-delay B GOP structure
2015-11-02 10:53:06 +02:00
Marko Viitanen
821d5c478b
Added missing parameter to kvz_strategy_register_picture_generic()
2015-11-02 08:55:54 +02:00
Ari Lemmetti
6dce1f1e33
Update versions for a new release
2015-10-30 17:31:55 +02:00
Ari Lemmetti
d71f1b5bd0
Disable incompatible optimizations for 32-bit version
2015-10-24 15:32:27 +03:00
Ari Lemmetti
df995d85e8
Utilize AVX2 for dequantization.
2015-10-23 20:17:08 +03:00
Ari Lemmetti
cf347e33c4
Move dequant to strategies. Copy generic to AVX2 as well.
2015-10-23 19:53:50 +03:00
Ari Lemmetti
47082738aa
...and the same tricks for quantized reconstruction
2015-10-23 19:44:38 +03:00
Ari Lemmetti
7961ba80d8
Add functions for bigger block sizes to calculate more residual simultaneously and reduce memory accesses
2015-10-23 19:11:56 +03:00
Ari Lemmetti
15edd5060d
Load and store multiple elements simultaneously. Use 128-bit wide zero
...
test. *wip*
2015-10-23 17:03:16 +03:00
Ari Lemmetti
b37cca87c8
Copy generic to avx2
2015-10-23 17:03:15 +03:00
Ari Lemmetti
cad2ea9d6e
Move quantize_residual to quant strategies.
2015-10-23 17:03:15 +03:00
Ari Lemmetti
c013e58f0c
Merge branch 'avx2-faster-angular'
2015-10-23 16:54:35 +03:00
Ari Lemmetti
0c63041ba7
Add filtering functions for different block sizes. Simplify logic a bit to reduce branching. Sorry for the large commit!
2015-10-23 16:54:15 +03:00
Arttu Ylä-Outinen
f7b6365db8
Merge pull request #109 from lu-zero/master
...
version: Bump
2015-10-23 12:26:01 +03:00
Luca Barbato
7ecd9c7284
version: Bump
...
d5f3778f72
provided a new interface
2015-10-23 10:02:28 +02:00
Arttu Ylä-Outinen
1cf55f066f
Fix memory leak in encoder_headers.
...
The header data was not freed when data_out was NULL.
2015-10-23 09:55:08 +03:00
Arttu Ylä-Outinen
a1272e98f8
Prevent disabling VPS from command line.
...
Disabling VPS when using the command line encoder would result in an
invalid bitstream.
2015-10-19 11:25:29 +03:00
Arttu Ylä-Outinen
024fedff57
Disable writing VPS when vps_period is negative.
...
Turns vps_period in struct encoder_control_t into a signed value.
Negative values are interpreted as "never send parameter sets."
2015-10-19 11:25:18 +03:00
Arttu Ylä-Outinen
d5f3778f72
Add function encoder_headers to API.
...
This provides means for obtaining the VPS, SPS and PPS separately from
the rest of the bitstream.
2015-10-16 11:47:27 +03:00
Arttu Ylä-Outinen
037b72c72b
Add parameter stream to VPS, SPS and PPS encoding.
2015-10-14 14:40:45 +03:00
Arttu Ylä-Outinen
db17d33b0b
Simplify code in encoder_state-bitstream.
2015-10-14 12:37:26 +03:00
Luca Barbato
15fd8241a9
build: Replace a sed expression with a simpler awk
...
The former does not work for sure on macosx.
2015-10-10 12:42:24 +02:00
Luca Barbato
a44d24ce40
build: Drop a trailing space
2015-10-10 12:42:10 +02:00
Ari Lemmetti
5af7a42ebe
Enable AVX2 strategy. Add first version of optimizations.
2015-10-08 12:36:20 +03:00
Ari Lemmetti
f4fe3dca5e
Add AVX2 strategy. Copy generic implementation there.
2015-10-08 12:36:15 +03:00
Ari Lemmetti
54e8b346a3
Add intra strategy. Move angular prediction there.
2015-10-08 12:36:05 +03:00
Ari Lemmetti
c123b97fec
Remove option -fno-lto from strategies. LTO is no longer used anyway.
2015-10-05 19:34:56 +03:00
Ari Koivula
ff976e2afc
Arrange parameters in intra fancily
2015-10-05 06:23:14 +03:00
Ari Koivula
d83d57df1a
Fix function names in intra
...
Prefix non-static functions with kvz_intra_ and static with intra_.
2015-10-05 06:23:14 +03:00
Ari Koivula
30b4fa4247
Rename intra prediction to kvz_intra_predict
2015-10-05 06:23:14 +03:00
Ari Koivula
7280dbf429
Remove unnecessary function
...
This function used to be more complicated, but now it's so simple that
it's just obfuscating what's happening.
2015-10-05 06:23:05 +03:00
Ari Koivula
1221e4c7d2
Remove old intra prediction code.
2015-10-05 05:30:47 +03:00
Ari Koivula
23439557e6
Remove remaining usages of old intra prediction
2015-10-05 05:23:22 +03:00
Ari Koivula
ca3ba997aa
Switch to new intra pred in search_intra_chroma_rough.
2015-10-05 05:03:58 +03:00
Ari Koivula
eaff6e29d9
Switch to new intra pred in kvz_search_cu_intra
2015-10-05 04:00:42 +03:00
Ari Koivula
55d741e250
Switch to new intra pred in kvz_intra_recon_lcu_chroma
2015-10-05 04:00:42 +03:00
Ari Koivula
678a1dd1dd
Switch to new intra pred in kvz_intra_recon_lcu_luma
2015-10-05 02:29:02 +03:00
Ari Koivula
cd2f1797bf
Add reimplemented intra prediction code
...
Just along side for now to help with debugging.
The main difference with the new versions is that they take and output
width**2 blocks and two width*2+1 arrays of reference samples,
instead of the (2*width+8)**2 blocks the old ones do. This should make
the interface clearer and the memory footprint smaller.
Also commented the shit out of angular prediction, so hopefully Ari L.
will have an easier time with a SIMD implementation.
2015-10-05 02:29:02 +03:00
Ari Koivula
115756b9d7
Accept --rd=3 parameter
2015-10-05 02:28:56 +03:00
Ari Lemmetti
7a3dabf43e
Merge branch 'avx2-quant'
2015-10-02 16:31:33 +03:00
Ari Lemmetti
38106afa50
Add AVX2 version of quantization.
2015-10-02 16:18:52 +03:00
Ari Lemmetti
ef0ad292ef
Add quantization strategy.
2015-10-02 16:17:02 +03:00
Ari Koivula
41dd44f7cf
Fix warnings with -DNDEBUG
2015-10-02 15:13:07 +03:00
Ari Koivula
81f5ca76cb
Accept tile configurations with either dimension as one
2015-10-02 15:06:31 +03:00
Ari Lemmetti
989cee1b04
Add 4x4 function as well
2015-10-01 22:14:56 +03:00
Ari Lemmetti
8b57b2bb1a
Refactor SATD to inline most of the function. Replace full horizontal add with shuffle and regular packed add.
2015-10-01 21:29:25 +03:00
Ari Lemmetti
55da2a9958
Add intrinsic version of SATD for 8x8 and larger blocks
2015-10-01 19:42:22 +03:00
Ari Lemmetti
d68fc4c41e
Add header for common utilities to use with strategies.
2015-10-01 19:40:35 +03:00
Arttu Ylä-Outinen
512e5bb25f
Bump version to 0.7.0
2015-09-30 15:20:57 +03:00
Arttu Ylä-Outinen
8f404a3b6f
Add NAL unit type to frame_info.
2015-09-28 10:30:59 +03:00
Arttu Ylä-Outinen
1c898a2f4a
Prefix NAL unit type enum constants with KVZ_.
2015-09-28 10:30:58 +03:00
Arttu Ylä-Outinen
4e5c7fe6e8
Remove function kvz_encoder_compute_stats.
...
Changes main function to compute frame PSNR by calling
kvz_videoframe_compute_psnr directly with the source and reconstructed
pictures returned from encoder_encode.
2015-09-28 10:30:58 +03:00
Arttu Ylä-Outinen
efd361ee8e
Return the original picture from encoder_encode.
2015-09-28 10:30:58 +03:00
Arttu Ylä-Outinen
afd0d3eee0
Remove encoderstate dependency from cli module.
...
Changes function print_frame_info to use a kvz_frame_info struct to get
the data to be printed.
2015-09-28 10:30:58 +03:00
Arttu Ylä-Outinen
7edc1b0b1c
Add reference picture lists to kvz_frame_info.
2015-09-28 10:30:57 +03:00
Arttu Ylä-Outinen
d5dceb45f1
Factor out a function for building ref lists.
...
The code for building the reference picture lists was duplicated in
functions encoder_state_ref_sort and print_frame_info. This commit moves
it to a new function kvz_encoder_get_ref_lists. Also makes
encoder_ref_insertion_sort static since it is not used outside the
encoderstate module any more.
2015-09-28 10:30:57 +03:00
Arttu Ylä-Outinen
c856a6b598
Output frame info from encoder_encode.
...
Adds a new output parameter info_out to encoder_encode. It returns
a struct containing information about the encoded frame, including POC,
QP and slice type.
2015-09-28 10:30:57 +03:00
Arttu Ylä-Outinen
173b70b53f
Rename SLICE_* enum constants to KVZ_SLICE_*.
2015-09-28 10:30:56 +03:00
Ari Koivula
63ab4068be
Clean up the makefile a bit
...
Use the existing TARGET_CPU_ARCH and TARGET_CPU_BITS instead of filtering
ARCH over and over again.
Comment some of the more obscure parts.
2015-09-18 15:13:13 +03:00
Ari Koivula
eb12fe0d98
Re-enable disabled -m32 and -m64 flags.
2015-09-18 12:13:31 +03:00
Ari Koivula
9537b996e7
Make makefile work on arm
...
Only compile x86 specific optimizations for x86 and don't give
-m32 or -m64 on arm.
2015-09-18 00:23:49 +03:00
Ari Koivula
d76890bbff
Bump version to 0.6.1
2015-09-16 18:42:20 +03:00
Ari Koivula
1d5cfbdcc2
Remove unused variable.
2015-09-16 18:39:46 +03:00
Ari Koivula
513e80bcca
Fix bug causing unnecessary copying of memory
...
This bug caused a single tiles worth of lcu_info_t structs to be copied
unnecessarily for every LCU in the frame. This obviously caused huge
memory bandwidth issues when coding large frames without tiles. The
effect was minimized somewhat with a large number of tiles, because
only the current tile was copied.
From context it is clear that this piece of code was supposed to copy
a single tile or frame, once the frame was done, but because it was
placed in a function which is called for every LCU, it copied the data
for the LCU, but also lots of extra stuff.
The fix is to copy only the current LCU instead of the whole tile.
2015-09-16 18:23:44 +03:00
Marko Viitanen
d8b50d6951
Bump version to 0.6.0
2015-09-15 15:44:55 +03:00
Marko Viitanen
5b3f2a6229
Merge branch 'pkgconfig-fix'
2015-09-15 15:37:49 +03:00
Ari Koivula
f1ac0e6bc2
Rename _DEBUG to KVZ_DEBUG
2015-09-15 13:04:03 +03:00
Ari Koivula
ec2d8d6ad7
Rename _DEBUG_PERF macros to KVZ_PERF
...
And move them to threadqueue.h, where the things that use them are.
2015-09-15 13:03:32 +03:00
Arttu Ylä-Outinen
4db06bcf07
Use correct version in kvazaar.pc.
...
Changes kvazaar.pc to use kvazaar version instead of the library
version. The version number is extracted from global.h using sed.
2015-09-15 12:57:34 +03:00
Marko Viitanen
3217e70f99
Revert "Revert "Fix keeping of reference frames over IDR boundary.""
...
This reverts commit 87936eb99f
.
Conflicts:
src/encoderstate.c
2015-09-14 14:31:58 +03:00
Arttu Ylä-Outinen
b4ec664fc9
Set DTS values of output pictures.
...
Adds field dts to struct kvz_picture and rewrites kvz_encoder_feed_frame
to set the DTS when returning pictures.
2015-09-14 14:16:56 +03:00
Arttu Ylä-Outinen
25c23aa298
Remove static variables from kvz_encoder_feed_frame.
...
Adds struct input_frame_buffer_t for storing the input buffer state.
2015-09-14 14:12:19 +03:00
Arttu Ylä-Outinen
1d2a398197
Move function kvz_encoder_feed_frame to a separate module.
...
Adds module input_frame_buffer.
2015-09-14 14:12:18 +03:00
Arttu Ylä-Outinen
009717bf7c
Remove unused field bitstream_length from kvz_encoder.
2015-09-14 14:12:18 +03:00
Arttu Ylä-Outinen
97913cee40
Add pts field to kvz_picture.
...
The pts field can be used to set the presentation timestamp of the input
frames. The timestamps are copied to the reconstructed frames.
2015-09-14 14:12:00 +03:00
Ari Koivula
24618c90ce
Fix wrong type in debug code.
...
- This type is expected by outside debug scripts. It does not have to
match the function name.
2015-09-10 16:07:18 +03:00
Ari Koivula
0ac2bc31a3
Put parenthesis around _DEBUG.
...
- To protect against precedence issues.
2015-09-10 16:06:19 +03:00
Ari Koivula
3958e8b6f7
Handle VS warnings with _DEBUG.
...
- Conditional expression is constant was being triggered by debug code.
2015-09-10 14:16:42 +03:00
Ari Koivula
cb1a206c74
Dump threading data structures only with _DEBUG_PRINT_THREADING_INFO.
...
- They are usually not needed when using _DEBUG.
2015-09-10 14:16:42 +03:00
Arttu Ylä-Outinen
70b3e10e27
Fix a crash with owf=4, gop=8, frames=10.
...
A call to kvz_threadqueue_waitfor caused the tqj_bitstream_written field
of the previous encoder state to become a dangling pointer, subsequently
causing an assertion to fail. This would only occur when the encoder
state used for a new frame was not the last finished one.
Fixed by setting tqj_bitstream_written to NULL after the job is done and
removing unnecessary calls to kvz_threadqueue_waitfor.
2015-09-07 15:37:04 +03:00
Arttu Ylä-Outinen
3c35f470a1
Fix get_ctx_cu_split_model.
2015-09-02 11:47:03 +03:00
Ari Koivula
9a23ae3d92
Resolve remaining Visual Studio warnings.
...
- Ignore most of them and fix the ones that can't be ignored.
2015-08-31 15:02:25 +03:00
Luca Barbato
efe5291427
build: Drop the gnu-only option Deterministic
...
Unbreak building on MacOSX and possibly other BSDs.
2015-08-29 10:38:10 +02:00
Ari Koivula
c52f7858ab
Use long start code in picture_timing_sei if it's first NAL in AU.
2015-08-27 15:23:34 +03:00
Ari Koivula
69d1059602
Fix access unit delimiter.
...
- The nal header was written after the pic_type.
2015-08-27 15:18:25 +03:00
Ari Koivula
9584cd7352
Move rbsp_trailing_bits elements to encapsulating functions.
...
- Also add missing bitstream align. It's unnecessary as the version can't not
be byte aligned.
2015-08-27 15:18:18 +03:00
Ari Koivula
207367f317
Add new kvz_bitstream_align which only aligns when needed.
...
- Changing picture_timing_sei_message to align doesn't change anything, but
protects against future changes if more data is added there in future.
2015-08-27 15:16:20 +03:00
Ari Koivula
b2fb1b6d4a
Rename kvz_bitstream_align to kvz_bitstream_rbsp_trailing_bits.
...
- The syntax is called rbsp_trailing_bits in spec and 1 byte is added
even when the bitstream is already aligned, so align is a bad name.
2015-08-27 14:33:30 +03:00
Arttu Ylä-Outinen
3a10e9e3e0
Prefix all non-static symbols with "kvz_".
2015-08-26 13:02:28 +03:00
Arttu Ylä-Outinen
bfe2b31cee
Make generic satd functions static.
2015-08-26 12:10:27 +03:00
Arttu Ylä-Outinen
d0bc58a874
Document the library API in more detail.
2015-08-26 12:10:27 +03:00
Arttu Ylä-Outinen
04ba5dca41
Make config_destroy accept a NULL pointer.
2015-08-26 12:10:26 +03:00
darealshinji
87a4e53c35
Makefile: add $(CPPFLAGS), use -Wl,-z,noexecstack and install development files on Linux
2015-08-22 16:00:26 +02:00
Ari Lemmetti
3661f3f3f5
Fix incorrect free on error
2015-08-21 18:26:12 +03:00
Ari Lemmetti
4103bd2786
Add missing padding for frame allocation
2015-08-21 17:25:54 +03:00
Ari Lemmetti
d6c3363dc8
Merge branch 'interlacing_experimental'
2015-08-21 15:50:24 +03:00
Ari Lemmetti
ed7948810e
Fix help message and update README.md
2015-08-21 15:29:48 +03:00
Ari Lemmetti
68fcc67a16
Add extraction of fields according to source scan type
2015-08-21 15:15:20 +03:00
Ari Lemmetti
581ff95412
Write flags and SEI messages for interlacing.
2015-08-21 14:46:05 +03:00
Arttu Ylä-Outinen
38893d2da1
Use the static lib to link the program.
...
Changes the Makefile to use the static library and additional object
files as linker input instead of all the object files when linking the
command line program.
2015-08-20 16:42:29 +03:00
Arttu Ylä-Outinen
cb49586d36
Add static library target to Makefile.
...
Adds targets libkvazaar.a and install-static to the Makefile.
2015-08-20 16:42:29 +03:00
Arttu Ylä-Outinen
23159e45b7
Rename LIB_OBJS to SHARED_OBJS in Makefile.
...
SHARED_OBJS is a more appropriate name since the objects are only used
for building shared libraries, not static ones.
2015-08-20 16:42:28 +03:00
Arttu Ylä-Outinen
8488ba1bb7
Remove unnecessary objects from libraries.
...
Removes the cli and yuv_io modules from libraries.
2015-08-20 16:42:28 +03:00
Arttu Ylä-Outinen
dd874a0a4a
Move writing of reconstructed picture to encmain.
...
- Removes parameter recout of function encoder_compute_stats.
- Now only encmain uses the yuv_io module.
2015-08-20 16:42:28 +03:00
Ari Lemmetti
923f4a74d5
Fix filtering over limits
2015-08-17 17:39:56 +03:00
Ari Lemmetti
febe66f148
Fix typo
2015-08-17 16:16:11 +03:00
Ari Lemmetti
82cf4e8ff4
Output error messages to stderr
2015-08-17 15:01:46 +03:00
Ari Lemmetti
3da71b62bf
Add checks if malloc fails
2015-08-17 15:01:46 +03:00
Ari Lemmetti
4718fe7fda
Change variable names to match used convention
2015-08-17 15:01:46 +03:00
Ari Lemmetti
6a5eaf08de
Rename extend_borders to get_extended_block. Add kvz_ prefix to type definition.
2015-08-17 15:01:46 +03:00
Ari Lemmetti
d82582c37c
Changes to extend border function.
...
Now outputs a pointer to a block with guaranteed padding for filtering.
Only generate extra pixels if samples are needed out of bounds.
Use memcpy otherwise.
2015-08-17 15:01:46 +03:00
Ari Lemmetti
fc038cb8bf
Add --source-scan-type parameter
...
Options progressive (default)
tff for top field first
bff for bottom field first
2015-08-13 12:53:14 +03:00
Ari Lemmetti
4dcc0d876d
Fix rate control when --owf=auto (default)
...
Value in cfg stays -1 if auto selection is used.
Use value in encoder instead.
2015-08-12 18:20:57 +03:00
Ari Lemmetti
5d96dbc6c0
Make strategy selection use bit depth given via parameter instead of excluding registration with defines
2015-08-12 13:33:38 +03:00
Ari Lemmetti
4122f36089
Prevent the registration of strategies that are incompatible when KVZ_BIT_DEPTH != 8
...
Remove unnecessary or misleading mentions of "8bit"
2015-08-12 11:29:53 +03:00
Ari Lemmetti
33b6481660
Remove unused variables.
2015-08-11 15:53:40 +03:00
Ari Lemmetti
348d7780fc
Remove third shift and offset from 14-bit sampling functions (change missing from rebase)
2015-08-11 15:06:16 +03:00
Marko Viitanen
8409317bd9
Fixed rebasing errors for 10bit branch
2015-08-11 14:56:45 +03:00
Marko Viitanen
58f12bd530
Changed frame 8bit to 10bit conversion to be done without memory allocation
2015-08-11 08:18:14 +03:00
Marko Viitanen
6453a511d7
Scale SAD/SATD costs to match bit depth
...
Conflicts:
src/image.c
2015-08-11 08:18:14 +03:00
Marko Viitanen
0304b6c412
Fixed luma interpolation filter when 10bit coding and some other minor fixes
2015-08-11 08:17:48 +03:00
Marko Viitanen
450b5e64ca
Fixed overflow on generic ipol filters when 10bit encoding
...
Conflicts:
src/strategies/generic/ipol-generic.c
2015-08-11 08:17:48 +03:00
Marko Viitanen
191d3e4d87
Fixed RDOQ on 10bit encoding
2015-08-11 08:14:35 +03:00
Marko Viitanen
414ebe6101
Fixed checksum on bitdepth > 8 cases
...
Conflicts:
src/nal.c
src/nal.h
src/strategies/generic/nal-generic.c
src/strategies/strategies-nal.c
src/strategies/strategies-nal.h
2015-08-11 08:14:35 +03:00
Marko Viitanen
57ab46f110
Small fixes all around to enable 10bit encoding
...
Conflicts:
src/encmain.c
src/encoder.c
src/encoderstate.c
src/global.h
2015-08-11 07:59:20 +03:00
Ari Lemmetti
7cd4f7a5c9
Enable fractional motion vectors with bipred
2015-08-10 18:49:12 +03:00
Ari Lemmetti
5887c96991
Add and use 14bit reconstruction for fractional motion vectors with bipred
2015-08-10 18:45:29 +03:00
Ari Lemmetti
a87dafb27a
Add hi_prec_buf_t for higher precision intermediate values for interpolation filter.
2015-08-10 18:35:06 +03:00
Ari Lemmetti
3e31ff2476
Use the function to sample half-pixels.
2015-08-10 18:30:41 +03:00
Ari Lemmetti
0a096c7040
Move qpel and octpel reconstruction in separate functions.
2015-08-10 18:25:52 +03:00
Ari Lemmetti
fc00b4795c
Preparations for more accurate reconstruction with bipred
2015-08-10 18:08:13 +03:00
Ari Lemmetti
8b4a6c92da
Add 14bit precision sample functions.
2015-08-10 18:02:06 +03:00
Ari Lemmetti
b30f17d4b8
Add fractional pixel sampling for chroma
2015-08-10 17:55:37 +03:00
Ari Lemmetti
650dd7d840
Use pixels_blit to copy neccessary pixels.
2015-08-10 17:52:00 +03:00
Ari Lemmetti
01f40ec104
Add fractional pixel sampling for luma
2015-08-10 17:51:48 +03:00
Ari Koivula
0c3c93d456
Optimize intra SAD intrinsics.
...
- Added 64x64 version for completeness.
- With the exception of 16x16, these were all slightly slower than the ASM
versions, as measured by "kvazaar_test -s speed -t intra_sad", but now they
are on par or slightly faster.
- None of these actually use any AVX2 intrinsics, and probably never will,
unless someone adds an interface for doing more than one block at a time,
in which case the non-destructive versions might come in handy.
2015-08-06 19:35:00 +03:00
Ari Lemmetti
20b833bc8e
Fix mingw errors
2015-07-31 18:44:36 +03:00
Ari Lemmetti
12c391eb08
Add auto-detection for input resolution.
...
Use --input-res=auto as default.
2015-07-31 17:35:16 +03:00
Ari Koivula
0740a73fbb
Clean up Makefile.
...
- Move stuff around.
- LDFLAGS -shared and -dynamiclib imply -fpic.
2015-07-31 15:57:05 +03:00
Ari Koivula
beec2705b1
Add cli, lib-shared and lib-static to Makefile.
2015-07-31 15:57:05 +03:00
Ari Koivula
24b3306325
Fix incorrect pattern rules in Makefile.
...
- Having more than one rule in a pattern rule means that both of those files
are created at the same time with the rule. This only worked for debug,
because debug build was never done in the same invocation as release build.
2015-07-31 14:36:45 +03:00
Ari Koivula
1c27f67963
Remove -flto.
...
- Always use the compiler to invoke the linker. Clang will give additional
parameters to the linker when compiled with -flto.
- Giving a different optimization level to linker did not make any difference
in gcc-5.1.1.
2015-07-31 14:36:26 +03:00
Ari Koivula
54b1be341e
Don't compile executable with PIC.
...
- It's required for .so and .dylib, but not for .dll or the executable.
- It might be better to use libtool for this, but I'm not ready to go that
far yet.
2015-07-29 17:12:09 +03:00
Ari Koivula
f8154f8382
Merge branch 'make-dylib'
2015-07-29 11:28:43 +03:00
Ari Koivula
60437fd0c3
Add -lrt back the exe link command.
2015-07-29 11:28:11 +03:00
Luca Barbato
5c7a808bbd
build: Generate a pkg-conf file
2015-07-29 02:27:12 +02:00
Ari Koivula
04e1a21ded
Merge branch 'make-dylib'
...
Closes #94 .
2015-07-28 11:42:46 +03:00
Ari Koivula
2211b90a24
Move comments for defines to a different line.
...
- Having comment as part of the define confuses doxygen. They get added
to every function that uses the macro.
2015-07-21 17:10:08 +03:00
Ari Koivula
022d28ab11
Fix small hexbs pattern.
...
- Who could mess this up? Oh.. right.
2015-07-21 16:12:44 +03:00
Ari Koivula
22e56f86c7
Move inter search patterns inside the search functions.
2015-07-21 16:06:31 +03:00
Ari Koivula
b73b275e08
Remove unused includes from search.
2015-07-21 15:06:06 +03:00
Ari Koivula
ae56118010
Move functions from search to search_intra.
2015-07-21 14:59:19 +03:00
Ari Koivula
bf7542c35d
Move functions from search to search_inter.
2015-07-21 12:16:05 +03:00
Ari Koivula
3c9b830d8f
Add modules search_intra and search_inter.
...
- For breaking up search module.
2015-07-21 12:04:16 +03:00
Arttu Ylä-Outinen
06ea593477
Change dylib file name to libkvazaar.X.dylib.
...
Changes the version number in the dylib filename from a three-digit
version (libkvazaar.X.Y.Z.dylib) to a single-digit one
(libkvazaar.X.dylib).
2015-07-20 15:09:46 +03:00
Arttu Ylä-Outinen
df749e032e
Add necessary linker options when building dylib.
...
Sets linker options -compatibility_version and -install_name when making
dylib.
2015-07-20 15:09:09 +03:00
Luca Barbato
9c414995c5
build: Add a MacOSX install target for the library
2015-07-17 19:44:20 +02:00
Arttu Ylä-Outinen
59f95b8e73
Add nasm support.
...
Makes is possible to build kvazaar using nasm instead of yasm.
- Adds trailing slashes to -I params in ASFLAGS.
- Disables CPU NOP directives when assembler is not yasm.
2015-07-17 13:59:25 +03:00
Arttu Ylä-Outinen
e307b7cec4
Check that input dimensions are multiples of two.
...
Fixes wrongly accepting non-multiple of two resolutions and a segfault
when one of the input dimensions is one.
2015-07-17 10:07:24 +03:00
Arttu Ylä-Outinen
d2c42cb303
Fix making tests.
...
Commit 9cfbd55e
removed "./" prefix of the TESTS variable in the
Makefile but the recipe of target tests was expecting it. Fixed by
prepending "./" to the tests recipe.
2015-07-17 10:07:24 +03:00
Luca Barbato
56ff1c7805
build: Drop the non-standard -t
...
Should unbreak freebsd.
2015-07-16 16:50:09 +02:00
Arttu Ylä-Outinen
94e8fc1536
Build dylib on Darwin.
...
Adds target libkvazaar.dylib to Makefile. On Darwin, libkvazaar.dylib is
set as a prerequisite of the all target.
2015-07-16 14:15:09 +03:00
Arttu Ylä-Outinen
a4ec92081a
Make symbols hidden by default.
...
Adds "-fvisibility=hidden" to CFLAGS and LDFLAGS. Defines macro
KVZ_PUBLIC for marking symbols that should be visible.
2015-07-13 14:20:21 +03:00
Arttu Ylä-Outinen
9cfbd55ea8
Add making symlinks to make install.
...
Running "make install" now creates symlinks libkvazaar.so and
libkvazaar.so.X pointing to libkvazaar.so.X.Y.Z.
2015-07-13 11:45:42 +03:00
Ari Koivula
c94d91061c
Merge branch 'cpuid-fix'
2015-07-09 11:40:46 +03:00
Arttu Ylä-Outinen
8550c6ccd8
Fix AVX2 detection.
...
Replaces calls to __get_cpuid by __cpuid_count on gcc and clang and
calls to __cpuid by __cpuidex on MSVC. Unlike __get_cpuid and __cpuid,
__cpuid_count and __cpuidex set the ecx register which is required for
AVX2 detection.
2015-07-09 11:20:37 +03:00
Ari Koivula
9acf7795a2
Refactor cpuid capability detection.
...
- Moved cpuid data to a struct to make it easier to group data from one
cpuid call together.
- Renamed the bit masks to make it harder to mask the wrong register or
cpuid.
- Remove the .byte trick. We don't really need to support such ancient
compilers?
2015-07-09 11:20:37 +03:00
Arttu Ylä-Outinen
e69088026e
Write slice header before joining child streams.
...
The lengths of the leaf streams must be available when the slice header
is written. Writing the header before joining child streams removes the
need to copy leaf bitstreams instead of moving them.
2015-07-08 13:14:17 +03:00
Arttu Ylä-Outinen
907451590e
Fix encoding when both GOP and OWF are enabled.
...
Changes kvazaar_encode to not increase cur_state_num unless a frame is
started.
2015-07-07 10:05:42 +03:00
Arttu Ylä-Outinen
3efdee2c13
Fix compilation warnings when using clang.
...
Removes typedef redefinitions in kvazaar_internal.h.
2015-07-06 13:46:56 +03:00
Arttu Ylä-Outinen
cc580ac861
Only print PSNR if some frames were encoded.
2015-07-06 13:39:47 +03:00
Arttu Ylä-Outinen
089ff895ad
Fix seeking when input stream is not seekable.
2015-07-06 12:07:05 +03:00
Arttu Ylä-Outinen
aca5d7514f
Fix pocs reallocation in imagelist.
...
Replaced sizeof(int32_t*) by sizeof(int32_t).
2015-07-06 11:58:05 +03:00
Arttu Ylä-Outinen
ca8435f581
Remove setting CC in Makefile.
2015-07-06 11:27:28 +03:00
Arttu Ylä-Outinen
3a47aab696
Fix allocating tile boundary arrays.
...
Column and row numbers had been mixed up.
2015-07-06 10:48:19 +03:00
Arttu Ylä-Outinen
a0865ff351
Change ime_algorithm in kvz_config to an enum.
...
Adds enum kvz_ime_algorithm to kvzaar.h.
2015-07-06 09:47:18 +03:00
Arttu Ylä-Outinen
66656fdebc
Move handling of command line args to cli module.
...
- Adds struct cmdline_opts_t.
- Adds functions cmdline_opts_parse and cmdline_opts_free to cli module.
- Removes fields input, output, debug, frames and seek from struct
kvz_config.
- Removes function config_read from config module.
2015-07-06 08:25:54 +03:00
Arttu Ylä-Outinen
581f740c59
Fix compilation when checkpoints are enabled.
...
- Include string.h in checkpoint.h
- Check return values of fgets calls in checkpoint.h.
- Replace variable length array in image.c by a dynamically allocated
array.
- Add -DCHECKPOINTS to CFLAGS in Makefile when CHECKPOINTS is defined.
2015-07-03 13:54:44 +03:00
Arttu Ylä-Outinen
6eb89a2813
Adjust Makefile for building kvazaar.dll.
...
Adds targets "kvazaar.dll" and "install-dll" to the Makefile.
2015-07-02 16:58:30 +03:00
Arttu Ylä-Outinen
af2b417809
Set up Makefile for building libkvazaar.so.
...
Adds targets "libkvazaar.so.0.0.0", "install", "install-prog" and
"install-lib" to the Makefile.
2015-07-02 16:58:30 +03:00
Arttu Ylä-Outinen
4ab9aa3e2f
Move kvz_encoder definition to kvazaar_internal.h.
2015-07-02 16:58:30 +03:00
Arttu Ylä-Outinen
b715ae9767
Return length of the data from encoder_encode.
...
Adds parameter len_out returning the length of the encoded data in bytes
to function encoder_encode.
2015-07-02 16:58:29 +03:00
Arttu Ylä-Outinen
538deaa9d6
Add functions picture_{alloc,free} to kvazaar API.
2015-07-02 16:58:29 +03:00
Arttu Ylä-Outinen
6451df9a4f
Move bitstream chunk definition to kvazaar.h.
...
- Renames struct bitstream_chunk_t to kvz_data_chunk.
- Renames macro BITSTREAM_MEMORY_CHUNK_SIZE to KVZ_DATA_CHUNK_SIZE.
- Removes kvz_payload typedef.
- Adds function chunk_free(kvz_data_chunk *chunk) to kvazaar API.
2015-07-02 16:58:28 +03:00
Arttu Ylä-Outinen
f7f17a060c
Rename pixel_t to kvz_pixel.
2015-07-02 16:58:28 +03:00
Arttu Ylä-Outinen
cecea44d37
Rename config_t to kvz_config.
2015-07-02 16:58:28 +03:00
Arttu Ylä-Outinen
17d720363a
Rename struct image_t to kvz_picture.
2015-07-02 16:55:48 +03:00
Arttu Ylä-Outinen
fab07d80da
Rename macro BIT_DEPTH to KVZ_BIT_DEPTH.
2015-07-02 16:55:47 +03:00
Arttu Ylä-Outinen
7b6178f6e0
Rename macro MAX_GOP to KVZ_MAX_GOP_LENGTH.
2015-07-02 16:55:47 +03:00
Arttu Ylä-Outinen
3f32d500e2
Move config_t structure to kvazaar.h.
2015-07-02 16:55:46 +03:00
Arttu Ylä-Outinen
cecdf4f34e
Move config validation to encoder_control_init.
...
Ensures that config is valid even when not initialized by config_read.
2015-07-02 16:47:28 +03:00