ref: 1a7d0ab831fa3560c3acb7fe750bea39bb77b2f1
parent: 9a9fc4c4893b8fac3cea3bec3ff9207055a7060d
author: Martin Storsjö <[email protected]>
date: Wed Jan 28 06:50:48 EST 2015
Hook up McChromaWidthEq8_ssse3 into use in the decoder as well
--- a/codec/decoder/core/src/mc.cpp
+++ b/codec/decoder/core/src/mc.cpp
@@ -667,6 +667,24 @@
McChromaWithFragMv_c (pSrc, iSrcStride, pDst, iDstStride, iMvX, iMvY, iWidth, iHeight);
}
+void McChroma_ssse3 (const uint8_t* pSrc, int32_t iSrcStride, uint8_t* pDst, int32_t iDstStride,
+ int16_t iMvX, int16_t iMvY, int32_t iWidth, int32_t iHeight) {
+ static const PMcChromaWidthExtFunc kpMcChromaWidthFuncs[2] = {
+ McChromaWidthEq4_mmx,
+ McChromaWidthEq8_ssse3
+ };
+ const int32_t kiD8x = iMvX & 0x07;
+ const int32_t kiD8y = iMvY & 0x07;
+ if (kiD8x == 0 && kiD8y == 0) {
+ McCopy_sse2 (pSrc, iSrcStride, pDst, iDstStride, iWidth, iHeight);
+ return;
+ }
+ if (iWidth != 2) {
+ kpMcChromaWidthFuncs[iWidth >> 3] (pSrc, iSrcStride, pDst, iDstStride, g_kuiABCD[kiD8y][kiD8x], iHeight);
+ } else
+ McChromaWithFragMv_c (pSrc, iSrcStride, pDst, iDstStride, iMvX, iMvY, iWidth, iHeight);
+}
+
#endif //X86_ASM
//***************************************************************************//
// NEON implementation //
@@ -1198,6 +1216,9 @@
if (iCpu & WELS_CPU_SSE2) {
pMcFunc->pMcLumaFunc = McLuma_sse2;
pMcFunc->pMcChromaFunc = McChroma_sse2;
+ }
+ if (iCpu & WELS_CPU_SSSE3) {
+ pMcFunc->pMcChromaFunc = McChroma_ssse3;
}
#endif //(X86_ASM)
}