fixing msmpeg4v3 dc-scale for quantizers 24-31
authorMichael Niedermayer <michaelni@gmx.at>
Tue, 30 Apr 2002 01:29:29 +0000 (01:29 +0000)
committerMichael Niedermayer <michaelni@gmx.at>
Tue, 30 Apr 2002 01:29:29 +0000 (01:29 +0000)
Originally committed as revision 427 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavcodec/h263dec.c
libavcodec/mpegvideo.c
libavcodec/mpegvideo.h
libavcodec/msmpeg4.c

index ebd8ff2..1ab17b1 100644 (file)
@@ -199,9 +199,7 @@ static int h263_decode_frame(AVCodecContext *avctx,
 #endif
             //fprintf(stderr,"\nFrame: %d\tMB: %d",avctx->frame_number, (s->mb_y * s->mb_width) + s->mb_x);
             /* DCT & quantize */
 #endif
             //fprintf(stderr,"\nFrame: %d\tMB: %d",avctx->frame_number, (s->mb_y * s->mb_width) + s->mb_x);
             /* DCT & quantize */
-            if (s->h263_msmpeg4) {
-                msmpeg4_dc_scale(s);
-            } else if (s->h263_pred) {
+            if (s->h263_pred && s->msmpeg4_version!=2) {
                 h263_dc_scale(s);
             } else {
                 /* default quantization values */
                 h263_dc_scale(s);
             } else {
                 /* default quantization values */
index 37fb97e..8b0f4f1 100644 (file)
@@ -1439,9 +1439,7 @@ static void encode_mb(MpegEncContext *s, int motion_x, int motion_y)
             }
 #endif
     /* DCT & quantize */
             }
 #endif
     /* DCT & quantize */
-    if (s->h263_msmpeg4) {
-        msmpeg4_dc_scale(s);
-    } else if (s->h263_pred) {
+    if (s->h263_pred && s->msmpeg4_version!=2) {
         h263_dc_scale(s);
     } else {
         /* default quantization values */
         h263_dc_scale(s);
     } else {
         /* default quantization values */
index 962e0c5..33da18e 100644 (file)
@@ -490,7 +490,6 @@ void msmpeg4_encode_ext_header(MpegEncContext * s);
 void msmpeg4_encode_mb(MpegEncContext * s, 
                        DCTELEM block[6][64],
                        int motion_x, int motion_y);
 void msmpeg4_encode_mb(MpegEncContext * s, 
                        DCTELEM block[6][64],
                        int motion_x, int motion_y);
-void msmpeg4_dc_scale(MpegEncContext * s);
 int msmpeg4_decode_picture_header(MpegEncContext * s);
 int msmpeg4_decode_ext_header(MpegEncContext * s, int buf_size);
 int msmpeg4_decode_mb(MpegEncContext *s, 
 int msmpeg4_decode_picture_header(MpegEncContext * s);
 int msmpeg4_decode_ext_header(MpegEncContext * s, int buf_size);
 int msmpeg4_decode_mb(MpegEncContext *s, 
index 188e230..4321071 100644 (file)
@@ -411,7 +411,8 @@ void msmpeg4_encode_mb(MpegEncContext * s,
 }
 
 
 }
 
 
-/* strongly inspirated from MPEG4, but not exactly the same ! */
+#if 0
+/* identical to mpeg4 for msmpeg4v3 but not msmpeg4v2 */
 void msmpeg4_dc_scale(MpegEncContext * s)
 {
     if (s->qscale < 5 || s->msmpeg4_version==2){
 void msmpeg4_dc_scale(MpegEncContext * s)
 {
     if (s->qscale < 5 || s->msmpeg4_version==2){
@@ -420,11 +421,15 @@ void msmpeg4_dc_scale(MpegEncContext * s)
     }else if (s->qscale < 9){
         s->y_dc_scale = 2 * s->qscale;
         s->c_dc_scale = (s->qscale + 13)>>1;
     }else if (s->qscale < 9){
         s->y_dc_scale = 2 * s->qscale;
         s->c_dc_scale = (s->qscale + 13)>>1;
-    }else{
+    }else if(s->qscale < 25){
         s->y_dc_scale = s->qscale + 8;
         s->c_dc_scale = (s->qscale + 13)>>1;
         s->y_dc_scale = s->qscale + 8;
         s->c_dc_scale = (s->qscale + 13)>>1;
+    }else{
+        s->y_dc_scale = 2 * s->qscale - 16;
+        s->c_dc_scale = s->qscale - 6;
     }
 }
     }
 }
+#endif
 
 /* dir = 0: left, dir = 1: top prediction */
 static int msmpeg4_pred_dc(MpegEncContext * s, int n, 
 
 /* dir = 0: left, dir = 1: top prediction */
 static int msmpeg4_pred_dc(MpegEncContext * s, int n,