From 0ee50938f16af075a3d8dd04837d44c082d51cba Mon Sep 17 00:00:00 2001 From: Fabrice Bellard Date: Sat, 11 Aug 2001 19:04:08 +0000 Subject: [PATCH] fixed mpeg2 qscale decoding Originally committed as revision 71 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavcodec/mpeg12.c | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/libavcodec/mpeg12.c b/libavcodec/mpeg12.c index 2e758b47bc..a0f8a65fc5 100644 --- a/libavcodec/mpeg12.c +++ b/libavcodec/mpeg12.c @@ -489,6 +489,22 @@ static inline int get_dmv(MpegEncContext *s) return 0; } +static inline int get_qscale(MpegEncContext *s) +{ + int qscale; + if (s->mpeg2) { + if (s->q_scale_type) { + qscale = non_linear_qscale[get_bits(&s->gb, 5)]; + } else { + qscale = get_bits(&s->gb, 5) << 1; + } + } else { + /* for mpeg1, we use the generic unquant code */ + qscale = get_bits(&s->gb, 5); + } + return qscale; +} + /* motion type (for mpeg2) */ #define MT_FIELD 1 #define MT_FRAME 2 @@ -594,16 +610,7 @@ static int mpeg_decode_mb(MpegEncContext *s, } if (mb_type & MB_QUANT) { - if (s->mpeg2) { - if (s->q_scale_type) { - s->qscale = non_linear_qscale[get_bits(&s->gb, 5)]; - } else { - s->qscale = get_bits(&s->gb, 5) << 1; - } - } else { - /* for mpeg1, we use the generic unquant code */ - s->qscale = get_bits(&s->gb, 5); - } + s->qscale = get_qscale(s); } if (mb_type & MB_INTRA) { if (s->concealment_motion_vectors) { @@ -1287,7 +1294,7 @@ static int mpeg_decode_slice(AVCodecContext *avctx, init_get_bits(&s->gb, buf, buf_size); - s->qscale = get_bits(&s->gb, 5); + s->qscale = get_qscale(s); /* extra slice info */ while (get_bits1(&s->gb) != 0) { skip_bits(&s->gb, 8);