summaryrefslogtreecommitdiff
path: root/libavcodec/mpegvideo.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michael@niedermayer.cc>2015-09-17 23:47:06 +0200
committerMichael Niedermayer <michael@niedermayer.cc>2015-09-18 02:39:17 +0200
commit2d35757814ec0beae8be26f3af641cdbd91f2200 (patch)
treecc09acacea586a499ef1720d4ce2bc2ac6664068 /libavcodec/mpegvideo.c
parent90d239a441f2f3f554b4a53c527bfe76119c36ed (diff)
avcodec/mpegvideo: Change mpeg2 unquant to work with higher precission qscale
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
Diffstat (limited to 'libavcodec/mpegvideo.c')
-rw-r--r--libavcodec/mpegvideo.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c
index eacebc2660..7c0e9c43e5 100644
--- a/libavcodec/mpegvideo.c
+++ b/libavcodec/mpegvideo.c
@@ -114,6 +114,8 @@ static void dct_unquantize_mpeg2_intra_c(MpegEncContext *s,
int i, level, nCoeffs;
const uint16_t *quant_matrix;
+ qscale <<= 1;
+
if(s->alternate_scan) nCoeffs= 63;
else nCoeffs= s->block_last_index[n];
@@ -125,10 +127,10 @@ static void dct_unquantize_mpeg2_intra_c(MpegEncContext *s,
if (level) {
if (level < 0) {
level = -level;
- level = (int)(level * qscale * quant_matrix[j]) >> 3;
+ level = (int)(level * qscale * quant_matrix[j]) >> 4;
level = -level;
} else {
- level = (int)(level * qscale * quant_matrix[j]) >> 3;
+ level = (int)(level * qscale * quant_matrix[j]) >> 4;
}
block[j] = level;
}
@@ -142,6 +144,8 @@ static void dct_unquantize_mpeg2_intra_bitexact(MpegEncContext *s,
const uint16_t *quant_matrix;
int sum=-1;
+ qscale <<= 1;
+
if(s->alternate_scan) nCoeffs= 63;
else nCoeffs= s->block_last_index[n];
@@ -154,10 +158,10 @@ static void dct_unquantize_mpeg2_intra_bitexact(MpegEncContext *s,
if (level) {
if (level < 0) {
level = -level;
- level = (int)(level * qscale * quant_matrix[j]) >> 3;
+ level = (int)(level * qscale * quant_matrix[j]) >> 4;
level = -level;
} else {
- level = (int)(level * qscale * quant_matrix[j]) >> 3;
+ level = (int)(level * qscale * quant_matrix[j]) >> 4;
}
block[j] = level;
sum+=level;
@@ -173,6 +177,8 @@ static void dct_unquantize_mpeg2_inter_c(MpegEncContext *s,
const uint16_t *quant_matrix;
int sum=-1;
+ qscale <<= 1;
+
if(s->alternate_scan) nCoeffs= 63;
else nCoeffs= s->block_last_index[n];
@@ -184,11 +190,11 @@ static void dct_unquantize_mpeg2_inter_c(MpegEncContext *s,
if (level < 0) {
level = -level;
level = (((level << 1) + 1) * qscale *
- ((int) (quant_matrix[j]))) >> 4;
+ ((int) (quant_matrix[j]))) >> 5;
level = -level;
} else {
level = (((level << 1) + 1) * qscale *
- ((int) (quant_matrix[j]))) >> 4;
+ ((int) (quant_matrix[j]))) >> 5;
}
block[j] = level;
sum+=level;