Commit graph

1383 commits

Author SHA1 Message Date
Ari Lemmetti c82adae0c4 Use four tap functions in octpel chroma interpolation 2015-02-04 18:23:57 +02:00
Ari Lemmetti 2f11caeb73 Added generic four tap functions. Use them in halfpel chroma interpolation. 2015-02-04 17:50:12 +02:00
Ari Lemmetti ff456c120a Enabled link time optimizations. Disabled default rules. 2015-02-04 15:19:47 +02:00
SanteriS 50dd59eb21 Added different search patterns for TZ search. 2015-02-02 19:14:45 +02:00
Ari Lemmetti 041d970ece Apply fast clipping also to chroma filtering. 2015-01-29 16:19:04 +02:00
Ari Koivula ff721bab81 Fix possible non-determinism with owf.
- Triggers when owf is on, sao is off and deblocking is on.
2015-01-26 16:02:31 +02:00
Ari Koivula f01cbbb5ca Add --no-signhide parameter. 2015-01-24 21:29:37 +02:00
Ari Koivula 5f24c6b73d Make normal dequant use runtime sign-hiding configuration. 2015-01-24 21:29:25 +02:00
Ari Koivula 1ccb3bd324 Move sign hiding stuff in rdoq to its own function.
- There is some stuff from sign hiding left intermingled with rdoq code,
  but I don't want to change the code too before testing that I didn't
  break anything.
2015-01-24 21:27:20 +02:00
Ari Koivula 804a3b648b Clean up quantization sign hiding.
- To allow for later configuration at runtime.
2015-01-23 16:03:59 +02:00
Ari Koivula c940ccb549 Fix gcc error.
encmain.c:433:13: error: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 4 has type ‘uint64_t’
2015-01-23 15:50:14 +02:00
Ari Koivula 5d16fa6c4f Add VPS every intra frame.
- Just rdo=0 for now. Later this can be extended to be configured separately.
2015-01-22 13:13:23 +02:00
Ari Koivula d685ee86d6 Record total bitstream length correctly when using stdout.
- If the output is not a file, we can't check the size of the file.
2015-01-22 12:29:06 +02:00
Ari Koivula 1b19afc706 Flush output buffer after every frame. 2015-01-22 12:29:06 +02:00
Ari Lemmetti b4aab06073 Added new files in Makefile. 2015-01-21 18:38:09 +02:00
Ari Lemmetti c21351cc12 Added fast clipping function for clamping values to bit depth. 2015-01-21 17:53:06 +02:00
SanteriS 4b3d77aaf2 Enable tz search. 2015-01-21 12:55:00 +02:00
Ari Koivula f86def8ed8 Remove unused variables. 2015-01-20 17:50:19 +02:00
Ari Koivula 8ac66934c0 Clean up NAL header code.
- Use long start code for RADL NAL units if they are the first NAL in the
  access unit.
- Ffmpeg mpegts was complaining about start codes not being present.
  There wasn't anything wrong that I could find though, besides the
  missing intra long start code.
2015-01-20 17:34:59 +02:00
Ari Koivula 81ad583e08 Use the same coeff cost calculation for all rd modes.
- It's not worth it to have these faster approximations for coefficient cost.
2015-01-20 17:34:59 +02:00
Ari Koivula 870171e6ad Fix --rd=0 actually work. 2015-01-20 17:34:59 +02:00
Ari Lemmetti f037ed580c Improved data layout 2015-01-15 16:31:18 +02:00
Ari Lemmetti 4382c2f088 Added missing -1 to PIXEL_MAX macro 2015-01-15 16:14:07 +02:00
Ari Lemmetti 465f718eeb Move value clipping away from separate loop 2015-01-15 16:14:00 +02:00
Ari Lemmetti 9d12ce21d5 Cleaned luma interpolation, added functions for 8-tap filtering. 2015-01-15 16:13:12 +02:00
Ari Lemmetti 0e56d13b5d Use smaller bit depth for fractional pixel interpolation 2015-01-15 15:00:09 +02:00
Ari Lemmetti cc061b4c3d Added ipol strategy for interpolation filters.
Added initial files for AVX2 and generic strategies.
2015-01-15 14:59:37 +02:00
Ari Lemmetti 73762062b6 Clarified comments a bit 2015-01-15 11:57:19 +02:00
Ari Koivula ab3364afb4 Add skipping of intra search in inter frames for rd=0. 2015-01-15 11:54:35 +02:00
Ari Lemmetti c9f310a6c2 Use pixel type instead of uint8_t 2015-01-15 11:47:00 +02:00
Ari Lemmetti cad5f14372 Fixed compile errors (-Werror) 2015-01-14 18:27:35 +02:00
SanteriS 126569c737 Added first version of TZ search algorithm. 2015-01-14 14:54:09 +02:00
Ari Koivula 660547098a Merge branch 'intra-fast-lcu' 2015-01-14 12:03:12 +02:00
Ari Koivula 01195aecbb Move cu split model to a function. 2015-01-14 11:16:34 +02:00
Ari Koivula 8c89dcfc50 Move mode bit calculation to a function. 2015-01-14 10:44:52 +02:00
Daniel Eneyev 27d79ffae3 workaround for GET_TIME in Mac OS 2015-01-13 17:06:55 +03:00
Ari Koivula fc79c2103e Generalize the fast intra-mode tryout code to work for any depth. 2015-01-12 11:47:21 +02:00
Ari Koivula f1364d297b Fix bug resulting in incorrect bitstream.
- If 64x64 intra PUs were enabled and --rd was less than 2, no intra mode
  search was performed for depth 0 resulting in incorrect bitstream.
