From b254490bdabb21bd517c05b1a68717f9952ac8c4 Mon Sep 17 00:00:00 2001 From: Mason Carter Date: Sat, 14 Dec 2013 17:32:57 -0800 Subject: [PATCH] vc1: arm: Add NEON no_rnd chroma MC MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Apply David Conrad's old patch to the modern codebase. http://ffmpeg.org/pipermail/ffmpeg-devel/2009-April/059877.html Signed-off-by: Martin Storsjö --- libavcodec/arm/h264cmc_neon.S | 13 +++++++++++++ libavcodec/arm/vc1dsp_init_neon.c | 14 ++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/libavcodec/arm/h264cmc_neon.S b/libavcodec/arm/h264cmc_neon.S index 15301f8fb9..3183dd8d82 100644 --- a/libavcodec/arm/h264cmc_neon.S +++ b/libavcodec/arm/h264cmc_neon.S @@ -39,6 +39,9 @@ function ff_\type\()_\codec\()_chroma_mc8_neon, export=1 add r6, r6, r7, lsl #1 vld1.16 {d22[],d23[]}, [r6,:16] .endif + .ifc \codec,vc1 + vmov.u16 q11, #28 + .endif A muls r7, r4, r5 T mul r7, r4, r5 @@ -183,6 +186,9 @@ function ff_\type\()_\codec\()_chroma_mc4_neon, export=1 add r6, r6, r7, lsl #1 vld1.16 {d22[],d23[]}, [r6,:16] .endif + .ifc \codec,vc1 + vmov.u16 q11, #28 + .endif A muls r7, r4, r5 T mul r7, r4, r5 @@ -396,3 +402,10 @@ endconst h264_chroma_mc4 put, rv40 h264_chroma_mc4 avg, rv40 #endif + +#if CONFIG_VC1_DECODER + h264_chroma_mc8 put, vc1 + h264_chroma_mc8 avg, vc1 + h264_chroma_mc4 put, vc1 + h264_chroma_mc4 avg, vc1 +#endif diff --git a/libavcodec/arm/vc1dsp_init_neon.c b/libavcodec/arm/vc1dsp_init_neon.c index 5cc65d7abc..912e33cced 100644 --- a/libavcodec/arm/vc1dsp_init_neon.c +++ b/libavcodec/arm/vc1dsp_init_neon.c @@ -70,6 +70,15 @@ void ff_put_vc1_mspel_mc32_neon(uint8_t *dst, const uint8_t *src, void ff_put_vc1_mspel_mc33_neon(uint8_t *dst, const uint8_t *src, ptrdiff_t stride, int rnd); +void ff_put_vc1_chroma_mc8_neon(uint8_t *dst, uint8_t *src, int stride, int h, + int x, int y); +void ff_avg_vc1_chroma_mc8_neon(uint8_t *dst, uint8_t *src, int stride, int h, + int x, int y); +void ff_put_vc1_chroma_mc4_neon(uint8_t *dst, uint8_t *src, int stride, int h, + int x, int y); +void ff_avg_vc1_chroma_mc4_neon(uint8_t *dst, uint8_t *src, int stride, int h, + int x, int y); + av_cold void ff_vc1dsp_init_neon(VC1DSPContext *dsp) { dsp->vc1_inv_trans_8x8 = ff_vc1_inv_trans_8x8_neon; @@ -97,4 +106,9 @@ av_cold void ff_vc1dsp_init_neon(VC1DSPContext *dsp) dsp->put_vc1_mspel_pixels_tab[13] = ff_put_vc1_mspel_mc13_neon; dsp->put_vc1_mspel_pixels_tab[14] = ff_put_vc1_mspel_mc23_neon; dsp->put_vc1_mspel_pixels_tab[15] = ff_put_vc1_mspel_mc33_neon; + + dsp->put_no_rnd_vc1_chroma_pixels_tab[0] = ff_put_vc1_chroma_mc8_neon; + dsp->avg_no_rnd_vc1_chroma_pixels_tab[0] = ff_avg_vc1_chroma_mc8_neon; + dsp->put_no_rnd_vc1_chroma_pixels_tab[1] = ff_put_vc1_chroma_mc4_neon; + dsp->avg_no_rnd_vc1_chroma_pixels_tab[1] = ff_avg_vc1_chroma_mc4_neon; }