2 * Copyright (c) 2010 Mans Rullgard <mans@mansr.com>
4 * This file is part of FFmpeg.
6 * FFmpeg is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * FFmpeg is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with FFmpeg; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 #include "libavcodec/dsputil.h"
24 #include "libavcodec/h264dsp.h"
26 void ff_h264_v_loop_filter_luma_neon(uint8_t *pix
, int stride
, int alpha
,
27 int beta
, int8_t *tc0
);
28 void ff_h264_h_loop_filter_luma_neon(uint8_t *pix
, int stride
, int alpha
,
29 int beta
, int8_t *tc0
);
30 void ff_h264_v_loop_filter_chroma_neon(uint8_t *pix
, int stride
, int alpha
,
31 int beta
, int8_t *tc0
);
32 void ff_h264_h_loop_filter_chroma_neon(uint8_t *pix
, int stride
, int alpha
,
33 int beta
, int8_t *tc0
);
35 void ff_weight_h264_pixels_16x16_neon(uint8_t *ds
, int stride
, int log2_den
,
36 int weight
, int offset
);
37 void ff_weight_h264_pixels_16x8_neon(uint8_t *ds
, int stride
, int log2_den
,
38 int weight
, int offset
);
39 void ff_weight_h264_pixels_8x16_neon(uint8_t *ds
, int stride
, int log2_den
,
40 int weight
, int offset
);
41 void ff_weight_h264_pixels_8x8_neon(uint8_t *ds
, int stride
, int log2_den
,
42 int weight
, int offset
);
43 void ff_weight_h264_pixels_8x4_neon(uint8_t *ds
, int stride
, int log2_den
,
44 int weight
, int offset
);
45 void ff_weight_h264_pixels_4x8_neon(uint8_t *ds
, int stride
, int log2_den
,
46 int weight
, int offset
);
47 void ff_weight_h264_pixels_4x4_neon(uint8_t *ds
, int stride
, int log2_den
,
48 int weight
, int offset
);
49 void ff_weight_h264_pixels_4x2_neon(uint8_t *ds
, int stride
, int log2_den
,
50 int weight
, int offset
);
52 void ff_biweight_h264_pixels_16x16_neon(uint8_t *dst
, uint8_t *src
, int stride
,
53 int log2_den
, int weightd
, int weights
,
55 void ff_biweight_h264_pixels_16x8_neon(uint8_t *dst
, uint8_t *src
, int stride
,
56 int log2_den
, int weightd
, int weights
,
58 void ff_biweight_h264_pixels_8x16_neon(uint8_t *dst
, uint8_t *src
, int stride
,
59 int log2_den
, int weightd
, int weights
,
61 void ff_biweight_h264_pixels_8x8_neon(uint8_t *dst
, uint8_t *src
, int stride
,
62 int log2_den
, int weightd
, int weights
,
64 void ff_biweight_h264_pixels_8x4_neon(uint8_t *dst
, uint8_t *src
, int stride
,
65 int log2_den
, int weightd
, int weights
,
67 void ff_biweight_h264_pixels_4x8_neon(uint8_t *dst
, uint8_t *src
, int stride
,
68 int log2_den
, int weightd
, int weights
,
70 void ff_biweight_h264_pixels_4x4_neon(uint8_t *dst
, uint8_t *src
, int stride
,
71 int log2_den
, int weightd
, int weights
,
73 void ff_biweight_h264_pixels_4x2_neon(uint8_t *dst
, uint8_t *src
, int stride
,
74 int log2_den
, int weightd
, int weights
,
77 void ff_h264_idct_add_neon(uint8_t *dst
, DCTELEM
*block
, int stride
);
78 void ff_h264_idct_dc_add_neon(uint8_t *dst
, DCTELEM
*block
, int stride
);
79 void ff_h264_idct_add16_neon(uint8_t *dst
, const int *block_offset
,
80 DCTELEM
*block
, int stride
,
81 const uint8_t nnzc
[6*8]);
82 void ff_h264_idct_add16intra_neon(uint8_t *dst
, const int *block_offset
,
83 DCTELEM
*block
, int stride
,
84 const uint8_t nnzc
[6*8]);
85 void ff_h264_idct_add8_neon(uint8_t **dest
, const int *block_offset
,
86 DCTELEM
*block
, int stride
,
87 const uint8_t nnzc
[6*8]);
89 static void ff_h264dsp_init_neon(H264DSPContext
*c
)
91 c
->h264_v_loop_filter_luma
= ff_h264_v_loop_filter_luma_neon
;
92 c
->h264_h_loop_filter_luma
= ff_h264_h_loop_filter_luma_neon
;
93 c
->h264_v_loop_filter_chroma
= ff_h264_v_loop_filter_chroma_neon
;
94 c
->h264_h_loop_filter_chroma
= ff_h264_h_loop_filter_chroma_neon
;
96 c
->weight_h264_pixels_tab
[0] = ff_weight_h264_pixels_16x16_neon
;
97 c
->weight_h264_pixels_tab
[1] = ff_weight_h264_pixels_16x8_neon
;
98 c
->weight_h264_pixels_tab
[2] = ff_weight_h264_pixels_8x16_neon
;
99 c
->weight_h264_pixels_tab
[3] = ff_weight_h264_pixels_8x8_neon
;
100 c
->weight_h264_pixels_tab
[4] = ff_weight_h264_pixels_8x4_neon
;
101 c
->weight_h264_pixels_tab
[5] = ff_weight_h264_pixels_4x8_neon
;
102 c
->weight_h264_pixels_tab
[6] = ff_weight_h264_pixels_4x4_neon
;
103 c
->weight_h264_pixels_tab
[7] = ff_weight_h264_pixels_4x2_neon
;
105 c
->biweight_h264_pixels_tab
[0] = ff_biweight_h264_pixels_16x16_neon
;
106 c
->biweight_h264_pixels_tab
[1] = ff_biweight_h264_pixels_16x8_neon
;
107 c
->biweight_h264_pixels_tab
[2] = ff_biweight_h264_pixels_8x16_neon
;
108 c
->biweight_h264_pixels_tab
[3] = ff_biweight_h264_pixels_8x8_neon
;
109 c
->biweight_h264_pixels_tab
[4] = ff_biweight_h264_pixels_8x4_neon
;
110 c
->biweight_h264_pixels_tab
[5] = ff_biweight_h264_pixels_4x8_neon
;
111 c
->biweight_h264_pixels_tab
[6] = ff_biweight_h264_pixels_4x4_neon
;
112 c
->biweight_h264_pixels_tab
[7] = ff_biweight_h264_pixels_4x2_neon
;
114 c
->h264_idct_add
= ff_h264_idct_add_neon
;
115 c
->h264_idct_dc_add
= ff_h264_idct_dc_add_neon
;
116 c
->h264_idct_add16
= ff_h264_idct_add16_neon
;
117 c
->h264_idct_add16intra
= ff_h264_idct_add16intra_neon
;
118 c
->h264_idct_add8
= ff_h264_idct_add8_neon
;
121 void ff_h264dsp_init_arm(H264DSPContext
*c
)
123 if (HAVE_NEON
) ff_h264dsp_init_neon(c
);