changeset 359:df0736462b9f libavcodec

move ABS() to common.h print mb_types in nice looking format support
author michaelni
date Sat, 04 May 2002 18:58:07 +0000
parents 2066dc543be4
children 71792167020c
files common.h h263.c
diffstat 2 files changed, 20 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/common.h	Fri May 03 23:13:24 2002 +0000
+++ b/common.h	Sat May 04 18:58:07 2002 +0000
@@ -159,6 +159,7 @@
 
 /* assume b>0 */
 #define ROUNDED_DIV(a,b) (((a)>0 ? (a) + ((b)>>1) : (a) - ((b)>>1))/(b))
+#define ABS(a) ((a) >= 0 ? (a) : (-(a)))
 
 /* bit output */
 
--- a/h263.c	Fri May 03 23:13:24 2002 +0000
+++ b/h263.c	Sat May 04 18:58:07 2002 +0000
@@ -30,12 +30,13 @@
 #include "mpeg4data.h"
 
 //rounded divison & shift
-#define RDIV(a,b) ((a) > 0 ? ((a)+((b)>>1))/(b) : ((a)-((b)>>1))/(b))
 #define RSHIFT(a,b) ((a) > 0 ? ((a) + (1<<((b)-1)))>>(b) : ((a) + (1<<((b)-1))-1)>>(b))
-#define ABS(a) (((a)>=0)?(a):(-(a)))
 #define MAX(a,b) ((a) > (b) ? (a) : (b))
 #define MIN(a,b) ((a) < (b) ? (a) : (b))
 
+#define PRINT_MB_TYPE(a) ;
+//#define PRINT_MB_TYPE(a) printf(a);
+
 static void h263_encode_block(MpegEncContext * s, DCTELEM * block,
 			      int n);
 static void h263_encode_motion(MpegEncContext * s, int val, int fcode);
@@ -1765,6 +1766,8 @@
     INT16 *mot_val;
     static INT8 quant_tab[4] = { -1, -2, 1, 2 };
 
