mirror of https://git.ffmpeg.org/ffmpeg.git
fixed mpeg2 qscale decoding
Originally committed as revision 71 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
991ae7b6a4
commit
0ee50938f1
|
@ -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,
|
||||||
}
|
}
|
||||||
|
|
||||||
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,
|
||||||
|
|
||||||
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);
|
||||||
|
|
Loading…
Reference in New Issue