diff h263dec.c @ 498:0b4450c15067 libavcodec

dc scale simplification/optimization
author michaelni
date Tue, 18 Jun 2002 00:46:02 +0000
parents 20108840b0e5
children cd170daf9e4c
line wrap: on
line diff
--- a/h263dec.c	Mon Jun 17 08:29:03 2002 +0000
+++ b/h263dec.c	Tue Jun 18 00:46:02 2002 +0000
@@ -76,6 +76,11 @@
         s->h263_pred = 1;
         s->msmpeg4_version=4;
         break;
+    case CODEC_ID_WMV2:
+        s->h263_msmpeg4 = 1;
+        s->h263_pred = 1;
+        s->msmpeg4_version=5;
+        break;
     case CODEC_ID_H263I:
         s->h263_intel = 1;
         break;
@@ -91,7 +96,7 @@
             return -1;
 
     if (s->h263_msmpeg4)
-        msmpeg4_decode_init_vlc(s);
+        ff_msmpeg4_decode_init(s);
     else
         h263_decode_init_vlc(s);
     
@@ -169,8 +174,10 @@
 
     if(ret==FRAME_SKIPED) return 0;
     /* skip if the header was thrashed */
-    if (ret < 0)
+    if (ret < 0){
+        fprintf(stderr, "header damaged\n");
         return -1;
+    }
     /* skip b frames if we dont have reference frames */
     if(s->num_available_buffers<2 && s->pict_type==B_TYPE) return 0;
     /* skip b frames if we are in a hurry */
@@ -216,6 +223,9 @@
             s->last_dc[2]= 128;
         }
 
+        s->y_dc_scale= s->y_dc_scale_table[ s->qscale ];
+        s->c_dc_scale= s->c_dc_scale_table[ s->qscale ];
+
         s->block_index[0]= s->block_wrap[0]*(s->mb_y*2 + 1) - 1;
         s->block_index[1]= s->block_wrap[0]*(s->mb_y*2 + 1);
         s->block_index[2]= s->block_wrap[0]*(s->mb_y*2 + 2) - 1;
@@ -245,6 +255,9 @@
                         }
                     }
                     s->qscale= s->next_resync_qscale;
+                    s->y_dc_scale= s->y_dc_scale_table[ s->qscale ];
+                    s->c_dc_scale= s->c_dc_scale_table[ s->qscale ];
+
                     s->gb= s->next_resync_gb;
                     s->resync_mb_x= s->mb_x; //we know that the marker is here cuz mb_num_left was the distance to it
                     s->resync_mb_y= s->mb_y;
@@ -265,18 +278,6 @@
 
             //fprintf(stderr,"\nFrame: %d\tMB: %d",avctx->frame_number, (s->mb_y * s->mb_width) + s->mb_x);
             /* DCT & quantize */
-            if (s->h263_pred && !(s->msmpeg4_version==1 || s->msmpeg4_version==2)) {
-                /* old ffmpeg encoded msmpeg4v3 workaround */
-                if(s->workaround_bugs==1 && s->msmpeg4_version==3) 
-                    ff_old_msmpeg4_dc_scale(s);
-                else
-                    h263_dc_scale(s);                
-            } else {
-                /* default quantization values */
-                s->y_dc_scale = 8;
-                s->c_dc_scale = 8;
-            }
-
             if(s->decoding_error!=DECODING_DESYNC){
                 int last_error= s->decoding_error;
                 clear_blocks(s->block[0]);
@@ -521,6 +522,18 @@
     CODEC_CAP_DRAW_HORIZ_BAND,
 };
 
+AVCodec wmv2_decoder = {
+    "wmv2",
+    CODEC_TYPE_VIDEO,
+    CODEC_ID_WMV2,
+    sizeof(MpegEncContext),
+    h263_decode_init,
+    NULL,
+    h263_decode_end,
+    h263_decode_frame,
+    CODEC_CAP_DRAW_HORIZ_BAND,
+};
+
 AVCodec h263i_decoder = {
     "h263i",
     CODEC_TYPE_VIDEO,