X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=libavcodec%2Fvp6.c;h=e5dec19f509dabb090171a2d7e1dc0d8bfc05063;hb=0a071f7124beaf0929f772a8618ac1b6c17b0222;hp=645fc5c690e03d2f30f945433d4d1356236fa446;hpb=f4cf6ba8c9646814af842a99335c6ee312ded299;p=ffmpeg diff --git a/libavcodec/vp6.c b/libavcodec/vp6.c index 645fc5c690e..e5dec19f509 100644 --- a/libavcodec/vp6.c +++ b/libavcodec/vp6.c @@ -194,6 +194,18 @@ static void vp6_coeff_order_table_init(VP56Context *s) for (pos=1; pos<64; pos++) if (s->modelp->coeff_reorder[pos] == i) s->modelp->coeff_index_to_pos[idx++] = pos; + + for (idx = 0; idx < 64; idx++) { + int max = 0; + for (i = 0; i <= idx; i++) { + int v = s->modelp->coeff_index_to_pos[i]; + if (v > max) + max = v; + } + if (s->sub_version > 6) + max++; + s->modelp->coeff_index_to_idct_selector[idx] = max; + } } static void vp6_default_models_init(VP56Context *s) @@ -446,6 +458,7 @@ static int vp6_parse_coeff_huffman(VP56Context *s) cg = FFMIN(vp6_coeff_groups[coeff_idx], 3); vlc_coeff = &s->ract_vlc[pt][ct][cg]; } + s->idct_selector[b] = model->coeff_index_to_idct_selector[FFMIN(coeff_idx, 63)]; } return 0; } @@ -460,7 +473,7 @@ static int vp6_parse_coeff(VP56Context *s) int b, i, cg, idx, ctx; int pt = 0; /* plane type (0 for Y, 1 for U or V) */ - if (c->end <= c->buffer && c->bits >= 0) { + if (vpX_rac_is_end(c)) { av_log(s->avctx, AV_LOG_ERROR, "End of AC stream reached in vp6_parse_coeff\n"); return AVERROR_INVALIDDATA; } @@ -527,6 +540,7 @@ static int vp6_parse_coeff(VP56Context *s) s->left_block[ff_vp56_b6to4[b]].not_null_dc = s->above_blocks[s->above_block_idx[b]].not_null_dc = !!s->block_coeff[b][0]; + s->idct_selector[b] = model->coeff_index_to_idct_selector[FFMIN(coeff_idx, 63)]; } return 0; }