Mercurial > libavcodec.hg
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 |