Mercurial > libavcodec.hg
comparison h264pred.c @ 11916:73f4fd490f2a libavcodec
Make "topright" argument to pred4x4() const.
Patch by David Conrad <lessen42 gmail com>.
author | rbultje |
---|---|
date | Tue, 22 Jun 2010 19:12:54 +0000 |
parents | 7dd2a45249a9 |
children | 823f332655e8 |
comparison
equal
deleted
inserted
replaced
11915:c6ef8db76115 | 11916:73f4fd490f2a |
---|---|
27 | 27 |
28 #include "avcodec.h" | 28 #include "avcodec.h" |
29 #include "mpegvideo.h" | 29 #include "mpegvideo.h" |
30 #include "h264pred.h" | 30 #include "h264pred.h" |
31 | 31 |
32 static void pred4x4_vertical_c(uint8_t *src, uint8_t *topright, int stride){ | 32 static void pred4x4_vertical_c(uint8_t *src, const uint8_t *topright, int stride){ |
33 const uint32_t a= ((uint32_t*)(src-stride))[0]; | 33 const uint32_t a= ((uint32_t*)(src-stride))[0]; |
34 ((uint32_t*)(src+0*stride))[0]= a; | 34 ((uint32_t*)(src+0*stride))[0]= a; |
35 ((uint32_t*)(src+1*stride))[0]= a; | 35 ((uint32_t*)(src+1*stride))[0]= a; |
36 ((uint32_t*)(src+2*stride))[0]= a; | 36 ((uint32_t*)(src+2*stride))[0]= a; |
37 ((uint32_t*)(src+3*stride))[0]= a; | 37 ((uint32_t*)(src+3*stride))[0]= a; |
38 } | 38 } |
39 | 39 |
40 static void pred4x4_horizontal_c(uint8_t *src, uint8_t *topright, int stride){ | 40 static void pred4x4_horizontal_c(uint8_t *src, const uint8_t *topright, int stride){ |
41 ((uint32_t*)(src+0*stride))[0]= src[-1+0*stride]*0x01010101; | 41 ((uint32_t*)(src+0*stride))[0]= src[-1+0*stride]*0x01010101; |
42 ((uint32_t*)(src+1*stride))[0]= src[-1+1*stride]*0x01010101; | 42 ((uint32_t*)(src+1*stride))[0]= src[-1+1*stride]*0x01010101; |
43 ((uint32_t*)(src+2*stride))[0]= src[-1+2*stride]*0x01010101; | 43 ((uint32_t*)(src+2*stride))[0]= src[-1+2*stride]*0x01010101; |
44 ((uint32_t*)(src+3*stride))[0]= src[-1+3*stride]*0x01010101; | 44 ((uint32_t*)(src+3*stride))[0]= src[-1+3*stride]*0x01010101; |
45 } | 45 } |
46 | 46 |
47 static void pred4x4_dc_c(uint8_t *src, uint8_t *topright, int stride){ | 47 static void pred4x4_dc_c(uint8_t *src, const uint8_t *topright, int stride){ |
48 const int dc= ( src[-stride] + src[1-stride] + src[2-stride] + src[3-stride] | 48 const int dc= ( src[-stride] + src[1-stride] + src[2-stride] + src[3-stride] |
49 + src[-1+0*stride] + src[-1+1*stride] + src[-1+2*stride] + src[-1+3*stride] + 4) >>3; | 49 + src[-1+0*stride] + src[-1+1*stride] + src[-1+2*stride] + src[-1+3*stride] + 4) >>3; |
50 | 50 |
51 ((uint32_t*)(src+0*stride))[0]= | 51 ((uint32_t*)(src+0*stride))[0]= |
52 ((uint32_t*)(src+1*stride))[0]= | 52 ((uint32_t*)(src+1*stride))[0]= |
53 ((uint32_t*)(src+2*stride))[0]= | 53 ((uint32_t*)(src+2*stride))[0]= |
54 ((uint32_t*)(src+3*stride))[0]= dc* 0x01010101; | 54 ((uint32_t*)(src+3*stride))[0]= dc* 0x01010101; |
55 } | 55 } |
56 | 56 |
57 static void pred4x4_left_dc_c(uint8_t *src, uint8_t *topright, int stride){ | 57 static void pred4x4_left_dc_c(uint8_t *src, const uint8_t *topright, int stride){ |
58 const int dc= ( src[-1+0*stride] + src[-1+1*stride] + src[-1+2*stride] + src[-1+3*stride] + 2) >>2; | 58 const int dc= ( src[-1+0*stride] + src[-1+1*stride] + src[-1+2*stride] + src[-1+3*stride] + 2) >>2; |
59 | 59 |
60 ((uint32_t*)(src+0*stride))[0]= | 60 ((uint32_t*)(src+0*stride))[0]= |
61 ((uint32_t*)(src+1*stride))[0]= | 61 ((uint32_t*)(src+1*stride))[0]= |
62 ((uint32_t*)(src+2*stride))[0]= | 62 ((uint32_t*)(src+2*stride))[0]= |
63 ((uint32_t*)(src+3*stride))[0]= dc* 0x01010101; | 63 ((uint32_t*)(src+3*stride))[0]= dc* 0x01010101; |
64 } | 64 } |
65 | 65 |
66 static void pred4x4_top_dc_c(uint8_t *src, uint8_t *topright, int stride){ | 66 static void pred4x4_top_dc_c(uint8_t *src, const uint8_t *topright, int stride){ |
67 const int dc= ( src[-stride] + src[1-stride] + src[2-stride] + src[3-stride] + 2) >>2; | 67 const int dc= ( src[-stride] + src[1-stride] + src[2-stride] + src[3-stride] + 2) >>2; |
68 | 68 |
69 ((uint32_t*)(src+0*stride))[0]= | 69 ((uint32_t*)(src+0*stride))[0]= |
70 ((uint32_t*)(src+1*stride))[0]= | 70 ((uint32_t*)(src+1*stride))[0]= |
71 ((uint32_t*)(src+2*stride))[0]= | 71 ((uint32_t*)(src+2*stride))[0]= |
72 ((uint32_t*)(src+3*stride))[0]= dc* 0x01010101; | 72 ((uint32_t*)(src+3*stride))[0]= dc* 0x01010101; |
73 } | 73 } |
74 | 74 |
75 static void pred4x4_128_dc_c(uint8_t *src, uint8_t *topright, int stride){ | 75 static void pred4x4_128_dc_c(uint8_t *src, const uint8_t *topright, int stride){ |
76 ((uint32_t*)(src+0*stride))[0]= | 76 ((uint32_t*)(src+0*stride))[0]= |
77 ((uint32_t*)(src+1*stride))[0]= | 77 ((uint32_t*)(src+1*stride))[0]= |
78 ((uint32_t*)(src+2*stride))[0]= | 78 ((uint32_t*)(src+2*stride))[0]= |
79 ((uint32_t*)(src+3*stride))[0]= 128U*0x01010101U; | 79 ((uint32_t*)(src+3*stride))[0]= 128U*0x01010101U; |
80 } | 80 } |
102 const int av_unused t0= src[ 0-1*stride];\ | 102 const int av_unused t0= src[ 0-1*stride];\ |
103 const int av_unused t1= src[ 1-1*stride];\ | 103 const int av_unused t1= src[ 1-1*stride];\ |
104 const int av_unused t2= src[ 2-1*stride];\ | 104 const int av_unused t2= src[ 2-1*stride];\ |
105 const int av_unused t3= src[ 3-1*stride];\ | 105 const int av_unused t3= src[ 3-1*stride];\ |
106 | 106 |
107 static void pred4x4_down_right_c(uint8_t *src, uint8_t *topright, int stride){ | 107 static void pred4x4_down_right_c(uint8_t *src, const uint8_t *topright, int stride){ |
108 const int lt= src[-1-1*stride]; | 108 const int lt= src[-1-1*stride]; |
109 LOAD_TOP_EDGE | 109 LOAD_TOP_EDGE |
110 LOAD_LEFT_EDGE | 110 LOAD_LEFT_EDGE |
111 | 111 |
112 src[0+3*stride]=(l3 + 2*l2 + l1 + 2)>>2; | 112 src[0+3*stride]=(l3 + 2*l2 + l1 + 2)>>2; |
125 src[2+0*stride]= | 125 src[2+0*stride]= |
126 src[3+1*stride]=(t0 + 2*t1 + t2 + 2)>>2; | 126 src[3+1*stride]=(t0 + 2*t1 + t2 + 2)>>2; |
127 src[3+0*stride]=(t1 + 2*t2 + t3 + 2)>>2; | 127 src[3+0*stride]=(t1 + 2*t2 + t3 + 2)>>2; |
128 } | 128 } |
129 | 129 |
130 static void pred4x4_down_left_c(uint8_t *src, uint8_t *topright, int stride){ | 130 static void pred4x4_down_left_c(uint8_t *src, const uint8_t *topright, int stride){ |
131 LOAD_TOP_EDGE | 131 LOAD_TOP_EDGE |
132 LOAD_TOP_RIGHT_EDGE | 132 LOAD_TOP_RIGHT_EDGE |
133 // LOAD_LEFT_EDGE | 133 // LOAD_LEFT_EDGE |
134 | 134 |
135 src[0+0*stride]=(t0 + t2 + 2*t1 + 2)>>2; | 135 src[0+0*stride]=(t0 + t2 + 2*t1 + 2)>>2; |
148 src[3+2*stride]= | 148 src[3+2*stride]= |
149 src[2+3*stride]=(t5 + t7 + 2*t6 + 2)>>2; | 149 src[2+3*stride]=(t5 + t7 + 2*t6 + 2)>>2; |
150 src[3+3*stride]=(t6 + 3*t7 + 2)>>2; | 150 src[3+3*stride]=(t6 + 3*t7 + 2)>>2; |
151 } | 151 } |
152 | 152 |
153 static void pred4x4_down_left_svq3_c(uint8_t *src, uint8_t *topright, int stride){ | 153 static void pred4x4_down_left_svq3_c(uint8_t *src, const uint8_t *topright, int stride){ |
154 LOAD_TOP_EDGE | 154 LOAD_TOP_EDGE |
155 LOAD_LEFT_EDGE | 155 LOAD_LEFT_EDGE |
156 const av_unused int unu0= t0; | 156 const av_unused int unu0= t0; |
157 const av_unused int unu1= l0; | 157 const av_unused int unu1= l0; |
158 | 158 |
172 src[3+2*stride]= | 172 src[3+2*stride]= |
173 src[2+3*stride]= | 173 src[2+3*stride]= |
174 src[3+3*stride]=(l3 + t3)>>1; | 174 src[3+3*stride]=(l3 + t3)>>1; |
175 } | 175 } |
176 | 176 |
177 static void pred4x4_down_left_rv40_c(uint8_t *src, uint8_t *topright, int stride){ | 177 static void pred4x4_down_left_rv40_c(uint8_t *src, const uint8_t *topright, int stride){ |
178 LOAD_TOP_EDGE | 178 LOAD_TOP_EDGE |
179 LOAD_TOP_RIGHT_EDGE | 179 LOAD_TOP_RIGHT_EDGE |
180 LOAD_LEFT_EDGE | 180 LOAD_LEFT_EDGE |
181 LOAD_DOWN_LEFT_EDGE | 181 LOAD_DOWN_LEFT_EDGE |
182 | 182 |
196 src[3+2*stride]= | 196 src[3+2*stride]= |
197 src[2+3*stride]=(t5 + t7 + 2*t6 + 2 + l5 + l7 + 2*l6 + 2)>>3; | 197 src[2+3*stride]=(t5 + t7 + 2*t6 + 2 + l5 + l7 + 2*l6 + 2)>>3; |
198 src[3+3*stride]=(t6 + t7 + 1 + l6 + l7 + 1)>>2; | 198 src[3+3*stride]=(t6 + t7 + 1 + l6 + l7 + 1)>>2; |
199 } | 199 } |
200 | 200 |
201 static void pred4x4_down_left_rv40_nodown_c(uint8_t *src, uint8_t *topright, int stride){ | 201 static void pred4x4_down_left_rv40_nodown_c(uint8_t *src, const uint8_t *topright, int stride){ |
202 LOAD_TOP_EDGE | 202 LOAD_TOP_EDGE |
203 LOAD_TOP_RIGHT_EDGE | 203 LOAD_TOP_RIGHT_EDGE |
204 LOAD_LEFT_EDGE | 204 LOAD_LEFT_EDGE |
205 | 205 |
206 src[0+0*stride]=(t0 + t2 + 2*t1 + 2 + l0 + l2 + 2*l1 + 2)>>3; | 206 src[0+0*stride]=(t0 + t2 + 2*t1 + 2 + l0 + l2 + 2*l1 + 2)>>3; |
219 src[3+2*stride]= | 219 src[3+2*stride]= |
220 src[2+3*stride]=(t5 + t7 + 2*t6 + 2 + l3*4 + 2)>>3; | 220 src[2+3*stride]=(t5 + t7 + 2*t6 + 2 + l3*4 + 2)>>3; |
221 src[3+3*stride]=(t6 + t7 + 1 + 2*l3 + 1)>>2; | 221 src[3+3*stride]=(t6 + t7 + 1 + 2*l3 + 1)>>2; |
222 } | 222 } |
223 | 223 |
224 static void pred4x4_vertical_right_c(uint8_t *src, uint8_t *topright, int stride){ | 224 static void pred4x4_vertical_right_c(uint8_t *src, const uint8_t *topright, int stride){ |
225 const int lt= src[-1-1*stride]; | 225 const int lt= src[-1-1*stride]; |
226 LOAD_TOP_EDGE | 226 LOAD_TOP_EDGE |
227 LOAD_LEFT_EDGE | 227 LOAD_LEFT_EDGE |
228 | 228 |
229 src[0+0*stride]= | 229 src[0+0*stride]= |
242 src[3+1*stride]=(t1 + 2*t2 + t3 + 2)>>2; | 242 src[3+1*stride]=(t1 + 2*t2 + t3 + 2)>>2; |
243 src[0+2*stride]=(lt + 2*l0 + l1 + 2)>>2; | 243 src[0+2*stride]=(lt + 2*l0 + l1 + 2)>>2; |
244 src[0+3*stride]=(l0 + 2*l1 + l2 + 2)>>2; | 244 src[0+3*stride]=(l0 + 2*l1 + l2 + 2)>>2; |
245 } | 245 } |
246 | 246 |
247 static void pred4x4_vertical_left_c(uint8_t *src, uint8_t *topright, int stride){ | 247 static void pred4x4_vertical_left_c(uint8_t *src, const uint8_t *topright, int stride){ |
248 LOAD_TOP_EDGE | 248 LOAD_TOP_EDGE |
249 LOAD_TOP_RIGHT_EDGE | 249 LOAD_TOP_RIGHT_EDGE |
250 | 250 |
251 src[0+0*stride]=(t0 + t1 + 1)>>1; | 251 src[0+0*stride]=(t0 + t1 + 1)>>1; |
252 src[1+0*stride]= | 252 src[1+0*stride]= |
264 src[3+1*stride]= | 264 src[3+1*stride]= |
265 src[2+3*stride]=(t3 + 2*t4 + t5 + 2)>>2; | 265 src[2+3*stride]=(t3 + 2*t4 + t5 + 2)>>2; |
266 src[3+3*stride]=(t4 + 2*t5 + t6 + 2)>>2; | 266 src[3+3*stride]=(t4 + 2*t5 + t6 + 2)>>2; |
267 } | 267 } |
268 | 268 |
269 static void pred4x4_vertical_left_rv40(uint8_t *src, uint8_t *topright, int stride, | 269 static void pred4x4_vertical_left_rv40(uint8_t *src, const uint8_t *topright, int stride, |
270 const int l0, const int l1, const int l2, const int l3, const int l4){ | 270 const int l0, const int l1, const int l2, const int l3, const int l4){ |
271 LOAD_TOP_EDGE | 271 LOAD_TOP_EDGE |
272 LOAD_TOP_RIGHT_EDGE | 272 LOAD_TOP_RIGHT_EDGE |
273 | 273 |
274 src[0+0*stride]=(2*t0 + 2*t1 + l1 + 2*l2 + l3 + 4)>>3; | 274 src[0+0*stride]=(2*t0 + 2*t1 + l1 + 2*l2 + l3 + 4)>>3; |
287 src[3+1*stride]= | 287 src[3+1*stride]= |
288 src[2+3*stride]=(t3 + 2*t4 + t5 + 2)>>2; | 288 src[2+3*stride]=(t3 + 2*t4 + t5 + 2)>>2; |
289 src[3+3*stride]=(t4 + 2*t5 + t6 + 2)>>2; | 289 src[3+3*stride]=(t4 + 2*t5 + t6 + 2)>>2; |
290 } | 290 } |
291 | 291 |
292 static void pred4x4_vertical_left_rv40_c(uint8_t *src, uint8_t *topright, int stride){ | 292 static void pred4x4_vertical_left_rv40_c(uint8_t *src, const uint8_t *topright, int stride){ |
293 LOAD_LEFT_EDGE | 293 LOAD_LEFT_EDGE |
294 LOAD_DOWN_LEFT_EDGE | 294 LOAD_DOWN_LEFT_EDGE |
295 | 295 |
296 pred4x4_vertical_left_rv40(src, topright, stride, l0, l1, l2, l3, l4); | 296 pred4x4_vertical_left_rv40(src, topright, stride, l0, l1, l2, l3, l4); |
297 } | 297 } |
298 | 298 |
299 static void pred4x4_vertical_left_rv40_nodown_c(uint8_t *src, uint8_t *topright, int stride){ | 299 static void pred4x4_vertical_left_rv40_nodown_c(uint8_t *src, const uint8_t *topright, int stride){ |
300 LOAD_LEFT_EDGE | 300 LOAD_LEFT_EDGE |
301 | 301 |
302 pred4x4_vertical_left_rv40(src, topright, stride, l0, l1, l2, l3, l3); | 302 pred4x4_vertical_left_rv40(src, topright, stride, l0, l1, l2, l3, l3); |
303 } | 303 } |
304 | 304 |
305 static void pred4x4_horizontal_up_c(uint8_t *src, uint8_t *topright, int stride){ | 305 static void pred4x4_horizontal_up_c(uint8_t *src, const uint8_t *topright, int stride){ |
306 LOAD_LEFT_EDGE | 306 LOAD_LEFT_EDGE |
307 | 307 |
308 src[0+0*stride]=(l0 + l1 + 1)>>1; | 308 src[0+0*stride]=(l0 + l1 + 1)>>1; |
309 src[1+0*stride]=(l0 + 2*l1 + l2 + 2)>>2; | 309 src[1+0*stride]=(l0 + 2*l1 + l2 + 2)>>2; |
310 src[2+0*stride]= | 310 src[2+0*stride]= |
321 src[2+2*stride]= | 321 src[2+2*stride]= |
322 src[2+3*stride]= | 322 src[2+3*stride]= |
323 src[3+3*stride]=l3; | 323 src[3+3*stride]=l3; |
324 } | 324 } |
325 | 325 |
326 static void pred4x4_horizontal_up_rv40_c(uint8_t *src, uint8_t *topright, int stride){ | 326 static void pred4x4_horizontal_up_rv40_c(uint8_t *src, const uint8_t *topright, int stride){ |
327 LOAD_LEFT_EDGE | 327 LOAD_LEFT_EDGE |
328 LOAD_DOWN_LEFT_EDGE | 328 LOAD_DOWN_LEFT_EDGE |
329 LOAD_TOP_EDGE | 329 LOAD_TOP_EDGE |
330 LOAD_TOP_RIGHT_EDGE | 330 LOAD_TOP_RIGHT_EDGE |
331 | 331 |
345 src[2+2*stride]=(t6 + t7 + l3 + l4 + 2)>>2; | 345 src[2+2*stride]=(t6 + t7 + l3 + l4 + 2)>>2; |
346 src[2+3*stride]=(l4 + l5 + 1)>>1; | 346 src[2+3*stride]=(l4 + l5 + 1)>>1; |
347 src[3+3*stride]=(l4 + 2*l5 + l6 + 2)>>2; | 347 src[3+3*stride]=(l4 + 2*l5 + l6 + 2)>>2; |
348 } | 348 } |
349 | 349 |
350 static void pred4x4_horizontal_up_rv40_nodown_c(uint8_t *src, uint8_t *topright, int stride){ | 350 static void pred4x4_horizontal_up_rv40_nodown_c(uint8_t *src, const uint8_t *topright, int stride){ |
351 LOAD_LEFT_EDGE | 351 LOAD_LEFT_EDGE |
352 LOAD_TOP_EDGE | 352 LOAD_TOP_EDGE |
353 LOAD_TOP_RIGHT_EDGE | 353 LOAD_TOP_RIGHT_EDGE |
354 | 354 |
355 src[0+0*stride]=(t1 + 2*t2 + t3 + 2*l0 + 2*l1 + 4)>>3; | 355 src[0+0*stride]=(t1 + 2*t2 + t3 + 2*l0 + 2*l1 + 4)>>3; |
368 src[2+2*stride]=(t6 + t7 + 2*l3 + 2)>>2; | 368 src[2+2*stride]=(t6 + t7 + 2*l3 + 2)>>2; |
369 src[2+3*stride]= | 369 src[2+3*stride]= |
370 src[3+3*stride]=l3; | 370 src[3+3*stride]=l3; |
371 } | 371 } |
372 | 372 |
373 static void pred4x4_horizontal_down_c(uint8_t *src, uint8_t *topright, int stride){ | 373 static void pred4x4_horizontal_down_c(uint8_t *src, const uint8_t *topright, int stride){ |
374 const int lt= src[-1-1*stride]; | 374 const int lt= src[-1-1*stride]; |
375 LOAD_TOP_EDGE | 375 LOAD_TOP_EDGE |
376 LOAD_LEFT_EDGE | 376 LOAD_LEFT_EDGE |
377 | 377 |
378 src[0+0*stride]= | 378 src[0+0*stride]= |