[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