[NORMATIVE] store tile size as tile size - 1
BUG=aomedia:1506
Change-Id: Iaae4c4a48926d27f50cd4e1dd46e1a940555e29a
diff --git a/av1/common/common.h b/av1/common/common.h
index baa8f8d..e8eea7b 100644
--- a/av1/common/common.h
+++ b/av1/common/common.h
@@ -54,6 +54,8 @@
#define AOM_FRAME_MARKER 0x2
+#define AV1_MIN_TILE_SIZE_BYTES 1
+
#ifdef __cplusplus
} // extern "C"
#endif
diff --git a/av1/decoder/decodeframe.c b/av1/decoder/decodeframe.c
index 2a66f40..1874126 100644
--- a/av1/decoder/decodeframe.c
+++ b/av1/decoder/decodeframe.c
@@ -1651,6 +1651,8 @@
copy_data = tile_buffers[row - offset][col].data;
copy_size = tile_buffers[row - offset][col].size;
size = 0;
+ } else {
+ size += AV1_MIN_TILE_SIZE_BYTES;
}
*data += tile_size_bytes;
@@ -1772,7 +1774,7 @@
aom_internal_error(error_info, AOM_CODEC_CORRUPT_FRAME,
"Truncated packet or corrupt tile length");
- size = mem_get_varsize(*data, tile_size_bytes);
+ size = mem_get_varsize(*data, tile_size_bytes) + AV1_MIN_TILE_SIZE_BYTES;
*data += tile_size_bytes;
if (size > (size_t)(data_end - *data))
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c
index c77dc99..d4a5d64 100644
--- a/av1/encoder/bitstream.c
+++ b/av1/encoder/bitstream.c
@@ -3383,6 +3383,7 @@
mem_put_varsize(dst + wpos, tsb, tile_header);
wpos += tsb;
+ tile_header += AV1_MIN_TILE_SIZE_BYTES;
memmove(dst + wpos, dst + rpos, tile_header);
rpos += tile_header;
wpos += tile_header;
@@ -3407,6 +3408,7 @@
tile_size = mem_get_le32(dst + rpos);
rpos += 4;
mem_put_varsize(dst + wpos, tsb, tile_size);
+ tile_size += AV1_MIN_TILE_SIZE_BYTES;
wpos += tsb;
}
@@ -3671,7 +3673,7 @@
if (have_tiles) {
// tile header: size of this tile, or copy offset
- uint32_t tile_header = tile_size;
+ uint32_t tile_header = tile_size - AV1_MIN_TILE_SIZE_BYTES;
const int tile_copy_mode =
((AOMMAX(cm->tile_width, cm->tile_height) << MI_SIZE_LOG2) <= 256)
? 1
@@ -3824,7 +3826,7 @@
aom_stop_encode(&mode_bc);
#endif
tile_size = mode_bc.pos;
- assert(tile_size > 0);
+ assert(tile_size >= AV1_MIN_TILE_SIZE_BYTES);
#if CONFIG_TRAILING_BITS
// similar to add_trailing_bits, but specific to end of last tile
@@ -3854,7 +3856,7 @@
if (!is_last_tile_in_tg) {
// size of this tile
- mem_put_le32(buf->data, tile_size);
+ mem_put_le32(buf->data, tile_size - AV1_MIN_TILE_SIZE_BYTES);
} else {
// write current tile group size
const uint32_t obu_payload_size = curr_tg_data_size - obu_header_size;