X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fmpegvideo.c;h=96634ec7b5e843e64167209d74ad6d83b6bb7ba2;hb=71199ee9077da7d92a8728e2a694fb1ab31488a7;hp=eacebc26606baa1697089d6928280a3b5fdb3d99;hpb=182550e42c02b16ecb7fd2a77ea532c830c8ce78;p=ffmpeg diff --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c index eacebc26606..96634ec7b5e 100644 --- a/libavcodec/mpegvideo.c +++ b/libavcodec/mpegvideo.c @@ -114,6 +114,9 @@ static void dct_unquantize_mpeg2_intra_c(MpegEncContext *s, int i, level, nCoeffs; const uint16_t *quant_matrix; + if (s->q_scale_type) qscale = ff_mpeg2_non_linear_qscale[qscale]; + else qscale <<= 1; + if(s->alternate_scan) nCoeffs= 63; else nCoeffs= s->block_last_index[n]; @@ -125,10 +128,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 +145,9 @@ static void dct_unquantize_mpeg2_intra_bitexact(MpegEncContext *s, const uint16_t *quant_matrix; int sum=-1; + if (s->q_scale_type) qscale = ff_mpeg2_non_linear_qscale[qscale]; + else qscale <<= 1; + if(s->alternate_scan) nCoeffs= 63; else nCoeffs= s->block_last_index[n]; @@ -154,10 +160,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 +179,9 @@ static void dct_unquantize_mpeg2_inter_c(MpegEncContext *s, const uint16_t *quant_matrix; int sum=-1; + if (s->q_scale_type) qscale = ff_mpeg2_non_linear_qscale[qscale]; + else qscale <<= 1; + if(s->alternate_scan) nCoeffs= 63; else nCoeffs= s->block_last_index[n]; @@ -184,11 +193,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;