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{