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 +#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)