1/*
2 * Copyright (c) 2016 Zhou Xiaoyong <zhouxiaoyong@loongson.cn>
3 *
4 * This file is part of FFmpeg.
5 *
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.
10 *
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.
15 *
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
19 */
20
21#ifndef AVCODEC_MIPS_VC1DSP_MIPS_H
22#define AVCODEC_MIPS_VC1DSP_MIPS_H
23
24#include "libavcodec/vc1dsp.h"
25
26void ff_put_vc1_mspel_mc00_mmi(uint8_t *dst, const uint8_t *src,
27                               ptrdiff_t stride, int rnd);
28void ff_put_vc1_mspel_mc01_mmi(uint8_t *dst, const uint8_t *src,
29                               ptrdiff_t stride, int rnd);
30void ff_put_vc1_mspel_mc02_mmi(uint8_t *dst, const uint8_t *src,
31                               ptrdiff_t stride, int rnd);
32void ff_put_vc1_mspel_mc03_mmi(uint8_t *dst, const uint8_t *src,
33                               ptrdiff_t stride, int rnd);
34void ff_put_vc1_mspel_mc10_mmi(uint8_t *dst, const uint8_t *src,
35                               ptrdiff_t stride, int rnd);
36void ff_put_vc1_mspel_mc11_mmi(uint8_t *dst, const uint8_t *src,
37                               ptrdiff_t stride, int rnd);
38void ff_put_vc1_mspel_mc12_mmi(uint8_t *dst, const uint8_t *src,
39                               ptrdiff_t stride, int rnd);
40void ff_put_vc1_mspel_mc13_mmi(uint8_t *dst, const uint8_t *src,
41                               ptrdiff_t stride, int rnd);
42void ff_put_vc1_mspel_mc20_mmi(uint8_t *dst, const uint8_t *src,
43                               ptrdiff_t stride, int rnd);
44void ff_put_vc1_mspel_mc21_mmi(uint8_t *dst, const uint8_t *src,
45                               ptrdiff_t stride, int rnd);
46void ff_put_vc1_mspel_mc22_mmi(uint8_t *dst, const uint8_t *src,
47                               ptrdiff_t stride, int rnd);
48void ff_put_vc1_mspel_mc23_mmi(uint8_t *dst, const uint8_t *src,
49                               ptrdiff_t stride, int rnd);
50void ff_put_vc1_mspel_mc30_mmi(uint8_t *dst, const uint8_t *src,
51                               ptrdiff_t stride, int rnd);
52void ff_put_vc1_mspel_mc31_mmi(uint8_t *dst, const uint8_t *src,
53                               ptrdiff_t stride, int rnd);
54void ff_put_vc1_mspel_mc32_mmi(uint8_t *dst, const uint8_t *src,
55                               ptrdiff_t stride, int rnd);
56void ff_put_vc1_mspel_mc33_mmi(uint8_t *dst, const uint8_t *src,
57                               ptrdiff_t stride, int rnd);
58
59void ff_avg_vc1_mspel_mc00_mmi(uint8_t *dst, const uint8_t *src,
60                               ptrdiff_t stride, int rnd);
61void ff_avg_vc1_mspel_mc01_mmi(uint8_t *dst, const uint8_t *src,
62                               ptrdiff_t stride, int rnd);
63void ff_avg_vc1_mspel_mc02_mmi(uint8_t *dst, const uint8_t *src,
64                               ptrdiff_t stride, int rnd);
65void ff_avg_vc1_mspel_mc03_mmi(uint8_t *dst, const uint8_t *src,
66                               ptrdiff_t stride, int rnd);
67void ff_avg_vc1_mspel_mc10_mmi(uint8_t *dst, const uint8_t *src,
68                               ptrdiff_t stride, int rnd);
69void ff_avg_vc1_mspel_mc11_mmi(uint8_t *dst, const uint8_t *src,
70                               ptrdiff_t stride, int rnd);
71void ff_avg_vc1_mspel_mc12_mmi(uint8_t *dst, const uint8_t *src,
72                               ptrdiff_t stride, int rnd);
73void ff_avg_vc1_mspel_mc13_mmi(uint8_t *dst, const uint8_t *src,
74                               ptrdiff_t stride, int rnd);
75void ff_avg_vc1_mspel_mc20_mmi(uint8_t *dst, const uint8_t *src,
76                               ptrdiff_t stride, int rnd);
77void ff_avg_vc1_mspel_mc21_mmi(uint8_t *dst, const uint8_t *src,
78                               ptrdiff_t stride, int rnd);
79void ff_avg_vc1_mspel_mc22_mmi(uint8_t *dst, const uint8_t *src,
80                               ptrdiff_t stride, int rnd);
81void ff_avg_vc1_mspel_mc23_mmi(uint8_t *dst, const uint8_t *src,
82                               ptrdiff_t stride, int rnd);
83void ff_avg_vc1_mspel_mc30_mmi(uint8_t *dst, const uint8_t *src,
84                               ptrdiff_t stride, int rnd);
85void ff_avg_vc1_mspel_mc31_mmi(uint8_t *dst, const uint8_t *src,
86                               ptrdiff_t stride, int rnd);
87void ff_avg_vc1_mspel_mc32_mmi(uint8_t *dst, const uint8_t *src,
88                               ptrdiff_t stride, int rnd);
89void ff_avg_vc1_mspel_mc33_mmi(uint8_t *dst, const uint8_t *src,
90                               ptrdiff_t stride, int rnd);
91
92
93void ff_put_vc1_mspel_mc00_16_mmi(uint8_t *dst, const uint8_t *src,
94                                  ptrdiff_t stride, int rnd);
95void ff_put_vc1_mspel_mc01_16_mmi(uint8_t *dst, const uint8_t *src,
96                                  ptrdiff_t stride, int rnd);
97void ff_put_vc1_mspel_mc02_16_mmi(uint8_t *dst, const uint8_t *src,
98                                  ptrdiff_t stride, int rnd);
99void ff_put_vc1_mspel_mc03_16_mmi(uint8_t *dst, const uint8_t *src,
100                                  ptrdiff_t stride, int rnd);
101void ff_put_vc1_mspel_mc10_16_mmi(uint8_t *dst, const uint8_t *src,
102                                  ptrdiff_t stride, int rnd);
103void ff_put_vc1_mspel_mc11_16_mmi(uint8_t *dst, const uint8_t *src,
104                                  ptrdiff_t stride, int rnd);
105void ff_put_vc1_mspel_mc12_16_mmi(uint8_t *dst, const uint8_t *src,
106                                  ptrdiff_t stride, int rnd);
107void ff_put_vc1_mspel_mc13_16_mmi(uint8_t *dst, const uint8_t *src,
108                                  ptrdiff_t stride, int rnd);
109void ff_put_vc1_mspel_mc20_16_mmi(uint8_t *dst, const uint8_t *src,
110                                  ptrdiff_t stride, int rnd);
111void ff_put_vc1_mspel_mc21_16_mmi(uint8_t *dst, const uint8_t *src,
112                                  ptrdiff_t stride, int rnd);
113void ff_put_vc1_mspel_mc22_16_mmi(uint8_t *dst, const uint8_t *src,
114                                  ptrdiff_t stride, int rnd);
115void ff_put_vc1_mspel_mc23_16_mmi(uint8_t *dst, const uint8_t *src,
116                                  ptrdiff_t stride, int rnd);
117void ff_put_vc1_mspel_mc30_16_mmi(uint8_t *dst, const uint8_t *src,
118                                  ptrdiff_t stride, int rnd);
119void ff_put_vc1_mspel_mc31_16_mmi(uint8_t *dst, const uint8_t *src,
120                                  ptrdiff_t stride, int rnd);
121void ff_put_vc1_mspel_mc32_16_mmi(uint8_t *dst, const uint8_t *src,
122                                  ptrdiff_t stride, int rnd);
123void ff_put_vc1_mspel_mc33_16_mmi(uint8_t *dst, const uint8_t *src,
124                                  ptrdiff_t stride, int rnd);
125
126void ff_avg_vc1_mspel_mc00_16_mmi(uint8_t *dst, const uint8_t *src,
127                                  ptrdiff_t stride, int rnd);
128void ff_avg_vc1_mspel_mc01_16_mmi(uint8_t *dst, const uint8_t *src,
129                                  ptrdiff_t stride, int rnd);
130void ff_avg_vc1_mspel_mc02_16_mmi(uint8_t *dst, const uint8_t *src,
131                                  ptrdiff_t stride, int rnd);
132void ff_avg_vc1_mspel_mc03_16_mmi(uint8_t *dst, const uint8_t *src,
133                                  ptrdiff_t stride, int rnd);
134void ff_avg_vc1_mspel_mc10_16_mmi(uint8_t *dst, const uint8_t *src,
135                                  ptrdiff_t stride, int rnd);
136void ff_avg_vc1_mspel_mc11_16_mmi(uint8_t *dst, const uint8_t *src,
137                                  ptrdiff_t stride, int rnd);
138void ff_avg_vc1_mspel_mc12_16_mmi(uint8_t *dst, const uint8_t *src,
139                                  ptrdiff_t stride, int rnd);
140void ff_avg_vc1_mspel_mc13_16_mmi(uint8_t *dst, const uint8_t *src,
141                                  ptrdiff_t stride, int rnd);
142void ff_avg_vc1_mspel_mc20_16_mmi(uint8_t *dst, const uint8_t *src,
143                                  ptrdiff_t stride, int rnd);
144void ff_avg_vc1_mspel_mc21_16_mmi(uint8_t *dst, const uint8_t *src,
145                                  ptrdiff_t stride, int rnd);
146void ff_avg_vc1_mspel_mc22_16_mmi(uint8_t *dst, const uint8_t *src,
147                                  ptrdiff_t stride, int rnd);
148void ff_avg_vc1_mspel_mc23_16_mmi(uint8_t *dst, const uint8_t *src,
149                                  ptrdiff_t stride, int rnd);
150void ff_avg_vc1_mspel_mc30_16_mmi(uint8_t *dst, const uint8_t *src,
151                                  ptrdiff_t stride, int rnd);
152void ff_avg_vc1_mspel_mc31_16_mmi(uint8_t *dst, const uint8_t *src,
153                                  ptrdiff_t stride, int rnd);
154void ff_avg_vc1_mspel_mc32_16_mmi(uint8_t *dst, const uint8_t *src,
155                                  ptrdiff_t stride, int rnd);
156void ff_avg_vc1_mspel_mc33_16_mmi(uint8_t *dst, const uint8_t *src,
157                                  ptrdiff_t stride, int rnd);
158
159void ff_vc1_inv_trans_8x8_mmi(int16_t block[64]);
160void ff_vc1_inv_trans_8x4_mmi(uint8_t *dest, ptrdiff_t linesize, int16_t *block);
161void ff_vc1_inv_trans_4x8_mmi(uint8_t *dest, ptrdiff_t linesize, int16_t *block);
162void ff_vc1_inv_trans_4x4_mmi(uint8_t *dest, ptrdiff_t linesize, int16_t *block);
163
164void ff_vc1_inv_trans_4x4_dc_mmi(uint8_t *dest, ptrdiff_t linesize, int16_t *block);
165void ff_vc1_inv_trans_4x8_dc_mmi(uint8_t *dest, ptrdiff_t linesize, int16_t *block);
166void ff_vc1_inv_trans_8x4_dc_mmi(uint8_t *dest, ptrdiff_t linesize, int16_t *block);
167void ff_vc1_inv_trans_8x8_dc_mmi(uint8_t *dest, ptrdiff_t linesize, int16_t *block);
168
169void ff_vc1_v_overlap_mmi(uint8_t *src, ptrdiff_t stride);
170void ff_vc1_h_overlap_mmi(uint8_t *src, ptrdiff_t stride);
171void ff_vc1_v_s_overlap_mmi(int16_t *top, int16_t *bottom);
172void ff_vc1_h_s_overlap_mmi(int16_t *left, int16_t *right, ptrdiff_t left_stride, ptrdiff_t right_stride, int flags);
173
174void ff_vc1_v_loop_filter4_mmi(uint8_t *src, ptrdiff_t stride, int pq);
175void ff_vc1_h_loop_filter4_mmi(uint8_t *src, ptrdiff_t stride, int pq);
176void ff_vc1_v_loop_filter8_mmi(uint8_t *src, ptrdiff_t stride, int pq);
177void ff_vc1_h_loop_filter8_mmi(uint8_t *src, ptrdiff_t stride, int pq);
178void ff_vc1_v_loop_filter16_mmi(uint8_t *src, ptrdiff_t stride, int pq);
179void ff_vc1_h_loop_filter16_mmi(uint8_t *src, ptrdiff_t stride, int pq);
180
181void ff_put_no_rnd_vc1_chroma_mc8_mmi(uint8_t *dst /* align 8 */,
182                                      uint8_t *src /* align 1 */,
183                                      ptrdiff_t stride, int h, int x, int y);
184void ff_put_no_rnd_vc1_chroma_mc4_mmi(uint8_t *dst /* align 8 */,
185                                      uint8_t *src /* align 1 */,
186                                      ptrdiff_t stride, int h, int x, int y);
187void ff_avg_no_rnd_vc1_chroma_mc8_mmi(uint8_t *dst /* align 8 */,
188                                      uint8_t *src /* align 1 */,
189                                      ptrdiff_t stride, int h, int x, int y);
190void ff_avg_no_rnd_vc1_chroma_mc4_mmi(uint8_t *dst /* align 8 */,
191                                      uint8_t *src /* align 1 */,
192                                      ptrdiff_t stride, int h, int x, int y);
193
194void ff_vc1_inv_trans_8x8_msa(int16_t block[64]);
195void ff_vc1_inv_trans_8x4_msa(uint8_t *dest, ptrdiff_t linesize, int16_t *block);
196void ff_vc1_inv_trans_4x8_msa(uint8_t *dest, ptrdiff_t linesize, int16_t *block);
197
198#define FF_PUT_VC1_MSPEL_MC_MSA(hmode, vmode)                                 \
199void ff_put_vc1_mspel_mc ## hmode ## vmode ## _msa(uint8_t *dst,              \
200                                                  const uint8_t *src,         \
201                                                  ptrdiff_t stride, int rnd); \
202void ff_put_vc1_mspel_mc ## hmode ## vmode ## _16_msa(uint8_t *dst,           \
203                                                  const uint8_t *src,         \
204                                                  ptrdiff_t stride, int rnd);
205
206FF_PUT_VC1_MSPEL_MC_MSA(1, 1);
207FF_PUT_VC1_MSPEL_MC_MSA(1, 2);
208FF_PUT_VC1_MSPEL_MC_MSA(1, 3);
209
210FF_PUT_VC1_MSPEL_MC_MSA(2, 1);
211FF_PUT_VC1_MSPEL_MC_MSA(2, 2);
212FF_PUT_VC1_MSPEL_MC_MSA(2, 3);
213
214FF_PUT_VC1_MSPEL_MC_MSA(3, 1);
215FF_PUT_VC1_MSPEL_MC_MSA(3, 2);
216FF_PUT_VC1_MSPEL_MC_MSA(3, 3);
217#endif /* AVCODEC_MIPS_VC1DSP_MIPS_H */
218