Move sb_size to sequence header
sb_size, mib_size and mib_size_log2 have been moved from the AV1_COMMON struct
to the SequenceHeader struct, as they are sequence-level parameters. sb_size is
now written to and read from the end of the sequence header.
BUG=aomedia:996
Change-Id: I9d450518a1b898677976acd80088b8ea9ee9d7ce
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c
index a0a44f0..e240c02 100644
--- a/av1/encoder/bitstream.c
+++ b/av1/encoder/bitstream.c
@@ -1128,8 +1128,8 @@
const MB_MODE_INFO *mbmi =
&cm->mi_grid_visible[(mi_row & m) * cm->mi_stride + (mi_col & m)]->mbmi;
// Initialise when at top left part of the superblock
- if (!(mi_row & (cm->mib_size - 1)) &&
- !(mi_col & (cm->mib_size - 1))) { // Top left?
+ if (!(mi_row & (cm->seq_params.mib_size - 1)) &&
+ !(mi_col & (cm->seq_params.mib_size - 1))) { // Top left?
#if CONFIG_EXT_PARTITION
cm->cdef_preset[0] = cm->cdef_preset[1] = cm->cdef_preset[2] =
cm->cdef_preset[3] = -1;
@@ -1141,7 +1141,7 @@
// Emit CDEF param at first non-skip coding block
#if CONFIG_EXT_PARTITION
const int mask = 1 << (6 - MI_SIZE_LOG2);
- const int index = cm->sb_size == BLOCK_128X128
+ const int index = cm->seq_params.sb_size == BLOCK_128X128
? !!(mi_col & mask) + 2 * !!(mi_row & mask)
: 0;
if (cm->cdef_preset[index] == -1 && !skip) {
@@ -1257,9 +1257,11 @@
write_cdef(cm, w, skip, mi_col, mi_row);
if (cm->delta_q_present_flag) {
- int super_block_upper_left = ((mi_row & (cm->mib_size - 1)) == 0) &&
- ((mi_col & (cm->mib_size - 1)) == 0);
- if ((bsize != cm->sb_size || skip == 0) && super_block_upper_left) {
+ int super_block_upper_left =
+ ((mi_row & (cm->seq_params.mib_size - 1)) == 0) &&
+ ((mi_col & (cm->seq_params.mib_size - 1)) == 0);
+ if ((bsize != cm->seq_params.sb_size || skip == 0) &&
+ super_block_upper_left) {
assert(mbmi->current_q_index > 0);
int reduced_delta_qindex =
(mbmi->current_q_index - xd->prev_qindex) / cm->delta_q_res;
@@ -1575,9 +1577,11 @@
write_cdef(cm, w, skip, mi_col, mi_row);
if (cm->delta_q_present_flag) {
- int super_block_upper_left = ((mi_row & (cm->mib_size - 1)) == 0) &&
- ((mi_col & (cm->mib_size - 1)) == 0);
- if ((bsize != cm->sb_size || skip == 0) && super_block_upper_left) {
+ int super_block_upper_left =
+ ((mi_row & (cm->seq_params.mib_size - 1)) == 0) &&
+ ((mi_col & (cm->seq_params.mib_size - 1)) == 0);
+ if ((bsize != cm->seq_params.sb_size || skip == 0) &&
+ super_block_upper_left) {
assert(mbmi->current_q_index > 0);
int reduced_delta_qindex =
(mbmi->current_q_index - xd->prev_qindex) / cm->delta_q_res;
@@ -1780,7 +1784,7 @@
xd->mi = cm->mi_grid_visible + (mi_row * cm->mi_stride + mi_col);
m = xd->mi[0];
- assert(m->mbmi.sb_type <= cm->sb_size ||
+ assert(m->mbmi.sb_type <= cm->seq_params.sb_size ||
(m->mbmi.sb_type >= BLOCK_SIZES && m->mbmi.sb_type < BLOCK_SIZES_ALL));
bh = mi_size_high[m->mbmi.sb_type];
@@ -1894,7 +1898,7 @@
#endif
xd->mi = cm->mi_grid_visible + mi_offset;
- assert(mbmi->sb_type <= cm->sb_size ||
+ assert(mbmi->sb_type <= cm->seq_params.sb_size ||
(mbmi->sb_type >= BLOCK_SIZES && mbmi->sb_type < BLOCK_SIZES_ALL));
bh = mi_size_high[mbmi->sb_type];
@@ -2172,11 +2176,14 @@
#endif // CONFIG_EXT_DELTA_Q
}
- for (mi_row = mi_row_start; mi_row < mi_row_end; mi_row += cm->mib_size) {
+ for (mi_row = mi_row_start; mi_row < mi_row_end;
+ mi_row += cm->seq_params.mib_size) {
av1_zero_left_context(xd);
- for (mi_col = mi_col_start; mi_col < mi_col_end; mi_col += cm->mib_size) {
- write_modes_sb(cpi, tile, w, tok, tok_end, mi_row, mi_col, cm->sb_size);
+ for (mi_col = mi_col_start; mi_col < mi_col_end;
+ mi_col += cm->seq_params.mib_size) {
+ write_modes_sb(cpi, tile, w, tok, tok_end, mi_row, mi_col,
+ cm->seq_params.sb_size);
}
}
}
@@ -2568,10 +2575,10 @@
static void write_tile_info_max_tile(const AV1_COMMON *const cm,
struct aom_write_bit_buffer *wb) {
- int width_mi = ALIGN_POWER_OF_TWO(cm->mi_cols, cm->mib_size_log2);
- int height_mi = ALIGN_POWER_OF_TWO(cm->mi_rows, cm->mib_size_log2);
- int width_sb = width_mi >> cm->mib_size_log2;
- int height_sb = height_mi >> cm->mib_size_log2;
+ int width_mi = ALIGN_POWER_OF_TWO(cm->mi_cols, cm->seq_params.mib_size_log2);
+ int height_mi = ALIGN_POWER_OF_TWO(cm->mi_rows, cm->seq_params.mib_size_log2);
+ int width_sb = width_mi >> cm->seq_params.mib_size_log2;
+ int height_sb = height_mi >> cm->seq_params.mib_size_log2;
int size_sb, i;
aom_wb_write_bit(wb, cm->uniform_tile_spacing_flag);
@@ -2622,18 +2629,18 @@
#if CONFIG_EXT_TILE
if (cm->large_scale_tile) {
const int tile_width =
- ALIGN_POWER_OF_TWO(cm->tile_width, cm->mib_size_log2) >>
- cm->mib_size_log2;
+ ALIGN_POWER_OF_TWO(cm->tile_width, cm->seq_params.mib_size_log2) >>
+ cm->seq_params.mib_size_log2;
const int tile_height =
- ALIGN_POWER_OF_TWO(cm->tile_height, cm->mib_size_log2) >>
- cm->mib_size_log2;
+ ALIGN_POWER_OF_TWO(cm->tile_height, cm->seq_params.mib_size_log2) >>
+ cm->seq_params.mib_size_log2;
assert(tile_width > 0);
assert(tile_height > 0);
// Write the tile sizes
#if CONFIG_EXT_PARTITION
- if (cm->sb_size == BLOCK_128X128) {
+ if (cm->seq_params.sb_size == BLOCK_128X128) {
assert(tile_width <= 32);
assert(tile_height <= 32);
aom_wb_write_literal(wb, tile_width - 1, 5);
@@ -3389,6 +3396,21 @@
}
#endif // CONFIG_FILM_GRAIN
+static void write_sb_size(SequenceHeader *seq_params,
+ struct aom_write_bit_buffer *wb) {
+ (void)seq_params;
+ (void)wb;
+ assert(seq_params->mib_size == mi_size_wide[seq_params->sb_size]);
+ assert(seq_params->mib_size == 1 << seq_params->mib_size_log2);
+#if CONFIG_EXT_PARTITION
+ assert(seq_params->sb_size == BLOCK_128X128 ||
+ seq_params->sb_size == BLOCK_64X64);
+ aom_wb_write_bit(wb, seq_params->sb_size == BLOCK_128X128 ? 1 : 0);
+#else
+ assert(seq_params->sb_size == BLOCK_64X64);
+#endif // CONFIG_EXT_PARTITION
+}
+
#if CONFIG_REFERENCE_BUFFER || CONFIG_OBU
void write_sequence_header(AV1_COMP *cpi, struct aom_write_bit_buffer *wb) {
AV1_COMMON *const cm = &cpi->common;
@@ -3430,23 +3452,11 @@
wb, seq_params->frame_id_length - seq_params->delta_frame_id_length - 1,
3);
}
+
+ write_sb_size(seq_params, wb);
}
#endif // CONFIG_REFERENCE_BUFFER || CONFIG_OBU
-static void write_sb_size(const AV1_COMMON *cm,
- struct aom_write_bit_buffer *wb) {
- (void)cm;
- (void)wb;
- assert(cm->mib_size == mi_size_wide[cm->sb_size]);
- assert(cm->mib_size == 1 << cm->mib_size_log2);
-#if CONFIG_EXT_PARTITION
- assert(cm->sb_size == BLOCK_128X128 || cm->sb_size == BLOCK_64X64);
- aom_wb_write_bit(wb, cm->sb_size == BLOCK_128X128 ? 1 : 0);
-#else
- assert(cm->sb_size == BLOCK_64X64);
-#endif // CONFIG_EXT_PARTITION
-}
-
static void write_compound_tools(const AV1_COMMON *cm,
struct aom_write_bit_buffer *wb) {
if (!frame_is_intra_only(cm) && cm->reference_mode != COMPOUND_REFERENCE) {
@@ -3663,8 +3673,6 @@
#else
write_frame_size(cm, wb);
#endif
- write_sb_size(cm, wb);
-
aom_wb_write_bit(wb, cm->allow_screen_content_tools);
#if CONFIG_INTRABC
if (cm->allow_screen_content_tools) aom_wb_write_bit(wb, cm->allow_intrabc);
@@ -3711,7 +3719,6 @@
#else
write_frame_size(cm, wb);
#endif
- write_sb_size(cm, wb);
aom_wb_write_bit(wb, cm->allow_screen_content_tools);
#if CONFIG_INTRABC
if (cm->allow_screen_content_tools)
@@ -4000,7 +4007,6 @@
#else
write_frame_size(cm, wb);
#endif
- write_sb_size(cm, wb);
aom_wb_write_bit(wb, cm->allow_screen_content_tools);
#if CONFIG_INTRABC
if (cm->allow_screen_content_tools) aom_wb_write_bit(wb, cm->allow_intrabc);