Modify error_info access from MACROBLOCK
This CL modifies error_info access from MACROBLOCK structure
to AV1_COMMON, as it does not need to be in thread specific
memory.
Change-Id: I70bed551bccf031e21295d1f1ddbcc723aafa409
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c
index 01f43f9..b1b01bc 100644
--- a/av1/encoder/bitstream.c
+++ b/av1/encoder/bitstream.c
@@ -2817,10 +2817,9 @@
// New function based on HLS R18
static AOM_INLINE void write_uncompressed_header_obu(
- AV1_COMP *cpi, MACROBLOCK *const x, struct aom_write_bit_buffer *saved_wb,
+ AV1_COMP *cpi, MACROBLOCKD *const xd, struct aom_write_bit_buffer *saved_wb,
struct aom_write_bit_buffer *wb) {
AV1_COMMON *const cm = &cpi->common;
- MACROBLOCKD *const xd = &x->e_mbd;
const SequenceHeader *const seq_params = cm->seq_params;
const CommonQuantParams *quant_params = &cm->quant_params;
CurrentFrame *const current_frame = &cm->current_frame;
@@ -2901,7 +2900,7 @@
if (cm->superres_upscaled_width > seq_params->max_frame_width ||
cm->superres_upscaled_height > seq_params->max_frame_height) {
- aom_internal_error(x->error_info, AOM_CODEC_UNSUP_BITSTREAM,
+ aom_internal_error(cm->error, AOM_CODEC_UNSUP_BITSTREAM,
"Frame dimensions are larger than the maximum values");
}
@@ -2940,7 +2939,7 @@
seq_params->decoder_model_info.buffer_removal_time_length);
cm->buffer_removal_times[op_num]++;
if (cm->buffer_removal_times[op_num] == 0) {
- aom_internal_error(x->error_info, AOM_CODEC_UNSUP_BITSTREAM,
+ aom_internal_error(cm->error, AOM_CODEC_UNSUP_BITSTREAM,
"buffer_removal_time overflowed");
}
}
@@ -3027,7 +3026,7 @@
1;
if (delta_frame_id_minus_1 < 0 ||
delta_frame_id_minus_1 >= (1 << diff_len)) {
- aom_internal_error(x->error_info, AOM_CODEC_ERROR,
+ aom_internal_error(cm->error, AOM_CODEC_ERROR,
"Invalid delta_frame_id_minus_1");
}
aom_wb_write_literal(wb, delta_frame_id_minus_1, diff_len);
@@ -3402,12 +3401,12 @@
return size;
}
-static uint32_t write_frame_header_obu(AV1_COMP *cpi, MACROBLOCK *const x,
+static uint32_t write_frame_header_obu(AV1_COMP *cpi, MACROBLOCKD *const xd,
struct aom_write_bit_buffer *saved_wb,
uint8_t *const dst,
int append_trailing_bits) {
struct aom_write_bit_buffer wb = { dst, 0 };
- write_uncompressed_header_obu(cpi, x, saved_wb, &wb);
+ write_uncompressed_header_obu(cpi, xd, saved_wb, &wb);
if (append_trailing_bits) add_trailing_bits(&wb);
return aom_wb_bytes_written(&wb);
}
@@ -3453,7 +3452,7 @@
*data += lst_obu->tg_hdr_size;
const uint32_t frame_header_size =
- write_frame_header_obu(cpi, &cpi->td.mb, saved_wb, *data, 0);
+ write_frame_header_obu(cpi, &cpi->td.mb.e_mbd, saved_wb, *data, 0);
*data += frame_header_size;
lst_obu->frame_header_size = frame_header_size;
// (yunqing) This test ensures the correctness of large scale tile coding.
@@ -3547,7 +3546,6 @@
// even for the last one, unless no tiling is used at all.
*total_size += data_offset;
cpi->td.mb.e_mbd.tile_ctx = &this_tile->tctx;
- cpi->td.mb.error_info = cm->error;
mode_bc.allow_update_cdf = !tiles->large_scale;
mode_bc.allow_update_cdf =
mode_bc.allow_update_cdf && !cm->features.disable_cdf_update;
@@ -3631,7 +3629,7 @@
}
// Writes obu, tile group and uncompressed headers to bitstream.
-void av1_write_obu_tg_tile_headers(AV1_COMP *const cpi, MACROBLOCK *const x,
+void av1_write_obu_tg_tile_headers(AV1_COMP *const cpi, MACROBLOCKD *const xd,
PackBSParams *const pack_bs_params,
const int tile_idx) {
AV1_COMMON *const cm = &cpi->common;
@@ -3651,7 +3649,7 @@
if (cpi->num_tg == 1)
*curr_tg_hdr_size += write_frame_header_obu(
- cpi, x, pack_bs_params->saved_wb,
+ cpi, xd, pack_bs_params->saved_wb,
pack_bs_params->tile_data_curr + *curr_tg_hdr_size, 0);
*curr_tg_hdr_size += write_tile_group_header(
pack_bs_params->tile_data_curr + *curr_tg_hdr_size, tile_idx,
@@ -3778,7 +3776,7 @@
unsigned int *max_tile_size, uint32_t *const obu_header_size,
uint8_t **tile_data_start) {
AV1_COMMON *const cm = &cpi->common;
- MACROBLOCK *const x = &cpi->td.mb;
+ MACROBLOCKD *const xd = &cpi->td.mb.e_mbd;
const CommonTileParams *const tiles = &cm->tiles;
const int tile_cols = tiles->cols;
const int tile_rows = tiles->rows;
@@ -3807,8 +3805,7 @@
if (tile_count == tg_size || tile_idx == (tile_cols * tile_rows - 1))
is_last_tile_in_tg = 1;
- cpi->td.mb.e_mbd.tile_ctx = &this_tile->tctx;
- cpi->td.mb.error_info = cm->error;
+ xd->tile_ctx = &this_tile->tctx;
// PackBSParams stores all parameters required to pack tile and header
// info.
@@ -3826,7 +3823,7 @@
pack_bs_params.total_size = total_size;
if (new_tg)
- av1_write_obu_tg_tile_headers(cpi, x, &pack_bs_params, tile_idx);
+ av1_write_obu_tg_tile_headers(cpi, xd, &pack_bs_params, tile_idx);
av1_pack_tile_info(cpi, &cpi->td, &pack_bs_params);
@@ -4077,7 +4074,7 @@
obu_header_size =
av1_write_obu_header(level_params, &cpi->frame_header_count,
OBU_FRAME_HEADER, obu_extension_header, data);
- obu_payload_size = write_frame_header_obu(cpi, &cpi->td.mb, &saved_wb,
+ obu_payload_size = write_frame_header_obu(cpi, &cpi->td.mb.e_mbd, &saved_wb,
data + obu_header_size, 1);
length_field = av1_obu_memmove(obu_header_size, obu_payload_size, data);
diff --git a/av1/encoder/bitstream.h b/av1/encoder/bitstream.h
index da321d2..dfbe7bf 100644
--- a/av1/encoder/bitstream.h
+++ b/av1/encoder/bitstream.h
@@ -20,7 +20,6 @@
#include "av1/common/blockd.h"
#include "av1/common/enums.h"
#include "av1/encoder/level.h"
-#include "av1/encoder/block.h"
#include "aom_dsp/bitwriter.h"
struct aom_write_bit_buffer;
@@ -123,7 +122,7 @@
struct ThreadData const *td);
void av1_write_obu_tg_tile_headers(struct AV1_COMP *const cpi,
- MACROBLOCK *const x,
+ MACROBLOCKD *const xd,
PackBSParams *const pack_bs_params,
const int tile_idx);
#ifdef __cplusplus
diff --git a/av1/encoder/block.h b/av1/encoder/block.h
index 58add99..fd32458 100644
--- a/av1/encoder/block.h
+++ b/av1/encoder/block.h
@@ -917,8 +917,6 @@
CompoundTypeRdBuffers comp_rd_buffer;
//! Buffer to store convolution during averaging process in compound mode.
CONV_BUF_TYPE *tmp_conv_dst;
- //! Pointer to error_info.
- struct aom_internal_error_info *error_info;
/*! \brief Temporary buffer to hold prediction.
*
diff --git a/av1/encoder/ethread.c b/av1/encoder/ethread.c
index 075ec67..a9e158e 100644
--- a/av1/encoder/ethread.c
+++ b/av1/encoder/ethread.c
@@ -1853,7 +1853,7 @@
struct aom_write_bit_buffer *saved_wb,
PackBSParams *const pack_bs_params_arr,
uint8_t obu_extn_header) {
- MACROBLOCK *const x = &cpi->td.mb;
+ MACROBLOCKD *const xd = &cpi->td.mb.e_mbd;
AV1_COMMON *const cm = &cpi->common;
const CommonTileParams *const tiles = &cm->tiles;
const int num_tiles = tiles->cols * tiles->rows;
@@ -1869,10 +1869,6 @@
int tg_idx = 0;
int tile_count_in_tg = 0;
int new_tg = 1;
- // TODO(Cherma): As header preparation is moved out of multithreading scope,
- // error_info need not be in thread specific memory. Modify error_info access
- // from MACROBLOCK structure to AV1_COMMON in av1_write_obu_tg_tile_headers().
- x->error_info = cm->error;
// Populate pack bitstream params of all tiles.
for (tile_idx = 0; tile_idx < num_tiles; tile_idx++) {
@@ -1928,7 +1924,7 @@
// Write obu, tile group and frame header at first tile in the tile
// group.
- av1_write_obu_tg_tile_headers(cpi, x, pack_bs_params, tile_idx);
+ av1_write_obu_tg_tile_headers(cpi, xd, pack_bs_params, tile_idx);
tile_dst += tg_buf_size[tg_idx];
// Exclude headers from tile group buffer size.