FFmpeg
vp8dsp_mips.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2015 Manojkumar Bhosale (Manojkumar.Bhosale@imgtec.com)
3  * Copyright (c) 2016 Zhou Xiaoyong <zhouxiaoyong@loongson.cn>
4  *
5  * This file is part of FFmpeg.
6  *
7  * FFmpeg is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * FFmpeg is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with FFmpeg; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20  */
21 
22 #ifndef AVCODEC_MIPS_VP8DSP_MIPS_H
23 #define AVCODEC_MIPS_VP8DSP_MIPS_H
24 
25 #include "libavutil/mem.h"
26 #include "libavcodec/vp8dsp.h"
27 #include "libavcodec/mathops.h"
28 #include "constants.h"
29 
30 void ff_put_vp8_pixels4_msa(uint8_t *dst, ptrdiff_t dststride,
31  uint8_t *src, ptrdiff_t srcstride,
32  int h, int x, int y);
33 void ff_put_vp8_pixels8_msa(uint8_t *dst, ptrdiff_t dststride,
34  uint8_t *src, ptrdiff_t srcstride,
35  int h, int x, int y);
36 void ff_put_vp8_pixels16_msa(uint8_t *dst, ptrdiff_t dststride,
37  uint8_t *src, ptrdiff_t srcstride,
38  int h, int x, int y);
39 
40 void ff_put_vp8_epel16_h4_msa(uint8_t *dst, ptrdiff_t dststride,
41  uint8_t *src, ptrdiff_t srcstride,
42  int h, int mx, int my);
43 void ff_put_vp8_epel16_h6_msa(uint8_t *dst, ptrdiff_t dststride,
44  uint8_t *src, ptrdiff_t srcstride,
45  int h, int mx, int my);
46 void ff_put_vp8_epel16_v4_msa(uint8_t *dst, ptrdiff_t dststride,
47  uint8_t *src, ptrdiff_t srcstride,
48  int h, int mx, int my);
49 void ff_put_vp8_epel16_v6_msa(uint8_t *dst, ptrdiff_t dststride,
50  uint8_t *src, ptrdiff_t srcstride,
51  int h, int mx, int my);
52 void ff_put_vp8_epel16_h4v4_msa(uint8_t *dst, ptrdiff_t dststride,
53  uint8_t *src, ptrdiff_t srcstride,
54  int h, int mx, int my);
55 void ff_put_vp8_epel16_h6v4_msa(uint8_t *dst, ptrdiff_t dststride,
56  uint8_t *src, ptrdiff_t srcstride,
57  int h, int mx, int my);
58 void ff_put_vp8_epel16_h4v6_msa(uint8_t *dst, ptrdiff_t dststride,
59  uint8_t *src, ptrdiff_t srcstride,
60  int h, int mx, int my);
61 void ff_put_vp8_epel16_h6v6_msa(uint8_t *dst, ptrdiff_t dststride,
62  uint8_t *src, ptrdiff_t srcstride,
63  int h, int mx, int my);
64 
65 void ff_put_vp8_epel8_h4_msa(uint8_t *dst, ptrdiff_t dststride,
66  uint8_t *src, ptrdiff_t srcstride,
67  int h, int mx, int my);
68 void ff_put_vp8_epel8_h6_msa(uint8_t *dst, ptrdiff_t dststride,
69  uint8_t *src, ptrdiff_t srcstride,
70  int h, int mx, int my);
71 void ff_put_vp8_epel8_v4_msa(uint8_t *dst, ptrdiff_t dststride,
72  uint8_t *src, ptrdiff_t srcstride,
73  int h, int mx, int my);
74 void ff_put_vp8_epel8_v6_msa(uint8_t *dst, ptrdiff_t dststride,
75  uint8_t *src, ptrdiff_t srcstride,
76  int h, int mx, int my);
77 void ff_put_vp8_epel8_h4v4_msa(uint8_t *dst, ptrdiff_t dststride,
78  uint8_t *src, ptrdiff_t srcstride,
79  int h, int mx, int my);
80 void ff_put_vp8_epel8_h6v4_msa(uint8_t *dst, ptrdiff_t dststride,
81  uint8_t *src, ptrdiff_t srcstride,
82  int h, int mx, int my);
83 void ff_put_vp8_epel8_h4v6_msa(uint8_t *dst, ptrdiff_t dststride,
84  uint8_t *src, ptrdiff_t srcstride,
85  int h, int mx, int my);
86 void ff_put_vp8_epel8_h6v6_msa(uint8_t *dst, ptrdiff_t dststride,
87  uint8_t *src, ptrdiff_t srcstride,
88  int h, int mx, int my);
89 
90 void ff_put_vp8_epel4_h4_msa(uint8_t *dst, ptrdiff_t dststride,
91  uint8_t *src, ptrdiff_t srcstride,
92  int h, int mx, int my);
93 void ff_put_vp8_epel4_h6_msa(uint8_t *dst, ptrdiff_t dststride,
94  uint8_t *src, ptrdiff_t srcstride,
95  int h, int mx, int my);
96 void ff_put_vp8_epel4_v4_msa(uint8_t *dst, ptrdiff_t dststride,
97  uint8_t *src, ptrdiff_t srcstride,
98  int h, int mx, int my);
99 void ff_put_vp8_epel4_v6_msa(uint8_t *dst, ptrdiff_t dststride,
100  uint8_t *src, ptrdiff_t srcstride,
101  int h, int mx, int my);
102 void ff_put_vp8_epel4_h4v4_msa(uint8_t *dst, ptrdiff_t dststride,
103  uint8_t *src, ptrdiff_t srcstride,
104  int h, int mx, int my);
105 void ff_put_vp8_epel4_h6v4_msa(uint8_t *dst, ptrdiff_t dststride,
106  uint8_t *src, ptrdiff_t srcstride,
107  int h, int mx, int my);
108 void ff_put_vp8_epel4_h4v6_msa(uint8_t *dst, ptrdiff_t dststride,
109  uint8_t *src, ptrdiff_t srcstride,
110  int h, int mx, int my);
111 void ff_put_vp8_epel4_h6v6_msa(uint8_t *dst, ptrdiff_t dststride,
112  uint8_t *src, ptrdiff_t srcstride,
113  int h, int mx, int my);
114 
115 void ff_put_vp8_bilinear16_h_msa(uint8_t *dst, ptrdiff_t dststride,
116  uint8_t *src, ptrdiff_t srcstride,
117  int h, int mx, int my);
118 void ff_put_vp8_bilinear16_v_msa(uint8_t *dst, ptrdiff_t dststride,
119  uint8_t *src, ptrdiff_t srcstride,
120  int h, int mx, int my);
121 void ff_put_vp8_bilinear16_hv_msa(uint8_t *dst, ptrdiff_t dststride,
122  uint8_t *src, ptrdiff_t srcstride,
123  int h, int mx, int my);
124 
125 void ff_put_vp8_bilinear8_h_msa(uint8_t *dst, ptrdiff_t dststride,
126  uint8_t *src, ptrdiff_t srcstride,
127  int h, int mx, int my);
128 void ff_put_vp8_bilinear8_v_msa(uint8_t *dst, ptrdiff_t dststride,
129  uint8_t *src, ptrdiff_t srcstride,
130  int h, int mx, int my);
131 void ff_put_vp8_bilinear8_hv_msa(uint8_t *dst, ptrdiff_t dststride,
132  uint8_t *src, ptrdiff_t srcstride,
133  int h, int mx, int my);
134 
135 void ff_put_vp8_bilinear4_h_msa(uint8_t *dst, ptrdiff_t dststride,
136  uint8_t *src, ptrdiff_t srcstride,
137  int h, int mx, int my);
138 void ff_put_vp8_bilinear4_v_msa(uint8_t *dst, ptrdiff_t dststride,
139  uint8_t *src, ptrdiff_t srcstride,
140  int h, int mx, int my);
141 void ff_put_vp8_bilinear4_hv_msa(uint8_t *dst, ptrdiff_t dststride,
142  uint8_t *src, ptrdiff_t srcstride,
143  int h, int mx, int my);
144 
145 /* loop filter */
146 void ff_vp8_h_loop_filter16_inner_msa(uint8_t *dst, ptrdiff_t stride,
147  int32_t e, int32_t i, int32_t h);
148 void ff_vp8_v_loop_filter16_inner_msa(uint8_t *dst, ptrdiff_t stride,
149  int32_t e, int32_t i, int32_t h);
151  ptrdiff_t stride,
152  int flim_e, int flim_i, int hev_thresh);
154  ptrdiff_t stride,
155  int flim_e, int flim_i, int hev_thresh);
156 void ff_vp8_h_loop_filter16_msa(uint8_t *dst, ptrdiff_t stride,
157  int flim_e, int flim_i, int hev_thresh);
158 void ff_vp8_v_loop_filter16_msa(uint8_t *dst, ptrdiff_t stride,
159  int flim_e, int flim_i, int hev_thresh);
160 void ff_vp8_h_loop_filter8uv_msa(uint8_t *dst_u, uint8_t *dst_v,
161  ptrdiff_t stride,
162  int flim_e, int flim_i, int hev_thresh);
163 void ff_vp8_v_loop_filter8uv_msa(uint8_t *dst_u, uint8_t *dst_v,
164  ptrdiff_t stride,
165  int flim_e, int flim_i, int hev_thresh);
166 void ff_vp8_h_loop_filter_simple_msa(uint8_t *dst, ptrdiff_t stride, int flim);
167 void ff_vp8_v_loop_filter_simple_msa(uint8_t *dst, ptrdiff_t stride, int flim);
168 
169 /* Idct functions */
170 void ff_vp8_luma_dc_wht_msa(int16_t block[4][4][16], int16_t dc[16]);
171 void ff_vp8_idct_add_msa(uint8_t *dst, int16_t block[16], ptrdiff_t stride);
172 void ff_vp8_idct_dc_add_msa(uint8_t *dst, int16_t block[16], ptrdiff_t stride);
173 void ff_vp8_idct_dc_add4uv_msa(uint8_t *dst, int16_t block[4][16],
174  ptrdiff_t stride);
175 void ff_vp8_idct_dc_add4y_msa(uint8_t *dst, int16_t block[4][16],
176  ptrdiff_t stride);
177 
178 void ff_vp8_luma_dc_wht_mmi(int16_t block[4][4][16], int16_t dc[16]);
179 void ff_vp8_luma_dc_wht_dc_mmi(int16_t block[4][4][16], int16_t dc[16]);
180 void ff_vp8_idct_add_mmi(uint8_t *dst, int16_t block[16], ptrdiff_t stride);
181 void ff_vp8_idct_dc_add_mmi(uint8_t *dst, int16_t block[16], ptrdiff_t stride);
182 void ff_vp8_idct_dc_add4y_mmi(uint8_t *dst, int16_t block[4][16],
183  ptrdiff_t stride);
184 void ff_vp8_idct_dc_add4uv_mmi(uint8_t *dst, int16_t block[4][16],
185  ptrdiff_t stride);
186 
187 void ff_put_vp8_pixels4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src,
188  ptrdiff_t srcstride, int h, int x, int y);
189 void ff_put_vp8_pixels8_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src,
190  ptrdiff_t srcstride, int h, int x, int y);
191 void ff_put_vp8_pixels16_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src,
192  ptrdiff_t srcstride, int h, int x, int y);
193 
194 void ff_put_vp8_epel16_h4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src,
195  ptrdiff_t srcstride, int h, int mx, int my);
196 void ff_put_vp8_epel16_h6_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src,
197  ptrdiff_t srcstride, int h, int mx, int my);
198 void ff_put_vp8_epel16_v4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src,
199  ptrdiff_t srcstride, int h, int mx, int my);
200 void ff_put_vp8_epel16_v6_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src,
201  ptrdiff_t srcstride, int h, int mx, int my);
202 void ff_put_vp8_epel16_h4v4_mmi(uint8_t *dst, ptrdiff_t dststride,
203  uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my);
204 void ff_put_vp8_epel16_h6v4_mmi(uint8_t *dst, ptrdiff_t dststride,
205  uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my);
206 void ff_put_vp8_epel16_h4v6_mmi(uint8_t *dst, ptrdiff_t dststride,
207  uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my);
208 void ff_put_vp8_epel16_h6v6_mmi(uint8_t *dst, ptrdiff_t dststride,
209  uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my);
210 
211 void ff_put_vp8_epel8_h4_mmi(uint8_t *dst, ptrdiff_t dststride,
212  uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my);
213 void ff_put_vp8_epel8_h6_mmi(uint8_t *dst, ptrdiff_t dststride,
214  uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my);
215 void ff_put_vp8_epel8_v4_mmi(uint8_t *dst, ptrdiff_t dststride,
216  uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my);
217 void ff_put_vp8_epel8_v6_mmi(uint8_t *dst, ptrdiff_t dststride,
218  uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my);
219 void ff_put_vp8_epel8_h4v4_mmi(uint8_t *dst, ptrdiff_t dststride,
220  uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my);
221 void ff_put_vp8_epel8_h6v4_mmi(uint8_t *dst, ptrdiff_t dststride,
222  uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my);
223 void ff_put_vp8_epel8_h4v6_mmi(uint8_t *dst, ptrdiff_t dststride,
224  uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my);
225 void ff_put_vp8_epel8_h6v6_mmi(uint8_t *dst, ptrdiff_t dststride,
226  uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my);
227 
228 void ff_put_vp8_epel4_h4_mmi(uint8_t *dst, ptrdiff_t dststride,
229  uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my);
230 void ff_put_vp8_epel4_h6_mmi(uint8_t *dst, ptrdiff_t dststride,
231  uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my);
232 void ff_put_vp8_epel4_v4_mmi(uint8_t *dst, ptrdiff_t dststride,
233  uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my);
234 void ff_put_vp8_epel4_v6_mmi(uint8_t *dst, ptrdiff_t dststride,
235  uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my);
236 void ff_put_vp8_epel4_h4v4_mmi(uint8_t *dst, ptrdiff_t dststride,
237  uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my);
238 void ff_put_vp8_epel4_h6v4_mmi(uint8_t *dst, ptrdiff_t dststride,
239  uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my);
240 void ff_put_vp8_epel4_h4v6_mmi(uint8_t *dst, ptrdiff_t dststride,
241  uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my);
242 void ff_put_vp8_epel4_h6v6_mmi(uint8_t *dst, ptrdiff_t dststride,
243  uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my);
244 
245 void ff_put_vp8_bilinear16_h_mmi(uint8_t *dst, ptrdiff_t dststride,
246  uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my);
247 void ff_put_vp8_bilinear16_v_mmi(uint8_t *dst, ptrdiff_t dststride,
248  uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my);
249 void ff_put_vp8_bilinear16_hv_mmi(uint8_t *dst, ptrdiff_t dststride,
250  uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my);
251 
252 void ff_put_vp8_bilinear8_h_mmi(uint8_t *dst, ptrdiff_t dststride,
253  uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my);
254 void ff_put_vp8_bilinear8_v_mmi(uint8_t *dst, ptrdiff_t dststride,
255  uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my);
256 void ff_put_vp8_bilinear8_hv_mmi(uint8_t *dst, ptrdiff_t dststride,
257  uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my);
258 
259 void ff_put_vp8_bilinear4_h_mmi(uint8_t *dst, ptrdiff_t dststride,
260  uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my);
261 void ff_put_vp8_bilinear4_v_mmi(uint8_t *dst, ptrdiff_t dststride,
262  uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my);
263 void ff_put_vp8_bilinear4_hv_mmi(uint8_t *dst, ptrdiff_t dststride,
264  uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my);
265 
266 // loop filter applied to edges between macroblocks
267 void ff_vp8_v_loop_filter16_mmi(uint8_t *dst, ptrdiff_t stride, int flim_E,
268  int flim_I, int hev_thresh);
269 void ff_vp8_h_loop_filter16_mmi(uint8_t *dst, ptrdiff_t stride, int flim_E,
270  int flim_I, int hev_thresh);
271 void ff_vp8_v_loop_filter8uv_mmi(uint8_t *dstU, uint8_t *dstV, ptrdiff_t stride,
272  int flim_E, int flim_I, int hev_thresh);
273 void ff_vp8_h_loop_filter8uv_mmi(uint8_t *dstU, uint8_t *dstV, ptrdiff_t stride,
274  int flim_E, int flim_I, int hev_thresh);
275 
276 // loop filter applied to inner macroblock edges
277 void ff_vp8_v_loop_filter16_inner_mmi(uint8_t *dst, ptrdiff_t stride,
278  int flim_E, int flim_I, int hev_thresh);
279 void ff_vp8_h_loop_filter16_inner_mmi(uint8_t *dst, ptrdiff_t stride,
280  int flim_E, int flim_I, int hev_thresh);
282  ptrdiff_t stride, int flim_E, int flim_I, int hev_thresh);
284  ptrdiff_t stride, int flim_E, int flim_I, int hev_thresh);
285 
286 void ff_vp8_v_loop_filter_simple_mmi(uint8_t *dst, ptrdiff_t stride, int flim);
287 void ff_vp8_h_loop_filter_simple_mmi(uint8_t *dst, ptrdiff_t stride, int flim);
288 
289 #endif // #ifndef AVCODEC_MIPS_VP8DSP_MIPS_H
void ff_vp8_h_loop_filter8uv_inner_mmi(uint8_t *dstU, uint8_t *dstV, ptrdiff_t stride, int flim_E, int flim_I, int hev_thresh)
Definition: vp8dsp_mmi.c:1437
void ff_vp8_h_loop_filter8uv_inner_msa(uint8_t *dst_u, uint8_t *dst_v, ptrdiff_t stride, int flim_e, int flim_i, int hev_thresh)
Definition: vp8_lpf_msa.c:589
void ff_put_vp8_epel16_h6_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8dsp_mmi.c:1782
void ff_put_vp8_bilinear8_h_msa(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8_mc_msa.c:1644
void ff_vp8_idct_dc_add4y_msa(uint8_t *dst, int16_t block[4][16], ptrdiff_t stride)
Definition: vp8_idct_msa.c:143
void ff_vp8_idct_dc_add4uv_mmi(uint8_t *dst, int16_t block[4][16], ptrdiff_t stride)
Definition: vp8dsp_mmi.c:1360
void ff_put_vp8_epel8_h6v4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8dsp_mmi.c:2649
void ff_put_vp8_epel4_h4v4_msa(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8_mc_msa.c:1043
void ff_put_vp8_epel4_h6v6_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8dsp_mmi.c:2805
void ff_put_vp8_epel8_h6_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8dsp_mmi.c:1860
Memory handling functions.
void ff_vp8_h_loop_filter16_inner_msa(uint8_t *dst, ptrdiff_t stride, int32_t e, int32_t i, int32_t h)
Definition: vp8_lpf_msa.c:643
void ff_put_vp8_epel16_v4_msa(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8_mc_msa.c:984
void ff_put_vp8_epel8_v4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8dsp_mmi.c:2056
void ff_put_vp8_epel4_v6_msa(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8_mc_msa.c:332
void ff_vp8_v_loop_filter16_mmi(uint8_t *dst, ptrdiff_t stride, int flim_E, int flim_I, int hev_thresh)
Definition: vp8dsp_mmi.c:1370
void ff_put_vp8_bilinear16_hv_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8dsp_mmi.c:2988
void ff_put_vp8_epel4_h4_msa(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8_mc_msa.c:792
void ff_put_vp8_epel16_h4v4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8dsp_mmi.c:2377
void ff_vp8_h_loop_filter16_msa(uint8_t *dst, ptrdiff_t stride, int flim_e, int flim_i, int hev_thresh)
Definition: vp8_lpf_msa.c:374
void ff_vp8_v_loop_filter16_msa(uint8_t *dst, ptrdiff_t stride, int flim_e, int flim_i, int hev_thresh)
Definition: vp8_lpf_msa.c:297
void ff_put_vp8_epel4_h6v4_msa(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8_mc_msa.c:1184
#define src
Definition: vp8dsp.c:254
void ff_put_vp8_epel16_h6v4_msa(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8_mc_msa.c:1323
void ff_vp8_idct_add_mmi(uint8_t *dst, int16_t block[16], ptrdiff_t stride)
Definition: vp8dsp_mmi.c:1126
The exact code depends on how similar the blocks are and how related they are to the block
void ff_vp8_idct_add_msa(uint8_t *dst, int16_t block[16], ptrdiff_t stride)
Definition: vp8_idct_msa.c:48
uint8_t
void ff_put_vp8_epel16_h6v4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8dsp_mmi.c:2610
void ff_put_vp8_epel8_h6v6_msa(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8_mc_msa.c:578
void ff_vp8_h_loop_filter16_inner_mmi(uint8_t *dst, ptrdiff_t stride, int flim_E, int flim_I, int hev_thresh)
Definition: vp8dsp_mmi.c:1415
VP8 compatible video decoder.
void ff_put_vp8_pixels16_msa(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int x, int y)
Definition: vp8_mc_msa.c:2313
void ff_put_vp8_epel8_h6_msa(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8_mc_msa.c:235
void ff_put_vp8_pixels16_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int x, int y)
Definition: vp8dsp_mmi.c:1462
void ff_put_vp8_epel4_h6_msa(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8_mc_msa.c:222
void ff_vp8_luma_dc_wht_msa(int16_t block[4][4][16], int16_t dc[16])
Definition: vp8_idct_msa.c:104
void ff_put_vp8_epel4_h4v4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8dsp_mmi.c:2455
void ff_put_vp8_bilinear4_v_msa(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8_mc_msa.c:1785
void ff_put_vp8_epel8_h6v4_msa(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8_mc_msa.c:1250
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:259
void ff_put_vp8_epel8_h4v4_msa(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8_mc_msa.c:1102
void ff_put_vp8_epel4_h4v6_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8dsp_mmi.c:2571
void ff_put_vp8_bilinear16_v_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8dsp_mmi.c:2920
void ff_put_vp8_epel4_h4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8dsp_mmi.c:1727
void ff_put_vp8_epel16_v6_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8dsp_mmi.c:2176
void ff_vp8_idct_dc_add_mmi(uint8_t *dst, int16_t block[16], ptrdiff_t stride)
Definition: vp8dsp_mmi.c:1293
void ff_put_vp8_bilinear16_hv_msa(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8_mc_msa.c:2172
void ff_put_vp8_bilinear8_hv_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8dsp_mmi.c:3144
void ff_put_vp8_pixels4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int x, int y)
Definition: vp8dsp_mmi.c:1549
void ff_put_vp8_epel16_h4v6_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8dsp_mmi.c:2493
void ff_put_vp8_bilinear16_h_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8dsp_mmi.c:2844
void ff_put_vp8_bilinear8_hv_msa(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8_mc_msa.c:2156
void ff_put_vp8_epel16_h4_msa(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8_mc_msa.c:842
void ff_vp8_luma_dc_wht_dc_mmi(int16_t block[4][4][16], int16_t dc[16])
Definition: vp8dsp_mmi.c:1102
void ff_put_vp8_bilinear4_h_msa(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8_mc_msa.c:1544
void ff_put_vp8_epel4_v6_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8dsp_mmi.c:2319
void ff_put_vp8_epel8_h4v6_msa(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8_mc_msa.c:1402
void ff_put_vp8_epel16_h6v6_msa(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8_mc_msa.c:665
void ff_put_vp8_epel4_h6_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8dsp_mmi.c:1922
void ff_put_vp8_bilinear8_h_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8dsp_mmi.c:3022
int32_t
void ff_put_vp8_bilinear4_hv_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8dsp_mmi.c:3294
void ff_put_vp8_epel16_h6_msa(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8_mc_msa.c:283
void ff_vp8_luma_dc_wht_mmi(int16_t block[4][4][16], int16_t dc[16])
Definition: vp8dsp_mmi.c:968
void ff_vp8_v_loop_filter16_inner_mmi(uint8_t *dst, ptrdiff_t stride, int flim_E, int flim_I, int hev_thresh)
Definition: vp8dsp_mmi.c:1400
void ff_vp8_idct_dc_add_msa(uint8_t *dst, int16_t block[16], ptrdiff_t stride)
Definition: vp8_idct_msa.c:82
void ff_put_vp8_epel8_h4v4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8dsp_mmi.c:2416
void ff_put_vp8_epel8_v6_msa(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8_mc_msa.c:379
void ff_put_vp8_epel16_v6_msa(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8_mc_msa.c:429
void ff_put_vp8_epel4_h4v6_msa(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8_mc_msa.c:1338
void ff_vp8_v_loop_filter_simple_mmi(uint8_t *dst, ptrdiff_t stride, int flim)
Definition: vp8dsp_mmi.c:1444
void ff_vp8_v_loop_filter8uv_inner_mmi(uint8_t *dstU, uint8_t *dstV, ptrdiff_t stride, int flim_E, int flim_I, int hev_thresh)
Definition: vp8dsp_mmi.c:1430
void ff_put_vp8_epel8_v4_msa(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8_mc_msa.c:938
void ff_vp8_v_loop_filter_simple_msa(uint8_t *dst, ptrdiff_t stride, int flim)
Definition: vp8_lpf_msa.c:505
void ff_put_vp8_bilinear16_v_msa(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8_mc_msa.c:1881
void ff_vp8_v_loop_filter8uv_inner_msa(uint8_t *dst_u, uint8_t *dst_v, ptrdiff_t stride, int flim_e, int flim_i, int hev_thresh)
Definition: vp8_lpf_msa.c:547
void ff_put_vp8_epel16_h4v4_msa(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8_mc_msa.c:1169
Tag MUST be and< 10hcoeff half pel interpolation filter coefficients, hcoeff[0] are the 2 middle coefficients[1] are the next outer ones and so on, resulting in a filter like:...eff[2], hcoeff[1], hcoeff[0], hcoeff[0], hcoeff[1], hcoeff[2]...the sign of the coefficients is not explicitly stored but alternates after each coeff and coeff[0] is positive, so...,+,-,+,-,+,+,-,+,-,+,...hcoeff[0] is not explicitly stored but found by subtracting the sum of all stored coefficients with signs from 32 hcoeff[0]=32-hcoeff[1]-hcoeff[2]-...a good choice for hcoeff and htaps is htaps=6 hcoeff={40,-10, 2}an alternative which requires more computations at both encoder and decoder side and may or may not be better is htaps=8 hcoeff={42,-14, 6,-2}ref_frames minimum of the number of available reference frames and max_ref_frames for example the first frame after a key frame always has ref_frames=1spatial_decomposition_type wavelet type 0 is a 9/7 symmetric compact integer wavelet 1 is a 5/3 symmetric compact integer wavelet others are reserved stored as delta from last, last is reset to 0 if always_reset||keyframeqlog quality(logarithmic quantizer scale) stored as delta from last, last is reset to 0 if always_reset||keyframemv_scale stored as delta from last, last is reset to 0 if always_reset||keyframe FIXME check that everything works fine if this changes between framesqbias dequantization bias stored as delta from last, last is reset to 0 if always_reset||keyframeblock_max_depth maximum depth of the block tree stored as delta from last, last is reset to 0 if always_reset||keyframequant_table quantization tableHighlevel bitstream structure:==============================--------------------------------------------|Header|--------------------------------------------|------------------------------------|||Block0||||split?||||yes no||||.........intra?||||:Block01:yes no||||:Block02:.................||||:Block03::y DC::ref index:||||:Block04::cb DC::motion x:||||.........:cr DC::motion y:||||.................|||------------------------------------||------------------------------------|||Block1|||...|--------------------------------------------|------------------------------------|||Y subbands||Cb subbands||Cr subbands||||------||------||------|||||LL0||HL0||||LL0||HL0||||LL0||HL0|||||------||------||------||||------||------||------|||||LH0||HH0||||LH0||HH0||||LH0||HH0|||||------||------||------||||------||------||------|||||HL1||LH1||||HL1||LH1||||HL1||LH1|||||------||------||------||||------||------||------|||||HH1||HL2||||HH1||HL2||||HH1||HL2|||||...||...||...|||------------------------------------|--------------------------------------------Decoding process:=================------------|||Subbands|------------||||------------|Intra DC||||LL0 subband prediction------------|\Dequantization-------------------\||Reference frames|\IDWT|--------------|Motion\|||Frame 0||Frame 1||Compensation.OBMC v-------|--------------|--------------.\------> Frame n output Frame Frame<----------------------------------/|...|-------------------Range Coder:============Binary Range Coder:-------------------The implemented range coder is an adapted version based upon"Range encoding: an algorithm for removing redundancy from a digitised message."by G.N.N.Martin.The symbols encoded by the Snow range coder are bits(0|1).The associated probabilities are not fix but change depending on the symbol mix seen so far.bit seen|new state---------+-----------------------------------------------0|256-state_transition_table[256-old_state];1|state_transition_table[old_state];state_transition_table={0, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 190, 191, 192, 194, 194, 195, 196, 197, 198, 199, 200, 201, 202, 202, 204, 205, 206, 207, 208, 209, 209, 210, 211, 212, 213, 215, 215, 216, 217, 218, 219, 220, 220, 222, 223, 224, 225, 226, 227, 227, 229, 229, 230, 231, 232, 234, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 248, 0, 0, 0, 0, 0, 0, 0};FIXME Range Coding of integers:-------------------------FIXME Neighboring Blocks:===================left and top are set to the respective blocks unless they are outside of the image in which case they are set to the Null block top-left is set to the top left block unless it is outside of the image in which case it is set to the left block if this block has no larger parent block or it is at the left side of its parent block and the top right block is not outside of the image then the top right block is used for top-right else the top-left block is used Null block y, cb, cr are 128 level, ref, mx and my are 0 Motion Vector Prediction:=========================1.the motion vectors of all the neighboring blocks are scaled to compensate for the difference of reference frames scaled_mv=(mv *(256 *(current_reference+1)/(mv.reference+1))+128)> the median of the scaled top and top right vectors is used as motion vector prediction the used motion vector is the sum of the predictor and(mvx_diff, mvy_diff)*mv_scale Intra DC Prediction block[y][x] dc[1]
Definition: snow.txt:400
void ff_put_vp8_epel8_h4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8dsp_mmi.c:1666
void ff_put_vp8_bilinear16_h_msa(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8_mc_msa.c:1658
void ff_vp8_idct_dc_add4y_mmi(uint8_t *dst, int16_t block[4][16], ptrdiff_t stride)
Definition: vp8dsp_mmi.c:1351
void ff_put_vp8_bilinear8_v_msa(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8_mc_msa.c:1867
void ff_put_vp8_epel4_v4_msa(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8_mc_msa.c:891
void ff_put_vp8_epel4_h6v6_msa(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8_mc_msa.c:503
void ff_vp8_h_loop_filter_simple_mmi(uint8_t *dst, ptrdiff_t stride, int flim)
Definition: vp8dsp_mmi.c:1453
void ff_put_vp8_epel8_h4_msa(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8_mc_msa.c:807
void ff_vp8_idct_dc_add4uv_msa(uint8_t *dst, int16_t block[4][16], ptrdiff_t stride)
Definition: vp8_idct_msa.c:152
GLint GLenum GLboolean GLsizei stride
Definition: opengl_enc.c:104
void ff_put_vp8_pixels8_msa(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int x, int y)
Definition: vp8_mc_msa.c:2243
void ff_put_vp8_epel16_h6v6_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8dsp_mmi.c:2727
void ff_vp8_v_loop_filter16_inner_msa(uint8_t *dst, ptrdiff_t stride, int32_t e, int32_t i, int32_t h)
Definition: vp8_lpf_msa.c:623
void ff_put_vp8_epel4_h6v4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8dsp_mmi.c:2688
void ff_put_vp8_bilinear8_v_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8dsp_mmi.c:3082
void ff_put_vp8_epel8_h6v6_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8dsp_mmi.c:2766
void ff_put_vp8_bilinear4_h_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8dsp_mmi.c:3178
void ff_put_vp8_epel8_h4v6_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8dsp_mmi.c:2532
void ff_put_vp8_pixels4_msa(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int x, int y)
void ff_put_vp8_bilinear4_hv_msa(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8_mc_msa.c:2016
void ff_put_vp8_epel16_h4v6_msa(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8_mc_msa.c:1477
void ff_vp8_v_loop_filter8uv_msa(uint8_t *dst_u, uint8_t *dst_v, ptrdiff_t stride, int flim_e, int flim_i, int hev_thresh)
Definition: vp8_lpf_msa.c:320
void ff_put_vp8_epel16_v4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8dsp_mmi.c:1978
void ff_put_vp8_pixels8_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int x, int y)
Definition: vp8dsp_mmi.c:1509
void ff_vp8_v_loop_filter8uv_mmi(uint8_t *dstU, uint8_t *dstV, ptrdiff_t stride, int flim_E, int flim_I, int hev_thresh)
Definition: vp8dsp_mmi.c:1385
void ff_vp8_h_loop_filter8uv_mmi(uint8_t *dstU, uint8_t *dstV, ptrdiff_t stride, int flim_E, int flim_I, int hev_thresh)
Definition: vp8dsp_mmi.c:1392
void ff_put_vp8_bilinear4_v_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8dsp_mmi.c:3235
void ff_put_vp8_epel8_v6_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8dsp_mmi.c:2255
void ff_put_vp8_epel4_v4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8dsp_mmi.c:2119
void ff_vp8_h_loop_filter_simple_msa(uint8_t *dst, ptrdiff_t stride, int flim)
Definition: vp8_lpf_msa.c:519
void ff_vp8_h_loop_filter16_mmi(uint8_t *dst, ptrdiff_t stride, int flim_E, int flim_I, int hev_thresh)
Definition: vp8dsp_mmi.c:1377
void ff_vp8_h_loop_filter8uv_msa(uint8_t *dst_u, uint8_t *dst_v, ptrdiff_t stride, int flim_e, int flim_i, int hev_thresh)
Definition: vp8_lpf_msa.c:439
void ff_put_vp8_epel16_h4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my)
Definition: vp8dsp_mmi.c:1589