changeset 2079:75aae96e6b54 libavcodec

fewer overflows
author michael
date Mon, 14 Jun 2004 16:18:04 +0000
parents 3dabadc91d19
children 6a9472a09ffc
files motion_est_template.c
diffstat 1 files changed, 8 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/motion_est_template.c	Sun Jun 13 23:40:54 2004 +0000
+++ b/motion_est_template.c	Mon Jun 14 16:18:04 2004 +0000
@@ -323,15 +323,16 @@
 
             for(ny= -3; ny <= 3; ny++){
                 for(nx= -3; nx <= 3; nx++){
-                    const int t2= nx*nx*(tr + tl - 2*t) + 4*nx*(tr-tl) + 32*t;
-                    const int c2= nx*nx*( r +  l - 2*c) + 4*nx*( r- l) + 32*c;
-                    const int b2= nx*nx*(br + bl - 2*b) + 4*nx*(br-bl) + 32*b;
-                    int score= ny*ny*(b2 + t2 - 2*c2) + 4*ny*(b2 - t2) + 32*c2;
+                    //FIXME this could overflow (unlikely though)
+                    const int64_t t2= nx*nx*(tr + tl - 2*t) + 4*nx*(tr-tl) + 32*t;
+                    const int64_t c2= nx*nx*( r +  l - 2*c) + 4*nx*( r- l) + 32*c;
+                    const int64_t b2= nx*nx*(br + bl - 2*b) + 4*nx*(br-bl) + 32*b;
+                    int score= (ny*ny*(b2 + t2 - 2*c2) + 4*ny*(b2 - t2) + 32*c2 + 512)>>10;
                     int i;
                     
                     if((nx&3)==0 && (ny&3)==0) continue;
                     
-                    score += 1024*(mv_penalty[4*mx + nx - pred_x] + mv_penalty[4*my + ny - pred_y])*penalty_factor;
+                    score += (mv_penalty[4*mx + nx - pred_x] + mv_penalty[4*my + ny - pred_y])*penalty_factor;
                     
 //                    if(nx&1) score-=1024*c->penalty_factor;
 //                    if(ny&1) score-=1024*c->penalty_factor;
@@ -350,6 +351,7 @@
             }
         }else{
             int tl;
+            //FIXME this could overflow (unlikely though)
             const int cx = 4*(r - l);
             const int cx2= r + l - 2*c; 
             const int cy = 4*(b - t);
@@ -372,6 +374,7 @@
             
             for(ny= -3; ny <= 3; ny++){
                 for(nx= -3; nx <= 3; nx++){
+                    //FIXME this could overflow (unlikely though)
                     int score= ny*nx*cxy + nx*nx*cx2 + ny*ny*cy2 + nx*cx + ny*cy + 32*c; //FIXME factor
                     int i;