uint8_t properties[4];
Jpeg2000CodingStyle codsty[4];
Jpeg2000QuantStyle qntsty[4];
- Jpeg2000TilePart tile_part[32];
+ Jpeg2000TilePart tile_part[256];
uint16_t tp_idx; // Tile-part index
} Jpeg2000Tile;
Jpeg2000TilePart *tp;
uint16_t Isot;
uint32_t Psot;
- uint8_t TPsot;
+ unsigned TPsot;
if (bytestream2_get_bytes_left(&s->g) < 8)
return AVERROR_INVALIDDATA;
return AVERROR_INVALIDDATA;
}
- if (TPsot >= FF_ARRAY_ELEMS(s->tile[Isot].tile_part)) {
- avpriv_request_sample(s->avctx, "Support for %"PRIu8" components", TPsot);
- return AVERROR_PATCHWELCOME;
- }
+ av_assert0(TPsot < FF_ARRAY_ELEMS(s->tile[Isot].tile_part));
s->tile[Isot].tp_idx = TPsot;
tp = s->tile[Isot].tile_part + TPsot;
precno = prcx + rlevel->num_precincts_x * prcy;
+ ok_reslevel = 1;
if (prcx >= rlevel->num_precincts_x || prcy >= rlevel->num_precincts_y) {
av_log(s->avctx, AV_LOG_WARNING, "prc %d %d outside limits %d %d\n",
prcx, prcy, rlevel->num_precincts_x, rlevel->num_precincts_y);
continue;
}
- {
- Jpeg2000ResLevel *rlevel = tile->comp[compno].reslevel +
- reslevelno;
- ok_reslevel = 1;
for (layno = 0; layno < tile->codsty[0].nlayers; layno++) {
if ((ret = jpeg2000_decode_packet(s, tile, &tp_index,
codsty, rlevel,
qntsty->nguardbits)) < 0)
return ret;
}
- }
}
}
}
ff_mqc_init_contexts(&t1->mqc);
if (passno && (coder_type = needs_termination(codsty->cblk_style, pass_cnt))) {
- if (term_cnt > cblk->nb_terminations) {
+ if (term_cnt >= cblk->nb_terminations) {
av_log(s->avctx, AV_LOG_ERROR, "Missing needed termination \n");
return AVERROR_INVALIDDATA;
}
pass_cnt ++;
}
- if (cblk->data + cblk->length != t1->mqc.bp) {
- av_log(s->avctx, AV_LOG_WARNING, "End mismatch %"PTRDIFF_SPECIFIER"\n", cblk->data + cblk->length - t1->mqc.bp);
+ if (cblk->data + cblk->length - 2*(term_cnt < cblk->nb_terminations) != t1->mqc.bp) {
+ av_log(s->avctx, AV_LOG_WARNING, "End mismatch %"PTRDIFF_SPECIFIER"\n",
+ cblk->data + cblk->length - 2*(term_cnt < cblk->nb_terminations) - t1->mqc.bp);
}
return 0;