comparison motion_est.c @ 320:cda7d0857baf libavcodec

- ME setting moved to AVCodecContext/MpegEncContext, no longer a global. - EPZS ME algo used by default. - HQ flag activated for ffmpeg. - Cosmetics ...
author pulento
date Sun, 14 Apr 2002 18:57:51 +0000
parents 5753d57e7e6b
children 9c6f056f0e41
comparison
equal deleted inserted replaced
319:3ef1cc75d5f5 320:cda7d0857baf
592 CHECK_MV(P[3][0]>>shift, P[3][1]>>shift) 592 CHECK_MV(P[3][0]>>shift, P[3][1]>>shift)
593 } 593 }
594 CHECK_MV(P[0][0]>>shift, P[0][1]>>shift) 594 CHECK_MV(P[0][0]>>shift, P[0][1]>>shift)
595 595
596 //check(best[0],best[1],0, b0) 596 //check(best[0],best[1],0, b0)
597 if(s->full_search==ME_EPZS) 597 if(s->me_method==ME_EPZS)
598 dmin= small_diamond_search(s, best, dmin, new_pic, old_pic, pic_stride, 598 dmin= small_diamond_search(s, best, dmin, new_pic, old_pic, pic_stride,
599 pred_x, pred_y, mv_penalty, quant, xmin, ymin, xmax, ymax, shift); 599 pred_x, pred_y, mv_penalty, quant, xmin, ymin, xmax, ymax, shift);
600 else 600 else
601 dmin= snake_search(s, best, dmin, new_pic, old_pic, pic_stride, 601 dmin= snake_search(s, best, dmin, new_pic, old_pic, pic_stride,
602 pred_x, pred_y, mv_penalty, quant, xmin, ymin, xmax, ymax, shift); 602 pred_x, pred_y, mv_penalty, quant, xmin, ymin, xmax, ymax, shift);
823 int rel_xmin, rel_ymin, rel_xmax, rel_ymax; 823 int rel_xmin, rel_ymin, rel_xmax, rel_ymax;
824 int pred_x=0, pred_y=0; 824 int pred_x=0, pred_y=0;
825 int P[6][2]; 825 int P[6][2];
826 const int shift= 1+s->quarter_sample; 826 const int shift= 1+s->quarter_sample;
827 int mb_type=0; 827 int mb_type=0;
828 828 //static int skip=0;
829 range = 8 * (1 << (s->f_code - 1)); 829 range = 8 * (1 << (s->f_code - 1));
830 /* XXX: temporary kludge to avoid overflow for msmpeg4 */ 830 /* XXX: temporary kludge to avoid overflow for msmpeg4 */
831 if (s->out_format == FMT_H263 && !s->h263_msmpeg4) 831 if (s->out_format == FMT_H263 && !s->h263_msmpeg4)
832 range = range * 2; 832 range = range * 2;
833 833
849 xmin = 0; 849 xmin = 0;
850 ymin = 0; 850 ymin = 0;
851 xmax = s->mb_width*16 - 16; 851 xmax = s->mb_width*16 - 16;
852 ymax = s->mb_height*16 - 16; 852 ymax = s->mb_height*16 - 16;
853 } 853 }
854 switch(s->full_search) { 854 switch(s->me_method) {
855 case ME_ZERO: 855 case ME_ZERO:
856 default: 856 default:
857 no_motion_search(s, &mx, &my); 857 no_motion_search(s, &mx, &my);
858 dmin = 0; 858 dmin = 0;
859 break; 859 break;
997 997
998 s->mb_var[s->mb_width * mb_y + mb_x] = varc; 998 s->mb_var[s->mb_width * mb_y + mb_x] = varc;
999 s->avg_mb_var+= varc; 999 s->avg_mb_var+= varc;
1000 s->mc_mb_var += vard; 1000 s->mc_mb_var += vard;
1001 1001
1002
1002 #if 0 1003 #if 0
1003 printf("varc=%4d avg_var=%4d (sum=%4d) vard=%4d mx=%2d my=%2d\n", 1004 printf("varc=%4d avg_var=%4d (sum=%4d) vard=%4d mx=%2d my=%2d\n",
1004 varc, s->avg_mb_var, sum, vard, mx - xx, my - yy); 1005 varc, s->avg_mb_var, sum, vard, mx - xx, my - yy);
1005 #endif 1006 #endif
1006 if(s->flags&CODEC_FLAG_HQ){ 1007 if(s->flags&CODEC_FLAG_HQ){
1014 my = my*2 - mb_y*32; 1015 my = my*2 - mb_y*32;
1015 } 1016 }
1016 }else{ 1017 }else{
1017 if (vard <= 64 || vard < varc) { 1018 if (vard <= 64 || vard < varc) {
1018 mb_type|= MB_TYPE_INTER; 1019 mb_type|= MB_TYPE_INTER;
1019 if (s->full_search != ME_ZERO) { 1020 if (s->me_method != ME_ZERO) {
1020 halfpel_motion_search(s, &mx, &my, dmin, xmin, ymin, xmax, ymax, pred_x, pred_y); 1021 halfpel_motion_search(s, &mx, &my, dmin, xmin, ymin, xmax, ymax, pred_x, pred_y);
1021 } else { 1022 } else {
1022 mx -= 16 * mb_x; 1023 mx -= 16 * mb_x;
1023 my -= 16 * mb_y; 1024 my -= 16 * mb_y;
1024 } 1025 }
1026 #if 0
1027 if (vard < 10) {
1028 skip++;
1029 fprintf(stderr,"\nEarly skip: %d vard: %2d varc: %5d dmin: %d",
1030 skip, vard, varc, dmin);
1031 }
1032 #endif
1025 }else{ 1033 }else{
1026 mb_type|= MB_TYPE_INTRA; 1034 mb_type|= MB_TYPE_INTRA;
1027 mx = 0;//mx*2 - 32 * mb_x; 1035 mx = 0;//mx*2 - 32 * mb_x;
1028 my = 0;//my*2 - 32 * mb_y; 1036 my = 0;//my*2 - 32 * mb_y;
1029 } 1037 }