|
|
|
@ -1063,7 +1063,7 @@ static int decode_block(AVCodecContext *avctx, void *tdata, |
|
|
|
|
uint8_t *ptr; |
|
|
|
|
uint32_t data_size; |
|
|
|
|
uint64_t line, col = 0; |
|
|
|
|
uint64_t tileX, tileY, tileLevelX, tileLevelY; |
|
|
|
|
uint64_t tile_x, tile_y, tile_level_x, tile_level_y; |
|
|
|
|
const uint8_t *src; |
|
|
|
|
int axmax = (avctx->width - (s->xmax + 1)) * 2 * s->desc->nb_components; /* nb pixel to add at the right of the datawindow */ |
|
|
|
|
int bxmin = s->xmin * 2 * s->desc->nb_components; /* nb pixel to add at the left of the datawindow */ |
|
|
|
@ -1081,16 +1081,16 @@ static int decode_block(AVCodecContext *avctx, void *tdata, |
|
|
|
|
|
|
|
|
|
src = buf + line_offset + 20; |
|
|
|
|
|
|
|
|
|
tileX = AV_RL32(src - 20); |
|
|
|
|
tileY = AV_RL32(src - 16); |
|
|
|
|
tileLevelX = AV_RL32(src - 12); |
|
|
|
|
tileLevelY = AV_RL32(src - 8); |
|
|
|
|
tile_x = AV_RL32(src - 20); |
|
|
|
|
tile_y = AV_RL32(src - 16); |
|
|
|
|
tile_level_x = AV_RL32(src - 12); |
|
|
|
|
tile_level_y = AV_RL32(src - 8); |
|
|
|
|
|
|
|
|
|
data_size = AV_RL32(src - 4); |
|
|
|
|
if (data_size <= 0 || data_size > buf_size) |
|
|
|
|
return AVERROR_INVALIDDATA; |
|
|
|
|
|
|
|
|
|
if (tileLevelX || tileLevelY) { /* tile level, is not the full res level */ |
|
|
|
|
if (tile_level_x || tile_level_y) { /* tile level, is not the full res level */ |
|
|
|
|
avpriv_report_missing_feature(s->avctx, "Subres tile before full res tile"); |
|
|
|
|
return AVERROR_PATCHWELCOME; |
|
|
|
|
} |
|
|
|
@ -1100,15 +1100,15 @@ static int decode_block(AVCodecContext *avctx, void *tdata, |
|
|
|
|
return AVERROR_PATCHWELCOME; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
line = s->tile_attr.ySize * tileY; |
|
|
|
|
col = s->tile_attr.xSize * tileX; |
|
|
|
|
line = s->tile_attr.ySize * tile_y; |
|
|
|
|
col = s->tile_attr.xSize * tile_x; |
|
|
|
|
|
|
|
|
|
if (line < s->ymin || line > s->ymax || |
|
|
|
|
col < s->xmin || col > s->xmax) |
|
|
|
|
return AVERROR_INVALIDDATA; |
|
|
|
|
|
|
|
|
|
td->ysize = FFMIN(s->tile_attr.ySize, s->ydelta - tileY * s->tile_attr.ySize); |
|
|
|
|
td->xsize = FFMIN(s->tile_attr.xSize, s->xdelta - tileX * s->tile_attr.xSize); |
|
|
|
|
td->ysize = FFMIN(s->tile_attr.ySize, s->ydelta - tile_y * s->tile_attr.ySize); |
|
|
|
|
td->xsize = FFMIN(s->tile_attr.xSize, s->xdelta - tile_x * s->tile_attr.xSize); |
|
|
|
|
|
|
|
|
|
if (col) { /* not the first tile of the line */ |
|
|
|
|
bxmin = 0; /* doesn't add pixel at the left of the datawindow */ |
|
|
|
|