Mercurial > libavcodec.hg
comparison motion_est.c @ 1038:2e4521b485a1 libavcodec
10l / 4mv segfault fix
author | michaelni |
---|---|
date | Tue, 28 Jan 2003 09:26:00 +0000 |
parents | 48349e11c9b2 |
children | 8d686fbb6a8c |
comparison
equal
deleted
inserted
replaced
1037:44a230c11d83 | 1038:2e4521b485a1 |
---|---|
868 dmin4 = s->me.motion_search[1](s, block, &mx4, &my4, P, pred_x4, pred_y4, rel_xmin4, rel_ymin4, rel_xmax4, rel_ymax4, | 868 dmin4 = s->me.motion_search[1](s, block, &mx4, &my4, P, pred_x4, pred_y4, rel_xmin4, rel_ymin4, rel_xmax4, rel_ymax4, |
869 &s->last_picture, s->p_mv_table, (1<<16)>>shift, mv_penalty); | 869 &s->last_picture, s->p_mv_table, (1<<16)>>shift, mv_penalty); |
870 | 870 |
871 dmin4= s->me.sub_motion_search(s, &mx4, &my4, dmin4, rel_xmin4, rel_ymin4, rel_xmax4, rel_ymax4, | 871 dmin4= s->me.sub_motion_search(s, &mx4, &my4, dmin4, rel_xmin4, rel_ymin4, rel_xmax4, rel_ymax4, |
872 pred_x4, pred_y4, &s->last_picture, block, 1, mv_penalty); | 872 pred_x4, pred_y4, &s->last_picture, block, 1, mv_penalty); |
873 | 873 |
874 if(s->dsp.me_sub_cmp != s->dsp.mb_cmp){ | 874 if(s->dsp.me_sub_cmp[0] != s->dsp.mb_cmp[0]){ |
875 int dxy; | 875 int dxy; |
876 const int offset= ((block&1) + (block>>1)*s->linesize)*8; | 876 const int offset= ((block&1) + (block>>1)*s->linesize)*8; |
877 uint8_t *dest_y = s->me.scratchpad + offset; | 877 uint8_t *dest_y = s->me.scratchpad + offset; |
878 | 878 |
879 if(s->quarter_sample){ | 879 if(s->quarter_sample){ |
880 uint8_t *ref= s->last_picture.data[0] + (s->mb_x*16 + (mx4>>2)) + (s->mb_y*16 + (my4>>2))*s->linesize + offset; | 880 uint8_t *ref= s->last_picture.data[0] + (s->mb_x*16 + (mx4>>2)) + (s->mb_y*16 + (my4>>2))*s->linesize + offset; |
881 dxy = ((my4 & 3) << 2) | (mx4 & 3); | 881 dxy = ((my4 & 3) << 2) | (mx4 & 3); |
882 | 882 |
883 if(s->no_rounding) | 883 if(s->no_rounding) |
884 s->dsp.put_no_rnd_qpel_pixels_tab[0][dxy](dest_y , ref , s->linesize); | 884 s->dsp.put_no_rnd_qpel_pixels_tab[1][dxy](dest_y , ref , s->linesize); |
885 else | 885 else |
886 s->dsp.put_qpel_pixels_tab [0][dxy](dest_y , ref , s->linesize); | 886 s->dsp.put_qpel_pixels_tab [1][dxy](dest_y , ref , s->linesize); |
887 }else{ | 887 }else{ |
888 uint8_t *ref= s->last_picture.data[0] + (s->mb_x*16 + (mx4>>1)) + (s->mb_y*16 + (my4>>1))*s->linesize + offset; | 888 uint8_t *ref= s->last_picture.data[0] + (s->mb_x*16 + (mx4>>1)) + (s->mb_y*16 + (my4>>1))*s->linesize + offset; |
889 dxy = ((my4 & 1) << 1) | (mx4 & 1); | 889 dxy = ((my4 & 1) << 1) | (mx4 & 1); |
890 | 890 |
891 if(s->no_rounding) | 891 if(s->no_rounding) |
892 s->dsp.put_no_rnd_pixels_tab[0][dxy](dest_y , ref , s->linesize, 16); | 892 s->dsp.put_no_rnd_pixels_tab[1][dxy](dest_y , ref , s->linesize, 8); |
893 else | 893 else |
894 s->dsp.put_pixels_tab [0][dxy](dest_y , ref , s->linesize, 16); | 894 s->dsp.put_pixels_tab [1][dxy](dest_y , ref , s->linesize, 8); |
895 } | 895 } |
896 dmin_sum+= (mv_penalty[mx4-pred_x4] + mv_penalty[my4-pred_y4])*s->me.mb_penalty_factor; | 896 dmin_sum+= (mv_penalty[mx4-pred_x4] + mv_penalty[my4-pred_y4])*s->me.mb_penalty_factor; |
897 }else | 897 }else |
898 dmin_sum+= dmin4; | 898 dmin_sum+= dmin4; |
899 | 899 |
907 | 907 |
908 s->motion_val[ s->block_index[block] ][0]= mx4; | 908 s->motion_val[ s->block_index[block] ][0]= mx4; |
909 s->motion_val[ s->block_index[block] ][1]= my4; | 909 s->motion_val[ s->block_index[block] ][1]= my4; |
910 } | 910 } |
911 | 911 |
912 if(s->dsp.me_sub_cmp != s->dsp.mb_cmp){ | 912 if(s->dsp.me_sub_cmp[0] != s->dsp.mb_cmp[0]){ |
913 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); | 913 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); |
914 } | 914 } |
915 | 915 |
916 if(s->avctx->mb_cmp&FF_CMP_CHROMA){ | 916 if(s->avctx->mb_cmp&FF_CMP_CHROMA){ |
917 int dxy; | 917 int dxy; |