2 * Copyright (c) 2015 Parag Salasakar (Parag.Salasakar@imgtec.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
21 #ifndef H264_DSP_MIPS_H
22 #define H264_DSP_MIPS_H
24 #include "libavcodec/h264.h"
26 void ff_h264_h_lpf_luma_inter_msa(uint8_t *src, int stride,
27 int alpha, int beta, int8_t *tc0);
28 void ff_h264_v_lpf_luma_inter_msa(uint8_t *src, int stride,
29 int alpha, int beta, int8_t *tc0);
30 void ff_h264_h_lpf_chroma_inter_msa(uint8_t *src, int stride,
31 int alpha, int beta, int8_t *tc0);
32 void ff_h264_v_lpf_chroma_inter_msa(uint8_t *src, int stride,
33 int alpha, int beta, int8_t *tc0);
34 void ff_h264_h_loop_filter_chroma422_msa(uint8_t *src, int32_t stride,
35 int32_t alpha, int32_t beta,
37 void ff_h264_h_loop_filter_chroma422_mbaff_msa(uint8_t *src, int32_t stride,
38 int32_t alpha, int32_t beta,
40 void ff_h264_h_loop_filter_luma_mbaff_msa(uint8_t *src, int32_t stride,
41 int32_t alpha, int32_t beta,
44 void ff_h264_idct_add_msa(uint8_t *dst, int16_t *src, int32_t dst_stride);
45 void ff_h264_idct4x4_addblk_dc_msa(uint8_t *dst, int16_t *src,
47 void ff_h264_deq_idct_luma_dc_msa(int16_t *dst, int16_t *src,
49 void ff_h264_idct_add16_msa(uint8_t *dst, const int32_t *blk_offset,
50 int16_t *block, int32_t stride,
51 const uint8_t nnzc[15 * 8]);
52 void ff_h264_idct_add16_intra_msa(uint8_t *dst, const int32_t *blk_offset,
53 int16_t *block, int32_t dst_stride,
54 const uint8_t nnzc[15 * 8]);
55 void ff_h264_idct_add8_msa(uint8_t **dst, const int32_t *blk_offset,
56 int16_t *block, int32_t dst_stride,
57 const uint8_t nnzc[15 * 8]);
58 void ff_h264_idct_add8_422_msa(uint8_t **dst, const int32_t *blk_offset,
59 int16_t *block, int32_t dst_stride,
60 const uint8_t nnzc[15 * 8]);
61 void ff_h264_idct8_addblk_msa(uint8_t *dst, int16_t *src, int32_t dst_stride);
62 void ff_h264_idct8_dc_addblk_msa(uint8_t *dst, int16_t *src,
64 void ff_h264_idct8_add4_msa(uint8_t *dst, const int *blk_offset,
65 int16_t *blk, int dst_stride,
66 const uint8_t nnzc[15 * 8]);
68 void ff_h264_h_lpf_luma_intra_msa(uint8_t *src, int stride,
70 void ff_h264_v_lpf_luma_intra_msa(uint8_t *src, int stride,
72 void ff_h264_h_lpf_chroma_intra_msa(uint8_t *src, int stride,
74 void ff_h264_v_lpf_chroma_intra_msa(uint8_t *src, int stride,
76 void ff_h264_h_loop_filter_luma_mbaff_intra_msa(uint8_t *src, int stride,
79 void ff_biweight_h264_pixels16_8_msa(uint8_t *dst, uint8_t *src,
80 int stride, int height, int log2_denom,
81 int weightd, int weights, int offset);
82 void ff_biweight_h264_pixels8_8_msa(uint8_t *dst, uint8_t *src,
83 int stride, int height, int log2_denom,
84 int weightd, int weights, int offset);
85 void ff_biweight_h264_pixels4_8_msa(uint8_t *dst, uint8_t *src,
86 int stride, int height, int log2_denom,
87 int weightd, int weights, int offset);
88 void ff_weight_h264_pixels16_8_msa(uint8_t *src, int stride, int height,
89 int log2_denom, int weight, int offset);
90 void ff_weight_h264_pixels8_8_msa(uint8_t *src, int stride, int height,
91 int log2_denom, int weight, int offset);
92 void ff_weight_h264_pixels4_8_msa(uint8_t *src, int stride, int height,
93 int log2_denom, int weight, int offset);
95 void ff_put_h264_qpel16_mc00_msa(uint8_t *dst, const uint8_t *src,
96 ptrdiff_t dst_stride);
97 void ff_put_h264_qpel16_mc10_msa(uint8_t *dst, const uint8_t *src,
98 ptrdiff_t dst_stride);
99 void ff_put_h264_qpel16_mc20_msa(uint8_t *dst, const uint8_t *src,
100 ptrdiff_t dst_stride);
101 void ff_put_h264_qpel16_mc30_msa(uint8_t *dst, const uint8_t *src,
102 ptrdiff_t dst_stride);
103 void ff_put_h264_qpel16_mc01_msa(uint8_t *dst, const uint8_t *src,
104 ptrdiff_t dst_stride);
105 void ff_put_h264_qpel16_mc11_msa(uint8_t *dst, const uint8_t *src,
106 ptrdiff_t dst_stride);
107 void ff_put_h264_qpel16_mc21_msa(uint8_t *dst, const uint8_t *src,
108 ptrdiff_t dst_stride);
109 void ff_put_h264_qpel16_mc31_msa(uint8_t *dst, const uint8_t *src,
110 ptrdiff_t dst_stride);
111 void ff_put_h264_qpel16_mc02_msa(uint8_t *dst, const uint8_t *src,
112 ptrdiff_t dst_stride);
113 void ff_put_h264_qpel16_mc12_msa(uint8_t *dst, const uint8_t *src,
114 ptrdiff_t dst_stride);
115 void ff_put_h264_qpel16_mc22_msa(uint8_t *dst, const uint8_t *src,
116 ptrdiff_t dst_stride);
117 void ff_put_h264_qpel16_mc32_msa(uint8_t *dst, const uint8_t *src,
118 ptrdiff_t dst_stride);
119 void ff_put_h264_qpel16_mc03_msa(uint8_t *dst, const uint8_t *src,
120 ptrdiff_t dst_stride);
121 void ff_put_h264_qpel16_mc13_msa(uint8_t *dst, const uint8_t *src,
122 ptrdiff_t dst_stride);
123 void ff_put_h264_qpel16_mc23_msa(uint8_t *dst, const uint8_t *src,
124 ptrdiff_t dst_stride);
125 void ff_put_h264_qpel16_mc33_msa(uint8_t *dst, const uint8_t *src,
126 ptrdiff_t dst_stride);
128 void ff_put_h264_qpel8_mc00_msa(uint8_t *dst, const uint8_t *src,
129 ptrdiff_t dst_stride);
130 void ff_put_h264_qpel8_mc10_msa(uint8_t *dst, const uint8_t *src,
131 ptrdiff_t dst_stride);
132 void ff_put_h264_qpel8_mc20_msa(uint8_t *dst, const uint8_t *src,
133 ptrdiff_t dst_stride);
134 void ff_put_h264_qpel8_mc30_msa(uint8_t *dst, const uint8_t *src,
135 ptrdiff_t dst_stride);
136 void ff_put_h264_qpel8_mc01_msa(uint8_t *dst, const uint8_t *src,
137 ptrdiff_t dst_stride);
138 void ff_put_h264_qpel8_mc11_msa(uint8_t *dst, const uint8_t *src,
139 ptrdiff_t dst_stride);
140 void ff_put_h264_qpel8_mc21_msa(uint8_t *dst, const uint8_t *src,
141 ptrdiff_t dst_stride);
142 void ff_put_h264_qpel8_mc31_msa(uint8_t *dst, const uint8_t *src,
143 ptrdiff_t dst_stride);
144 void ff_put_h264_qpel8_mc02_msa(uint8_t *dst, const uint8_t *src,
145 ptrdiff_t dst_stride);
146 void ff_put_h264_qpel8_mc12_msa(uint8_t *dst, const uint8_t *src,
147 ptrdiff_t dst_stride);
148 void ff_put_h264_qpel8_mc22_msa(uint8_t *dst, const uint8_t *src,
149 ptrdiff_t dst_stride);
150 void ff_put_h264_qpel8_mc32_msa(uint8_t *dst, const uint8_t *src,
151 ptrdiff_t dst_stride);
152 void ff_put_h264_qpel8_mc03_msa(uint8_t *dst, const uint8_t *src,
153 ptrdiff_t dst_stride);
154 void ff_put_h264_qpel8_mc13_msa(uint8_t *dst, const uint8_t *src,
155 ptrdiff_t dst_stride);
156 void ff_put_h264_qpel8_mc23_msa(uint8_t *dst, const uint8_t *src,
157 ptrdiff_t dst_stride);
158 void ff_put_h264_qpel8_mc33_msa(uint8_t *dst, const uint8_t *src,
159 ptrdiff_t dst_stride);
161 void ff_put_h264_qpel4_mc00_msa(uint8_t *dst, const uint8_t *src,
162 ptrdiff_t dst_stride);
163 void ff_put_h264_qpel4_mc10_msa(uint8_t *dst, const uint8_t *src,
164 ptrdiff_t dst_stride);
165 void ff_put_h264_qpel4_mc20_msa(uint8_t *dst, const uint8_t *src,
166 ptrdiff_t dst_stride);
167 void ff_put_h264_qpel4_mc30_msa(uint8_t *dst, const uint8_t *src,
168 ptrdiff_t dst_stride);
169 void ff_put_h264_qpel4_mc01_msa(uint8_t *dst, const uint8_t *src,
170 ptrdiff_t dst_stride);
171 void ff_put_h264_qpel4_mc11_msa(uint8_t *dst, const uint8_t *src,
172 ptrdiff_t dst_stride);
173 void ff_put_h264_qpel4_mc21_msa(uint8_t *dst, const uint8_t *src,
174 ptrdiff_t dst_stride);
175 void ff_put_h264_qpel4_mc31_msa(uint8_t *dst, const uint8_t *src,
176 ptrdiff_t dst_stride);
177 void ff_put_h264_qpel4_mc02_msa(uint8_t *dst, const uint8_t *src,
178 ptrdiff_t dst_stride);
179 void ff_put_h264_qpel4_mc12_msa(uint8_t *dst, const uint8_t *src,
180 ptrdiff_t dst_stride);
181 void ff_put_h264_qpel4_mc22_msa(uint8_t *dst, const uint8_t *src,
182 ptrdiff_t dst_stride);
183 void ff_put_h264_qpel4_mc32_msa(uint8_t *dst, const uint8_t *src,
184 ptrdiff_t dst_stride);
185 void ff_put_h264_qpel4_mc03_msa(uint8_t *dst, const uint8_t *src,
186 ptrdiff_t dst_stride);
187 void ff_put_h264_qpel4_mc13_msa(uint8_t *dst, const uint8_t *src,
188 ptrdiff_t dst_stride);
189 void ff_put_h264_qpel4_mc23_msa(uint8_t *dst, const uint8_t *src,
190 ptrdiff_t dst_stride);
191 void ff_put_h264_qpel4_mc33_msa(uint8_t *dst, const uint8_t *src,
192 ptrdiff_t dst_stride);
194 void ff_avg_h264_qpel16_mc00_msa(uint8_t *dst, const uint8_t *src,
195 ptrdiff_t dst_stride);
196 void ff_avg_h264_qpel16_mc10_msa(uint8_t *dst, const uint8_t *src,
197 ptrdiff_t dst_stride);
198 void ff_avg_h264_qpel16_mc20_msa(uint8_t *dst, const uint8_t *src,
199 ptrdiff_t dst_stride);
200 void ff_avg_h264_qpel16_mc30_msa(uint8_t *dst, const uint8_t *src,
201 ptrdiff_t dst_stride);
202 void ff_avg_h264_qpel16_mc01_msa(uint8_t *dst, const uint8_t *src,
203 ptrdiff_t dst_stride);
204 void ff_avg_h264_qpel16_mc11_msa(uint8_t *dst, const uint8_t *src,
205 ptrdiff_t dst_stride);
206 void ff_avg_h264_qpel16_mc21_msa(uint8_t *dst, const uint8_t *src,
207 ptrdiff_t dst_stride);
208 void ff_avg_h264_qpel16_mc31_msa(uint8_t *dst, const uint8_t *src,
209 ptrdiff_t dst_stride);
210 void ff_avg_h264_qpel16_mc02_msa(uint8_t *dst, const uint8_t *src,
211 ptrdiff_t dst_stride);
212 void ff_avg_h264_qpel16_mc12_msa(uint8_t *dst, const uint8_t *src,
213 ptrdiff_t dst_stride);
214 void ff_avg_h264_qpel16_mc22_msa(uint8_t *dst, const uint8_t *src,
215 ptrdiff_t dst_stride);
216 void ff_avg_h264_qpel16_mc32_msa(uint8_t *dst, const uint8_t *src,
217 ptrdiff_t dst_stride);
218 void ff_avg_h264_qpel16_mc03_msa(uint8_t *dst, const uint8_t *src,
219 ptrdiff_t dst_stride);
220 void ff_avg_h264_qpel16_mc13_msa(uint8_t *dst, const uint8_t *src,
221 ptrdiff_t dst_stride);
222 void ff_avg_h264_qpel16_mc23_msa(uint8_t *dst, const uint8_t *src,
223 ptrdiff_t dst_stride);
224 void ff_avg_h264_qpel16_mc33_msa(uint8_t *dst, const uint8_t *src,
225 ptrdiff_t dst_stride);
227 void ff_avg_h264_qpel8_mc00_msa(uint8_t *dst, const uint8_t *src,
228 ptrdiff_t dst_stride);
229 void ff_avg_h264_qpel8_mc10_msa(uint8_t *dst, const uint8_t *src,
230 ptrdiff_t dst_stride);
231 void ff_avg_h264_qpel8_mc20_msa(uint8_t *dst, const uint8_t *src,
232 ptrdiff_t dst_stride);
233 void ff_avg_h264_qpel8_mc30_msa(uint8_t *dst, const uint8_t *src,
234 ptrdiff_t dst_stride);
235 void ff_avg_h264_qpel8_mc01_msa(uint8_t *dst, const uint8_t *src,
236 ptrdiff_t dst_stride);
237 void ff_avg_h264_qpel8_mc11_msa(uint8_t *dst, const uint8_t *src,
238 ptrdiff_t dst_stride);
239 void ff_avg_h264_qpel8_mc21_msa(uint8_t *dst, const uint8_t *src,
240 ptrdiff_t dst_stride);
241 void ff_avg_h264_qpel8_mc31_msa(uint8_t *dst, const uint8_t *src,
242 ptrdiff_t dst_stride);
243 void ff_avg_h264_qpel8_mc02_msa(uint8_t *dst, const uint8_t *src,
244 ptrdiff_t dst_stride);
245 void ff_avg_h264_qpel8_mc12_msa(uint8_t *dst, const uint8_t *src,
246 ptrdiff_t dst_stride);
247 void ff_avg_h264_qpel8_mc22_msa(uint8_t *dst, const uint8_t *src,
248 ptrdiff_t dst_stride);
249 void ff_avg_h264_qpel8_mc32_msa(uint8_t *dst, const uint8_t *src,
250 ptrdiff_t dst_stride);
251 void ff_avg_h264_qpel8_mc03_msa(uint8_t *dst, const uint8_t *src,
252 ptrdiff_t dst_stride);
253 void ff_avg_h264_qpel8_mc13_msa(uint8_t *dst, const uint8_t *src,
254 ptrdiff_t dst_stride);
255 void ff_avg_h264_qpel8_mc23_msa(uint8_t *dst, const uint8_t *src,
256 ptrdiff_t dst_stride);
257 void ff_avg_h264_qpel8_mc33_msa(uint8_t *dst, const uint8_t *src,
258 ptrdiff_t dst_stride);
260 void ff_avg_h264_qpel4_mc00_msa(uint8_t *dst, const uint8_t *src,
261 ptrdiff_t dst_stride);
262 void ff_avg_h264_qpel4_mc10_msa(uint8_t *dst, const uint8_t *src,
263 ptrdiff_t dst_stride);
264 void ff_avg_h264_qpel4_mc20_msa(uint8_t *dst, const uint8_t *src,
265 ptrdiff_t dst_stride);
266 void ff_avg_h264_qpel4_mc30_msa(uint8_t *dst, const uint8_t *src,
267 ptrdiff_t dst_stride);
268 void ff_avg_h264_qpel4_mc01_msa(uint8_t *dst, const uint8_t *src,
269 ptrdiff_t dst_stride);
270 void ff_avg_h264_qpel4_mc11_msa(uint8_t *dst, const uint8_t *src,
271 ptrdiff_t dst_stride);
272 void ff_avg_h264_qpel4_mc21_msa(uint8_t *dst, const uint8_t *src,
273 ptrdiff_t dst_stride);
274 void ff_avg_h264_qpel4_mc31_msa(uint8_t *dst, const uint8_t *src,
275 ptrdiff_t dst_stride);
276 void ff_avg_h264_qpel4_mc02_msa(uint8_t *dst, const uint8_t *src,
277 ptrdiff_t dst_stride);
278 void ff_avg_h264_qpel4_mc12_msa(uint8_t *dst, const uint8_t *src,
279 ptrdiff_t dst_stride);
280 void ff_avg_h264_qpel4_mc22_msa(uint8_t *dst, const uint8_t *src,
281 ptrdiff_t dst_stride);
282 void ff_avg_h264_qpel4_mc32_msa(uint8_t *dst, const uint8_t *src,
283 ptrdiff_t dst_stride);
284 void ff_avg_h264_qpel4_mc03_msa(uint8_t *dst, const uint8_t *src,
285 ptrdiff_t dst_stride);
286 void ff_avg_h264_qpel4_mc13_msa(uint8_t *dst, const uint8_t *src,
287 ptrdiff_t dst_stride);
288 void ff_avg_h264_qpel4_mc23_msa(uint8_t *dst, const uint8_t *src,
289 ptrdiff_t dst_stride);
290 void ff_avg_h264_qpel4_mc33_msa(uint8_t *dst, const uint8_t *src,
291 ptrdiff_t dst_stride);
293 void ff_h264_intra_predict_plane_8x8_msa(uint8_t *src, ptrdiff_t stride);
294 void ff_h264_intra_predict_dc_4blk_8x8_msa(uint8_t *src, ptrdiff_t stride);
295 void ff_h264_intra_predict_hor_dc_8x8_msa(uint8_t *src, ptrdiff_t stride);
296 void ff_h264_intra_predict_vert_dc_8x8_msa(uint8_t *src, ptrdiff_t stride);
297 void ff_h264_intra_predict_mad_cow_dc_l0t_8x8_msa(uint8_t *src,
299 void ff_h264_intra_predict_mad_cow_dc_0lt_8x8_msa(uint8_t *src,
301 void ff_h264_intra_predict_mad_cow_dc_l00_8x8_msa(uint8_t *src,
303 void ff_h264_intra_predict_mad_cow_dc_0l0_8x8_msa(uint8_t *src,
305 void ff_h264_intra_predict_plane_16x16_msa(uint8_t *src, ptrdiff_t stride);
306 void ff_h264_intra_pred_vert_8x8_msa(uint8_t *src, ptrdiff_t stride);
307 void ff_h264_intra_pred_horiz_8x8_msa(uint8_t *src, ptrdiff_t stride);
308 void ff_h264_intra_pred_dc_16x16_msa(uint8_t *src, ptrdiff_t stride);
309 void ff_h264_intra_pred_vert_16x16_msa(uint8_t *src, ptrdiff_t stride);
310 void ff_h264_intra_pred_horiz_16x16_msa(uint8_t *src, ptrdiff_t stride);
311 void ff_h264_intra_pred_dc_left_16x16_msa(uint8_t *src, ptrdiff_t stride);
312 void ff_h264_intra_pred_dc_top_16x16_msa(uint8_t *src, ptrdiff_t stride);
313 void ff_h264_intra_pred_dc_128_8x8_msa(uint8_t *src, ptrdiff_t stride);
314 void ff_h264_intra_pred_dc_128_16x16_msa(uint8_t *src, ptrdiff_t stride);
315 void ff_vp8_pred8x8_127_dc_8_msa(uint8_t *src, ptrdiff_t stride);
316 void ff_vp8_pred8x8_129_dc_8_msa(uint8_t *src, ptrdiff_t stride);
317 void ff_vp8_pred16x16_127_dc_8_msa(uint8_t *src, ptrdiff_t stride);
318 void ff_vp8_pred16x16_129_dc_8_msa(uint8_t *src, ptrdiff_t stride);
320 void ff_h264_weight_pixels16_8_mmi(uint8_t *block, int stride, int height,
321 int log2_denom, int weight, int offset);
322 void ff_h264_biweight_pixels16_8_mmi(uint8_t *dst, uint8_t *src,
323 int stride, int height, int log2_denom, int weightd, int weights,
325 void ff_h264_weight_pixels8_8_mmi(uint8_t *block, int stride, int height,
326 int log2_denom, int weight, int offset);
327 void ff_h264_biweight_pixels8_8_mmi(uint8_t *dst, uint8_t *src,
328 int stride, int height, int log2_denom, int weightd, int weights,
330 void ff_h264_weight_pixels4_8_mmi(uint8_t *block, int stride, int height,
331 int log2_denom, int weight, int offset);
332 void ff_h264_biweight_pixels4_8_mmi(uint8_t *dst, uint8_t *src,
333 int stride, int height, int log2_denom, int weightd, int weights,
336 #endif // #ifndef H264_DSP_MIPS_H