comparison cavs.c @ 3424:2bfb700e2084 libavcodec

make use of 16x16 motion comp functions, 16x8 and 8x16 do not seem to be worth it
author stefang
date Thu, 06 Jul 2006 19:21:00 +0000
parents 3a728a9cbd54
children b8faae2c5d0c
comparison
equal deleted inserted replaced
3423:82b44a294635 3424:2bfb700e2084
483 dest_y, dest_cb, dest_cr, x_offset, y_offset, 483 dest_y, dest_cb, dest_cr, x_offset, y_offset,
484 qpix_op, chroma_op, mv+MV_BWD_OFFS); 484 qpix_op, chroma_op, mv+MV_BWD_OFFS);
485 } 485 }
486 } 486 }
487 487
488 static void inter_pred(AVSContext *h) { 488 static void inter_pred(AVSContext *h, enum mb_t mb_type) {
489 /* always do 8x8 blocks TODO: are larger blocks worth it? */ 489 switch(mb_type) {
490 mc_part_std(h, 1, 4, 0, h->cy, h->cu, h->cv, 0, 0, 490 case P_SKIP:
491 case P_16X16:
492 case B_FWD_16X16:
493 case B_BWD_16X16:
494 case B_SYM_16X16:
495 mc_part_std(h, 1, 8, 0, h->cy, h->cu, h->cv, 0, 0,
496 h->s.dsp.put_cavs_qpel_pixels_tab[0],
497 h->s.dsp.put_h264_chroma_pixels_tab[0],
498 h->s.dsp.avg_cavs_qpel_pixels_tab[0],
499 h->s.dsp.avg_h264_chroma_pixels_tab[0],&h->mv[MV_FWD_X0]);
500 break;
501 default:
502 mc_part_std(h, 1, 4, 0, h->cy, h->cu, h->cv, 0, 0,
491 h->s.dsp.put_cavs_qpel_pixels_tab[1], 503 h->s.dsp.put_cavs_qpel_pixels_tab[1],
492 h->s.dsp.put_h264_chroma_pixels_tab[1], 504 h->s.dsp.put_h264_chroma_pixels_tab[1],
493 h->s.dsp.avg_cavs_qpel_pixels_tab[1], 505 h->s.dsp.avg_cavs_qpel_pixels_tab[1],
494 h->s.dsp.avg_h264_chroma_pixels_tab[1],&h->mv[MV_FWD_X0]); 506 h->s.dsp.avg_h264_chroma_pixels_tab[1],&h->mv[MV_FWD_X0]);
495 mc_part_std(h, 1, 4, 0, h->cy, h->cu, h->cv, 4, 0, 507 mc_part_std(h, 1, 4, 0, h->cy, h->cu, h->cv, 4, 0,
496 h->s.dsp.put_cavs_qpel_pixels_tab[1], 508 h->s.dsp.put_cavs_qpel_pixels_tab[1],
497 h->s.dsp.put_h264_chroma_pixels_tab[1], 509 h->s.dsp.put_h264_chroma_pixels_tab[1],
498 h->s.dsp.avg_cavs_qpel_pixels_tab[1], 510 h->s.dsp.avg_cavs_qpel_pixels_tab[1],
499 h->s.dsp.avg_h264_chroma_pixels_tab[1],&h->mv[MV_FWD_X1]); 511 h->s.dsp.avg_h264_chroma_pixels_tab[1],&h->mv[MV_FWD_X1]);
500 mc_part_std(h, 1, 4, 0, h->cy, h->cu, h->cv, 0, 4, 512 mc_part_std(h, 1, 4, 0, h->cy, h->cu, h->cv, 0, 4,
501 h->s.dsp.put_cavs_qpel_pixels_tab[1], 513 h->s.dsp.put_cavs_qpel_pixels_tab[1],
502 h->s.dsp.put_h264_chroma_pixels_tab[1], 514 h->s.dsp.put_h264_chroma_pixels_tab[1],
503 h->s.dsp.avg_cavs_qpel_pixels_tab[1], 515 h->s.dsp.avg_cavs_qpel_pixels_tab[1],
504 h->s.dsp.avg_h264_chroma_pixels_tab[1],&h->mv[MV_FWD_X2]); 516 h->s.dsp.avg_h264_chroma_pixels_tab[1],&h->mv[MV_FWD_X2]);
505 mc_part_std(h, 1, 4, 0, h->cy, h->cu, h->cv, 4, 4, 517 mc_part_std(h, 1, 4, 0, h->cy, h->cu, h->cv, 4, 4,
506 h->s.dsp.put_cavs_qpel_pixels_tab[1], 518 h->s.dsp.put_cavs_qpel_pixels_tab[1],
507 h->s.dsp.put_h264_chroma_pixels_tab[1], 519 h->s.dsp.put_h264_chroma_pixels_tab[1],
508 h->s.dsp.avg_cavs_qpel_pixels_tab[1], 520 h->s.dsp.avg_cavs_qpel_pixels_tab[1],
509 h->s.dsp.avg_h264_chroma_pixels_tab[1],&h->mv[MV_FWD_X3]); 521 h->s.dsp.avg_h264_chroma_pixels_tab[1],&h->mv[MV_FWD_X3]);
522 break;
523 }
510 /* set intra prediction modes to default values */ 524 /* set intra prediction modes to default values */
511 h->pred_mode_Y[3] = h->pred_mode_Y[6] = INTRA_L_LP; 525 h->pred_mode_Y[3] = h->pred_mode_Y[6] = INTRA_L_LP;
512 h->top_pred_Y[h->mbx*2+0] = h->top_pred_Y[h->mbx*2+1] = INTRA_L_LP; 526 h->top_pred_Y[h->mbx*2+0] = h->top_pred_Y[h->mbx*2+1] = INTRA_L_LP;
513 } 527 }
514 528
1006 mv_pred(h, MV_FWD_X0, MV_FWD_B3, MV_PRED_MEDIAN, BLK_8X8, ref[0]); 1020 mv_pred(h, MV_FWD_X0, MV_FWD_B3, MV_PRED_MEDIAN, BLK_8X8, ref[0]);
1007 mv_pred(h, MV_FWD_X1, MV_FWD_C2, MV_PRED_MEDIAN, BLK_8X8, ref[1]); 1021 mv_pred(h, MV_FWD_X1, MV_FWD_C2, MV_PRED_MEDIAN, BLK_8X8, ref[1]);
1008 mv_pred(h, MV_FWD_X2, MV_FWD_X1, MV_PRED_MEDIAN, BLK_8X8, ref[2]); 1022 mv_pred(h, MV_FWD_X2, MV_FWD_X1, MV_PRED_MEDIAN, BLK_8X8, ref[2]);
1009 mv_pred(h, MV_FWD_X3, MV_FWD_X0, MV_PRED_MEDIAN, BLK_8X8, ref[3]); 1023 mv_pred(h, MV_FWD_X3, MV_FWD_X0, MV_PRED_MEDIAN, BLK_8X8, ref[3]);
1010 } 1024 }
1011 inter_pred(h); 1025 inter_pred(h, mb_type);
1012 store_mvs(h); 1026 store_mvs(h);
1013 if(mb_type != P_SKIP) 1027 if(mb_type != P_SKIP)
1014 decode_residual_inter(h); 1028 decode_residual_inter(h);
1015 filter_mb(h,mb_type); 1029 filter_mb(h,mb_type);
1016 *h->col_type = mb_type; 1030 *h->col_type = mb_type;
1123 mv_pred(h, MV_BWD_X0, MV_BWD_B3, MV_PRED_LEFT, BLK_8X16, 0); 1137 mv_pred(h, MV_BWD_X0, MV_BWD_B3, MV_PRED_LEFT, BLK_8X16, 0);
1124 if(flags & BWD1) 1138 if(flags & BWD1)
1125 mv_pred(h, MV_BWD_X1, MV_BWD_C2, MV_PRED_TOPRIGHT,BLK_8X16, 0); 1139 mv_pred(h, MV_BWD_X1, MV_BWD_C2, MV_PRED_TOPRIGHT,BLK_8X16, 0);
1126 } 1140 }
1127 } 1141 }
1128 inter_pred(h); 1142 inter_pred(h, mb_type);
1129 if(mb_type != B_SKIP) 1143 if(mb_type != B_SKIP)
1130 decode_residual_inter(h); 1144 decode_residual_inter(h);
1131 filter_mb(h,mb_type); 1145 filter_mb(h,mb_type);
1132 } 1146 }
1133 1147