Commit 0ee50938 authored by Fabrice Bellard's avatar Fabrice Bellard

fixed mpeg2 qscale decoding


Originally committed as revision 71 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent 991ae7b6
...@@ -489,6 +489,22 @@ static inline int get_dmv(MpegEncContext *s) ...@@ -489,6 +489,22 @@ static inline int get_dmv(MpegEncContext *s)
return 0; 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) */ /* motion type (for mpeg2) */
#define MT_FIELD 1 #define MT_FIELD 1
#define MT_FRAME 2 #define MT_FRAME 2
...@@ -594,16 +610,7 @@ static int mpeg_decode_mb(MpegEncContext *s, ...@@ -594,16 +610,7 @@ static int mpeg_decode_mb(MpegEncContext *s,
} }
if (mb_type & MB_QUANT) { if (mb_type & MB_QUANT) {
if (s->mpeg2) { s->qscale = get_qscale(s);
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);
}
} }
if (mb_type & MB_INTRA) { if (mb_type & MB_INTRA) {
if (s->concealment_motion_vectors) { if (s->concealment_motion_vectors) {
...@@ -1287,7 +1294,7 @@ static int mpeg_decode_slice(AVCodecContext *avctx, ...@@ -1287,7 +1294,7 @@ static int mpeg_decode_slice(AVCodecContext *avctx,
init_get_bits(&s->gb, buf, buf_size); init_get_bits(&s->gb, buf, buf_size);
s->qscale = get_bits(&s->gb, 5); s->qscale = get_qscale(s);
/* extra slice info */ /* extra slice info */
while (get_bits1(&s->gb) != 0) { while (get_bits1(&s->gb) != 0) {
skip_bits(&s->gb, 8); skip_bits(&s->gb, 8);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment