primitives: added SSSE3 rgb to yuv420 encoder
authorNorbert Federa <norbert.federa@thincast.com>
Fri, 3 Feb 2017 10:56:44 +0000 (11:56 +0100)
committerNorbert Federa <norbert.federa@thincast.com>
Fri, 3 Feb 2017 12:56:50 +0000 (13:56 +0100)
commitcb5dfd831fe2d438c9279c9972c0561bf2a108c5
treeb003d11d6fda7c9d1c9b1f81cb0f88c5b3600755
parent6001cb710dc67eb8811362b7bf383754257a902b
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
libfreerdp/primitives/prim_YUV.c
libfreerdp/primitives/prim_YUV_opt.c
libfreerdp/primitives/prim_internal.h
libfreerdp/primitives/test/TestPrimitivesYUV.c