You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
105 lines
3.1 KiB
105 lines
3.1 KiB
diff -up libcrystalhd-20120405/linux_lib/libcrystalhd/libcrystalhd_int_if.cpp.nosse2 libcrystalhd-20120405/linux_lib/libcrystalhd/libcrystalhd_int_if.cpp |
|
--- libcrystalhd-20120405/linux_lib/libcrystalhd/libcrystalhd_int_if.cpp.nosse2 2011-03-14 21:02:54.000000000 +0100 |
|
+++ libcrystalhd-20120405/linux_lib/libcrystalhd/libcrystalhd_int_if.cpp 2012-08-03 20:04:23.700362339 +0200 |
|
@@ -33,7 +33,9 @@ |
|
#include "libcrystalhd_int_if.h" |
|
#include "libcrystalhd_fwcmds.h" |
|
|
|
+#if __SSE2__ || !defined __GNUC__ |
|
#include <emmintrin.h> |
|
+#endif |
|
|
|
#define SV_MAX_LINE_SZ 128 |
|
#define PCI_GLOBAL_CONTROL MISC2_GLOBAL_CTRL |
|
@@ -1425,11 +1427,14 @@ BC_STATUS DtsCopyNV12(DTS_LIB_CONTEXT *C |
|
} |
|
|
|
// TODO: add sse2 detection |
|
+#if __SSE2__ |
|
static bool gSSE2 = true; // most of the platforms will have it anyway: |
|
+#endif |
|
// 64 bits: no test necessary |
|
// mac: no test necessary |
|
// linux/windows: we might have to do the test. |
|
|
|
+#if __SSE2__ |
|
static void fast_memcpy(uint8_t *dst, const uint8_t *src, uint32_t count) |
|
{ |
|
// tested |
|
@@ -1466,6 +1471,9 @@ static void fast_memcpy(uint8_t *dst, co |
|
while (count --) |
|
*dst++ = *src++; |
|
} |
|
+#else |
|
+#define fast_memcpy(a,b,c) memcpy(a,b,c) |
|
+#endif |
|
|
|
// this is not good. |
|
// if we have 3 buffers, we cannot assume V is after U |
|
@@ -1504,6 +1512,7 @@ static BC_STATUS DtsCopy422ToUYVY(uint8_ |
|
|
|
for (__y = 0; __y < height; __y++) |
|
{ |
|
+#if __SSE2__ |
|
if (gSSE2) |
|
{ |
|
if (((((uintptr_t) dstY) & 0xf) == 0) && ((((uintptr_t) srcY) & 0xf) == 0)) |
|
@@ -1529,6 +1538,7 @@ static BC_STATUS DtsCopy422ToUYVY(uint8_ |
|
} |
|
} |
|
} |
|
+#endif |
|
|
|
while (x < srcWidth-1) |
|
{ |
|
@@ -1548,6 +1558,7 @@ static BC_STATUS DtsCopy422ToUYVY(uint8_ |
|
// convert to NV12 |
|
static BC_STATUS DtsCopy422ToNV12(uint8_t *dstY, uint8_t *dstUV, const uint8_t *srcY, uint32_t srcWidth, uint32_t dstWidth, uint32_t height, uint32_t strideY, uint32_t strideUV) |
|
{ |
|
+#if __SSE2__ |
|
// tested |
|
uint32_t x, __y; |
|
|
|
@@ -1667,6 +1678,9 @@ static BC_STATUS DtsCopy422ToNV12(uint8_ |
|
dstY += strideY; |
|
} |
|
return BC_STS_SUCCESS; |
|
+#else |
|
+ return BC_STS_INV_ARG; |
|
+#endif |
|
} |
|
|
|
|
|
@@ -1681,6 +1695,7 @@ static BC_STATUS DtsCopy420ToYV12(uint8_ |
|
|
|
static BC_STATUS DtsCopy420ToYUY2(uint8_t *dstY, uint8_t *dstUV, const uint8_t *srcY, const uint8_t *srcUV, uint32_t srcWidth, uint32_t dstWidth, uint32_t height, uint32_t strideY, uint32_t strideUV) |
|
{ |
|
+#if __SSE2__ |
|
// TODO, test this |
|
uint32_t x, __y; |
|
|
|
@@ -1836,10 +1851,14 @@ static BC_STATUS DtsCopy420ToYUY2(uint8_ |
|
} |
|
|
|
return BC_STS_SUCCESS; |
|
+#else |
|
+ return BC_STS_INV_ARG; |
|
+#endif |
|
} |
|
|
|
static BC_STATUS DtsCopy420ToUYVY(uint8_t *dstY, uint8_t *dstUV, const uint8_t *srcY, const uint8_t *srcUV, uint32_t srcWidth, uint32_t dstWidth, uint32_t height, uint32_t strideY, uint32_t strideUV) |
|
{ |
|
+#if __SSE2__ |
|
// TODO, test this |
|
uint32_t x, __y; |
|
|
|
@@ -1993,6 +2012,9 @@ static BC_STATUS DtsCopy420ToUYVY(uint8_ |
|
} |
|
|
|
return BC_STS_SUCCESS; |
|
+#else |
|
+ return BC_STS_INV_ARG; |
|
+#endif |
|
} |
|
|
|
static BC_STATUS DtsCopy420ToNV12(uint8_t *dstY, uint8_t *dstUV, const uint8_t *srcY, const uint8_t *srcUV, uint32_t srcWidth, uint32_t dstWidth, uint32_t height, uint32_t strideY, uint32_t strideUV)
|
|
|