summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2003-01-01 16:47:31 +0000
committerMichael Niedermayer <michaelni@gmx.at>2003-01-01 16:47:31 +0000
commit0a13093de85c0077810fcafdaceb7f98c1d75743 (patch)
tree7b0a12fdf4a793eb80bbcd9f9a23221d8e15bebe
parentfbd8bb7e9f160e3fc93318d9d7355e3280f7d510 (diff)
bugfix
Originally committed as revision 1388 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r--libavcodec/motion_est.c30
1 files changed, 15 insertions, 15 deletions
diff --git a/libavcodec/motion_est.c b/libavcodec/motion_est.c
index ecf5d731a0..10e4bb51c4 100644
--- a/libavcodec/motion_est.c
+++ b/libavcodec/motion_est.c
@@ -1222,21 +1222,6 @@ static inline int direct_search(MpegEncContext * s,
int16_t (*mv_table)[2]= s->b_direct_mv_table;
uint16_t * const mv_penalty= s->me.mv_penalty[1] + MAX_MV;
- P_LEFT[0] = mv_table[mot_xy - 1][0];
- P_LEFT[1] = mv_table[mot_xy - 1][1];
-
- /* special case for first line */
- if ((mb_y == 0 || s->first_slice_line)) {
- } else {
- P_TOP[0] = mv_table[mot_xy - mot_stride ][0];
- P_TOP[1] = mv_table[mot_xy - mot_stride ][1];
- P_TOPRIGHT[0] = mv_table[mot_xy - mot_stride + 1 ][0];
- P_TOPRIGHT[1] = mv_table[mot_xy - mot_stride + 1 ][1];
-
- P_MEDIAN[0]= mid_pred(P_LEFT[0], P_TOP[0], P_TOPRIGHT[0]);
- P_MEDIAN[1]= mid_pred(P_LEFT[1], P_TOP[1], P_TOPRIGHT[1]);
- }
-
ymin= xmin=(-32)>>shift;
ymax= xmax= 31>>shift;
@@ -1283,6 +1268,21 @@ static inline int direct_search(MpegEncContext * s,
return 256*256*256*64;
}
+ P_LEFT[0] = clip(mv_table[mot_xy - 1][0], xmin<<shift, xmax<<shift);
+ P_LEFT[1] = clip(mv_table[mot_xy - 1][1], ymin<<shift, ymax<<shift);
+
+ /* special case for first line */
+ if ((mb_y == 0 || s->first_slice_line)) {
+ } else {
+ P_TOP[0] = clip(mv_table[mot_xy - mot_stride ][0], xmin<<shift, xmax<<shift);
+ P_TOP[1] = clip(mv_table[mot_xy - mot_stride ][1], ymin<<shift, ymax<<shift);
+ P_TOPRIGHT[0] = clip(mv_table[mot_xy - mot_stride + 1 ][0], xmin<<shift, xmax<<shift);
+ P_TOPRIGHT[1] = clip(mv_table[mot_xy - mot_stride + 1 ][1], ymin<<shift, ymax<<shift);
+
+ P_MEDIAN[0]= mid_pred(P_LEFT[0], P_TOP[0], P_TOPRIGHT[0]);
+ P_MEDIAN[1]= mid_pred(P_LEFT[1], P_TOP[1], P_TOPRIGHT[1]);
+ }
+
if(s->flags&CODEC_FLAG_QPEL){
dmin = simple_direct_qpel_epzs_motion_search(s, 0, &mx, &my, P, 0, 0, xmin, ymin, xmax, ymax,
&s->last_picture, mv_table, 1<<14, mv_penalty);