提交 a6e4ac40 编写于 作者: K Kostya Shishkov

indeo: track tile macroblock size

上级 fe7a37c3
...@@ -287,6 +287,7 @@ av_cold int ff_ivi_init_tiles(IVIPlaneDesc *planes, int tile_width, int tile_hei ...@@ -287,6 +287,7 @@ av_cold int ff_ivi_init_tiles(IVIPlaneDesc *planes, int tile_width, int tile_hei
for (x = 0; x < band->width; x += t_width) { for (x = 0; x < band->width; x += t_width) {
tile->xpos = x; tile->xpos = x;
tile->ypos = y; tile->ypos = y;
tile->mb_size = band->mb_size;
tile->width = FFMIN(band->width - x, t_width); tile->width = FFMIN(band->width - x, t_width);
tile->height = FFMIN(band->height - y, t_height); tile->height = FFMIN(band->height - y, t_height);
tile->is_empty = tile->data_size = 0; tile->is_empty = tile->data_size = 0;
...@@ -670,6 +671,11 @@ static int decode_band(IVI45DecContext *ctx, int plane_num, ...@@ -670,6 +671,11 @@ static int decode_band(IVI45DecContext *ctx, int plane_num,
for (t = 0; t < band->num_tiles; t++) { for (t = 0; t < band->num_tiles; t++) {
tile = &band->tiles[t]; tile = &band->tiles[t];
if (tile->mb_size != band->mb_size) {
av_log(avctx, AV_LOG_ERROR, "MB sizes mismatch: %d vs. %d\n",
band->mb_size, tile->mb_size);
return AVERROR_INVALIDDATA;
}
tile->is_empty = get_bits1(&ctx->gb); tile->is_empty = get_bits1(&ctx->gb);
if (tile->is_empty) { if (tile->is_empty) {
ff_ivi_process_empty_tile(avctx, band, tile, ff_ivi_process_empty_tile(avctx, band, tile,
......
...@@ -118,6 +118,7 @@ typedef struct { ...@@ -118,6 +118,7 @@ typedef struct {
int ypos; int ypos;
int width; int width;
int height; int height;
int mb_size;
int is_empty; ///< = 1 if this tile doesn't contain any data int is_empty; ///< = 1 if this tile doesn't contain any data
int data_size; ///< size of the data in bytes int data_size; ///< size of the data in bytes
int num_MBs; ///< number of macroblocks in this tile int num_MBs; ///< number of macroblocks in this tile
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册