Commit Graph

39 Commits

Author SHA1 Message Date
Armin Novak
d9a8083ddf Added WINPR_NORETURN, fixed warnings 2021-06-17 10:35:22 +02:00
akallabeth
50acf72615 Refactored H264 encoding/decoding
Use YUV primitives now for all H264 operations
2021-03-01 11:52:07 +01:00
akallabeth
6c6e31217d Ignore alpha channel during color conversion.
Most GFX graphics do not carry alpha data. Keep the original
alpha value unless specified otherwise.
2021-02-25 14:18:01 +01:00
David Fort
5f0943f0fe primitives: add openCL support
This patch adds the basic infrastructure to have openCL acceleration.
For now only YUV2RGB is implemented but other operations could be
implemented.
The primitives have been massively reworked so that we have an autodetect
mode that will pick the best implementation automatically by performing a
benchmark.

Sponsored-by: Rangee Gmbh(http://www.rangee.com)
2019-11-22 13:21:39 +01:00
Armin Novak
6afa413669 Modified primitives function pointer to take const pointer to const data 2019-11-14 10:46:24 +01:00
Armin Novak
72ca88f49c Reformatted to new style 2019-11-07 10:53:54 +01:00
Armin Novak
2a582ed197 Fixed NULL dereferences and uninitialized values 2019-01-30 16:11:10 +01:00
Armin Novak
53cdd95de0 Refactored RGB to AVC444v2 2018-02-07 10:48:43 +01:00
Armin Novak
46159c4cab Added UV average to AVC444v1 2018-02-07 10:48:43 +01:00
Armin Novak
8f7bc7990f Added SSE optimized RGB to AVC444 frame split and test. 2018-01-30 11:17:16 +01:00
Armin Novak
ce10e22b86 Added optimized C function for specific color format. 2018-01-30 11:17:15 +01:00
Martin Haimberger
94a58bd18d YUV conversation: fixed luma frame creation
in the conversation function general_RGBToAVC444YUVv2_ANY
2018-01-12 00:16:45 -08:00
Armin Novak
23e1afb44a Added new and optimized YUV primitives.
* RGBToAVC444YUVv2: Split a RGB frame in luma and/or chroma v2 YUV420 frames
* RGBX specific versions of RGBToAVC444YUV and RGBToYUV420_8u_P3AC4R
2018-01-10 14:46:18 +01:00
Armin Novak
e4766c656e Fixed missing initialization warnings. 2017-12-21 11:04:32 +01:00
Armin Novak
a2167d5417 Added surface width and heigth for YUV combine. 2017-04-18 14:12:40 +02:00
Armin Novak
b0d3cfda4d Added AVC444v2 client support. 2017-04-11 11:29:14 +02:00
Norbert Federa
13a60ae138 primitives: added RGB to AVC444YUV converter 2017-02-16 17:03:40 +01:00
Armin Novak
b1e3bab8ef Added NEON and SSSE3 YUV conversion optimisations. 2017-02-13 16:00:12 +01:00
Armin Novak
57db52237c Fixed AVC444 luma/chroma checks. 2017-02-10 08:31:32 +01:00
Norbert Federa
490473d26f primitives: RGB to YUV420 (non SIMD) optimizations
- added a dedicated non-simd encoder for BGR[AX] source formats
- simplified the generic RgbToYuv420 encoder and fixed the crash
  with odd dimensions
2017-02-06 15:48:52 +01:00
Norbert Federa
cb5dfd831f primitives: added SSSE3 rgb to yuv420 encoder
Currently supported source pixel formats are:
- PIXEL_FORMAT_BGRA32
- PIXEL_FORMAT_BGRX32

Support for PIXEL_FORMAT_RGB[XA]32 can simply be added if
required (see the comment in prim_YUV_opt.c).

On my old 3.1 GHz Core i5-2400 the new SSSE3 function can convert
over 900 1080p BGRX frames per second.

The current non-optimized C version (which supports all pixel formats)
can't do more than 40 yuv conversions per second on this cpu.

---------------------------+---------+-------------+-----------+-------
RGB TO YUV420 1080p 32bit  |   COUNT |       TOTAL |       AVG |    FPS
---------------------------+---------+-------------+-----------+-------
general_RGBToYUV420        |     500 |    13.1776s | 0.026355s |     38
ssse3_RGBToYUV420          |     500 |     0.5320s | 0.001064s |    940

Also fixed an error in TestPrimitivesYUV which generated resolutions
with height or width set to zero
2017-02-03 13:56:50 +01:00
Armin Novak
6b7b1cec39 Optimized general_YUV444ToRGB_8u_P3AC4R for BGRX 2017-01-18 15:28:53 +01:00
Armin Novak
ebfa0ccc7d Unified clipping of byte values. 2017-01-12 15:30:06 +01:00
Armin Novak
7a8f7c2f1b Added optimized pixel write functions for colors. 2016-11-28 09:21:12 +01:00
Martin Fleisz
cf4b8a1ae9 primitives: Fix compiler error 2016-11-25 10:47:00 +01:00
Armin Novak
4cc291869a Added optimized write functions. 2016-11-24 10:36:57 +01:00
Armin Novak
d1e2dd3281 Moved format size calculation out of loop. 2016-11-24 10:01:45 +01:00
Armin Novak
99c418766c Updated primitives API and tests. 2016-10-06 13:43:00 +02:00
Armin Novak
df35c135d1 Fixed color conversion, unified GFX and updated API. 2016-10-06 13:42:58 +02:00
Armin Novak
dfdc4c38f9 Fixed comments. 2016-03-16 13:43:18 +01:00
Armin Novak
5bc333c626 Implemented GFX AVC444 support. 2016-03-16 13:43:18 +01:00
Armin Novak
3309bf8f9c Implemented YUV444 related primitives. 2016-03-16 13:43:17 +01:00
Martin Fleisz
c9c8f8cc89 Merge pull request #2435 from llyzs/llyzs
Add openh264 encoder support.
2015-03-06 11:33:30 +01:00
Bernhard Miklautz
a371723c4f build: fix compiler warnings
warning: redundant redeclaration
Tested with: 4.7.2 and 3.5.0-1~exp1
2015-03-03 19:36:54 +01:00
Vic Lee
3c3c7068a0 Add openh264 encoder support. 2015-03-02 18:11:28 +08:00
Marc-André Moreau
bcf1266f51 libfreerdp-primitives: integrate H264 SSE3 color converter 2014-09-09 19:15:07 -04:00
erbth
7828725413 YUV data conversion of H.264 implementation (egfx):
only convert invalid areas
SIMD SSSE3 conversion in primitives
compiling all primitives sources with optimization

and cleanup after last merge
2014-09-09 00:13:18 +02:00
Marc-André Moreau
3203d37bdf libfreerdp-primitives: optimize YUV420p to RGB conversion 2014-09-06 20:15:40 -04:00
Marc-André Moreau
437583aa9a libfreerdp-primitives: add YUV420 to RGB conversion 2014-09-06 17:10:27 -04:00