# HG changeset patch # User glantau # Date 997556648 0 # Node ID 764f2eaf711e2915414184fb1d8280bcf907d66a # Parent adf7cea364ca7b7381b810937840ce3ef0aaa83b fixed mpeg2 qscale decoding diff -r adf7cea364ca -r 764f2eaf711e mpeg12.c --- a/mpeg12.c Sat Aug 11 19:03:30 2001 +0000 +++ b/mpeg12.c Sat Aug 11 19:04:08 2001 +0000 @@ -489,6 +489,22 @@ 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 @@ } 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 @@ 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);