summaryrefslogtreecommitdiff
path: root/packages/mplayer/files/mru-neon-h264idctadd.diff
diff options
context:
space:
mode:
Diffstat (limited to 'packages/mplayer/files/mru-neon-h264idctadd.diff')
-rw-r--r--packages/mplayer/files/mru-neon-h264idctadd.diff123
1 files changed, 123 insertions, 0 deletions
diff --git a/packages/mplayer/files/mru-neon-h264idctadd.diff b/packages/mplayer/files/mru-neon-h264idctadd.diff
new file mode 100644
index 0000000000..0f0931fbff
--- /dev/null
+++ b/packages/mplayer/files/mru-neon-h264idctadd.diff
@@ -0,0 +1,123 @@
+From: Mans Rullgard <mans@mansr.com>
+Date: Sun, 24 Aug 2008 21:27:49 +0000 (+0100)
+Subject: ARM: NEON optimised h264_idct_add
+X-Git-Url: http://git.mansr.com/?p=ffmpeg.mru;a=commitdiff_plain;h=ebfab90234268bb35600a06e9982ca1358ea43f3
+
+ARM: NEON optimised h264_idct_add
+---
+
+diff --git a/libavcodec/Makefile b/libavcodec/Makefile
+index 36ba158..053e752 100644
+--- a/libavcodec/Makefile
++++ b/libavcodec/Makefile
+@@ -438,6 +438,7 @@ OBJS-$(HAVE_NEON) += armv4l/dsputil_neon.o \
+ ASM_OBJS-$(HAVE_NEON) += armv4l/dsputil_neon_s.o \
+ armv4l/simple_idct_neon.o \
+ armv4l/h264dsp_neon.o \
++ armv4l/h264idct_neon.o \
+
+ OBJS-$(HAVE_VIS) += sparc/dsputil_vis.o \
+ sparc/simple_idct_vis.o \
+diff --git a/libavcodec/armv4l/dsputil_neon.c b/libavcodec/armv4l/dsputil_neon.c
+index a932aa9..74f9b4d 100644
+--- a/libavcodec/armv4l/dsputil_neon.c
++++ b/libavcodec/armv4l/dsputil_neon.c
+@@ -88,6 +88,8 @@ void ff_h264_v_loop_filter_chroma_neon(uint8_t *pix, int stride, int alpha,
+ void ff_h264_h_loop_filter_chroma_neon(uint8_t *pix, int stride, int alpha,
+ int beta, int8_t *tc0);
+
++void ff_h264_idct_add_neon(uint8_t *dst, DCTELEM *block, int stride);
++
+ void ff_dsputil_init_neon(DSPContext *c, AVCodecContext *avctx)
+ {
+ c->put_pixels_tab[0][0] = ff_put_pixels16_neon;
+@@ -152,4 +154,6 @@ void ff_dsputil_init_neon(DSPContext *c, AVCodecContext *avctx)
+ c->h264_h_loop_filter_luma = ff_h264_h_loop_filter_luma_neon;
+ c->h264_v_loop_filter_chroma = ff_h264_v_loop_filter_chroma_neon;
+ c->h264_h_loop_filter_chroma = ff_h264_h_loop_filter_chroma_neon;
++
++ c->h264_idct_add = ff_h264_idct_add_neon;
+ }
+diff --git a/libavcodec/armv4l/h264idct_neon.S b/libavcodec/armv4l/h264idct_neon.S
+new file mode 100644
+index 0000000..8f456f3
+--- /dev/null
++++ b/libavcodec/armv4l/h264idct_neon.S
+@@ -0,0 +1,77 @@
++/*
++ * Copyright (c) 2008 Mans Rullgard <mans@mansr.com>
++ *
++ * 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
++ */
++
++ .fpu neon
++
++ .text
++
++ .global ff_h264_idct_add_neon
++ .func ff_h264_idct_add_neon
++ff_h264_idct_add_neon:
++ mov r3, #(1<<5)
++ vmov.i16 d16, #0
++ vmov.16 d16[0], r3
++ vld1.64 {d0-d3}, [r1,:128]
++ vadd.i16 d0, d0, d16
++
++ vswp d1, d2
++ vadd.i16 d4, d0, d1
++ vshr.s16 q8, q1, #1
++ vsub.i16 d5, d0, d1
++ vadd.i16 d6, d2, d17
++ vsub.i16 d7, d16, d3
++ vadd.i16 q0, q2, q3
++ vsub.i16 q1, q2, q3
++
++ vtrn.16 d0, d1
++ vtrn.16 d3, d2
++ vtrn.32 d0, d3
++ vtrn.32 d1, d2
++
++ vadd.i16 d4, d0, d3
++ vld1.32 {d18[0]}, [r0,:32], r2
++ vswp d1, d3
++ vshr.s16 q8, q1, #1
++ vld1.32 {d19[1]}, [r0,:32], r2
++ vsub.i16 d5, d0, d1
++ vld1.32 {d18[1]}, [r0,:32], r2
++ vadd.i16 d6, d16, d3
++ vld1.32 {d19[0]}, [r0,:32], r2
++ vsub.i16 d7, d2, d17
++ sub r0, r0, r2, lsl #2
++ vadd.i16 q0, q2, q3
++ vsub.i16 q1, q2, q3
++
++ vshr.s16 q0, q0, #6
++ vshr.s16 q1, q1, #6
++
++ vaddw.u8 q0, q0, d18
++ vaddw.u8 q1, q1, d19
++
++ vqmovun.s16 d0, q0
++ vqmovun.s16 d1, q1
++
++ vst1.32 {d0[0]}, [r0,:32], r2
++ vst1.32 {d1[1]}, [r0,:32], r2
++ vst1.32 {d0[1]}, [r0,:32], r2
++ vst1.32 {d1[0]}, [r0,:32], r2
++
++ bx lr
++ .endfunc