From 1a1650feca99482a70081773fb1e833d34ab44d9 Mon Sep 17 00:00:00 2001 From: Stefan Gehrer Date: Thu, 6 Jul 2006 19:21:00 +0000 Subject: [PATCH] make use of 16x16 motion comp functions, 16x8 and 8x16 do not seem to be worth it Originally committed as revision 5646 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavcodec/cavs.c | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/libavcodec/cavs.c b/libavcodec/cavs.c index 0ed1522176..53009705bb 100644 --- a/libavcodec/cavs.c +++ b/libavcodec/cavs.c @@ -485,28 +485,42 @@ static inline void mc_part_std(AVSContext *h,int square,int chroma_height,int de } } -static void inter_pred(AVSContext *h) { - /* always do 8x8 blocks TODO: are larger blocks worth it? */ - mc_part_std(h, 1, 4, 0, h->cy, h->cu, h->cv, 0, 0, +static void inter_pred(AVSContext *h, enum mb_t mb_type) { + switch(mb_type) { + case P_SKIP: + case P_16X16: + case B_FWD_16X16: + case B_BWD_16X16: + case B_SYM_16X16: + mc_part_std(h, 1, 8, 0, h->cy, h->cu, h->cv, 0, 0, + h->s.dsp.put_cavs_qpel_pixels_tab[0], + h->s.dsp.put_h264_chroma_pixels_tab[0], + h->s.dsp.avg_cavs_qpel_pixels_tab[0], + h->s.dsp.avg_h264_chroma_pixels_tab[0],&h->mv[MV_FWD_X0]); + break; + default: + mc_part_std(h, 1, 4, 0, h->cy, h->cu, h->cv, 0, 0, h->s.dsp.put_cavs_qpel_pixels_tab[1], h->s.dsp.put_h264_chroma_pixels_tab[1], h->s.dsp.avg_cavs_qpel_pixels_tab[1], h->s.dsp.avg_h264_chroma_pixels_tab[1],&h->mv[MV_FWD_X0]); - mc_part_std(h, 1, 4, 0, h->cy, h->cu, h->cv, 4, 0, + mc_part_std(h, 1, 4, 0, h->cy, h->cu, h->cv, 4, 0, h->s.dsp.put_cavs_qpel_pixels_tab[1], h->s.dsp.put_h264_chroma_pixels_tab[1], h->s.dsp.avg_cavs_qpel_pixels_tab[1], h->s.dsp.avg_h264_chroma_pixels_tab[1],&h->mv[MV_FWD_X1]); - mc_part_std(h, 1, 4, 0, h->cy, h->cu, h->cv, 0, 4, + mc_part_std(h, 1, 4, 0, h->cy, h->cu, h->cv, 0, 4, h->s.dsp.put_cavs_qpel_pixels_tab[1], h->s.dsp.put_h264_chroma_pixels_tab[1], h->s.dsp.avg_cavs_qpel_pixels_tab[1], h->s.dsp.avg_h264_chroma_pixels_tab[1],&h->mv[MV_FWD_X2]); - mc_part_std(h, 1, 4, 0, h->cy, h->cu, h->cv, 4, 4, + mc_part_std(h, 1, 4, 0, h->cy, h->cu, h->cv, 4, 4, h->s.dsp.put_cavs_qpel_pixels_tab[1], h->s.dsp.put_h264_chroma_pixels_tab[1], h->s.dsp.avg_cavs_qpel_pixels_tab[1], h->s.dsp.avg_h264_chroma_pixels_tab[1],&h->mv[MV_FWD_X3]); + break; + } /* set intra prediction modes to default values */ h->pred_mode_Y[3] = h->pred_mode_Y[6] = INTRA_L_LP; h->top_pred_Y[h->mbx*2+0] = h->top_pred_Y[h->mbx*2+1] = INTRA_L_LP; @@ -1008,7 +1022,7 @@ static void decode_mb_p(AVSContext *h, enum mb_t mb_type) { mv_pred(h, MV_FWD_X2, MV_FWD_X1, MV_PRED_MEDIAN, BLK_8X8, ref[2]); mv_pred(h, MV_FWD_X3, MV_FWD_X0, MV_PRED_MEDIAN, BLK_8X8, ref[3]); } - inter_pred(h); + inter_pred(h, mb_type); store_mvs(h); if(mb_type != P_SKIP) decode_residual_inter(h); @@ -1125,7 +1139,7 @@ static void decode_mb_b(AVSContext *h, enum mb_t mb_type) { mv_pred(h, MV_BWD_X1, MV_BWD_C2, MV_PRED_TOPRIGHT,BLK_8X16, 0); } } - inter_pred(h); + inter_pred(h, mb_type); if(mb_type != B_SKIP) decode_residual_inter(h); filter_mb(h,mb_type);