Mercurial > libavcodec.hg
comparison motion_est.c @ 1050:8d686fbb6a8c libavcodec
b frame segfault fix (+-1 bug)
author | michaelni |
---|---|
date | Fri, 07 Feb 2003 16:44:48 +0000 |
parents | 2e4521b485a1 |
children | e5a9dbf597d4 |
comparison
equal
deleted
inserted
replaced
1049:6fadc19937b9 | 1050:8d686fbb6a8c |
---|---|
174 hpel_avg[1][bxy](dst, (ref2_y) + (bx>>1) + (by>>1)*(stride), stride, 8);\ | 174 hpel_avg[1][bxy](dst, (ref2_y) + (bx>>1) + (by>>1)*(stride), stride, 8);\ |
175 }\ | 175 }\ |
176 }else{\ | 176 }else{\ |
177 int fx = s->me.direct_basis_mv[0][0] + hx;\ | 177 int fx = s->me.direct_basis_mv[0][0] + hx;\ |
178 int fy = s->me.direct_basis_mv[0][1] + hy;\ | 178 int fy = s->me.direct_basis_mv[0][1] + hy;\ |
179 int bx = hx ? fx - s->me.co_located_mv[0][0] : s->me.co_located_mv[0][0]*(time_pb - time_pp)/time_pp;\ | 179 int bx = hx ? fx - s->me.co_located_mv[0][0] : (s->me.co_located_mv[0][0]*(time_pb - time_pp)/time_pp);\ |
180 int by = hy ? fy - s->me.co_located_mv[0][1] : s->me.co_located_mv[0][1]*(time_pb - time_pp)/time_pp;\ | 180 int by = hy ? fy - s->me.co_located_mv[0][1] : (s->me.co_located_mv[0][1]*(time_pb - time_pp)/time_pp);\ |
181 int fxy= (fx&1) + 2*(fy&1);\ | 181 int fxy= (fx&1) + 2*(fy&1);\ |
182 int bxy= (bx&1) + 2*(by&1);\ | 182 int bxy= (bx&1) + 2*(by&1);\ |
183 \ | |
184 assert((fx>>1) + 16*s->mb_x >= -16);\ | |
185 assert((fy>>1) + 16*s->mb_y >= -16);\ | |
186 assert((fx>>1) + 16*s->mb_x <= s->width);\ | |
187 assert((fy>>1) + 16*s->mb_y <= s->height);\ | |
188 assert((bx>>1) + 16*s->mb_x >= -16);\ | |
189 assert((by>>1) + 16*s->mb_y >= -16);\ | |
190 assert((bx>>1) + 16*s->mb_x <= s->width);\ | |
191 assert((by>>1) + 16*s->mb_y <= s->height);\ | |
183 \ | 192 \ |
184 hpel_put[0][fxy](s->me.scratchpad, (ref_y ) + (fx>>1) + (fy>>1)*(stride), stride, 16);\ | 193 hpel_put[0][fxy](s->me.scratchpad, (ref_y ) + (fx>>1) + (fy>>1)*(stride), stride, 16);\ |
185 hpel_avg[0][bxy](s->me.scratchpad, (ref2_y) + (bx>>1) + (by>>1)*(stride), stride, 16);\ | 194 hpel_avg[0][bxy](s->me.scratchpad, (ref2_y) + (bx>>1) + (by>>1)*(stride), stride, 16);\ |
186 }\ | 195 }\ |
187 d = cmp_func(s, s->me.scratchpad, src_y, stride);\ | 196 d = cmp_func(s, s->me.scratchpad, src_y, stride);\ |
1404 // s->me.direct_basis_mv[1][i][0]= s->me.co_located_mv[i][0]*(time_pb - time_pp)/time_pp + ((i &1)<<(shift+3); | 1413 // s->me.direct_basis_mv[1][i][0]= s->me.co_located_mv[i][0]*(time_pb - time_pp)/time_pp + ((i &1)<<(shift+3); |
1405 // s->me.direct_basis_mv[1][i][1]= s->me.co_located_mv[i][1]*(time_pb - time_pp)/time_pp + ((i>>1)<<(shift+3); | 1414 // s->me.direct_basis_mv[1][i][1]= s->me.co_located_mv[i][1]*(time_pb - time_pp)/time_pp + ((i>>1)<<(shift+3); |
1406 | 1415 |
1407 max= FFMAX(s->me.direct_basis_mv[i][0], s->me.direct_basis_mv[i][0] - s->me.co_located_mv[i][0])>>shift; | 1416 max= FFMAX(s->me.direct_basis_mv[i][0], s->me.direct_basis_mv[i][0] - s->me.co_located_mv[i][0])>>shift; |
1408 min= FFMIN(s->me.direct_basis_mv[i][0], s->me.direct_basis_mv[i][0] - s->me.co_located_mv[i][0])>>shift; | 1417 min= FFMIN(s->me.direct_basis_mv[i][0], s->me.direct_basis_mv[i][0] - s->me.co_located_mv[i][0])>>shift; |
1409 max+= (2*mb_x + (i& 1))*8 - 1; // +-1 is for the simpler rounding | 1418 max+= (2*mb_x + (i& 1))*8 + 1; // +-1 is for the simpler rounding |
1410 min+= (2*mb_x + (i& 1))*8 + 1; | 1419 min+= (2*mb_x + (i& 1))*8 - 1; |
1411 xmax= FFMIN(xmax, s->width - max); | 1420 xmax= FFMIN(xmax, s->width - max); |
1412 xmin= FFMAX(xmin, - 16 - min); | 1421 xmin= FFMAX(xmin, - 16 - min); |
1413 | 1422 |
1414 max= FFMAX(s->me.direct_basis_mv[i][1], s->me.direct_basis_mv[i][1] - s->me.co_located_mv[i][1])>>shift; | 1423 max= FFMAX(s->me.direct_basis_mv[i][1], s->me.direct_basis_mv[i][1] - s->me.co_located_mv[i][1])>>shift; |
1415 min= FFMIN(s->me.direct_basis_mv[i][1], s->me.direct_basis_mv[i][1] - s->me.co_located_mv[i][1])>>shift; | 1424 min= FFMIN(s->me.direct_basis_mv[i][1], s->me.direct_basis_mv[i][1] - s->me.co_located_mv[i][1])>>shift; |
1416 max+= (2*mb_y + (i>>1))*8 - 1; // +-1 is for the simpler rounding | 1425 max+= (2*mb_y + (i>>1))*8 + 1; // +-1 is for the simpler rounding |
1417 min+= (2*mb_y + (i>>1))*8 + 1; | 1426 min+= (2*mb_y + (i>>1))*8 - 1; |
1418 ymax= FFMIN(ymax, s->height - max); | 1427 ymax= FFMIN(ymax, s->height - max); |
1419 ymin= FFMAX(ymin, - 16 - min); | 1428 ymin= FFMAX(ymin, - 16 - min); |
1420 | 1429 |
1421 if(s->mv_type == MV_TYPE_16X16) break; | 1430 if(s->mv_type == MV_TYPE_16X16) break; |
1422 } | 1431 } |