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

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)