1cabdff1aSopenharmony_ci/*
2cabdff1aSopenharmony_ci * Copyright (c) 2016 Zhou Xiaoyong <zhouxiaoyong@loongson.cn>
3cabdff1aSopenharmony_ci *
4cabdff1aSopenharmony_ci * This file is part of FFmpeg.
5cabdff1aSopenharmony_ci *
6cabdff1aSopenharmony_ci * FFmpeg is free software; you can redistribute it and/or
7cabdff1aSopenharmony_ci * modify it under the terms of the GNU Lesser General Public
8cabdff1aSopenharmony_ci * License as published by the Free Software Foundation; either
9cabdff1aSopenharmony_ci * version 2.1 of the License, or (at your option) any later version.
10cabdff1aSopenharmony_ci *
11cabdff1aSopenharmony_ci * FFmpeg is distributed in the hope that it will be useful,
12cabdff1aSopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of
13cabdff1aSopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14cabdff1aSopenharmony_ci * Lesser General Public License for more details.
15cabdff1aSopenharmony_ci *
16cabdff1aSopenharmony_ci * You should have received a copy of the GNU Lesser General Public
17cabdff1aSopenharmony_ci * License along with FFmpeg; if not, write to the Free Software
18cabdff1aSopenharmony_ci * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19cabdff1aSopenharmony_ci */
20cabdff1aSopenharmony_ci
21cabdff1aSopenharmony_ci#ifndef AVCODEC_MIPS_VC1DSP_MIPS_H
22cabdff1aSopenharmony_ci#define AVCODEC_MIPS_VC1DSP_MIPS_H
23cabdff1aSopenharmony_ci
24cabdff1aSopenharmony_ci#include "libavcodec/vc1dsp.h"
25cabdff1aSopenharmony_ci
26cabdff1aSopenharmony_civoid ff_put_vc1_mspel_mc00_mmi(uint8_t *dst, const uint8_t *src,
27cabdff1aSopenharmony_ci                               ptrdiff_t stride, int rnd);
28cabdff1aSopenharmony_civoid ff_put_vc1_mspel_mc01_mmi(uint8_t *dst, const uint8_t *src,
29cabdff1aSopenharmony_ci                               ptrdiff_t stride, int rnd);
30cabdff1aSopenharmony_civoid ff_put_vc1_mspel_mc02_mmi(uint8_t *dst, const uint8_t *src,
31cabdff1aSopenharmony_ci                               ptrdiff_t stride, int rnd);
32cabdff1aSopenharmony_civoid ff_put_vc1_mspel_mc03_mmi(uint8_t *dst, const uint8_t *src,
33cabdff1aSopenharmony_ci                               ptrdiff_t stride, int rnd);
34cabdff1aSopenharmony_civoid ff_put_vc1_mspel_mc10_mmi(uint8_t *dst, const uint8_t *src,
35cabdff1aSopenharmony_ci                               ptrdiff_t stride, int rnd);
36cabdff1aSopenharmony_civoid ff_put_vc1_mspel_mc11_mmi(uint8_t *dst, const uint8_t *src,
37cabdff1aSopenharmony_ci                               ptrdiff_t stride, int rnd);
38cabdff1aSopenharmony_civoid ff_put_vc1_mspel_mc12_mmi(uint8_t *dst, const uint8_t *src,
39cabdff1aSopenharmony_ci                               ptrdiff_t stride, int rnd);
40cabdff1aSopenharmony_civoid ff_put_vc1_mspel_mc13_mmi(uint8_t *dst, const uint8_t *src,
41cabdff1aSopenharmony_ci                               ptrdiff_t stride, int rnd);
42cabdff1aSopenharmony_civoid ff_put_vc1_mspel_mc20_mmi(uint8_t *dst, const uint8_t *src,
43cabdff1aSopenharmony_ci                               ptrdiff_t stride, int rnd);
44cabdff1aSopenharmony_civoid ff_put_vc1_mspel_mc21_mmi(uint8_t *dst, const uint8_t *src,
45cabdff1aSopenharmony_ci                               ptrdiff_t stride, int rnd);
46cabdff1aSopenharmony_civoid ff_put_vc1_mspel_mc22_mmi(uint8_t *dst, const uint8_t *src,
47cabdff1aSopenharmony_ci                               ptrdiff_t stride, int rnd);
48cabdff1aSopenharmony_civoid ff_put_vc1_mspel_mc23_mmi(uint8_t *dst, const uint8_t *src,
49cabdff1aSopenharmony_ci                               ptrdiff_t stride, int rnd);
50cabdff1aSopenharmony_civoid ff_put_vc1_mspel_mc30_mmi(uint8_t *dst, const uint8_t *src,
51cabdff1aSopenharmony_ci                               ptrdiff_t stride, int rnd);
52cabdff1aSopenharmony_civoid ff_put_vc1_mspel_mc31_mmi(uint8_t *dst, const uint8_t *src,
53cabdff1aSopenharmony_ci                               ptrdiff_t stride, int rnd);
54cabdff1aSopenharmony_civoid ff_put_vc1_mspel_mc32_mmi(uint8_t *dst, const uint8_t *src,
55cabdff1aSopenharmony_ci                               ptrdiff_t stride, int rnd);
56cabdff1aSopenharmony_civoid ff_put_vc1_mspel_mc33_mmi(uint8_t *dst, const uint8_t *src,
57cabdff1aSopenharmony_ci                               ptrdiff_t stride, int rnd);
58cabdff1aSopenharmony_ci
59cabdff1aSopenharmony_civoid ff_avg_vc1_mspel_mc00_mmi(uint8_t *dst, const uint8_t *src,
60cabdff1aSopenharmony_ci                               ptrdiff_t stride, int rnd);
61cabdff1aSopenharmony_civoid ff_avg_vc1_mspel_mc01_mmi(uint8_t *dst, const uint8_t *src,
62cabdff1aSopenharmony_ci                               ptrdiff_t stride, int rnd);
63cabdff1aSopenharmony_civoid ff_avg_vc1_mspel_mc02_mmi(uint8_t *dst, const uint8_t *src,
64cabdff1aSopenharmony_ci                               ptrdiff_t stride, int rnd);
65cabdff1aSopenharmony_civoid ff_avg_vc1_mspel_mc03_mmi(uint8_t *dst, const uint8_t *src,
66cabdff1aSopenharmony_ci                               ptrdiff_t stride, int rnd);
67cabdff1aSopenharmony_civoid ff_avg_vc1_mspel_mc10_mmi(uint8_t *dst, const uint8_t *src,
68cabdff1aSopenharmony_ci                               ptrdiff_t stride, int rnd);
69cabdff1aSopenharmony_civoid ff_avg_vc1_mspel_mc11_mmi(uint8_t *dst, const uint8_t *src,
70cabdff1aSopenharmony_ci                               ptrdiff_t stride, int rnd);
71cabdff1aSopenharmony_civoid ff_avg_vc1_mspel_mc12_mmi(uint8_t *dst, const uint8_t *src,
72cabdff1aSopenharmony_ci                               ptrdiff_t stride, int rnd);
73cabdff1aSopenharmony_civoid ff_avg_vc1_mspel_mc13_mmi(uint8_t *dst, const uint8_t *src,
74cabdff1aSopenharmony_ci                               ptrdiff_t stride, int rnd);
75cabdff1aSopenharmony_civoid ff_avg_vc1_mspel_mc20_mmi(uint8_t *dst, const uint8_t *src,
76cabdff1aSopenharmony_ci                               ptrdiff_t stride, int rnd);
77cabdff1aSopenharmony_civoid ff_avg_vc1_mspel_mc21_mmi(uint8_t *dst, const uint8_t *src,
78cabdff1aSopenharmony_ci                               ptrdiff_t stride, int rnd);
79cabdff1aSopenharmony_civoid ff_avg_vc1_mspel_mc22_mmi(uint8_t *dst, const uint8_t *src,
80cabdff1aSopenharmony_ci                               ptrdiff_t stride, int rnd);
81cabdff1aSopenharmony_civoid ff_avg_vc1_mspel_mc23_mmi(uint8_t *dst, const uint8_t *src,
82cabdff1aSopenharmony_ci                               ptrdiff_t stride, int rnd);
83cabdff1aSopenharmony_civoid ff_avg_vc1_mspel_mc30_mmi(uint8_t *dst, const uint8_t *src,
84cabdff1aSopenharmony_ci                               ptrdiff_t stride, int rnd);
85cabdff1aSopenharmony_civoid ff_avg_vc1_mspel_mc31_mmi(uint8_t *dst, const uint8_t *src,
86cabdff1aSopenharmony_ci                               ptrdiff_t stride, int rnd);
87cabdff1aSopenharmony_civoid ff_avg_vc1_mspel_mc32_mmi(uint8_t *dst, const uint8_t *src,
88cabdff1aSopenharmony_ci                               ptrdiff_t stride, int rnd);
89cabdff1aSopenharmony_civoid ff_avg_vc1_mspel_mc33_mmi(uint8_t *dst, const uint8_t *src,
90cabdff1aSopenharmony_ci                               ptrdiff_t stride, int rnd);
91cabdff1aSopenharmony_ci
92cabdff1aSopenharmony_ci
93cabdff1aSopenharmony_civoid ff_put_vc1_mspel_mc00_16_mmi(uint8_t *dst, const uint8_t *src,
94cabdff1aSopenharmony_ci                                  ptrdiff_t stride, int rnd);
95cabdff1aSopenharmony_civoid ff_put_vc1_mspel_mc01_16_mmi(uint8_t *dst, const uint8_t *src,
96cabdff1aSopenharmony_ci                                  ptrdiff_t stride, int rnd);
97cabdff1aSopenharmony_civoid ff_put_vc1_mspel_mc02_16_mmi(uint8_t *dst, const uint8_t *src,
98cabdff1aSopenharmony_ci                                  ptrdiff_t stride, int rnd);
99cabdff1aSopenharmony_civoid ff_put_vc1_mspel_mc03_16_mmi(uint8_t *dst, const uint8_t *src,
100cabdff1aSopenharmony_ci                                  ptrdiff_t stride, int rnd);
101cabdff1aSopenharmony_civoid ff_put_vc1_mspel_mc10_16_mmi(uint8_t *dst, const uint8_t *src,
102cabdff1aSopenharmony_ci                                  ptrdiff_t stride, int rnd);
103cabdff1aSopenharmony_civoid ff_put_vc1_mspel_mc11_16_mmi(uint8_t *dst, const uint8_t *src,
104cabdff1aSopenharmony_ci                                  ptrdiff_t stride, int rnd);
105cabdff1aSopenharmony_civoid ff_put_vc1_mspel_mc12_16_mmi(uint8_t *dst, const uint8_t *src,
106cabdff1aSopenharmony_ci                                  ptrdiff_t stride, int rnd);
107cabdff1aSopenharmony_civoid ff_put_vc1_mspel_mc13_16_mmi(uint8_t *dst, const uint8_t *src,
108cabdff1aSopenharmony_ci                                  ptrdiff_t stride, int rnd);
109cabdff1aSopenharmony_civoid ff_put_vc1_mspel_mc20_16_mmi(uint8_t *dst, const uint8_t *src,
110cabdff1aSopenharmony_ci                                  ptrdiff_t stride, int rnd);
111cabdff1aSopenharmony_civoid ff_put_vc1_mspel_mc21_16_mmi(uint8_t *dst, const uint8_t *src,
112cabdff1aSopenharmony_ci                                  ptrdiff_t stride, int rnd);
113cabdff1aSopenharmony_civoid ff_put_vc1_mspel_mc22_16_mmi(uint8_t *dst, const uint8_t *src,
114cabdff1aSopenharmony_ci                                  ptrdiff_t stride, int rnd);
115cabdff1aSopenharmony_civoid ff_put_vc1_mspel_mc23_16_mmi(uint8_t *dst, const uint8_t *src,
116cabdff1aSopenharmony_ci                                  ptrdiff_t stride, int rnd);
117cabdff1aSopenharmony_civoid ff_put_vc1_mspel_mc30_16_mmi(uint8_t *dst, const uint8_t *src,
118cabdff1aSopenharmony_ci                                  ptrdiff_t stride, int rnd);
119cabdff1aSopenharmony_civoid ff_put_vc1_mspel_mc31_16_mmi(uint8_t *dst, const uint8_t *src,
120cabdff1aSopenharmony_ci                                  ptrdiff_t stride, int rnd);
121cabdff1aSopenharmony_civoid ff_put_vc1_mspel_mc32_16_mmi(uint8_t *dst, const uint8_t *src,
122cabdff1aSopenharmony_ci                                  ptrdiff_t stride, int rnd);
123cabdff1aSopenharmony_civoid ff_put_vc1_mspel_mc33_16_mmi(uint8_t *dst, const uint8_t *src,
124cabdff1aSopenharmony_ci                                  ptrdiff_t stride, int rnd);
125cabdff1aSopenharmony_ci
126cabdff1aSopenharmony_civoid ff_avg_vc1_mspel_mc00_16_mmi(uint8_t *dst, const uint8_t *src,
127cabdff1aSopenharmony_ci                                  ptrdiff_t stride, int rnd);
128cabdff1aSopenharmony_civoid ff_avg_vc1_mspel_mc01_16_mmi(uint8_t *dst, const uint8_t *src,
129cabdff1aSopenharmony_ci                                  ptrdiff_t stride, int rnd);
130cabdff1aSopenharmony_civoid ff_avg_vc1_mspel_mc02_16_mmi(uint8_t *dst, const uint8_t *src,
131cabdff1aSopenharmony_ci                                  ptrdiff_t stride, int rnd);
132cabdff1aSopenharmony_civoid ff_avg_vc1_mspel_mc03_16_mmi(uint8_t *dst, const uint8_t *src,
133cabdff1aSopenharmony_ci                                  ptrdiff_t stride, int rnd);
134cabdff1aSopenharmony_civoid ff_avg_vc1_mspel_mc10_16_mmi(uint8_t *dst, const uint8_t *src,
135cabdff1aSopenharmony_ci                                  ptrdiff_t stride, int rnd);
136cabdff1aSopenharmony_civoid ff_avg_vc1_mspel_mc11_16_mmi(uint8_t *dst, const uint8_t *src,
137cabdff1aSopenharmony_ci                                  ptrdiff_t stride, int rnd);
138cabdff1aSopenharmony_civoid ff_avg_vc1_mspel_mc12_16_mmi(uint8_t *dst, const uint8_t *src,
139cabdff1aSopenharmony_ci                                  ptrdiff_t stride, int rnd);
140cabdff1aSopenharmony_civoid ff_avg_vc1_mspel_mc13_16_mmi(uint8_t *dst, const uint8_t *src,
141cabdff1aSopenharmony_ci                                  ptrdiff_t stride, int rnd);
142cabdff1aSopenharmony_civoid ff_avg_vc1_mspel_mc20_16_mmi(uint8_t *dst, const uint8_t *src,
143cabdff1aSopenharmony_ci                                  ptrdiff_t stride, int rnd);
144cabdff1aSopenharmony_civoid ff_avg_vc1_mspel_mc21_16_mmi(uint8_t *dst, const uint8_t *src,
145cabdff1aSopenharmony_ci                                  ptrdiff_t stride, int rnd);
146cabdff1aSopenharmony_civoid ff_avg_vc1_mspel_mc22_16_mmi(uint8_t *dst, const uint8_t *src,
147cabdff1aSopenharmony_ci                                  ptrdiff_t stride, int rnd);
148cabdff1aSopenharmony_civoid ff_avg_vc1_mspel_mc23_16_mmi(uint8_t *dst, const uint8_t *src,
149cabdff1aSopenharmony_ci                                  ptrdiff_t stride, int rnd);
150cabdff1aSopenharmony_civoid ff_avg_vc1_mspel_mc30_16_mmi(uint8_t *dst, const uint8_t *src,
151cabdff1aSopenharmony_ci                                  ptrdiff_t stride, int rnd);
152cabdff1aSopenharmony_civoid ff_avg_vc1_mspel_mc31_16_mmi(uint8_t *dst, const uint8_t *src,
153cabdff1aSopenharmony_ci                                  ptrdiff_t stride, int rnd);
154cabdff1aSopenharmony_civoid ff_avg_vc1_mspel_mc32_16_mmi(uint8_t *dst, const uint8_t *src,
155cabdff1aSopenharmony_ci                                  ptrdiff_t stride, int rnd);
156cabdff1aSopenharmony_civoid ff_avg_vc1_mspel_mc33_16_mmi(uint8_t *dst, const uint8_t *src,
157cabdff1aSopenharmony_ci                                  ptrdiff_t stride, int rnd);
158cabdff1aSopenharmony_ci
159cabdff1aSopenharmony_civoid ff_vc1_inv_trans_8x8_mmi(int16_t block[64]);
160cabdff1aSopenharmony_civoid ff_vc1_inv_trans_8x4_mmi(uint8_t *dest, ptrdiff_t linesize, int16_t *block);
161cabdff1aSopenharmony_civoid ff_vc1_inv_trans_4x8_mmi(uint8_t *dest, ptrdiff_t linesize, int16_t *block);
162cabdff1aSopenharmony_civoid ff_vc1_inv_trans_4x4_mmi(uint8_t *dest, ptrdiff_t linesize, int16_t *block);
163cabdff1aSopenharmony_ci
164cabdff1aSopenharmony_civoid ff_vc1_inv_trans_4x4_dc_mmi(uint8_t *dest, ptrdiff_t linesize, int16_t *block);
165cabdff1aSopenharmony_civoid ff_vc1_inv_trans_4x8_dc_mmi(uint8_t *dest, ptrdiff_t linesize, int16_t *block);
166cabdff1aSopenharmony_civoid ff_vc1_inv_trans_8x4_dc_mmi(uint8_t *dest, ptrdiff_t linesize, int16_t *block);
167cabdff1aSopenharmony_civoid ff_vc1_inv_trans_8x8_dc_mmi(uint8_t *dest, ptrdiff_t linesize, int16_t *block);
168cabdff1aSopenharmony_ci
169cabdff1aSopenharmony_civoid ff_vc1_v_overlap_mmi(uint8_t *src, ptrdiff_t stride);
170cabdff1aSopenharmony_civoid ff_vc1_h_overlap_mmi(uint8_t *src, ptrdiff_t stride);
171cabdff1aSopenharmony_civoid ff_vc1_v_s_overlap_mmi(int16_t *top, int16_t *bottom);
172cabdff1aSopenharmony_civoid ff_vc1_h_s_overlap_mmi(int16_t *left, int16_t *right, ptrdiff_t left_stride, ptrdiff_t right_stride, int flags);
173cabdff1aSopenharmony_ci
174cabdff1aSopenharmony_civoid ff_vc1_v_loop_filter4_mmi(uint8_t *src, ptrdiff_t stride, int pq);
175cabdff1aSopenharmony_civoid ff_vc1_h_loop_filter4_mmi(uint8_t *src, ptrdiff_t stride, int pq);
176cabdff1aSopenharmony_civoid ff_vc1_v_loop_filter8_mmi(uint8_t *src, ptrdiff_t stride, int pq);
177cabdff1aSopenharmony_civoid ff_vc1_h_loop_filter8_mmi(uint8_t *src, ptrdiff_t stride, int pq);
178cabdff1aSopenharmony_civoid ff_vc1_v_loop_filter16_mmi(uint8_t *src, ptrdiff_t stride, int pq);
179cabdff1aSopenharmony_civoid ff_vc1_h_loop_filter16_mmi(uint8_t *src, ptrdiff_t stride, int pq);
180cabdff1aSopenharmony_ci
181cabdff1aSopenharmony_civoid ff_put_no_rnd_vc1_chroma_mc8_mmi(uint8_t *dst /* align 8 */,
182cabdff1aSopenharmony_ci                                      uint8_t *src /* align 1 */,
183cabdff1aSopenharmony_ci                                      ptrdiff_t stride, int h, int x, int y);
184cabdff1aSopenharmony_civoid ff_put_no_rnd_vc1_chroma_mc4_mmi(uint8_t *dst /* align 8 */,
185cabdff1aSopenharmony_ci                                      uint8_t *src /* align 1 */,
186cabdff1aSopenharmony_ci                                      ptrdiff_t stride, int h, int x, int y);
187cabdff1aSopenharmony_civoid ff_avg_no_rnd_vc1_chroma_mc8_mmi(uint8_t *dst /* align 8 */,
188cabdff1aSopenharmony_ci                                      uint8_t *src /* align 1 */,
189cabdff1aSopenharmony_ci                                      ptrdiff_t stride, int h, int x, int y);
190cabdff1aSopenharmony_civoid ff_avg_no_rnd_vc1_chroma_mc4_mmi(uint8_t *dst /* align 8 */,
191cabdff1aSopenharmony_ci                                      uint8_t *src /* align 1 */,
192cabdff1aSopenharmony_ci                                      ptrdiff_t stride, int h, int x, int y);
193cabdff1aSopenharmony_ci
194cabdff1aSopenharmony_civoid ff_vc1_inv_trans_8x8_msa(int16_t block[64]);
195cabdff1aSopenharmony_civoid ff_vc1_inv_trans_8x4_msa(uint8_t *dest, ptrdiff_t linesize, int16_t *block);
196cabdff1aSopenharmony_civoid ff_vc1_inv_trans_4x8_msa(uint8_t *dest, ptrdiff_t linesize, int16_t *block);
197cabdff1aSopenharmony_ci
198cabdff1aSopenharmony_ci#define FF_PUT_VC1_MSPEL_MC_MSA(hmode, vmode)                                 \
199cabdff1aSopenharmony_civoid ff_put_vc1_mspel_mc ## hmode ## vmode ## _msa(uint8_t *dst,              \
200cabdff1aSopenharmony_ci                                                  const uint8_t *src,         \
201cabdff1aSopenharmony_ci                                                  ptrdiff_t stride, int rnd); \
202cabdff1aSopenharmony_civoid ff_put_vc1_mspel_mc ## hmode ## vmode ## _16_msa(uint8_t *dst,           \
203cabdff1aSopenharmony_ci                                                  const uint8_t *src,         \
204cabdff1aSopenharmony_ci                                                  ptrdiff_t stride, int rnd);
205cabdff1aSopenharmony_ci
206cabdff1aSopenharmony_ciFF_PUT_VC1_MSPEL_MC_MSA(1, 1);
207cabdff1aSopenharmony_ciFF_PUT_VC1_MSPEL_MC_MSA(1, 2);
208cabdff1aSopenharmony_ciFF_PUT_VC1_MSPEL_MC_MSA(1, 3);
209cabdff1aSopenharmony_ci
210cabdff1aSopenharmony_ciFF_PUT_VC1_MSPEL_MC_MSA(2, 1);
211cabdff1aSopenharmony_ciFF_PUT_VC1_MSPEL_MC_MSA(2, 2);
212cabdff1aSopenharmony_ciFF_PUT_VC1_MSPEL_MC_MSA(2, 3);
213cabdff1aSopenharmony_ci
214cabdff1aSopenharmony_ciFF_PUT_VC1_MSPEL_MC_MSA(3, 1);
215cabdff1aSopenharmony_ciFF_PUT_VC1_MSPEL_MC_MSA(3, 2);
216cabdff1aSopenharmony_ciFF_PUT_VC1_MSPEL_MC_MSA(3, 3);
217cabdff1aSopenharmony_ci#endif /* AVCODEC_MIPS_VC1DSP_MIPS_H */
218