From 38fdf7258035eb520ca152e9bea6d95cdfaca424 Mon Sep 17 00:00:00 2001 From: Kostya Shishkov Date: Wed, 31 Oct 2012 11:26:32 +0100 Subject: swscale: do not forget to swap data in formats with different endianness Otherwise during scaling it will try to interpret input in the wrong way and that leads to the test results disagreeing on different platforms and with different optimizations. Signed-off-by: Diego Biurrun --- libswscale/input.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) (limited to 'libswscale') diff --git a/libswscale/input.c b/libswscale/input.c index 142cc29a62..2e8d43f446 100644 --- a/libswscale/input.c +++ b/libswscale/input.c @@ -724,6 +724,15 @@ av_cold void ff_sws_init_input_funcs(SwsContext *c) case AV_PIX_FMT_YUV420P16LE: case AV_PIX_FMT_YUV422P16LE: case AV_PIX_FMT_YUV444P16LE: + case AV_PIX_FMT_YUVA444P9LE: + case AV_PIX_FMT_YUVA422P9LE: + case AV_PIX_FMT_YUVA420P9LE: + case AV_PIX_FMT_YUVA422P10LE: + case AV_PIX_FMT_YUVA444P10LE: + case AV_PIX_FMT_YUVA420P10LE: + case AV_PIX_FMT_YUVA420P16LE: + case AV_PIX_FMT_YUVA422P16LE: + case AV_PIX_FMT_YUVA444P16LE: c->chrToYV12 = bswap16UV_c; break; #else @@ -736,6 +745,15 @@ av_cold void ff_sws_init_input_funcs(SwsContext *c) case AV_PIX_FMT_YUV420P16BE: case AV_PIX_FMT_YUV422P16BE: case AV_PIX_FMT_YUV444P16BE: + case AV_PIX_FMT_YUVA444P9BE: + case AV_PIX_FMT_YUVA422P9BE: + case AV_PIX_FMT_YUVA420P9BE: + case AV_PIX_FMT_YUVA422P10BE: + case AV_PIX_FMT_YUVA444P10BE: + case AV_PIX_FMT_YUVA420P10BE: + case AV_PIX_FMT_YUVA420P16BE: + case AV_PIX_FMT_YUVA422P16BE: + case AV_PIX_FMT_YUVA444P16BE: c->chrToYV12 = bswap16UV_c; break; #endif @@ -917,6 +935,18 @@ av_cold void ff_sws_init_input_funcs(SwsContext *c) case AV_PIX_FMT_GRAY16LE: c->lumToYV12 = bswap16Y_c; break; + case AV_PIX_FMT_YUVA444P9LE: + case AV_PIX_FMT_YUVA422P9LE: + case AV_PIX_FMT_YUVA420P9LE: + case AV_PIX_FMT_YUVA444P10LE: + case AV_PIX_FMT_YUVA422P10LE: + case AV_PIX_FMT_YUVA420P10LE: + case AV_PIX_FMT_YUVA420P16LE: + case AV_PIX_FMT_YUVA422P16LE: + case AV_PIX_FMT_YUVA444P16LE: + c->lumToYV12 = bswap16Y_c; + c->alpToYV12 = bswap16Y_c; + break; #else case AV_PIX_FMT_YUV444P9BE: case AV_PIX_FMT_YUV422P9BE: @@ -930,6 +960,18 @@ av_cold void ff_sws_init_input_funcs(SwsContext *c) case AV_PIX_FMT_GRAY16BE: c->lumToYV12 = bswap16Y_c; break; + case AV_PIX_FMT_YUVA444P9BE: + case AV_PIX_FMT_YUVA422P9BE: + case AV_PIX_FMT_YUVA420P9BE: + case AV_PIX_FMT_YUVA444P10BE: + case AV_PIX_FMT_YUVA422P10BE: + case AV_PIX_FMT_YUVA420P10BE: + case AV_PIX_FMT_YUVA420P16BE: + case AV_PIX_FMT_YUVA422P16BE: + case AV_PIX_FMT_YUVA444P16BE: + c->lumToYV12 = bswap16Y_c; + c->alpToYV12 = bswap16Y_c; + break; #endif case AV_PIX_FMT_YUYV422: case AV_PIX_FMT_Y400A: -- cgit v1.2.3 From d8eda3708023db388d80027a79d5df7ee25a5a3f Mon Sep 17 00:00:00 2001 From: Diego Biurrun Date: Sun, 8 Jul 2012 19:56:10 +0200 Subject: x86: mmx2 ---> mmxext in function names --- libswscale/utils.c | 21 +++++++++++---------- libswscale/x86/rgb2rgb.c | 4 ++-- libswscale/x86/swscale.c | 4 ++-- libswscale/x86/yuv2rgb.c | 8 +++++--- 4 files changed, 20 insertions(+), 17 deletions(-) (limited to 'libswscale') diff --git a/libswscale/utils.c b/libswscale/utils.c index 64a3a58067..e5e4d60dd2 100644 --- a/libswscale/utils.c +++ b/libswscale/utils.c @@ -600,8 +600,9 @@ fail: } #if HAVE_MMXEXT_INLINE -static int initMMX2HScaler(int dstW, int xInc, uint8_t *filterCode, - int16_t *filter, int32_t *filterPos, int numSplits) +static int init_hscaler_mmxext(int dstW, int xInc, uint8_t *filterCode, + int16_t *filter, int32_t *filterPos, + int numSplits) { uint8_t *fragmentA; x86_reg imm8OfPShufW1A; @@ -1043,10 +1044,10 @@ av_cold int sws_init_context(SwsContext *c, SwsFilter *srcFilter, #if HAVE_MMXEXT_INLINE // can't downscale !!! if (c->canMMXEXTBeUsed && (flags & SWS_FAST_BILINEAR)) { - c->lumMmxextFilterCodeSize = initMMX2HScaler(dstW, c->lumXInc, NULL, - NULL, NULL, 8); - c->chrMmxextFilterCodeSize = initMMX2HScaler(c->chrDstW, c->chrXInc, - NULL, NULL, NULL, 4); + c->lumMmxextFilterCodeSize = init_hscaler_mmxext(dstW, c->lumXInc, NULL, + NULL, NULL, 8); + c->chrMmxextFilterCodeSize = init_hscaler_mmxext(c->chrDstW, c->chrXInc, + NULL, NULL, NULL, 4); #if USE_MMAP c->lumMmxextFilterCode = mmap(NULL, c->lumMmxextFilterCodeSize, @@ -1078,10 +1079,10 @@ av_cold int sws_init_context(SwsContext *c, SwsFilter *srcFilter, FF_ALLOCZ_OR_GOTO(c, c->hLumFilterPos, (dstW / 2 / 8 + 8) * sizeof(int32_t), fail); FF_ALLOCZ_OR_GOTO(c, c->hChrFilterPos, (c->chrDstW / 2 / 4 + 8) * sizeof(int32_t), fail); - initMMX2HScaler(dstW, c->lumXInc, c->lumMmxextFilterCode, - c->hLumFilter, c->hLumFilterPos, 8); - initMMX2HScaler(c->chrDstW, c->chrXInc, c->chrMmxextFilterCode, - c->hChrFilter, c->hChrFilterPos, 4); + init_hscaler_mmxext(dstW, c->lumXInc, c->lumMmxextFilterCode, + c->hLumFilter, c->hLumFilterPos, 8); + init_hscaler_mmxext(c->chrDstW, c->chrXInc, c->chrMmxextFilterCode, + c->hChrFilter, c->hChrFilterPos, 4); #if USE_MMAP mprotect(c->lumMmxextFilterCode, c->lumMmxextFilterCodeSize, PROT_EXEC | PROT_READ); diff --git a/libswscale/x86/rgb2rgb.c b/libswscale/x86/rgb2rgb.c index 486f436702..d4f25804cc 100644 --- a/libswscale/x86/rgb2rgb.c +++ b/libswscale/x86/rgb2rgb.c @@ -99,7 +99,7 @@ DECLARE_ASM_CONST(8, uint64_t, blue_15mask) = 0x0000001f0000001fULL; #undef RENAME #undef COMPILE_TEMPLATE_MMXEXT #define COMPILE_TEMPLATE_MMXEXT 1 -#define RENAME(a) a ## _MMX2 +#define RENAME(a) a ## _MMXEXT #include "rgb2rgb_template.c" //SSE2 versions @@ -139,7 +139,7 @@ av_cold void rgb2rgb_init_x86(void) if (INLINE_AMD3DNOW(cpu_flags)) rgb2rgb_init_3DNOW(); if (INLINE_MMXEXT(cpu_flags)) - rgb2rgb_init_MMX2(); + rgb2rgb_init_MMXEXT(); if (INLINE_SSE2(cpu_flags)) rgb2rgb_init_SSE2(); #endif /* HAVE_INLINE_ASM */ diff --git a/libswscale/x86/swscale.c b/libswscale/x86/swscale.c index fc74d97201..571510ae43 100644 --- a/libswscale/x86/swscale.c +++ b/libswscale/x86/swscale.c @@ -83,7 +83,7 @@ DECLARE_ALIGNED(8, const uint64_t, ff_w1111) = 0x0001000100010001ULL; #undef RENAME #undef COMPILE_TEMPLATE_MMXEXT #define COMPILE_TEMPLATE_MMXEXT 1 -#define RENAME(a) a ## _MMX2 +#define RENAME(a) a ## _MMXEXT #include "swscale_template.c" #endif @@ -311,7 +311,7 @@ av_cold void ff_sws_init_swScale_mmx(SwsContext *c) sws_init_swScale_MMX(c); #if HAVE_MMXEXT_INLINE if (cpu_flags & AV_CPU_FLAG_MMXEXT) - sws_init_swScale_MMX2(c); + sws_init_swScale_MMXEXT(c); #endif #endif /* HAVE_INLINE_ASM */ diff --git a/libswscale/x86/yuv2rgb.c b/libswscale/x86/yuv2rgb.c index 17ac3e2ffe..419d5133f9 100644 --- a/libswscale/x86/yuv2rgb.c +++ b/libswscale/x86/yuv2rgb.c @@ -63,7 +63,7 @@ DECLARE_ASM_CONST(8, uint64_t, pb_07) = 0x0707070707070707ULL; #undef RENAME #undef COMPILE_TEMPLATE_MMXEXT #define COMPILE_TEMPLATE_MMXEXT 1 -#define RENAME(a) a ## _MMX2 +#define RENAME(a) a ## _MMXEXT #include "yuv2rgb_template.c" #endif /* HAVE_MMXEXT_INLINE */ @@ -81,8 +81,10 @@ av_cold SwsFunc ff_yuv2rgb_init_mmx(SwsContext *c) #if HAVE_MMXEXT_INLINE if (cpu_flags & AV_CPU_FLAG_MMXEXT) { switch (c->dstFormat) { - case AV_PIX_FMT_RGB24: return yuv420_rgb24_MMX2; - case AV_PIX_FMT_BGR24: return yuv420_bgr24_MMX2; + case AV_PIX_FMT_RGB24: + return yuv420_rgb24_MMXEXT; + case AV_PIX_FMT_BGR24: + return yuv420_bgr24_MMXEXT; } } #endif -- cgit v1.2.3