Mercurial > libavcodec.hg
comparison motion_est.c @ 1494:3ee63c12ea30 libavcodec
optionally try to encode each MB with MV=<0,0> and choose the one with better RD
author | michaelni |
---|---|
date | Thu, 02 Oct 2003 00:24:34 +0000 |
parents | b0f89a7855aa |
children | 932d306bf1dc |
comparison
equal
deleted
inserted
replaced
1493:ad7e62df9962 | 1494:3ee63c12ea30 |
---|---|
828 { | 828 { |
829 int block; | 829 int block; |
830 int P[10][2]; | 830 int P[10][2]; |
831 int dmin_sum=0, mx4_sum=0, my4_sum=0; | 831 int dmin_sum=0, mx4_sum=0, my4_sum=0; |
832 uint8_t * const mv_penalty= s->me.mv_penalty[s->f_code] + MAX_MV; | 832 uint8_t * const mv_penalty= s->me.mv_penalty[s->f_code] + MAX_MV; |
833 int same=1; | |
833 | 834 |
834 for(block=0; block<4; block++){ | 835 for(block=0; block<4; block++){ |
835 int mx4, my4; | 836 int mx4, my4; |
836 int pred_x4, pred_y4; | 837 int pred_x4, pred_y4; |
837 int dmin4; | 838 int dmin4; |
926 my4_sum+= my4; | 927 my4_sum+= my4; |
927 } | 928 } |
928 | 929 |
929 s->motion_val[ s->block_index[block] ][0]= mx4; | 930 s->motion_val[ s->block_index[block] ][0]= mx4; |
930 s->motion_val[ s->block_index[block] ][1]= my4; | 931 s->motion_val[ s->block_index[block] ][1]= my4; |
931 } | 932 |
933 if(mx4 != mx || my4 != my) same=0; | |
934 } | |
935 | |
936 if(same) | |
937 return INT_MAX; | |
932 | 938 |
933 if(s->dsp.me_sub_cmp[0] != s->dsp.mb_cmp[0]){ | 939 if(s->dsp.me_sub_cmp[0] != s->dsp.mb_cmp[0]){ |
934 dmin_sum += s->dsp.mb_cmp[0](s, s->new_picture.data[0] + s->mb_x*16 + s->mb_y*16*s->linesize, s->me.scratchpad, s->linesize); | 940 dmin_sum += s->dsp.mb_cmp[0](s, s->new_picture.data[0] + s->mb_x*16 + s->mb_y*16*s->linesize, s->me.scratchpad, s->linesize); |
935 } | 941 } |
936 | 942 |
1096 mb_type|= MB_TYPE_INTRA; | 1102 mb_type|= MB_TYPE_INTRA; |
1097 if (varc*2 + 200 > vard){ | 1103 if (varc*2 + 200 > vard){ |
1098 mb_type|= MB_TYPE_INTER; | 1104 mb_type|= MB_TYPE_INTER; |
1099 s->me.sub_motion_search(s, &mx, &my, dmin, rel_xmin, rel_ymin, rel_xmax, rel_ymax, | 1105 s->me.sub_motion_search(s, &mx, &my, dmin, rel_xmin, rel_ymin, rel_xmax, rel_ymax, |
1100 pred_x, pred_y, &s->last_picture, 0, 0, mv_penalty); | 1106 pred_x, pred_y, &s->last_picture, 0, 0, mv_penalty); |
1107 if(s->flags&CODEC_FLAG_MV0) | |
1108 if(mx || my) | |
1109 mb_type |= MB_TYPE_SKIPED; //FIXME check difference | |
1101 }else{ | 1110 }else{ |
1102 mx <<=shift; | 1111 mx <<=shift; |
1103 my <<=shift; | 1112 my <<=shift; |
1104 } | 1113 } |
1105 if((s->flags&CODEC_FLAG_4MV) | 1114 if((s->flags&CODEC_FLAG_4MV) |
1106 && !s->me.skip && varc>50 && vard>10){ | 1115 && !s->me.skip && varc>50 && vard>10){ |
1107 h263_mv4_search(s, rel_xmin, rel_ymin, rel_xmax, rel_ymax, mx, my, shift); | 1116 if(h263_mv4_search(s, rel_xmin, rel_ymin, rel_xmax, rel_ymax, mx, my, shift) < INT_MAX) |
1108 mb_type|=MB_TYPE_INTER4V; | 1117 mb_type|=MB_TYPE_INTER4V; |
1109 | 1118 |
1110 set_p_mv_tables(s, mx, my, 0); | 1119 set_p_mv_tables(s, mx, my, 0); |
1111 }else | 1120 }else |
1112 set_p_mv_tables(s, mx, my, 1); | 1121 set_p_mv_tables(s, mx, my, 1); |
1113 }else{ | 1122 }else{ |