| 273 | } |
| 274 | |
| 275 | static int init_prec(AVCodecContext *avctx, |
| 276 | Jpeg2000Band *band, |
| 277 | Jpeg2000ResLevel *reslevel, |
| 278 | Jpeg2000Component *comp, |
| 279 | Jpeg2000CodingStyle *codsty, |
| 280 | int precno, int bandno, int reslevelno, |
| 281 | int log2_band_prec_width, |
| 282 | int log2_band_prec_height) |
| 283 | { |
| 284 | Jpeg2000Prec *prec = band->prec + precno; |
| 285 | int nb_codeblocks, cblkno; |
| 286 | |
| 287 | prec->decoded_layers = 0; |
| 288 | |
| 289 | /* TODO: Explain formula for JPEG200 DCINEMA. */ |
| 290 | /* TODO: Verify with previous count of codeblocks per band */ |
| 291 | |
| 292 | /* Compute P_x0 */ |
| 293 | prec->coord[0][0] = ((reslevel->coord[0][0] >> reslevel->log2_prec_width) + precno % reslevel->num_precincts_x) * |
| 294 | (1 << log2_band_prec_width); |
| 295 | |
| 296 | /* Compute P_y0 */ |
| 297 | prec->coord[1][0] = ((reslevel->coord[1][0] >> reslevel->log2_prec_height) + precno / reslevel->num_precincts_x) * |
| 298 | (1 << log2_band_prec_height); |
| 299 | |
| 300 | /* Compute P_x1 */ |
| 301 | prec->coord[0][1] = prec->coord[0][0] + |
| 302 | (1 << log2_band_prec_width); |
| 303 | prec->coord[0][0] = FFMAX(prec->coord[0][0], band->coord[0][0]); |
| 304 | prec->coord[0][1] = FFMIN(prec->coord[0][1], band->coord[0][1]); |
| 305 | |
| 306 | /* Compute P_y1 */ |
| 307 | prec->coord[1][1] = prec->coord[1][0] + |
| 308 | (1 << log2_band_prec_height); |
| 309 | prec->coord[1][0] = FFMAX(prec->coord[1][0], band->coord[1][0]); |
| 310 | prec->coord[1][1] = FFMIN(prec->coord[1][1], band->coord[1][1]); |
| 311 | |
| 312 | prec->nb_codeblocks_width = |
| 313 | ff_jpeg2000_ceildivpow2(prec->coord[0][1], |
| 314 | band->log2_cblk_width) |
| 315 | - (prec->coord[0][0] >> band->log2_cblk_width); |
| 316 | prec->nb_codeblocks_height = |
| 317 | ff_jpeg2000_ceildivpow2(prec->coord[1][1], |
| 318 | band->log2_cblk_height) |
| 319 | - (prec->coord[1][0] >> band->log2_cblk_height); |
| 320 | |
| 321 | |
| 322 | /* Tag trees initialization */ |
| 323 | prec->cblkincl = |
| 324 | ff_jpeg2000_tag_tree_init(prec->nb_codeblocks_width, |
| 325 | prec->nb_codeblocks_height); |
| 326 | if (!prec->cblkincl) |
| 327 | return AVERROR(ENOMEM); |
| 328 | |
| 329 | prec->zerobits = |
| 330 | ff_jpeg2000_tag_tree_init(prec->nb_codeblocks_width, |
| 331 | prec->nb_codeblocks_height); |
| 332 | if (!prec->zerobits) |
no test coverage detected