comp->reslevel[reslevelno-1].coord[1][0];
}
- cblk->zero = 0;
cblk->lblock = 3;
cblk->length = 0;
- memset(cblk->lengthinc, 0, sizeof(cblk->lengthinc));
cblk->npasses = 0;
}
if (!reslevel->band)
return AVERROR(ENOMEM);
+ if (reslevel->num_precincts_x * (uint64_t)reslevel->num_precincts_y * reslevel->nbands > avctx->max_pixels / sizeof(*reslevel->band->prec))
+ return AVERROR(ENOMEM);
+
for (bandno = 0; bandno < reslevel->nbands; bandno++, gbandno++) {
ret = init_band(avctx, reslevel,
comp, codsty, qntsty,
for (precno = 0; precno < reslevel->num_precincts_x * reslevel->num_precincts_y; precno++) {
if (band->prec) {
Jpeg2000Prec *prec = band->prec + precno;
+ int nb_code_blocks = prec->nb_codeblocks_height * prec->nb_codeblocks_width;
+
av_freep(&prec->zerobits);
av_freep(&prec->cblkincl);
- av_freep(&prec->cblk);
+ if (prec->cblk) {
+ int cblkno;
+ for (cblkno = 0; cblkno < nb_code_blocks; cblkno ++) {
+ Jpeg2000Cblk *cblk = &prec->cblk[cblkno];
+ av_freep(&cblk->data);
+ av_freep(&cblk->passes);
+ av_freep(&cblk->lengthinc);
+ av_freep(&cblk->data_start);
+ }
+ av_freep(&prec->cblk);
+ }
}
}