diff options
author | Michael Niedermayer <michael@niedermayer.cc> | 2015-09-17 23:47:06 +0200 |
---|---|---|
committer | Michael Niedermayer <michael@niedermayer.cc> | 2015-09-18 02:39:17 +0200 |
commit | 2d35757814ec0beae8be26f3af641cdbd91f2200 (patch) | |
tree | cc09acacea586a499ef1720d4ce2bc2ac6664068 /libavcodec/mpegvideo.c | |
parent | 90d239a441f2f3f554b4a53c527bfe76119c36ed (diff) | |
download | ffmpeg-2d35757814ec0beae8be26f3af641cdbd91f2200.tar.gz |
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.c | 18 |
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; |