[FFmpeg-cvslog] Merge commit '0676de935b1e81bc5b5698fef3e7d48ff2ea77ff'
James Almer
git at videolan.org
Fri Mar 22 21:07:05 EET 2019
ffmpeg | branch: master | James Almer <jamrial at gmail.com> | Fri Mar 22 16:04:42 2019 -0300| [47e12966b75490cfa5fb8ed65a48a9a3d84a7bce] | committer: James Almer
Merge commit '0676de935b1e81bc5b5698fef3e7d48ff2ea77ff'
* commit '0676de935b1e81bc5b5698fef3e7d48ff2ea77ff':
arm: Implement a NEON version of 422 h264_h_loop_filter_chroma
Merged-by: James Almer <jamrial at gmail.com>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=47e12966b75490cfa5fb8ed65a48a9a3d84a7bce
---
libavcodec/arm/h264dsp_init_arm.c | 10 +++++++---
libavcodec/arm/h264dsp_neon.S | 19 +++++++++++++++++++
2 files changed, 26 insertions(+), 3 deletions(-)
diff --git a/libavcodec/arm/h264dsp_init_arm.c b/libavcodec/arm/h264dsp_init_arm.c
index 8940265930..54e1e38c93 100644
--- a/libavcodec/arm/h264dsp_init_arm.c
+++ b/libavcodec/arm/h264dsp_init_arm.c
@@ -33,6 +33,8 @@ void ff_h264_v_loop_filter_chroma_neon(uint8_t *pix, ptrdiff_t stride, int alpha
int beta, int8_t *tc0);
void ff_h264_h_loop_filter_chroma_neon(uint8_t *pix, ptrdiff_t stride, int alpha,
int beta, int8_t *tc0);
+void ff_h264_h_loop_filter_chroma422_neon(uint8_t *pix, ptrdiff_t stride, int alpha,
+ int beta, int8_t *tc0);
void ff_weight_h264_pixels_16_neon(uint8_t *dst, int stride, int height,
int log2_den, int weight, int offset);
@@ -77,9 +79,11 @@ static av_cold void h264dsp_init_neon(H264DSPContext *c, const int bit_depth,
c->h264_v_loop_filter_luma = ff_h264_v_loop_filter_luma_neon;
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;
- if(chroma_format_idc == 1){
- c->h264_h_loop_filter_chroma = ff_h264_h_loop_filter_chroma_neon;
- }
+
+ if (chroma_format_idc <= 1)
+ c->h264_h_loop_filter_chroma = ff_h264_h_loop_filter_chroma_neon;
+ else
+ c->h264_h_loop_filter_chroma = ff_h264_h_loop_filter_chroma422_neon;
c->weight_h264_pixels_tab[0] = ff_weight_h264_pixels_16_neon;
c->weight_h264_pixels_tab[1] = ff_weight_h264_pixels_8_neon;
diff --git a/libavcodec/arm/h264dsp_neon.S b/libavcodec/arm/h264dsp_neon.S
index 274a547f26..5fed6848d8 100644
--- a/libavcodec/arm/h264dsp_neon.S
+++ b/libavcodec/arm/h264dsp_neon.S
@@ -237,6 +237,7 @@ function ff_h264_h_loop_filter_chroma_neon, export=1
h264_loop_filter_start
sub r0, r0, #2
+h_loop_filter_chroma420:
vld1.32 {d18[0]}, [r0], r1
vld1.32 {d16[0]}, [r0], r1
vld1.32 {d0[0]}, [r0], r1
@@ -271,6 +272,24 @@ function ff_h264_h_loop_filter_chroma_neon, export=1
bx lr
endfunc
+function ff_h264_h_loop_filter_chroma422_neon, export=1
+ h264_loop_filter_start
+ push {r4, lr}
+ add r4, r0, r1
+ add r1, r1, r1
+ sub r0, r0, #2
+
+ bl h_loop_filter_chroma420
+
+ ldr r12, [sp, #8]
+ ldr r12, [r12]
+ vmov.32 d24[0], r12
+ sub r0, r4, #2
+
+ bl h_loop_filter_chroma420
+ pop {r4, pc}
+endfunc
+
@ Biweighted prediction
.macro biweight_16 macs, macd
======================================================================
diff --cc libavcodec/arm/h264dsp_init_arm.c
index 8940265930,617632c59e..54e1e38c93
--- a/libavcodec/arm/h264dsp_init_arm.c
+++ b/libavcodec/arm/h264dsp_init_arm.c
@@@ -25,14 -25,16 +25,16 @@@
#include "libavcodec/h264dsp.h"
#include "libavcodec/arm/startcode.h"
-void ff_h264_v_loop_filter_luma_neon(uint8_t *pix, int stride, int alpha,
+void ff_h264_v_loop_filter_luma_neon(uint8_t *pix, ptrdiff_t stride, int alpha,
int beta, int8_t *tc0);
-void ff_h264_h_loop_filter_luma_neon(uint8_t *pix, int stride, int alpha,
+void ff_h264_h_loop_filter_luma_neon(uint8_t *pix, ptrdiff_t stride, int alpha,
int beta, int8_t *tc0);
-void ff_h264_v_loop_filter_chroma_neon(uint8_t *pix, int stride, int alpha,
+void ff_h264_v_loop_filter_chroma_neon(uint8_t *pix, ptrdiff_t stride, int alpha,
int beta, int8_t *tc0);
-void ff_h264_h_loop_filter_chroma_neon(uint8_t *pix, int stride, int alpha,
+void ff_h264_h_loop_filter_chroma_neon(uint8_t *pix, ptrdiff_t stride, int alpha,
int beta, int8_t *tc0);
-void ff_h264_h_loop_filter_chroma422_neon(uint8_t *pix, int stride, int alpha,
++void ff_h264_h_loop_filter_chroma422_neon(uint8_t *pix, ptrdiff_t stride, int alpha,
+ int beta, int8_t *tc0);
void ff_weight_h264_pixels_16_neon(uint8_t *dst, int stride, int height,
int log2_den, int weight, int offset);
More information about the ffmpeg-cvslog
mailing list