106 lines
3.1 KiB
Diff
106 lines
3.1 KiB
Diff
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)
|