[FFmpeg-cvslog] vc1: arm: Add NEON no_rnd chroma MC
Mason Carter
git at videolan.org
Fri Dec 20 23:42:34 CET 2013
ffmpeg | branch: master | Mason Carter <void.main.argc.argv at gmail.com> | Sat Dec 14 17:32:57 2013 -0800| [b254490bdabb21bd517c05b1a68717f9952ac8c4] | committer: Martin Storsjö
vc1: arm: Add NEON no_rnd chroma MC
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ö <martin at martin.st>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=b254490bdabb21bd517c05b1a68717f9952ac8c4
---
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 15301f8..3183dd8 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 5cc65d7..912e33c 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;
}
More information about the ffmpeg-cvslog
mailing list