[SCM] libav/experimental: (commit by michael) quantizer range bugfix (mpeg1 & mpeg4 encoding)

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun Jun 30 15:30:53 UTC 2013


The following commit has been merged in the experimental branch:
commit 4e3269e87f3b418fa32fb4372d12edb808638295
Author: Michael Niedermayer <michaelni at gmx.at>
Date:   Thu Jan 24 14:34:03 2002 +0000

    (commit by michael)
    quantizer range bugfix (mpeg1 & mpeg4 encoding)
    
    Originally committed as revision 277 to svn://svn.ffmpeg.org/ffmpeg/trunk

diff --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c
index c3143ca..37efe1e 100644
--- a/libavcodec/mpegvideo.c
+++ b/libavcodec/mpegvideo.c
@@ -1066,6 +1066,21 @@ static int dct_quantize(MpegEncContext *s,
 {
     int i, j, level, last_non_zero, q;
     const int *qmat;
+    int minLevel, maxLevel;
+
+    if(s->avctx!=NULL && s->avctx->codec->id==CODEC_ID_MPEG4){
+	/* mpeg4 */
+        minLevel= -2048;
+	maxLevel= 2047;
+    }else if(s->out_format==FMT_MPEG1){
+	/* mpeg1 */
+        minLevel= -255;
+	maxLevel= 255;
+    }else{
+	/* h263 / msmpeg4 */
+        minLevel= -128;
+	maxLevel= 127;
+    }
 
     av_fdct (block);
 
@@ -1138,10 +1153,10 @@ static int dct_quantize(MpegEncContext *s,
                h263:  -128..127
                mpeg4: -2048..2047
             */
-            if (level > 127)
-                level = 127;
-            else if (level < -128)
-                level = -128;
+            if (level > maxLevel)
+                level = maxLevel;
+            else if (level < minLevel)
+                level = minLevel;
             block[j] = level;
             last_non_zero = i;
         } else {
@@ -1157,6 +1172,21 @@ static int dct_quantize_mmx(MpegEncContext *s,
 {
     int i, j, level, last_non_zero, q;
     const int *qmat;
+    int minLevel, maxLevel;
+
+    if(s->avctx!=NULL && s->avctx->codec->id==CODEC_ID_MPEG4){
+	/* mpeg4 */
+        minLevel= -2048;
+	maxLevel= 2047;
+    }else if(s->out_format==FMT_MPEG1){
+	/* mpeg1 */
+        minLevel= -255;
+	maxLevel= 255;
+    }else{
+	/* h263 / msmpeg4 */
+        minLevel= -128;
+	maxLevel= 127;
+    }
 
     av_fdct (block);
     
@@ -1202,10 +1232,10 @@ static int dct_quantize_mmx(MpegEncContext *s,
                h263:  -128..127
                mpeg4: -2048..2047
             */
-            if (level > 127)
-                level = 127;
-            else if (level < -128)
-                level = -128;
+            if (level > maxLevel)
+                level = maxLevel;
+            else if (level < minLevel)
+                level = minLevel;
             block[j] = level;
             last_non_zero = i;
         } else {

-- 
Libav/FFmpeg packaging



More information about the pkg-multimedia-commits mailing list