2015-01-12 11:16:33 +02:00
Ari Koivula bbae2e8a27 Update usage and readme. 2015-01-12 10:59:28 +02:00
Ari Koivula f4bd322804 Add command line options for prediction unit depth. 2015-01-12 10:40:34 +02:00
Ari Koivula edf2681ea4 Comment functions in search.c. 2015-01-07 14:56:14 +02:00
Ari Koivula 8c1e0b8a7f Tweak owf=auto.
- Twice the required number is too little.
2014-12-10 11:23:51 +02:00
Ari Koivula 129c8e38e0 Set owf default to auto. 2014-12-09 19:00:11 +02:00
Ari Koivula 51b5692121 Rewrite owf=auto code to be more general.
- Change the definition to be a bit more general. The mapping from resolution
  to owf frames stays mostly the same however, but should handle weird
  resolutions better.
- Move everything to config module.
- Fix handling of tiles. It had a bug where owf for tiles was always
  threads * 4/3 - 1. Works as intended now.
2014-12-09 19:00:11 +02:00
Ari Koivula 374012ab26 Merge branch 'intraskip' 2014-12-01 17:30:03 +02:00
Ari Lemmetti 24492adb02 Merge branch 'fme_merge' 2014-11-21 15:08:45 +02:00
Ari Koivula 21d221c075 Add fast 64x64 intra test.
- If intra search is not enabled for a depth, try the result from the
  top left CU of the next depth. This seems to give most of the benefit
  of at least 64x64 intra prediction units without costing very much
  in performance.
2014-11-20 17:20:24 +02:00
Ari Lemmetti 4874f2662f Added --subme commandline parameter for fractional pixel motion estimation: 1 == enable (default), 0 == disable. 2014-11-20 14:59:04 +02:00
Ari Lemmetti d5d2e04995 Merge branch 'fme' 2014-11-19 16:40:22 +02:00
Ari Koivula 3ef88dfda5 Add --owf=auto option.
- The optimal value for Overlapping Wave Front (OWF) depends on a bunch of
  variables. Attempt to set the optimal owf value, at least for all intra.
