Lines Matching refs:tile

72     uint8_t tile_index;                 // Tile index who refers the tile-part
75 GetByteContext tpg; // bit stream in tile-part
78 /* RMK: For JPEG2000 DCINEMA 3 tile-parts in a tile
87 uint8_t has_ppt; // whether this tile has a ppt marker
134 Jpeg2000Tile *tile;
339 av_log(s->avctx, AV_LOG_ERROR, "Invalid tile dimension %dx%d.\n",
367 // There must be at least a SOT and SOD per tile, their minimum size is 14
368 if (s->numXtiles * (uint64_t)s->numYtiles > INT_MAX/sizeof(*s->tile) ||
375 s->tile = av_calloc(s->numXtiles * s->numYtiles, sizeof(*s->tile));
376 if (!s->tile) {
382 Jpeg2000Tile *tile = s->tile + i;
384 tile->comp = av_mallocz(s->ncomponents * sizeof(*tile->comp));
385 if (!tile->comp)
567 /* get coding parameters for a particular tile or whole image*/
604 * particular tile. */
660 if (s->tile[s->curtileno].tp_idx != 0)
661 return AVERROR_INVALIDDATA; // marker occurs only in first tile part of tile
665 s->tile[s->curtileno].comp[compno].roi_shift = v;
717 /* Get quantization parameters for a particular tile or a whole image. */
735 * on in a particular tile. */
818 /* Get start of tile segment. */
849 if (TPsot >= FF_ARRAY_ELEMS(s->tile[Isot].tile_part)) {
850 avpriv_request_sample(s->avctx, "Too many tile parts");
854 s->tile[Isot].tp_idx = TPsot;
855 tp = s->tile[Isot].tile_part + TPsot;
860 Jpeg2000Tile *tile = s->tile + s->curtileno;
863 memcpy(tile->codsty, s->codsty, s->ncomponents * sizeof(Jpeg2000CodingStyle));
864 memcpy(tile->qntsty, s->qntsty, s->ncomponents * sizeof(Jpeg2000QuantStyle));
865 memcpy(&tile->poc , &s->poc , sizeof(tile->poc));
866 tile->poc.is_default = 1;
882 * Used to know the number of tile parts and lengths.
884 * TODO: The function is not used for tile-parts management, nor anywhere else.
885 * It can be useful to allocate memory for tile parts, before managing the SOT
975 Jpeg2000Tile *tile;
985 tile = &s->tile[s->curtileno];
986 if (tile->tp_idx != 0) {
988 "PPT marker can occur only on first tile part of a tile.\n");
992 tile->has_ppt = 1; // this tile has a ppt marker
994 new = av_realloc(tile->packed_headers,
995 tile->packed_headers_size + n - 3);
997 tile->packed_headers = new;
1000 memset(&tile->packed_headers_stream, 0, sizeof(tile->packed_headers_stream));
1001 memcpy(tile->packed_headers + tile->packed_headers_size,
1003 tile->packed_headers_size += n - 3;
1014 Jpeg2000Tile *tile = s->tile + tileno;
1016 if (!tile->comp)
1019 tile->coord[0][0] = av_clip(tilex * (int64_t)s->tile_width + s->tile_offset_x, s->image_offset_x, s->width);
1020 tile->coord[0][1] = av_clip((tilex + 1) * (int64_t)s->tile_width + s->tile_offset_x, s->image_offset_x, s->width);
1021 tile->coord[1][0] = av_clip(tiley * (int64_t)s->tile_height + s->tile_offset_y, s->image_offset_y, s->height);
1022 tile->coord[1][1] = av_clip((tiley + 1) * (int64_t)s->tile_height + s->tile_offset_y, s->image_offset_y, s->height);
1025 Jpeg2000Component *comp = tile->comp + compno;
1026 Jpeg2000CodingStyle *codsty = tile->codsty + compno;
1027 Jpeg2000QuantStyle *qntsty = tile->qntsty + compno;
1030 comp->coord_o[0][0] = tile->coord[0][0];
1031 comp->coord_o[0][1] = tile->coord[0][1];
1032 comp->coord_o[1][0] = tile->coord[1][0];
1033 comp->coord_o[1][1] = tile->coord[1][1];
1084 static inline void select_header(Jpeg2000DecoderContext *s, Jpeg2000Tile *tile,
1087 s->g = tile->tile_part[*tp_index].header_tpg;
1089 if (*tp_index < FF_ARRAY_ELEMS(tile->tile_part) - 1) {
1090 s->g = tile->tile_part[++(*tp_index)].tpg;
1095 static inline void select_stream(Jpeg2000DecoderContext *s, Jpeg2000Tile *tile,
1098 s->g = tile->tile_part[*tp_index].tpg;
1100 if (*tp_index < FF_ARRAY_ELEMS(tile->tile_part) - 1) {
1101 s->g = tile->tile_part[++(*tp_index)].tpg;
1112 static int jpeg2000_decode_packet(Jpeg2000DecoderContext *s, Jpeg2000Tile *tile, int *tp_index,
1125 select_header(s, tile, tp_index);
1126 else if (tile->has_ppt)
1127 s->g = tile->packed_headers_stream;
1129 select_stream(s, tile, tp_index, codsty);
1241 tile->tile_part[*tp_index].header_tpg = s->g;
1242 select_stream(s, tile, tp_index, codsty);
1243 } else if (tile->has_ppt) {
1244 tile->packed_headers_stream = s->g;
1245 select_stream(s, tile, tp_index, codsty);
1289 tile->tile_part[*tp_index].tpg = s->g;
1300 tile->tile_part[*tp_index].header_tpg = s->g;
1301 select_stream(s, tile, tp_index, codsty);
1302 } else if (tile->has_ppt) {
1303 tile->packed_headers_stream = s->g;
1304 select_stream(s, tile, tp_index, codsty);
1306 tile->tile_part[*tp_index].tpg = s->g;
1310 static int jpeg2000_decode_packets_po_iteration(Jpeg2000DecoderContext *s, Jpeg2000Tile *tile,
1328 Jpeg2000CodingStyle *codsty = tile->codsty + compno;
1329 Jpeg2000QuantStyle *qntsty = tile->qntsty + compno;
1331 Jpeg2000ResLevel *rlevel = tile->comp[compno].reslevel +
1335 if ((ret = jpeg2000_decode_packet(s, tile, tp_index,
1354 Jpeg2000CodingStyle *codsty = tile->codsty + compno;
1355 Jpeg2000QuantStyle *qntsty = tile->qntsty + compno;
1357 Jpeg2000ResLevel *rlevel = tile->comp[compno].reslevel +
1361 if ((ret = jpeg2000_decode_packet(s, tile, tp_index,
1376 Jpeg2000Component *comp = tile->comp + compno;
1377 Jpeg2000CodingStyle *codsty = tile->codsty + compno;
1378 Jpeg2000QuantStyle *qntsty = tile->qntsty + compno;
1398 for (y = tile->coord[1][0]; y < tile->coord[1][1]; y = (y/step_y + 1)*step_y) {
1399 for (x = tile->coord[0][0]; x < tile->coord[0][1]; x = (x/step_x + 1)*step_x) {
1407 if (yc % (1LL << (rlevel->log2_prec_height + reducedresno)) && y != tile->coord[1][0]) //FIXME this is a subset of the check
1410 if (xc % (1LL << (rlevel->log2_prec_width + reducedresno)) && x != tile->coord[0][0]) //FIXME this is a subset of the check
1428 if ((ret = jpeg2000_decode_packet(s, tile, tp_index, codsty, rlevel,
1448 Jpeg2000Component *comp = tile->comp + compno;
1449 Jpeg2000CodingStyle *codsty = tile->codsty + compno;
1461 for (y = tile->coord[1][0]; y < tile->coord[1][1]; y = (y/step_y + 1)*step_y) {
1462 for (x = tile->coord[0][0]; x < tile->coord[0][1]; x = (x/step_x + 1)*step_x) {
1464 Jpeg2000Component *comp = tile->comp + compno;
1465 Jpeg2000CodingStyle *codsty = tile->codsty + compno;
1466 Jpeg2000QuantStyle *qntsty = tile->qntsty + compno;
1478 trx0 = ff_jpeg2000_ceildiv(tile->coord[0][0], (int64_t)s->cdx[compno] << reducedresno);
1479 try0 = ff_jpeg2000_ceildiv(tile->coord[1][0], (int64_t)s->cdy[compno] << reducedresno);
1482 (y == tile->coord[1][0] && ((int64_t)try0 << reducedresno) % (1ULL << (reducedresno + rlevel->log2_prec_height)))))
1486 (x == tile->coord[0][0] && ((int64_t)trx0 << reducedresno) % (1ULL << (reducedresno + rlevel->log2_prec_width)))))
1505 if ((ret = jpeg2000_decode_packet(s, tile, tp_index,
1523 Jpeg2000Component *comp = tile->comp + compno;
1524 Jpeg2000CodingStyle *codsty = tile->codsty + compno;
1540 for (y = tile->coord[1][0]; y < tile->coord[1][1]; y = (y/step_y + 1)*step_y) {
1541 for (x = tile->coord[0][0]; x < tile->coord[0][1]; x = (x/step_x + 1)*step_x) {
1543 Jpeg2000Component *comp = tile->comp + compno;
1544 Jpeg2000CodingStyle *codsty = tile->codsty + compno;
1545 Jpeg2000QuantStyle *qntsty = tile->qntsty + compno;
1556 trx0 = ff_jpeg2000_ceildiv(tile->coord[0][0], (int64_t)s->cdx[compno] << reducedresno);
1557 try0 = ff_jpeg2000_ceildiv(tile->coord[1][0], (int64_t)s->cdy[compno] << reducedresno);
1560 (y == tile->coord[1][0] && ((int64_t)try0 << reducedresno) % (1ULL << (reducedresno + rlevel->log2_prec_height)))))
1564 (x == tile->coord[0][0] && ((int64_t)trx0 << reducedresno) % (1ULL << (reducedresno + rlevel->log2_prec_width)))))
1582 if ((ret = jpeg2000_decode_packet(s, tile, tp_index, codsty, rlevel,
1601 static int jpeg2000_decode_packets(Jpeg2000DecoderContext *s, Jpeg2000Tile *tile)
1608 if (tile->poc.nb_poc) {
1609 for (i=0; i<tile->poc.nb_poc; i++) {
1610 Jpeg2000POCEntry *e = &tile->poc.poc[i];
1611 ret = jpeg2000_decode_packets_po_iteration(s, tile,
1613 FFMIN(e->LYEpoc, tile->codsty[0].nlayers),
1622 ret = jpeg2000_decode_packets_po_iteration(s, tile,
1624 tile->codsty[0].nlayers,
1627 tile->codsty[0].prog_order,
1909 static inline void mct_decode(Jpeg2000DecoderContext *s, Jpeg2000Tile *tile)
1915 if (tile->codsty[0].transform != tile->codsty[i].transform) {
1919 if (memcmp(tile->comp[0].coord, tile->comp[i].coord, sizeof(tile->comp[0].coord))) {
1926 if (tile->codsty[0].transform == FF_DWT97)
1927 src[i] = tile->comp[i].f_data;
1929 src[i] = tile->comp[i].i_data;
1932 csize *= tile->comp[0].coord[i][1] - tile->comp[0].coord[i][0];
1934 s->dsp.mct_decode[tile->codsty[0].transform](src[0], src[1], src[2], csize);
1950 static inline void tile_codeblocks(Jpeg2000DecoderContext *s, Jpeg2000Tile *tile)
1956 /* Loop on tile components */
1958 Jpeg2000Component *comp = tile->comp + compno;
1959 Jpeg2000CodingStyle *codsty = tile->codsty + compno;
2022 static inline void write_frame_ ## D(Jpeg2000DecoderContext * s, Jpeg2000Tile * tile, \
2033 Jpeg2000Component *comp = tile->comp + compno; \
2034 Jpeg2000CodingStyle *codsty = tile->codsty + compno; \
2039 int w = tile->comp[compno].coord[0][1] - \
2041 int h = tile->comp[compno].coord[1][1] - \
2048 y = tile->comp[compno].coord[1][0] - \
2054 x = tile->comp[compno].coord[0][0] - \
2093 Jpeg2000Tile *tile = s->tile + jobnr;
2095 tile_codeblocks(s, tile);
2098 if (tile->codsty[0].mct)
2099 mct_decode(s, tile);
2102 write_frame_8(s, tile, picture, 8);
2109 write_frame_16(s, tile, picture, precision);
2119 if (s->tile[tileno].comp) {
2121 Jpeg2000Component *comp = s->tile[tileno].comp + compno;
2122 Jpeg2000CodingStyle *codsty = s->tile[tileno].codsty + compno;
2126 av_freep(&s->tile[tileno].comp);
2127 av_freep(&s->tile[tileno].packed_headers);
2128 s->tile[tileno].packed_headers_size = 0;
2134 av_freep(&s->tile);
2165 Jpeg2000Tile *tile;
2168 if (!s->tile) {
2177 tile = s->tile + s->curtileno;
2178 tp = tile->tile_part + tile->tp_idx;
2191 if (tile->has_ppt && tile->tp_idx == 0) {
2192 bytestream2_init(&tile->packed_headers_stream, tile->packed_headers, tile->packed_headers_size);
2220 if (!s->tile)
2250 codsty = s->tile[s->curtileno].codsty;
2251 qntsty = s->tile[s->curtileno].qntsty;
2252 poc = &s->tile[s->curtileno].poc;
2253 properties = s->tile[s->curtileno].properties;
2270 // Packet length, tile-part header
2282 // Packed headers, tile-part header
2315 Jpeg2000Tile *tile = s->tile + tileno;
2320 if ((ret = jpeg2000_decode_packets(s, tile)) < 0)