+    if(s->mb_x==0) PRINT_MB_TYPE("\n")
+
     if(s->resync_marker){
         if(   s->resync_x_pos == s->mb_x+1
            || s->resync_x_pos == s->mb_x){
@@ -1797,7 +1800,7 @@
             if(s->pict_type==S_TYPE && s->vol_sprite_usage==GMC_SPRITE){
                 const int a= s->sprite_warping_accuracy;
 //                int l = (1 << (s->f_code - 1)) * 32;
-
+                PRINT_MB_TYPE("G");
                 s->mcsel=1;
                 if(s->divx_version==500 && s->divx_build==413){
                     s->mv[0][0][0] = s->sprite_offset[0][0] / (1<<(a-s->quarter_sample));
@@ -1813,6 +1816,7 @@
 
                 s->mb_skiped = 0;
             }else{
+                PRINT_MB_TYPE("S");
                 s->mcsel=0;
                 s->mv[0][0][0] = 0;
                 s->mv[0][0][1] = 0;
@@ -1848,6 +1852,7 @@
         }
         s->mv_dir = MV_DIR_FORWARD;
         if ((cbpc & 16) == 0) {
+            PRINT_MB_TYPE("P");
             /* 16x16 motion prediction */
             s->mv_type = MV_TYPE_16X16;
             h263_pred_motion(s, 0, &pred_x, &pred_y);
@@ -1895,6 +1900,7 @@
                skip_bits1(&s->gb); /* Bit stuffing to prevent PSC */
                            
         } else {
+            PRINT_MB_TYPE("4");
             s->mv_type = MV_TYPE_8X8;
             for(i=0;i<4;i++) {
                 mot_val = h263_pred_motion(s, i, &pred_x, &pred_y);
@@ -1935,7 +1941,6 @@
             s->last_mv[0][0][1]= 
             s->last_mv[1][0][0]= 
             s->last_mv[1][0][1]= 0;
-//            printf("\n");
         }
 
         /* if we skipped it in the future P Frame than skip it now too */
@@ -1955,7 +1960,7 @@
 //FIXME is this correct?
 /*            s->last_mv[0][0][0]=
             s->last_mv[0][0][1]=0;*/
-//            printf("S");
+            PRINT_MB_TYPE("s")
             return 0;
         }
 
@@ -2004,7 +2009,7 @@
             s->mv[0][0][1] = 
             s->mv[1][0][0] = 
             s->mv[1][0][1] = 1000;*/
-//            printf("D");
+            PRINT_MB_TYPE("D");
             break;
         case 1: 
             s->mv_dir = MV_DIR_FORWARD | MV_DIR_BACKWARD;
@@ -2017,7 +2022,7 @@
             my = h263_decode_motion(s, s->last_mv[1][0][1], s->b_code);
             s->last_mv[1][0][0]= s->mv[1][0][0] = mx;
             s->last_mv[1][0][1]= s->mv[1][0][1] = my;
-//            printf("I");
+            PRINT_MB_TYPE("i");
             break;
         case 2: 
             s->mv_dir = MV_DIR_BACKWARD;
@@ -2025,7 +2030,7 @@
             my = h263_decode_motion(s, s->last_mv[1][0][1], s->b_code);
             s->last_mv[1][0][0]= s->mv[1][0][0] = mx;
             s->last_mv[1][0][1]= s->mv[1][0][1] = my;
-//            printf("B");
+            PRINT_MB_TYPE("B");
             break;
         case 3:
             s->mv_dir = MV_DIR_FORWARD;
@@ -2033,7 +2038,7 @@
             my = h263_decode_motion(s, s->last_mv[0][0][1], s->f_code);
             s->last_mv[0][0][0]= s->mv[0][0][0] = mx;
             s->last_mv[0][0][1]= s->mv[0][0][1] = my;
-//            printf("F");
+            PRINT_MB_TYPE("F");
             break;
         default: return -1;
         }
@@ -2044,6 +2049,7 @@
         dquant = cbpc & 4;
         s->mb_intra = 1;
 intra:
+        PRINT_MB_TYPE("I");
         s->ac_pred = 0;
         if (s->h263_pred || s->h263_aic) {
             s->ac_pred = get_bits1(&s->gb);
@@ -2606,13 +2612,13 @@
 // the idea behind this virtual_ref mess is to be able to use shifts later per pixel instead of divides
 // so the distance between points is converted from w&h based to w2&h2 based which are of the 2^x form
     virtual_ref[0][0]= 16*(vop_ref[0][0] + w2) 
-        + RDIV(((w - w2)*(r*sprite_ref[0][0] - 16*vop_ref[0][0]) + w2*(r*sprite_ref[1][0] - 16*vop_ref[1][0])),w);
+        + ROUNDED_DIV(((w - w2)*(r*sprite_ref[0][0] - 16*vop_ref[0][0]) + w2*(r*sprite_ref[1][0] - 16*vop_ref[1][0])),w);
     virtual_ref[0][1]= 16*vop_ref[0][1] 
-        + RDIV(((w - w2)*(r*sprite_ref[0][1] - 16*vop_ref[0][1]) + w2*(r*sprite_ref[1][1] - 16*vop_ref[1][1])),w);
+        + ROUNDED_DIV(((w - w2)*(r*sprite_ref[0][1] - 16*vop_ref[0][1]) + w2*(r*sprite_ref[1][1] - 16*vop_ref[1][1])),w);
     virtual_ref[1][0]= 16*vop_ref[0][0] 
-        + RDIV(((h - h2)*(r*sprite_ref[0][0] - 16*vop_ref[0][0]) + h2*(r*sprite_ref[2][0] - 16*vop_ref[2][0])),h);
+        + ROUNDED_DIV(((h - h2)*(r*sprite_ref[0][0] - 16*vop_ref[0][0]) + h2*(r*sprite_ref[2][0] - 16*vop_ref[2][0])),h);
     virtual_ref[1][1]= 16*(vop_ref[0][1] + h2) 
-        + RDIV(((h - h2)*(r*sprite_ref[0][1] - 16*vop_ref[0][1]) + h2*(r*sprite_ref[2][1] - 16*vop_ref[2][1])),h);
+        + ROUNDED_DIV(((h - h2)*(r*sprite_ref[0][1] - 16*vop_ref[0][1]) + h2*(r*sprite_ref[2][1] - 16*vop_ref[2][1])),h);
 
     switch(s->num_sprite_warping_points)
     {