From 643b5b794f095a1d679568a3a6b3106a1dfd6cdb Mon Sep 17 00:00:00 2001 From: Mans Rullgard Date: Sun, 9 Sep 2012 19:25:43 +0100 Subject: [PATCH 1/6] ARM: libavresample: NEON optimised flat float to s16 conversion Signed-off-by: Mans Rullgard --- libavresample/arm/Makefile | 2 + libavresample/arm/audio_convert_init.c | 39 +++++++++++++++ libavresample/arm/audio_convert_neon.S | 66 ++++++++++++++++++++++++++ libavresample/audio_convert.c | 2 + libavresample/audio_convert.h | 1 + 5 files changed, 110 insertions(+) create mode 100644 libavresample/arm/Makefile create mode 100644 libavresample/arm/audio_convert_init.c create mode 100644 libavresample/arm/audio_convert_neon.S diff --git a/libavresample/arm/Makefile b/libavresample/arm/Makefile new file mode 100644 index 0000000000..55683cbfae --- /dev/null +++ b/libavresample/arm/Makefile @@ -0,0 +1,2 @@ +OBJS += arm/audio_convert_init.o +NEON-OBJS += arm/audio_convert_neon.o diff --git a/libavresample/arm/audio_convert_init.c b/libavresample/arm/audio_convert_init.c new file mode 100644 index 0000000000..7c46a80c5c --- /dev/null +++ b/libavresample/arm/audio_convert_init.c @@ -0,0 +1,39 @@ +/* + * This file is part of Libav. + * + * Libav 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. + * + * Libav 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 Libav; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include + +#include "config.h" +#include "libavutil/attributes.h" +#include "libavutil/cpu.h" +#include "libavutil/arm/cpu.h" +#include "libavutil/samplefmt.h" +#include "libavresample/audio_convert.h" + +void ff_conv_flt_to_s16_neon(int16_t *dst, const float *src, int len); + +av_cold void ff_audio_convert_init_arm(AudioConvert *ac) +{ + int cpu_flags = av_get_cpu_flags(); + + if (have_neon(cpu_flags)) { + ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_FLT, + 0, 16, 8, "NEON", + ff_conv_flt_to_s16_neon); + } +} diff --git a/libavresample/arm/audio_convert_neon.S b/libavresample/arm/audio_convert_neon.S new file mode 100644 index 0000000000..e82f8c633f --- /dev/null +++ b/libavresample/arm/audio_convert_neon.S @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2008 Mans Rullgard + * + * This file is part of Libav. + * + * Libav 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. + * + * Libav 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 Libav; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "config.h" +#include "libavutil/arm/asm.S" + +function ff_conv_flt_to_s16_neon, export=1 + subs r2, r2, #8 + vld1.32 {q0}, [r1,:128]! + vcvt.s32.f32 q8, q0, #31 + vld1.32 {q1}, [r1,:128]! + vcvt.s32.f32 q9, q1, #31 + beq 3f + bics r12, r2, #15 + beq 2f +1: subs r12, r12, #16 + vqrshrn.s32 d4, q8, #16 + vld1.32 {q0}, [r1,:128]! + vcvt.s32.f32 q0, q0, #31 + vqrshrn.s32 d5, q9, #16 + vld1.32 {q1}, [r1,:128]! + vcvt.s32.f32 q1, q1, #31 + vqrshrn.s32 d6, q0, #16 + vst1.16 {q2}, [r0,:128]! + vqrshrn.s32 d7, q1, #16 + vld1.32 {q8}, [r1,:128]! + vcvt.s32.f32 q8, q8, #31 + vld1.32 {q9}, [r1,:128]! + vcvt.s32.f32 q9, q9, #31 + vst1.16 {q3}, [r0,:128]! + bne 1b + ands r2, r2, #15 + beq 3f +2: vld1.32 {q0}, [r1,:128]! + vqrshrn.s32 d4, q8, #16 + vcvt.s32.f32 q0, q0, #31 + vld1.32 {q1}, [r1,:128]! + vqrshrn.s32 d5, q9, #16 + vcvt.s32.f32 q1, q1, #31 + vqrshrn.s32 d6, q0, #16 + vst1.16 {q2}, [r0,:128]! + vqrshrn.s32 d7, q1, #16 + vst1.16 {q3}, [r0,:128]! + bx lr +3: vqrshrn.s32 d4, q8, #16 + vqrshrn.s32 d5, q9, #16 + vst1.16 {q2}, [r0,:128]! + bx lr +endfunc diff --git a/libavresample/audio_convert.c b/libavresample/audio_convert.c index 1138ef8877..e9835c8e8b 100644 --- a/libavresample/audio_convert.c +++ b/libavresample/audio_convert.c @@ -276,6 +276,8 @@ AudioConvert *ff_audio_convert_alloc(AVAudioResampleContext *avr, set_generic_function(ac); + if (ARCH_ARM) + ff_audio_convert_init_arm(ac); if (ARCH_X86) ff_audio_convert_init_x86(ac); diff --git a/libavresample/audio_convert.h b/libavresample/audio_convert.h index eefffbb12c..2b8bface7d 100644 --- a/libavresample/audio_convert.h +++ b/libavresample/audio_convert.h @@ -82,6 +82,7 @@ int ff_audio_convert(AudioConvert *ac, AudioData *out, AudioData *in, int len); /* arch-specific initialization functions */ +void ff_audio_convert_init_arm(AudioConvert *ac); void ff_audio_convert_init_x86(AudioConvert *ac); #endif /* AVRESAMPLE_AUDIO_CONVERT_H */ From d26de339afa25f4fdbc53ee1a0ddd514920658a9 Mon Sep 17 00:00:00 2001 From: Mans Rullgard Date: Mon, 10 Sep 2012 15:47:00 +0100 Subject: [PATCH 2/6] ARM: libavresample: NEON optimised stereo fltp to s16 conversion Signed-off-by: Mans Rullgard --- libavresample/arm/audio_convert_init.c | 5 ++ libavresample/arm/audio_convert_neon.S | 64 ++++++++++++++++++++++++++ 2 files changed, 69 insertions(+) diff --git a/libavresample/arm/audio_convert_init.c b/libavresample/arm/audio_convert_init.c index 7c46a80c5c..647111df3a 100644 --- a/libavresample/arm/audio_convert_init.c +++ b/libavresample/arm/audio_convert_init.c @@ -26,6 +26,8 @@ #include "libavresample/audio_convert.h" void ff_conv_flt_to_s16_neon(int16_t *dst, const float *src, int len); +void ff_conv_fltp_to_s16_2ch_neon(int16_t *dst, float *const *src, + int len, int channels); av_cold void ff_audio_convert_init_arm(AudioConvert *ac) { @@ -35,5 +37,8 @@ av_cold void ff_audio_convert_init_arm(AudioConvert *ac) ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_FLT, 0, 16, 8, "NEON", ff_conv_flt_to_s16_neon); + ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_FLTP, + 2, 16, 8, "NEON", + ff_conv_fltp_to_s16_2ch_neon); } } diff --git a/libavresample/arm/audio_convert_neon.S b/libavresample/arm/audio_convert_neon.S index e82f8c633f..97e0434f09 100644 --- a/libavresample/arm/audio_convert_neon.S +++ b/libavresample/arm/audio_convert_neon.S @@ -64,3 +64,67 @@ function ff_conv_flt_to_s16_neon, export=1 vst1.16 {q2}, [r0,:128]! bx lr endfunc + +function ff_conv_fltp_to_s16_2ch_neon, export=1 + ldm r1, {r1, r3} + subs r2, r2, #8 + vld1.32 {q0}, [r1,:128]! + vcvt.s32.f32 q8, q0, #31 + vld1.32 {q1}, [r1,:128]! + vcvt.s32.f32 q9, q1, #31 + vld1.32 {q10}, [r3,:128]! + vcvt.s32.f32 q10, q10, #31 + vld1.32 {q11}, [r3,:128]! + vcvt.s32.f32 q11, q11, #31 + beq 3f + bics r12, r2, #15 + beq 2f +1: subs r12, r12, #16 + vld1.32 {q0}, [r1,:128]! + vcvt.s32.f32 q0, q0, #31 + vsri.32 q10, q8, #16 + vld1.32 {q1}, [r1,:128]! + vcvt.s32.f32 q1, q1, #31 + vld1.32 {q12}, [r3,:128]! + vcvt.s32.f32 q12, q12, #31 + vld1.32 {q13}, [r3,:128]! + vsri.32 q11, q9, #16 + vst1.16 {q10}, [r0,:128]! + vcvt.s32.f32 q13, q13, #31 + vst1.16 {q11}, [r0,:128]! + vsri.32 q12, q0, #16 + vld1.32 {q8}, [r1,:128]! + vsri.32 q13, q1, #16 + vst1.16 {q12}, [r0,:128]! + vcvt.s32.f32 q8, q8, #31 + vld1.32 {q9}, [r1,:128]! + vcvt.s32.f32 q9, q9, #31 + vld1.32 {q10}, [r3,:128]! + vcvt.s32.f32 q10, q10, #31 + vld1.32 {q11}, [r3,:128]! + vcvt.s32.f32 q11, q11, #31 + vst1.16 {q13}, [r0,:128]! + bne 1b + ands r2, r2, #15 + beq 3f +2: vsri.32 q10, q8, #16 + vld1.32 {q0}, [r1,:128]! + vcvt.s32.f32 q0, q0, #31 + vld1.32 {q1}, [r1,:128]! + vcvt.s32.f32 q1, q1, #31 + vld1.32 {q12}, [r3,:128]! + vcvt.s32.f32 q12, q12, #31 + vsri.32 q11, q9, #16 + vld1.32 {q13}, [r3,:128]! + vcvt.s32.f32 q13, q13, #31 + vst1.16 {q10}, [r0,:128]! + vsri.32 q12, q0, #16 + vst1.16 {q11}, [r0,:128]! + vsri.32 q13, q1, #16 + vst1.16 {q12-q13},[r0,:128]! + bx lr +3: vsri.32 q10, q8, #16 + vsri.32 q11, q9, #16 + vst1.16 {q10-q11},[r0,:128]! + bx lr +endfunc From 8ff78578612f5d8b28164445e94e8805a9899daf Mon Sep 17 00:00:00 2001 From: Mans Rullgard Date: Mon, 10 Sep 2012 15:47:00 +0100 Subject: [PATCH 3/6] ARM: libavresample: NEON optimised generic fltp to s16 conversion Signed-off-by: Mans Rullgard --- libavresample/arm/audio_convert_init.c | 5 + libavresample/arm/audio_convert_neon.S | 233 +++++++++++++++++++++++++ 2 files changed, 238 insertions(+) diff --git a/libavresample/arm/audio_convert_init.c b/libavresample/arm/audio_convert_init.c index 647111df3a..bbb7bae514 100644 --- a/libavresample/arm/audio_convert_init.c +++ b/libavresample/arm/audio_convert_init.c @@ -26,6 +26,8 @@ #include "libavresample/audio_convert.h" void ff_conv_flt_to_s16_neon(int16_t *dst, const float *src, int len); +void ff_conv_fltp_to_s16_neon(int16_t *dst, float *const *src, + int len, int channels); void ff_conv_fltp_to_s16_2ch_neon(int16_t *dst, float *const *src, int len, int channels); @@ -37,6 +39,9 @@ av_cold void ff_audio_convert_init_arm(AudioConvert *ac) ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_FLT, 0, 16, 8, "NEON", ff_conv_flt_to_s16_neon); + ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_FLTP, + 0, 16, 8, "NEON", + ff_conv_fltp_to_s16_neon); ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_FLTP, 2, 16, 8, "NEON", ff_conv_fltp_to_s16_2ch_neon); diff --git a/libavresample/arm/audio_convert_neon.S b/libavresample/arm/audio_convert_neon.S index 97e0434f09..092ce0cfc6 100644 --- a/libavresample/arm/audio_convert_neon.S +++ b/libavresample/arm/audio_convert_neon.S @@ -128,3 +128,236 @@ function ff_conv_fltp_to_s16_2ch_neon, export=1 vst1.16 {q10-q11},[r0,:128]! bx lr endfunc + +function ff_conv_fltp_to_s16_neon, export=1 + cmp r3, #2 + itt lt + ldrlt r1, [r1] + blt ff_conv_flt_to_s16_neon + beq ff_conv_fltp_to_s16_2ch_neon + + push {r4-r8, lr} + cmp r3, #4 + lsl r12, r3, #1 + blt 4f + + @ 4 channels +5: ldm r1!, {r4-r7} + mov lr, r2 + mov r8, r0 + vld1.32 {q8}, [r4,:128]! + vcvt.s32.f32 q8, q8, #31 + vld1.32 {q9}, [r5,:128]! + vcvt.s32.f32 q9, q9, #31 + vld1.32 {q10}, [r6,:128]! + vcvt.s32.f32 q10, q10, #31 + vld1.32 {q11}, [r7,:128]! + vcvt.s32.f32 q11, q11, #31 +6: subs lr, lr, #8 + vld1.32 {q0}, [r4,:128]! + vcvt.s32.f32 q0, q0, #31 + vsri.32 q9, q8, #16 + vld1.32 {q1}, [r5,:128]! + vcvt.s32.f32 q1, q1, #31 + vsri.32 q11, q10, #16 + vld1.32 {q2}, [r6,:128]! + vcvt.s32.f32 q2, q2, #31 + vzip.32 d18, d22 + vld1.32 {q3}, [r7,:128]! + vcvt.s32.f32 q3, q3, #31 + vzip.32 d19, d23 + vst1.16 {d18}, [r8], r12 + vsri.32 q1, q0, #16 + vst1.16 {d22}, [r8], r12 + vsri.32 q3, q2, #16 + vst1.16 {d19}, [r8], r12 + vzip.32 d2, d6 + vst1.16 {d23}, [r8], r12 + vzip.32 d3, d7 + beq 7f + vld1.32 {q8}, [r4,:128]! + vcvt.s32.f32 q8, q8, #31 + vst1.16 {d2}, [r8], r12 + vld1.32 {q9}, [r5,:128]! + vcvt.s32.f32 q9, q9, #31 + vst1.16 {d6}, [r8], r12 + vld1.32 {q10}, [r6,:128]! + vcvt.s32.f32 q10, q10, #31 + vst1.16 {d3}, [r8], r12 + vld1.32 {q11}, [r7,:128]! + vcvt.s32.f32 q11, q11, #31 + vst1.16 {d7}, [r8], r12 + b 6b +7: vst1.16 {d2}, [r8], r12 + vst1.16 {d6}, [r8], r12 + vst1.16 {d3}, [r8], r12 + vst1.16 {d7}, [r8], r12 + subs r3, r3, #4 + it eq + popeq {r4-r8, pc} + cmp r3, #4 + add r0, r0, #8 + bge 5b + + @ 2 channels +4: cmp r3, #2 + blt 4f + ldm r1!, {r4-r5} + mov lr, r2 + mov r8, r0 + tst lr, #8 + vld1.32 {q8}, [r4,:128]! + vcvt.s32.f32 q8, q8, #31 + vld1.32 {q9}, [r5,:128]! + vcvt.s32.f32 q9, q9, #31 + vld1.32 {q10}, [r4,:128]! + vcvt.s32.f32 q10, q10, #31 + vld1.32 {q11}, [r5,:128]! + vcvt.s32.f32 q11, q11, #31 + beq 6f + subs lr, lr, #8 + beq 7f + vsri.32 d18, d16, #16 + vsri.32 d19, d17, #16 + vld1.32 {q8}, [r4,:128]! + vcvt.s32.f32 q8, q8, #31 + vst1.32 {d18[0]}, [r8], r12 + vsri.32 d22, d20, #16 + vst1.32 {d18[1]}, [r8], r12 + vsri.32 d23, d21, #16 + vst1.32 {d19[0]}, [r8], r12 + vst1.32 {d19[1]}, [r8], r12 + vld1.32 {q9}, [r5,:128]! + vcvt.s32.f32 q9, q9, #31 + vst1.32 {d22[0]}, [r8], r12 + vst1.32 {d22[1]}, [r8], r12 + vld1.32 {q10}, [r4,:128]! + vcvt.s32.f32 q10, q10, #31 + vst1.32 {d23[0]}, [r8], r12 + vst1.32 {d23[1]}, [r8], r12 + vld1.32 {q11}, [r5,:128]! + vcvt.s32.f32 q11, q11, #31 +6: subs lr, lr, #16 + vld1.32 {q0}, [r4,:128]! + vcvt.s32.f32 q0, q0, #31 + vsri.32 d18, d16, #16 + vld1.32 {q1}, [r5,:128]! + vcvt.s32.f32 q1, q1, #31 + vsri.32 d19, d17, #16 + vld1.32 {q2}, [r4,:128]! + vcvt.s32.f32 q2, q2, #31 + vld1.32 {q3}, [r5,:128]! + vcvt.s32.f32 q3, q3, #31 + vst1.32 {d18[0]}, [r8], r12 + vsri.32 d22, d20, #16 + vst1.32 {d18[1]}, [r8], r12 + vsri.32 d23, d21, #16 + vst1.32 {d19[0]}, [r8], r12 + vsri.32 d2, d0, #16 + vst1.32 {d19[1]}, [r8], r12 + vsri.32 d3, d1, #16 + vst1.32 {d22[0]}, [r8], r12 + vsri.32 d6, d4, #16 + vst1.32 {d22[1]}, [r8], r12 + vsri.32 d7, d5, #16 + vst1.32 {d23[0]}, [r8], r12 + vst1.32 {d23[1]}, [r8], r12 + beq 6f + vld1.32 {q8}, [r4,:128]! + vcvt.s32.f32 q8, q8, #31 + vst1.32 {d2[0]}, [r8], r12 + vst1.32 {d2[1]}, [r8], r12 + vld1.32 {q9}, [r5,:128]! + vcvt.s32.f32 q9, q9, #31 + vst1.32 {d3[0]}, [r8], r12 + vst1.32 {d3[1]}, [r8], r12 + vld1.32 {q10}, [r4,:128]! + vcvt.s32.f32 q10, q10, #31 + vst1.32 {d6[0]}, [r8], r12 + vst1.32 {d6[1]}, [r8], r12 + vld1.32 {q11}, [r5,:128]! + vcvt.s32.f32 q11, q11, #31 + vst1.32 {d7[0]}, [r8], r12 + vst1.32 {d7[1]}, [r8], r12 + bgt 6b +6: vst1.32 {d2[0]}, [r8], r12 + vst1.32 {d2[1]}, [r8], r12 + vst1.32 {d3[0]}, [r8], r12 + vst1.32 {d3[1]}, [r8], r12 + vst1.32 {d6[0]}, [r8], r12 + vst1.32 {d6[1]}, [r8], r12 + vst1.32 {d7[0]}, [r8], r12 + vst1.32 {d7[1]}, [r8], r12 + b 8f +7: vsri.32 d18, d16, #16 + vsri.32 d19, d17, #16 + vst1.32 {d18[0]}, [r8], r12 + vsri.32 d22, d20, #16 + vst1.32 {d18[1]}, [r8], r12 + vsri.32 d23, d21, #16 + vst1.32 {d19[0]}, [r8], r12 + vst1.32 {d19[1]}, [r8], r12 + vst1.32 {d22[0]}, [r8], r12 + vst1.32 {d22[1]}, [r8], r12 + vst1.32 {d23[0]}, [r8], r12 + vst1.32 {d23[1]}, [r8], r12 +8: subs r3, r3, #2 + add r0, r0, #4 + it eq + popeq {r4-r8, pc} + + @ 1 channel +4: ldr r4, [r1] + tst r2, #8 + mov lr, r2 + mov r5, r0 + vld1.32 {q0}, [r4,:128]! + vcvt.s32.f32 q0, q0, #31 + vld1.32 {q1}, [r4,:128]! + vcvt.s32.f32 q1, q1, #31 + bne 8f +6: subs lr, lr, #16 + vld1.32 {q2}, [r4,:128]! + vcvt.s32.f32 q2, q2, #31 + vld1.32 {q3}, [r4,:128]! + vcvt.s32.f32 q3, q3, #31 + vst1.16 {d0[1]}, [r5,:16], r12 + vst1.16 {d0[3]}, [r5,:16], r12 + vst1.16 {d1[1]}, [r5,:16], r12 + vst1.16 {d1[3]}, [r5,:16], r12 + vst1.16 {d2[1]}, [r5,:16], r12 + vst1.16 {d2[3]}, [r5,:16], r12 + vst1.16 {d3[1]}, [r5,:16], r12 + vst1.16 {d3[3]}, [r5,:16], r12 + beq 7f + vld1.32 {q0}, [r4,:128]! + vcvt.s32.f32 q0, q0, #31 + vld1.32 {q1}, [r4,:128]! + vcvt.s32.f32 q1, q1, #31 +7: vst1.16 {d4[1]}, [r5,:16], r12 + vst1.16 {d4[3]}, [r5,:16], r12 + vst1.16 {d5[1]}, [r5,:16], r12 + vst1.16 {d5[3]}, [r5,:16], r12 + vst1.16 {d6[1]}, [r5,:16], r12 + vst1.16 {d6[3]}, [r5,:16], r12 + vst1.16 {d7[1]}, [r5,:16], r12 + vst1.16 {d7[3]}, [r5,:16], r12 + bgt 6b + pop {r4-r8, pc} +8: subs lr, lr, #8 + vst1.16 {d0[1]}, [r5,:16], r12 + vst1.16 {d0[3]}, [r5,:16], r12 + vst1.16 {d1[1]}, [r5,:16], r12 + vst1.16 {d1[3]}, [r5,:16], r12 + vst1.16 {d2[1]}, [r5,:16], r12 + vst1.16 {d2[3]}, [r5,:16], r12 + vst1.16 {d3[1]}, [r5,:16], r12 + vst1.16 {d3[3]}, [r5,:16], r12 + it eq + popeq {r4-r8, pc} + vld1.32 {q0}, [r4,:128]! + vcvt.s32.f32 q0, q0, #31 + vld1.32 {q1}, [r4,:128]! + vcvt.s32.f32 q1, q1, #31 + b 6b +endfunc From 2017f0fdb777e16d1bc32c973b8876aafb59ef45 Mon Sep 17 00:00:00 2001 From: Diego Biurrun Date: Thu, 13 Sep 2012 12:45:33 +0200 Subject: [PATCH 4/6] x86: Remove some leftover declarations for non-existent functions --- libavcodec/dct-test.c | 4 ---- libavcodec/x86/dsputil_mmx.h | 4 ---- 2 files changed, 8 deletions(-) diff --git a/libavcodec/dct-test.c b/libavcodec/dct-test.c index 72d2d80af7..848ba8a957 100644 --- a/libavcodec/dct-test.c +++ b/libavcodec/dct-test.c @@ -48,16 +48,12 @@ #undef printf -void ff_mmx_idct(DCTELEM *data); -void ff_mmxext_idct(DCTELEM *data); - // BFIN void ff_bfin_idct(DCTELEM *block); void ff_bfin_fdct(DCTELEM *block); // ALTIVEC void ff_fdct_altivec(DCTELEM *block); -//void ff_idct_altivec(DCTELEM *block);?? no routine // ARM void ff_j_rev_dct_arm(DCTELEM *data); diff --git a/libavcodec/x86/dsputil_mmx.h b/libavcodec/x86/dsputil_mmx.h index 316c384d1a..00c7fb12bf 100644 --- a/libavcodec/x86/dsputil_mmx.h +++ b/libavcodec/x86/dsputil_mmx.h @@ -102,10 +102,6 @@ void ff_put_rv40_qpel16_mc33_mmx(uint8_t *block, uint8_t *pixels, int line_size) void ff_avg_rv40_qpel8_mc33_mmx(uint8_t *block, uint8_t *pixels, int line_size); void ff_avg_rv40_qpel16_mc33_mmx(uint8_t *block, uint8_t *pixels, int line_size); -void ff_mmx_idct(DCTELEM *block); -void ff_mmxext_idct(DCTELEM *block); - - void ff_deinterlace_line_mmx(uint8_t *dst, const uint8_t *lum_m4, const uint8_t *lum_m3, const uint8_t *lum_m2, const uint8_t *lum_m1, From 18d882551718f3e8da2c08ea664b4d0a1205212b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Storsj=C3=B6?= Date: Thu, 13 Sep 2012 12:55:44 +0300 Subject: [PATCH 5/6] trasher: Include all the necessary headers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The missing headers are required for errno and for strerror. This fixes building of this tool on mingw32ce. Signed-off-by: Martin Storsjö --- tools/trasher.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tools/trasher.c b/tools/trasher.c index 11605b8a8e..35625e9a62 100644 --- a/tools/trasher.c +++ b/tools/trasher.c @@ -21,6 +21,8 @@ #include #include #include +#include +#include static uint32_t state; static uint32_t ran(void) From 58139e141bfd7116e527bae6a9f71c3b43fc8ff2 Mon Sep 17 00:00:00 2001 From: Diego Biurrun Date: Fri, 14 Sep 2012 00:59:03 +0200 Subject: [PATCH 6/6] x86: dsputil: Move Xvid IDCT put/add functions to a more suitable place --- libavcodec/x86/dsputil_mmx.c | 27 --------------------------- libavcodec/x86/idct_mmx_xvid.c | 25 +++++++++++++++++++++++++ libavcodec/x86/idct_xvid.h | 8 ++++++++ 3 files changed, 33 insertions(+), 27 deletions(-) diff --git a/libavcodec/x86/dsputil_mmx.c b/libavcodec/x86/dsputil_mmx.c index 659b549281..121e7114c7 100644 --- a/libavcodec/x86/dsputil_mmx.c +++ b/libavcodec/x86/dsputil_mmx.c @@ -2161,33 +2161,6 @@ void ff_avg_vc1_mspel_mc00_mmx2(uint8_t *dst, const uint8_t *src, avg_pixels8_mmx2(dst, src, stride, 8); } -/* XXX: Those functions should be suppressed ASAP when all IDCTs are - * converted. */ - -static void ff_idct_xvid_mmx_put(uint8_t *dest, int line_size, DCTELEM *block) -{ - ff_idct_xvid_mmx(block); - ff_put_pixels_clamped_mmx(block, dest, line_size); -} - -static void ff_idct_xvid_mmx_add(uint8_t *dest, int line_size, DCTELEM *block) -{ - ff_idct_xvid_mmx(block); - ff_add_pixels_clamped_mmx(block, dest, line_size); -} - -static void ff_idct_xvid_mmx2_put(uint8_t *dest, int line_size, DCTELEM *block) -{ - ff_idct_xvid_mmx2(block); - ff_put_pixels_clamped_mmx(block, dest, line_size); -} - -static void ff_idct_xvid_mmx2_add(uint8_t *dest, int line_size, DCTELEM *block) -{ - ff_idct_xvid_mmx2(block); - ff_add_pixels_clamped_mmx(block, dest, line_size); -} - static void vorbis_inverse_coupling_3dnow(float *mag, float *ang, int blocksize) { int i; diff --git a/libavcodec/x86/idct_mmx_xvid.c b/libavcodec/x86/idct_mmx_xvid.c index 23180b2c5a..08a627d5b9 100644 --- a/libavcodec/x86/idct_mmx_xvid.c +++ b/libavcodec/x86/idct_mmx_xvid.c @@ -44,6 +44,7 @@ #include "config.h" #include "libavcodec/avcodec.h" #include "libavutil/mem.h" +#include "dsputil_mmx.h" #include "idct_xvid.h" #if HAVE_INLINE_ASM @@ -529,4 +530,28 @@ __asm__ volatile( :: "r"(block), "r"(rounder_0), "r"(tab_i_04_xmm), "r"(tg_1_16)); } +void ff_idct_xvid_mmx_put(uint8_t *dest, int line_size, DCTELEM *block) +{ + ff_idct_xvid_mmx(block); + ff_put_pixels_clamped_mmx(block, dest, line_size); +} + +void ff_idct_xvid_mmx_add(uint8_t *dest, int line_size, DCTELEM *block) +{ + ff_idct_xvid_mmx(block); + ff_add_pixels_clamped_mmx(block, dest, line_size); +} + +void ff_idct_xvid_mmx2_put(uint8_t *dest, int line_size, DCTELEM *block) +{ + ff_idct_xvid_mmx2(block); + ff_put_pixels_clamped_mmx(block, dest, line_size); +} + +void ff_idct_xvid_mmx2_add(uint8_t *dest, int line_size, DCTELEM *block) +{ + ff_idct_xvid_mmx2(block); + ff_add_pixels_clamped_mmx(block, dest, line_size); +} + #endif /* HAVE_INLINE_ASM */ diff --git a/libavcodec/x86/idct_xvid.h b/libavcodec/x86/idct_xvid.h index 495d2caaf9..82fa990873 100644 --- a/libavcodec/x86/idct_xvid.h +++ b/libavcodec/x86/idct_xvid.h @@ -28,8 +28,16 @@ #include +#include "libavcodec/dsputil.h" + void ff_idct_xvid_mmx(short *block); +void ff_idct_xvid_mmx_put(uint8_t *dest, int line_size, DCTELEM *block); +void ff_idct_xvid_mmx_add(uint8_t *dest, int line_size, DCTELEM *block); + void ff_idct_xvid_mmx2(short *block); +void ff_idct_xvid_mmx2_put(uint8_t *dest, int line_size, DCTELEM *block); +void ff_idct_xvid_mmx2_add(uint8_t *dest, int line_size, DCTELEM *block); + void ff_idct_xvid_sse2(short *block); void ff_idct_xvid_sse2_put(uint8_t *dest, int line_size, short *block); void ff_idct_xvid_sse2_add(uint8_t *dest, int line_size, short *block);