2014-11-18 02:19:40 +02:00
Ari Lemmetti 5a946f24ea Fixed time output formatting. 2014-11-14 16:46:41 +02:00
Ari Lemmetti 56c537e145 Build fixes for MinGW.
threads.h: use windows.h headers for clock stuff on MinGW
strategyselector.c: assert with strlen for MinGW support
2014-11-14 16:46:41 +02:00
Daniel Eneyev 992a98c5c4 If output name is dash - write to stdout 2014-11-13 12:45:53 +03:00
Ari Lemmetti c46b75a0ca Fixed mingw build error. Modified function declaration in getopt.h.
A macro definition adds * in front of __argc and __argv, causing
build error with mingw. Renamed them to argc and argv to prevent this.
2014-10-31 17:40:18 +02:00
Ari Lemmetti 6a12bc406d Load greatest submodule. Fixed loop that occurred during build process. 2014-10-30 15:17:50 +02:00
Ari Lemmetti a64aae7c53 Makefile now compiles tests. Fixed test files. Removed unused stuff. 2014-10-29 15:32:47 +02:00
Ari Koivula 50643eeaf8 Merge pull request #88 from darealshinji/patch-2
version.h is no longer used
2014-10-27 20:23:15 +02:00
darealshinji 81ecef17d7 version.h is no longer used 2014-10-27 18:17:26 +01:00
darealshinji e230fb2eab make it possible to add custom CFLAGS 2014-10-27 17:19:05 +01:00
Ari Lemmetti e93fa54838 Added -lrt to fix undefined references to clock_gettime on some systems 2014-10-23 14:51:28 +03:00
Ari Lemmetti eb7cecc3dd Added .travis.yml for continuous integration. Added env variable to disable AVX2 for Travis (GCC version doesn't support it yet). 2014-10-23 14:20:07 +03:00
Ari Lemmetti 20967cfafe Allow CC to be defined other than gcc. If not defined, use gcc as default. 2014-10-23 13:25:00 +03:00
Ari Koivula fcb6fa6d4b Fix compilation error on PowerPC.
- Need abs from stdlib.
2014-10-21 18:14:32 +03:00
Ari Koivula f6fead6221 Fix crash on inter frames.
- If the bitcost was 0 it would underflow for skip mode. The bitcost is now
  checked before decrementing.
2014-10-21 18:11:39 +03:00
Ari Koivula dfc67b766a Disable rd1 chroma search.
- The bdrate improvement isn't really worth the time it takes, so enable it
  only for rd3 untill it can be made faster or better.
2014-10-16 13:59:20 +03:00
Ari Koivula e9b8d9b889 Fix gcc warnings.
- Remove unused variables.
- Change intra prediction functions to take their inputs as const pointers.
- Change intra_get_pred to take two pointers instead of an array of pointers,
  because the warnings got just too exotic.
2014-10-16 13:17:46 +03:00
Ari Koivula 4bac52d9b6 Merge branch 'intra' 2014-10-16 13:11:23 +03:00
Ari Koivula afb9e8c3f4 Remove extra parameter sets. 2014-10-16 12:21:36 +03:00
Ari Koivula 02ec26fcea Try different number of chroma intra modes for different depths.
- And avoid doing extra work if no extra modes are tested for certain depths.
2014-10-16 12:21:36 +03:00
Ari Koivula 3cf5e422e8 Make fast chroma mode search select modes for slower chroma search. 2014-10-16 12:21:36 +03:00
Ari Koivula d12dbd4aa0 Add fast intra chroma mode search. 2014-10-16 12:21:08 +03:00
Ari Koivula 75a137c1e9 Add --cpuid parameter to disable runtime optimizations. 2014-10-16 12:01:36 +03:00
Ari Koivula 3e6023dfb5 Rename search constants and set sane defaults. 2014-10-16 03:08:11 +03:00
Ari Koivula 8a407b0313 Estimate luma and chroma intra mode bits separately.
- Remove cu_info.intra[].cost and bitcost as unnecessary.
- Add luma_mode_bits to complement chroma_mode_bits and remove
  intra_pred_ratecost as unneccessary. Difference is that intra_pred_ratecost
  was more coarse and included chroma mode with the assumption that it would
  be the same as chroma.
2014-10-16 03:08:11 +03:00
Ari Koivula c9e212ba92 Add intra chroma mode search.
- Based on full chroma reconstruction so enabled only for --rd=2.
2014-10-16 03:07:50 +03:00
Ari Koivula b32867be2a Remove -lrt from LDFLAGS.
- This might be required on some embedded system, but from what I can see
  all the functions we use from real time extensions are included in libc
  and the program seems to work fine without it.
- It doesn't exist on MingwW or Mac, so I think it's better to remove it
  completely and add it later on any system that actually requires it.
- Related to #85.
2014-10-14 11:48:57 +03:00
Ari Koivula 6f8a976b12 Give ARCH_X86_64 to yasm on Mac.
- Issue raised in #85.
2014-10-14 09:47:56 +03:00
Ari Koivula 55ab08c213 Fix incorrect const qualifiers.
- Change input pointers to const in dct-generic, like they should have been.
- Fixes compilation error on GCC.
2014-10-13 16:57:15 +03:00
Ari Koivula 8a5b24bcbe Remove usages of GCC __attribute__.
- To allow clang to compile, as it doesn't according to #58.
- The target attributes are not needed anymore due to makefile handling
  targetting now.
- The __attribute__((unused)) used for debugging. I don't know if clang
  supports this attribute or not but it doesn't seem very important so
  I'm removing it just in case.
2014-10-13 16:46:26 +03:00
Ari Koivula 04613bd5b3 Disable GET_TIME on Mac.
- This should fix the Mac version not compiling in issue #85.
2014-10-13 16:22:11 +03:00
Ari Koivula a469c059a5 Take chroma tr-skip bits into account. 2014-10-13 10:48:39 +03:00
Ari Koivula 7a5cf5d865 Add trskip mode cost to fast trskip mode decision. 2014-10-13 10:45:41 +03:00
Ari Koivula f164a5ba79 Add fast transform skip estimation to rough intra search. 2014-10-13 10:42:24 +03:00
Ari Koivula d893a489d6 Fix mingw compilation issue.
strategies/avx2/dct-avx2.c:334:25: error: pasting "g_dct_16" and "[" does
not give a valid preprocessing token

- The [ is not part of the token so compilation failed on mingw GCC 4.9.1.
- Fixes #86.
2014-10-10 16:32:39 +03:00
Ari Koivula 28d1532578 Make rd=1 use cabac for coeff cost estimation. 2014-10-08 12:50:03 +03:00
Ari Koivula cbb2aa75b7 Add macros for adjusting weight of distortion between luma and chroma.
- Everything needs to have a short name because windows has a maximum path
  length limitation that is breaking my testing framework.
2014-10-08 10:31:54 +03:00
Ari Koivula 49ad845c33 Add cabac bits for part_mode. 2014-10-08 10:31:54 +03:00
Ari Koivula b6710e7893 Add cabac bits for cu split flag. 2014-10-08 10:31:54 +03:00
Ari Koivula 38b224cf69 Change rest of cu split search costs to double. 2014-10-08 10:31:54 +03:00
Ari Koivula 17473624d3 Add transform tree bit costs for cbf_luma. 2014-10-08 10:31:54 +03:00
Ari Koivula 3b04d39db4 Take cabac bits into account on transform tree. 2014-10-08 10:31:54 +03:00
Ari Koivula 296f142d9e Retain coded block flag data during transform split search. 2014-10-08 10:31:54 +03:00
Ari Koivula 85dea10f3f Clean up transform split search.
- Remove unnecessary checks and comment.
2014-10-08 10:31:54 +03:00
Ari Koivula e1b801eb6f Add transform tree chroma cbf bits. 2014-10-08 10:31:23 +03:00
Ari Koivula 3868cc7ff1 Fix crash on inter search when --tr-depth-intra is used.
- Transform splits meant for intra modes were used for inter when inter mode
  was chosen, which caused an assert to be triggered if the split transform
  block didn't have any coefficients.
2014-10-03 19:29:06 +03:00
Ari Lemmetti bcf12567d0 Added some comments. 2014-10-03 17:51:58 +03:00
Ari Lemmetti fea517c2ae Misc code cleanup 2014-10-03 17:06:09 +03:00
Ari Lemmetti 85682c3b6a Removed unused transpose functions. 2014-10-03 11:39:31 +03:00
Ari Koivula 8a80845b91 Add chroma to transform split search. 2014-10-03 11:36:57 +03:00
Ari Koivula 51662e1081 Fix differences between cu_rd_cost_luma and rdo_cost_intra. 2014-10-03 11:36:57 +03:00
Ari Koivula bc7d7d5cb6 Add cu_info* as parameter to reconstruction functions.
- This is required so these functions can be used for searching. When NULL
  is given they take the CU from LCU struct as they did previously.

Conflicts:
	src/search.c
2014-10-03 11:36:56 +03:00
Ari Koivula ccc575e2c6 Disable transform tree bits. 2014-10-03 11:36:56 +03:00
Ari Koivula a0ab469c89 Disable rdo_cost_intra. 2014-10-03 11:36:56 +03:00
Ari Koivula c164978e21 Add FULL_CU_SPLIT_SEARCH macro for disabling cu split optimization. 2014-10-03 11:36:56 +03:00
Ari Koivula 549ac96438 Change costs to doubles to avoid rounding intermediate results.
- Helps with debugging.
2014-10-03 11:36:56 +03:00
Ari Koivula e591e89ade Add prediction mode to chroma reconstruction parameters.
- Just like in luma.
2014-10-03 11:36:56 +03:00
Ari Koivula f6272f06fc Unify signature for transform functions.
- Some used block, coeff and some src, dst. Now all signatures are const input
  and non-const output.
2014-10-03 11:21:43 +03:00
Ari Koivula b932cf4b21 Clean up avx2 dct macros. 2014-10-03 11:16:25 +03:00
Ari Koivula 47244a15c3 Merge branch 'dct-optimizations'
Conflicts:
	src/strategies/avx2/dct-avx2.c
	src/strategies/generic/dct-generic.c
2014-10-02 13:45:21 +03:00
Ari Lemmetti 61e1510480 Transform functions in dct-avx2.c are now generated with macros. 2014-10-02 13:24:30 +03:00
Ari Lemmetti 9407610555 Moved DCT / DST matrices to dct-generic.c 2014-10-02 13:24:30 +03:00
Ari Lemmetti 7255112bd8 Added transposed DCT/DST tables. Use them while calculating transforms instead of doing runtime transpose. Added separate functions for DST and IDST. 2014-10-02 13:24:30 +03:00
Ari Lemmetti e7bcb58846 Added 32x32 IDCT 2014-10-02 13:24:30 +03:00
Ari Lemmetti eacf173b7e Added 32x32 DCT for AVX2 2014-10-02 13:24:30 +03:00
Ari Lemmetti d2856a5d40 Added 32x32 transpose 2014-10-02 13:24:30 +03:00
Ari Lemmetti 7a33f08312 Added 16x16 DCT and IDCT for AVX2 2014-10-02 13:24:30 +03:00
Ari Lemmetti d2fe2a5391 Added 16x16 transpose 2014-10-02 13:24:30 +03:00
Ari Lemmetti d6af146a2e Added part of the functions 16x16 DCT needs 2014-10-02 13:24:30 +03:00
Ari Lemmetti aba3acdfff Added AVX2 optimized transforms for 4x4 and 8x8 blocks 2014-10-02 13:24:30 +03:00
Ari Lemmetti 5856f32d81 Fixed incorrect shift values for inverse transforms in generic strategy 2014-10-02 13:24:29 +03:00
Ari Lemmetti 41b032664d First version of 4x4 forward DCT 2014-10-02 13:24:29 +03:00
Ari Koivula 36232619ab Fix broken cabac contexts in wpp.
- Fixes #84.
- The issue was caused by 241b9d6 naively copying the whole struct, which
  contains data other than just the contexts. Rather than reverting the
  change, the struct was refactored to have another struct that contained
  just the contexts.
2014-09-24 01:02:52 +03:00
Ari Koivula 4e052d3f0f Wrap contexts of cabac_data inside cabac_data.ctx struct. 2014-09-24 01:02:37 +03:00
Ari Koivula b339004c4c Rename cabac_state.ctx to cur_ctx. 2014-09-24 01:02:28 +03:00
Ari Koivula 8b8b53fba5 Merge branch 'sao_cabac' 2014-09-22 10:28:30 +03:00
Ari Koivula bfa399c8fc Fix compiler warnings.
- Non-parenthesized parameter in a macro.
- Unused variables.
- Wrong const qualifiers.
- Signed/unsigned comparison.
2014-09-22 10:04:57 +03:00
Marko Viitanen 6f65a9cbbd Improved SAO merge decisions 2014-09-16 10:08:17 +03:00
Marko Viitanen 21df11ba4e Implemented SAO search for both chroma components 2014-09-15 16:07:31 +03:00
Marko Viitanen e8d1140a1a Check SAO band offset for both chroma components and better SAO chroma cabac costs 2014-09-15 16:07:31 +03:00
Marko Viitanen 0c92031e8a SAO merge checking cleanup 2014-09-15 16:07:31 +03:00
Marko Viitanen b274e7adcd Added cabac bit cost calculations to SAO search 2014-09-15 16:07:31 +03:00
Ari Koivula 5f732126c3 Add cabac bit costs float table. 2014-09-15 15:45:43 +03:00
Ari Koivula 0db7d8d20f test cu split cost 2014-09-15 15:42:03 +03:00
Ari Koivula 35b2e6f755 Add missing cabac context for chroma cbf.
- The context was also missing from HM, but has been fixed in HM13.
2014-09-15 15:41:44 +03:00
Ari Koivula 241b9d6adb Simplify cabac context copying.
Conflicts:
	src/context.c
2014-09-15 15:41:44 +03:00
darealshinji 61a414bced reposition colons in usage message to match with the rest 2014-09-15 03:40:18 +02:00
Ari Koivula 3c73892609 Fix transform split search.
- Redo the search with the best mode to make sure the tr_depth parameters are
  correct.
2014-09-11 10:56:53 +03:00
Ari Koivula 46b6b1243b Add --rd=3 mode and enable searching of intra depth 0.
- intra_build_reference_border was overflowing at depth 0 because it uses
  arrays just large enough to accommodate 32x32 transforms, which is the
  biggest transform.
- For similar reasons search_intra_rough doesn't work at depth 0.
- The --rd=3 mode tries all modes with transform search. It also works without
  rough search so it was used to test depth 0 search. If --rd=3 is not on intra
  split at depth 0 is not searched for.

Conflicts:
	src/search.c
2014-09-11 10:54:41 +03:00
Ari Koivula c5fa824347 Rebase transform split search. 2014-09-08 14:13:59 +03:00
Ari Koivula 79b86ce6e1 Add --tr-depth-intra command line option.
Conflicts:
	src/encoder.c
2014-09-04 13:42:24 +03:00
Marko Viitanen fe236de807 Fixed sps_max_dec_pic_buffering value to include current picture 2014-09-01 10:31:11 +03:00
Marko Viitanen dbcc8d65aa Removed duplicate function from RDOQ 2014-08-28 08:50:01 +03:00
Ari Koivula 931ec7301c Put slice delta QP to bitstream.
- Before slice delta QP was always 0. Now if global->QP is changed before
  contexts are set, the delta qp is put to the bitstream, allowing for rough
  frame level rate control.
2014-08-25 16:43:23 +03:00
Ari Koivula 4c3bbd4a35 Rewrite the SContruct.
- Works with new /strategy/ structure.
- Change architecture selection to use arch= instead of construction target.
2014-08-25 16:43:23 +03:00
Ari Lemmetti f88c3b6f37 Removed unnecessary if (both branches did the same thing) 2014-08-20 11:54:35 +03:00
Laurent Fasnacht f3c311fe1a Fix commit 8502f3d 2014-08-11 15:17:15 +02:00
Laurent Fasnacht f9bffe35a5 Log tile id in sad perf log 2014-08-11 11:57:08 +02:00
Laurent Fasnacht 6a937de9b2 Fix search_cu log 2014-08-11 11:57:08 +02:00
Laurent Fasnacht 8502f3d850 Improve logging 2014-08-11 11:57:07 +02:00
Laurent Fasnacht f1b303a2d2 Fix compilation errors 2014-08-11 09:53:06 +02:00
Ari Lemmetti 47e3bcfb50 Fixed incorrect shift values for inverse transforms in generic strategy 2014-08-07 16:01:30 +03:00
Ari Lemmetti 709520a233 Removed all AVX2 instructions from SATD functions.
-Zero extend macro now returns results in 2 xmm registers instead of one ymm
2014-07-31 13:25:28 +03:00
Ari Lemmetti 0beb278f5b Partial butterfly strategy is now called DCT strategy. Made changes to transform functions in preparation for optimizations.
-Moved fast_forward_dst and fast_inverse_dst to DCT strategies
2014-07-31 13:25:28 +03:00
Ari Lemmetti 6bf63bd171 Added AVX2 strategy for partial butterfly (no optimizations yet) 2014-07-31 13:25:28 +03:00
Ari Lemmetti faccc4f09b Partial butterfly functions now utilize the strategy selector 2014-07-31 13:25:28 +03:00
Ari Koivula c2fac805d7 Give HAVE_ALIGNED_STACK to yasm on windows.
- Linux gets it through some other means but on windows it needs to be
  given explicitly.

- Fixes issue #78.
2014-07-30 16:26:23 +03:00
Ari Koivula 669e99dd7f Improve intra SAD AVX2 intrinsics.
- Moved implementations for different sizes to inline functions that are
  defined using each other, reducing the amount of redundant code.

- Performance of sad_8bit_32x32_avx2 improved by about 10% due to unrolling of
  the loop.
2014-07-25 15:59:55 +03:00
Ari Koivula e00102f0ca Compile asm optimizations only if yasm is present. 2014-07-23 14:57:40 +03:00
Ari Lemmetti 85fb0784e4 Fixed intendentation and added some empty lines for readability 2014-07-23 12:32:27 +03:00
Ari Lemmetti bd6e89c1f0 Updated include directories and file names to Makefile 2014-07-22 15:36:54 +03:00
Ari Lemmetti 4f88ebce5a Added comments and made visual studio not to compile x86inc.asm 2014-07-22 15:07:57 +03:00
Ari Koivula cfd3636e08 Move some repetitive SATD asm into a macro.
Conflicts:
	src/strategies/x86_avx/picture_x86.asm
2014-07-22 12:46:39 +03:00
Ari Lemmetti c81639dd09 Removed old unused macro 2014-07-22 11:11:20 +03:00
Ari Lemmetti cf0797cafd Reordered and intended assembly code 2014-07-22 11:07:42 +03:00
Ari Lemmetti fea44c8234 Renaming AVX/asm files
-Splitted SAD and SATD functions in separate files
2014-07-21 18:02:01 +03:00
Ari Lemmetti a64df6f0d0 Merge branch 'asm'
Conflicts:
	build/kvazaar_lib/kvazaar_lib.vcxproj.filters
	src/Makefile
	src/strategies/strategies-picture.c
2014-07-21 16:41:09 +03:00
Ari Lemmetti 1be2c3aae5 Preparing push to master and misc
-Removed unnecessary <math.h> headers
-Updated AVX/asm optimizations to match the new file hierarchy
-Makefile only compiles .asm files if KVAZAAR_DISABLE_YASM is not set to 1 and TARGET_CPU_ARCH is x86
2014-07-21 12:39:56 +03:00
Ari Koivula a8f7103797 Add AVX2 implementations for sad_8bit_ 8x8, 16x16 and 32x32. 2014-07-18 18:27:30 +03:00
Ari Koivula 3daa5dd1f1 Add sse2 implementaton for sad_8bit_4x4. 2014-07-18 18:20:34 +03:00
Ari Koivula f49332c9b8 Add missing includes. 2014-07-18 17:56:15 +03:00
Ari Koivula 291817667f Tidy up the Makefile. 2014-07-18 17:31:18 +03:00
Ari Koivula e241866f43 Compile intrinsic functions with appropriate flags in gcc.
- Remove -march=native as it's no longer necessary for intrinsics to work.
  Closes #77.

- I couldn't test altivec or sse4.1, but sse4.1 compiles so I expect it
  to work.
2014-07-18 17:28:14 +03:00
Ari Koivula 5662621b3c Free threadqueue jobs when they are not needed.
- Also add destroying the mutex when the job is freed.

- This makes Kvazaar no longer acquire thousands of OS handles on Windows.
2014-07-16 16:51:20 +03:00
Ari Lemmetti 1e94262f85 Made AVX asm compatible with the changed system
- x86inc.asm is now located in extras
- Removed unused cpu.asm/h
2014-07-14 18:51:17 +03:00
Ari Lemmetti 683eda1183 Merge branch 'master' into asm
Conflicts:
	build/kvazaar_lib/kvazaar_lib.vcxproj
	build/kvazaar_lib/kvazaar_lib.vcxproj.filters
	src/Makefile
	src/strategies/strategies-picture.c
2014-07-14 16:42:33 +03:00
Ari Lemmetti 7f873e037c Updated Makefile to compile picture_x86.asm 2014-07-14 15:30:08 +03:00
Ari Lemmetti 2169f9ab8c Added AVX asm comments and fixes
-Added vzeroupper to satd macro to prevent AVX-SSE transition penalties int picture_x86.asm
-Fixed the order of registers in zero extend macro in picture_x86.asm
-Fixed SATD checkers test pattern in satd_tests.c
2014-07-14 14:43:36 +03:00
Ari Koivula 5d0df56c94 Move optimizations to their own compilation units according to target.
- This is necessary in order to compile AVX intrinsics correctly in
  Visual Studio. Having everything in their own units should also make
  compiling normal C code with optimizations on easier.

- For now the makefile still relies on GCC __target__ attribute for compiling
  intrinsics.
2014-07-11 17:26:19 +03:00
Ari Koivula f605d6c35b Align intra buffers to 32 bytes for 256 bit SIMD instructions. 2014-07-11 17:26:19 +03:00
Ari Koivula fbd03b706e Reconfigure VS project.
- Moved compilation flag stuff from project file to the abstraction layer.

- Disabled randomized base address as unnecessary.

- Disable stack buffer security check from release.
2014-07-11 17:26:19 +03:00
Laurent Fasnacht 72abc69b3d Measure time for SAD in _DEBUG mode 2014-07-08 11:42:58 +02:00
Laurent Fasnacht 1a318c714d log poc with new_frame 2014-07-08 11:42:19 +02:00
Laurent Fasnacht e64a692780 Add CU type in threadqueue.log 2014-07-08 09:06:31 +02:00
Laurent Fasnacht abfbb7cad3 Fix duplicate type key in threadqueue.log 2014-07-07 11:36:50 +02:00
Laurent Fasnacht 946e3b9651 Log search_cu to threadqueue.log 2014-07-07 10:50:05 +02:00
Laurent Fasnacht f62e571c15 Add missing info to threadqueue.log 2014-07-07 10:49:40 +02:00
Ari Lemmetti 048127c7e3 AVX assembly optimizations improved 2014-07-02 16:57:06 +03:00
Ari Koivula 7ecf78bb70 Use sqrt lambda cost for searches not using SSD.
- Add encoder_state->global->cur_lambda_cost_sqrt.

- Use sqrt lambda for inter search and rough intra search.

- The effect on inter is around 10-20% bdrate. The effect on intra is smaller
  and non-existent when --rd=2 is enabled, as the intra search refinement was
  already done with SSD and correct lambda.
2014-06-26 13:56:38 +03:00
Laurent Fasnacht 1112dca933 Fix compilation issue with assertion disabled 2014-06-26 07:31:37 +02:00
Laurent Fasnacht 9ab9defe67 Bitstream length per frame works again 2014-06-19 10:24:03 +02:00
Laurent Fasnacht 45faadb2c9 Fix bug where the wrong number of frames could be encoded (if one frame takes longer than the others) 2014-06-19 10:24:02 +02:00
Ari Koivula d5a77be4b8 Fix avx detection for gcc.
- GCC doesn't support _xgetbv intrinsic so we have to use inline assembler.
2014-06-18 11:50:17 +03:00
Ari Lemmetti bdef5384ef Added AVX strategy 2014-06-17 16:52:24 +03:00
Ari Koivula d7abe6a7c2 Address compilation warning.
strategyselector.c:170:10: error: ‘__get_cpuid’ is static but used in inline function ‘get_cpuid’ which is not static [-Werror]
   return __get_cpuid(level, eax, ebx, ecx, edx);
2014-06-17 16:26:55 +03:00
Ari Koivula 60ecc6baae Remove unused stuff. 2014-06-17 16:20:01 +03:00
Ari Koivula 7532b789f8 Add -std=gnu99 for gcc.
- std=c99 doesn't work because then struct timespec won't be defined.
2014-06-17 16:15:39 +03:00
Ari Koivula 94bc457b6c Add option to disable fast intra search. 2014-06-17 15:32:05 +03:00
Ari Koivula e27fc875c0 Clean up intra search. 2014-06-17 15:09:12 +03:00
Ari Koivula e4d70ac1ab Use more starting points for smaller blocks in intra search. 2014-06-17 13:28:27 +03:00
Ari Koivula 9911c7553b Avoid unnecessary intra dir searching. 2014-06-17 13:11:35 +03:00
Ari Koivula bd16a55b9b Always check DC and planar intra modes.
- At least one of them is always in predicted modes, but to make sure they
  are both included add them explicitly.
2014-06-17 12:51:15 +03:00
Ari Koivula 70740da123 Add smarter rough intra search.
- Directional intra mode search is done using halving search from the best
  known mode. Starting modes are vertical, horizontal and the 3 diagonal
  modes.

Conflicts:
	src/search.c
2014-06-17 12:33:10 +03:00
Marko Viitanen 0e2fe9e7ff Changed intra search to skip some modes speeding it up 2014-06-17 12:32:29 +03:00
Marko Viitanen a1c3cfe944 Moved intra mode cost calculation to a function
Conflicts:
	src/search.c
2014-06-17 12:32:29 +03:00
Marko Viitanen eb7d46f9ef Modify CU split cost. 2014-06-17 12:30:32 +03:00
Marko Viitanen bfa37b876b Conformance fix: set sps_max_dec_pic_buffering to correct value 2014-06-17 12:30:32 +03:00
Ari Koivula b3c15b8f94 Merge branch 'owf' 2014-06-16 16:07:41 +03:00
Laurent Fasnacht 91de92134f Constrain the search not to go under the LCU below if OWF is enabled 2014-06-16 14:27:56 +02:00
Laurent Fasnacht ef9c2258e9 Fix frame counter and stats 2014-06-16 13:21:52 +02:00
Ari Koivula 153b1ee41f Merge branch 'intra-sad-strategies' 2014-06-16 12:34:37 +03:00
Laurent Fasnacht 84d34c2655 Fix compilation on non-intel 2014-06-16 11:24:02 +02:00
Ari Koivula 3f00592b96 Separate strategyselector debug prints from _DEBUG.
- I only want to see the strategy stuff.
2014-06-16 12:15:19 +03:00
Ari Koivula 1c97a10a6d Move intra SAD and SATD functions under strategies. 2014-06-16 12:13:41 +03:00
Laurent Fasnacht 4b4702819b Also print encoding FPS 2014-06-16 11:10:11 +02:00
Laurent Fasnacht 2347574a8e Fix problems revealed by valgrind 2014-06-16 11:10:09 +02:00
Laurent Fasnacht 28c3f22ba1 Fix possible freeze 2014-06-16 11:03:48 +02:00
Laurent Fasnacht a96c742ad4 Fix depends for wpp+owf 2014-06-16 11:03:47 +02:00
Laurent Fasnacht f99e41d41f Improved CPU time statistics 2014-06-16 11:03:46 +02:00
Laurent Fasnacht 8a33c0a688 Fix recon job for wfrow 2014-06-16 10:55:01 +02:00
Laurent Fasnacht bf6024734a Fix statistics with OWF 2014-06-16 10:55:00 +02:00
Laurent Fasnacht 0522a3d8e5 --owf option 2014-06-16 10:55:00 +02:00
Laurent Fasnacht 47d1ded7b0 Dependencies between frames 2014-06-16 10:54:59 +02:00
Laurent Fasnacht 003d3c504c image_list_copy_contents 2014-06-16 10:54:58 +02:00
Laurent Fasnacht f4187dd10c cu_array data structure 2014-06-16 10:54:57 +02:00
Laurent Fasnacht 3be3fa8d6e Use different processing order depending if we have OWF or not 2014-06-16 10:54:56 +02:00
Laurent Fasnacht c32943f78b OWF 2014-06-16 10:54:56 +02:00
Laurent Fasnacht 490dd15f3d Remove flush between frame 2014-06-16 10:51:33 +02:00
Laurent Fasnacht fddcbabe28 bitstream writing is now a "normal" job in a thread 2014-06-16 10:51:32 +02:00
Laurent Fasnacht ff7143cc24 Assign thread_queue_jobs and move image_free to a more suitable place 2014-06-16 10:51:32 +02:00
Ari Koivula 87ca828a63 Correct intra sad function labels.
- These haven't been 16 bit for a long time.
2014-06-16 10:45:10 +03:00
Ari Koivula fcce6ae823 Fix printing of AVX2 capability. 2014-06-14 01:24:19 +03:00
Ari Koivula a49ba2633a Add OS and CPU detection for AVX2 and AVX. 2014-06-13 16:57:53 +03:00
Ari Koivula 1de102be61 Move strategies to their own compilation units.
- Enforces a little bit more hierarchy. Compilation units are in strategies
  and whatever inline includes they have are in a folder with the same name
  as the strategy.
2014-06-13 15:30:23 +03:00
Ari Koivula aa3549a717 Change SLEEP(0) to SLEEP(10) on Windows.
- This is a workaround for a performance problem on Windows where main thread
  is busy looping.
2014-06-13 12:01:03 +03:00
Laurent Fasnacht 4acadccf89 Only signal the required number of threads 2014-06-13 08:34:59 +02:00
Laurent Fasnacht 70ce7cec20 Remove unneccessary locks by adding threadqueue->queue_running counter 2014-06-13 08:34:58 +02:00
Laurent Fasnacht 7ef34ff5a1 Ability to dump mutex_lock, mutex_unlock and cond_wait timing, if compiled with -D_PTHREAD_DUMP 2014-06-13 08:32:14 +02:00
Laurent Fasnacht 68ad323e84 Tentative fix for race condition 2014-06-12 14:01:33 +02:00
Laurent Fasnacht b194e19708 Tentative fix for deadlock 2014-06-12 12:57:14 +02:00
Laurent Fasnacht b765eca153 Remove unneeded encoder_state_blit_pixels 2014-06-12 11:47:46 +02:00
Laurent Fasnacht da07b8b35d No-copy works (SAO and deblocking enabled) 2014-06-12 11:47:38 +02:00
Laurent Fasnacht 2cc700fab8 No-copy works with --no-sao (deblocking enabled) 2014-06-12 11:47:31 +02:00
Laurent Fasnacht 6b408b5904 No-copy works with --no-sao --no-deblock 2014-06-12 11:47:30 +02:00
Laurent Fasnacht 0dbfa62698 Replace copy of images made for tiles by sub-images (no copy)
- replace width by stride where required in the source code
2014-06-12 11:47:30 +02:00
Laurent Fasnacht b1347efef5 Add checkpoint in sao_reconstruct 2014-06-12 11:47:29 +02:00
Laurent Fasnacht ae4dc4eb44 Fix uninitialized sao_info structure members, which was creating false positive when checkpointing SAO 2014-06-12 11:47:29 +02:00
Laurent Fasnacht f371bdafc3 sao_info checkpoints 2014-06-12 11:47:28 +02:00
Laurent Fasnacht b7fe81c55c Checkpoint in pixels_blit, and avoid doing undefined behaviour when source and destination is the same.
Seems a reasonnable point to observe when refactoring, since it's called on most image data.
2014-06-12 11:47:28 +02:00
Laurent Fasnacht da8559fa34 Fix bug in CHECKPOINTS_FINALIZE() when checkpoints are disabled 2014-06-12 11:47:27 +02:00
Laurent Fasnacht 14df6de0d0 Checkpoint on frame checksum 2014-06-12 11:47:00 +02:00