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;