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);