Mercurial > libavcodec.hg
comparison h264pred.c @ 6036:ce3b68242317 libavcodec
Correct spatial prediction mode in RV30/40 for vertical left direction
and add its version that does not rely on down left neighbour subblock.
author | kostya |
---|---|
date | Mon, 17 Dec 2007 18:43:34 +0000 |
parents | 4a26dc4ca11d |
children | c4de4b187b4f |
comparison
equal
deleted
inserted
replaced
6035:4de95581b38a | 6036:ce3b68242317 |
---|---|
286 src[3+1*stride]= | 286 src[3+1*stride]= |
287 src[2+3*stride]=(t3 + 2*t4 + t5 + 2)>>2; | 287 src[2+3*stride]=(t3 + 2*t4 + t5 + 2)>>2; |
288 src[3+3*stride]=(t4 + 2*t5 + t6 + 2)>>2; | 288 src[3+3*stride]=(t4 + 2*t5 + t6 + 2)>>2; |
289 } | 289 } |
290 | 290 |
291 static void pred4x4_vertical_left_rv40_c(uint8_t *src, uint8_t *topright, int stride){ | 291 static void pred4x4_vertical_left_rv40(uint8_t *src, uint8_t *topright, int stride, |
292 const int l0, const int l1, const int l2, const int l3, const int l4){ | |
292 LOAD_TOP_EDGE | 293 LOAD_TOP_EDGE |
293 LOAD_TOP_RIGHT_EDGE | 294 LOAD_TOP_RIGHT_EDGE |
294 LOAD_LEFT_EDGE | |
295 | 295 |
296 src[0+0*stride]=(2*t0 + 2*t1 + l1 + 2*l2 + l3 + 4)>>3; | 296 src[0+0*stride]=(2*t0 + 2*t1 + l1 + 2*l2 + l3 + 4)>>3; |
297 src[1+0*stride]= | 297 src[1+0*stride]= |
298 src[0+2*stride]=(t1 + t2 + 1)>>1; | 298 src[0+2*stride]=(t1 + t2 + 1)>>1; |
299 src[2+0*stride]= | 299 src[2+0*stride]= |
300 src[1+2*stride]=(t2 + t3 + 1)>>1; | 300 src[1+2*stride]=(t2 + t3 + 1)>>1; |
301 src[3+0*stride]= | 301 src[3+0*stride]= |
302 src[2+2*stride]=(t3 + t4+ 1)>>1; | 302 src[2+2*stride]=(t3 + t4+ 1)>>1; |
303 src[3+2*stride]=(t4 + t5+ 1)>>1; | 303 src[3+2*stride]=(t4 + t5+ 1)>>1; |
304 src[0+1*stride]=(t0 + 2*t1 + t2 + l2 + 2*l3 + l3 + 4)>>3; | 304 src[0+1*stride]=(t0 + 2*t1 + t2 + l2 + 2*l3 + l4 + 4)>>3; |
305 src[1+1*stride]= | 305 src[1+1*stride]= |
306 src[0+3*stride]=(t1 + 2*t2 + t3 + 2)>>2; | 306 src[0+3*stride]=(t1 + 2*t2 + t3 + 2)>>2; |
307 src[2+1*stride]= | 307 src[2+1*stride]= |
308 src[1+3*stride]=(t2 + 2*t3 + t4 + 2)>>2; | 308 src[1+3*stride]=(t2 + 2*t3 + t4 + 2)>>2; |
309 src[3+1*stride]= | 309 src[3+1*stride]= |
310 src[2+3*stride]=(t3 + 2*t4 + t5 + 2)>>2; | 310 src[2+3*stride]=(t3 + 2*t4 + t5 + 2)>>2; |
311 src[3+3*stride]=(t4 + 2*t5 + t6 + 2)>>2; | 311 src[3+3*stride]=(t4 + 2*t5 + t6 + 2)>>2; |
312 } | |
313 | |
314 static void pred4x4_vertical_left_rv40_c(uint8_t *src, uint8_t *topright, int stride){ | |
315 LOAD_LEFT_EDGE | |
316 LOAD_DOWN_LEFT_EDGE | |
317 | |
318 pred4x4_vertical_left_rv40(src, topright, stride, l0, l1, l2, l3, l4); | |
319 } | |
320 | |
321 static void pred4x4_vertical_left_rv40_nodown_c(uint8_t *src, uint8_t *topright, int stride){ | |
322 LOAD_LEFT_EDGE | |
323 | |
324 pred4x4_vertical_left_rv40(src, topright, stride, l0, l1, l2, l3, l3); | |
312 } | 325 } |
313 | 326 |
314 static void pred4x4_horizontal_up_c(uint8_t *src, uint8_t *topright, int stride){ | 327 static void pred4x4_horizontal_up_c(uint8_t *src, uint8_t *topright, int stride){ |
315 LOAD_LEFT_EDGE | 328 LOAD_LEFT_EDGE |
316 | 329 |
1008 h->pred4x4[LEFT_DC_PRED ]= pred4x4_left_dc_c; | 1021 h->pred4x4[LEFT_DC_PRED ]= pred4x4_left_dc_c; |
1009 h->pred4x4[TOP_DC_PRED ]= pred4x4_top_dc_c; | 1022 h->pred4x4[TOP_DC_PRED ]= pred4x4_top_dc_c; |
1010 h->pred4x4[DC_128_PRED ]= pred4x4_128_dc_c; | 1023 h->pred4x4[DC_128_PRED ]= pred4x4_128_dc_c; |
1011 h->pred4x4[DIAG_DOWN_LEFT_PRED_RV40_NODOWN]= pred4x4_down_left_rv40_nodown_c; | 1024 h->pred4x4[DIAG_DOWN_LEFT_PRED_RV40_NODOWN]= pred4x4_down_left_rv40_nodown_c; |
1012 h->pred4x4[HOR_UP_PRED_RV40_NODOWN]= pred4x4_horizontal_up_rv40_nodown_c; | 1025 h->pred4x4[HOR_UP_PRED_RV40_NODOWN]= pred4x4_horizontal_up_rv40_nodown_c; |
1026 h->pred4x4[VERT_LEFT_PRED_RV40_NODOWN]= pred4x4_vertical_left_rv40_nodown_c; | |
1013 } | 1027 } |
1014 | 1028 |
1015 h->pred8x8l[VERT_PRED ]= pred8x8l_vertical_c; | 1029 h->pred8x8l[VERT_PRED ]= pred8x8l_vertical_c; |
1016 h->pred8x8l[HOR_PRED ]= pred8x8l_horizontal_c; | 1030 h->pred8x8l[HOR_PRED ]= pred8x8l_horizontal_c; |
1017 h->pred8x8l[DC_PRED ]= pred8x8l_dc_c; | 1031 h->pred8x8l[DC_PRED ]= pred8x8l_dc_c; |