diff options
author | James Almer <jamrial@gmail.com> | 2017-01-07 23:13:48 -0300 |
---|---|---|
committer | James Almer <jamrial@gmail.com> | 2017-01-12 22:53:04 -0300 |
commit | cf9ef839606dd50f779c395d8a277de143f7e5b2 (patch) | |
tree | 615bcdf1fc268c6ef0b3cc75273ca08aff8254bd /libavcodec/x86/huffyuvencdsp_mmx.c | |
parent | 30c1f27299d3fc2b0c0858c003066cc5e36a28af (diff) |
huffyuvencdsp: move shared functions to a new lossless_videoencdsp context
Signed-off-by: James Almer <jamrial@gmail.com>
Diffstat (limited to 'libavcodec/x86/huffyuvencdsp_mmx.c')
-rw-r--r-- | libavcodec/x86/huffyuvencdsp_mmx.c | 118 |
1 files changed, 0 insertions, 118 deletions
diff --git a/libavcodec/x86/huffyuvencdsp_mmx.c b/libavcodec/x86/huffyuvencdsp_mmx.c deleted file mode 100644 index 2402021823..0000000000 --- a/libavcodec/x86/huffyuvencdsp_mmx.c +++ /dev/null @@ -1,118 +0,0 @@ -/* - * SIMD-optimized HuffYUV encoding functions - * Copyright (c) 2000, 2001 Fabrice Bellard - * Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at> - * - * MMX optimization by Nick Kurshev <nickols_k@mail.ru> - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "libavutil/attributes.h" -#include "libavutil/cpu.h" -#include "libavutil/pixdesc.h" -#include "libavutil/x86/asm.h" -#include "libavutil/x86/cpu.h" -#include "libavcodec/huffyuvencdsp.h" -#include "libavcodec/mathops.h" - -void ff_diff_bytes_mmx(uint8_t *dst, const uint8_t *src1, const uint8_t *src2, - intptr_t w); -void ff_diff_bytes_sse2(uint8_t *dst, const uint8_t *src1, const uint8_t *src2, - intptr_t w); -void ff_diff_bytes_avx2(uint8_t *dst, const uint8_t *src1, const uint8_t *src2, - intptr_t w); -void ff_diff_int16_mmx (uint16_t *dst, const uint16_t *src1, const uint16_t *src2, - unsigned mask, int w); -void ff_diff_int16_sse2(uint16_t *dst, const uint16_t *src1, const uint16_t *src2, - unsigned mask, int w); -void ff_sub_hfyu_median_pred_int16_mmxext(uint16_t *dst, const uint16_t *src1, const uint16_t *src2, - unsigned mask, int w, int *left, int *left_top); - -#if HAVE_INLINE_ASM - -static void sub_hfyu_median_pred_mmxext(uint8_t *dst, const uint8_t *src1, - const uint8_t *src2, intptr_t w, - int *left, int *left_top) -{ - x86_reg i = 0; - uint8_t l, lt; - - __asm__ volatile ( - "movq (%1, %0), %%mm0 \n\t" // LT - "psllq $8, %%mm0 \n\t" - "1: \n\t" - "movq (%1, %0), %%mm1 \n\t" // T - "movq -1(%2, %0), %%mm2 \n\t" // L - "movq (%2, %0), %%mm3 \n\t" // X - "movq %%mm2, %%mm4 \n\t" // L - "psubb %%mm0, %%mm2 \n\t" - "paddb %%mm1, %%mm2 \n\t" // L + T - LT - "movq %%mm4, %%mm5 \n\t" // L - "pmaxub %%mm1, %%mm4 \n\t" // max(T, L) - "pminub %%mm5, %%mm1 \n\t" // min(T, L) - "pminub %%mm2, %%mm4 \n\t" - "pmaxub %%mm1, %%mm4 \n\t" - "psubb %%mm4, %%mm3 \n\t" // dst - pred - "movq %%mm3, (%3, %0) \n\t" - "add $8, %0 \n\t" - "movq -1(%1, %0), %%mm0 \n\t" // LT - "cmp %4, %0 \n\t" - " jb 1b \n\t" - : "+r" (i) - : "r" (src1), "r" (src2), "r" (dst), "r" ((x86_reg) w)); - - l = *left; - lt = *left_top; - - dst[0] = src2[0] - mid_pred(l, src1[0], (l + src1[0] - lt) & 0xFF); - - *left_top = src1[w - 1]; - *left = src2[w - 1]; -} - -#endif /* HAVE_INLINE_ASM */ - -av_cold void ff_huffyuvencdsp_init_x86(HuffYUVEncDSPContext *c, AVCodecContext *avctx) -{ - av_unused int cpu_flags = av_get_cpu_flags(); - const AVPixFmtDescriptor *pix_desc = av_pix_fmt_desc_get(avctx->pix_fmt); - - if (ARCH_X86_32 && EXTERNAL_MMX(cpu_flags)) { - c->diff_bytes = ff_diff_bytes_mmx; - c->diff_int16 = ff_diff_int16_mmx; - } - -#if HAVE_INLINE_ASM - if (INLINE_MMXEXT(cpu_flags)) { - c->sub_hfyu_median_pred = sub_hfyu_median_pred_mmxext; - } -#endif /* HAVE_INLINE_ASM */ - - if (EXTERNAL_MMXEXT(cpu_flags) && pix_desc && pix_desc->comp[0].depth<16) { - c->sub_hfyu_median_pred_int16 = ff_sub_hfyu_median_pred_int16_mmxext; - } - - if (EXTERNAL_SSE2(cpu_flags)) { - c->diff_bytes = ff_diff_bytes_sse2; - c->diff_int16 = ff_diff_int16_sse2; - } - - if (EXTERNAL_AVX2_FAST(cpu_flags)) { - c->diff_bytes = ff_diff_bytes_avx2; - } -} |