aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2002-09-02 16:56:29 +0000
committerMichael Niedermayer <michaelni@gmx.at>2002-09-02 16:56:29 +0000
commit1a684b3d53c19756d76872ba745e00209548b0db (patch)
tree6875a7ad431ecdcee828b140826f0700da8d8378 /libavcodec
parentbe7109c12b95b6ab2490b9e035db9143b43f8d73 (diff)
downloadffmpeg-1a684b3d53c19756d76872ba745e00209548b0db.tar.gz
fixing encoding at high QPs (was broken after the dct accuracy increase due to too small inverse table)
Originally committed as revision 901 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/i386/mpegvideo_mmx_template.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/libavcodec/i386/mpegvideo_mmx_template.c b/libavcodec/i386/mpegvideo_mmx_template.c
index 185baaa420..27229ba299 100644
--- a/libavcodec/i386/mpegvideo_mmx_template.c
+++ b/libavcodec/i386/mpegvideo_mmx_template.c
@@ -46,9 +46,9 @@ static int RENAME(dct_quantize)(MpegEncContext *s,
if (s->mb_intra) {
int dummy;
if (n < 4)
- q = s->y_dc_scale<<3;
+ q = s->y_dc_scale;
else
- q = s->c_dc_scale<<3;
+ q = s->c_dc_scale;
/* note: block[0] is assumed to be positive */
if (!s->h263_aic) {
#if 1
@@ -56,7 +56,7 @@ static int RENAME(dct_quantize)(MpegEncContext *s,
"xorl %%edx, %%edx \n\t"
"mul %%ecx \n\t"
: "=d" (level), "=a"(dummy)
- : "a" (block[0] + (q >> 1)), "c" (inverse[q])
+ : "a" ((block[0]>>2) + q), "c" (inverse[q<<1])
);
#else
asm volatile (
@@ -64,13 +64,13 @@ static int RENAME(dct_quantize)(MpegEncContext *s,
"divw %%cx \n\t"
"movzwl %%ax, %%eax \n\t"
: "=a" (level)
- : "a" (block[0] + (q >> 1)), "c" (q)
+ : "a" ((block[0]>>2) + q), "c" (q<<1)
: "%edx"
);
#endif
} else
/* For AIC we skip quant/dequant of INTRADC */
- level = block[0]>>3;
+ level = (block[0] + 4)>>3;
block[0]=0; //avoid fake overflow
// temp_block[0] = (block[0] + (q >> 1)) / q;