Fix mquant selection for ALL_MBS mode

Originally committed as revision 5686 to svn://svn.ffmpeg.org/ffmpeg/trunk
pull/126/head
Kostya Shishkov 19 years ago
parent 65c7bb9ec4
commit 3a3f1cf3f8
  1. 7
      libavcodec/vc1.c

@ -704,7 +704,7 @@ static int vop_dquant_decoding(VC1Context *v)
v->dqbilevel = get_bits(gb, 1); v->dqbilevel = get_bits(gb, 1);
default: break; //Forbidden ? default: break; //Forbidden ?
} }
if (!v->dqbilevel || v->dqprofile != DQPROFILE_ALL_MBS) if (v->dqbilevel || v->dqprofile != DQPROFILE_ALL_MBS)
{ {
pqdiff = get_bits(gb, 3); pqdiff = get_bits(gb, 3);
if (pqdiff == 7) v->altpq = get_bits(gb, 5); if (pqdiff == 7) v->altpq = get_bits(gb, 5);
@ -1449,7 +1449,7 @@ static int vc1_parse_frame_header(VC1Context *v, GetBitContext* gb)
{ \ { \
if (v->dqbilevel) \ if (v->dqbilevel) \
{ \ { \
mquant = (get_bits(gb, 1)) ? v->pq : v->altpq; \ mquant = (get_bits(gb, 1)) ? v->altpq : v->pq; \
} \ } \
else \ else \
{ \ { \
@ -1464,10 +1464,9 @@ static int vc1_parse_frame_header(VC1Context *v, GetBitContext* gb)
edges = (3 << v->dqsbedge) % 15; \ edges = (3 << v->dqsbedge) % 15; \
else if(v->dqprofile == DQPROFILE_FOUR_EDGES) \ else if(v->dqprofile == DQPROFILE_FOUR_EDGES) \
edges = 15; \ edges = 15; \
mquant = v->pq; \
if((edges&1) && !s->mb_x) \ if((edges&1) && !s->mb_x) \
mquant = v->altpq; \ mquant = v->altpq; \
if((edges&2) && !s->mb_y) \ if((edges&2) && s->first_slice_line) \
mquant = v->altpq; \ mquant = v->altpq; \
if((edges&4) && s->mb_x == (s->mb_width - 1)) \ if((edges&4) && s->mb_x == (s->mb_width - 1)) \
mquant = v->altpq; \ mquant = v->altpq; \

Loading…
Cancel
Save