summaryrefslogtreecommitdiff
path: root/libavcodec/vc1_block.c
diff options
context:
space:
mode:
authorJerome Borsboom <jerome.borsboom@carpalis.nl>2018-04-28 17:15:32 +0200
committerMichael Niedermayer <michael@niedermayer.cc>2018-04-29 03:57:33 +0200
commit19c3df0cd6ddc21a666e67a0c98b7823a2730003 (patch)
tree491e8ae32edffc3bb3440a37798ba0c5da517b7e /libavcodec/vc1_block.c
parent29fd44adf128c6bf9c780b3460a64ceaed44f515 (diff)
avcodec/vc1: fix mquant calculation
In vc1_decode_i_blocks_adv mquant needs to be reset to its default value for each macroblock, instead of once at the beginning of the slice. DQPROFILE specifies which macroblocks can have an alternative quantizer step size. When DQPROFILE specifies edges, the selection is applicable to the edges of the picture. Slice edges are not selected by DQPROFILE. Signed-off-by: Jerome Borsboom <jerome.borsboom@carpalis.nl> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
Diffstat (limited to 'libavcodec/vc1_block.c')
-rw-r--r--libavcodec/vc1_block.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/libavcodec/vc1_block.c b/libavcodec/vc1_block.c
index 7cabe49eda..ace1b3eedb 100644
--- a/libavcodec/vc1_block.c
+++ b/libavcodec/vc1_block.c
@@ -177,7 +177,7 @@ static void vc1_put_signed_blocks_clamped(VC1Context *v)
edges = 15; \
if ((edges&1) && !s->mb_x) \
mquant = -v->altpq; \
- if ((edges&2) && s->first_slice_line) \
+ if ((edges&2) && !s->mb_y) \
mquant = -v->altpq; \
if ((edges&4) && s->mb_x == (s->mb_width - 1)) \
mquant = -v->altpq; \
@@ -2626,7 +2626,7 @@ static void vc1_decode_i_blocks_adv(VC1Context *v)
int cbp, val;
uint8_t *coded_val;
int mb_pos;
- int mquant = v->pq;
+ int mquant;
int mqdiff;
GetBitContext *gb = &s->gb;
@@ -2671,6 +2671,7 @@ static void vc1_decode_i_blocks_adv(VC1Context *v)
init_block_index(v);
for (;s->mb_x < s->mb_width; s->mb_x++) {
int16_t (*block)[64] = v->block[v->cur_blk_idx];
+ mquant = v->pq;
ff_update_block_index(s);
s->bdsp.clear_blocks(block[0]);
mb_pos = s->mb_x + s->mb_y * s->mb_stride;