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.