mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-10-11 17:57:32 +09:00
Update libaom to rev b25610052a1398032320008d69b51d2da94f5928
This commit is contained in:
parent
8493557d20
commit
3d109dd4fc
240 changed files with 16977 additions and 6139 deletions
232
third_party/aom/av1/encoder/bitstream.c
vendored
232
third_party/aom/av1/encoder/bitstream.c
vendored
|
|
@ -769,7 +769,7 @@ static void write_palette_mode_info(const AV1_COMMON *cm, const MACROBLOCKD *xd,
|
|||
aom_write_symbol(w, n - PALETTE_MIN_SIZE,
|
||||
xd->tile_ctx->palette_y_size_cdf[bsize_ctx],
|
||||
PALETTE_SIZES);
|
||||
write_palette_colors_y(xd, pmi, cm->bit_depth, w);
|
||||
write_palette_colors_y(xd, pmi, cm->seq_params.bit_depth, w);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -786,7 +786,7 @@ static void write_palette_mode_info(const AV1_COMMON *cm, const MACROBLOCKD *xd,
|
|||
aom_write_symbol(w, n - PALETTE_MIN_SIZE,
|
||||
xd->tile_ctx->palette_uv_size_cdf[bsize_ctx],
|
||||
PALETTE_SIZES);
|
||||
write_palette_colors_uv(xd, pmi, cm->bit_depth, w);
|
||||
write_palette_colors_uv(xd, pmi, cm->seq_params.bit_depth, w);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1421,8 +1421,8 @@ static void write_inter_txb_coeff(AV1_COMMON *const cm, MACROBLOCK *const x,
|
|||
for (blk_col = col >> pd->subsampling_x; blk_col < unit_width;
|
||||
blk_col += bkw) {
|
||||
pack_txb_tokens(w, cm, x, tok, tok_end, xd, mbmi, plane, plane_bsize,
|
||||
cm->bit_depth, *block, blk_row, blk_col, max_tx_size,
|
||||
token_stats);
|
||||
cm->seq_params.bit_depth, *block, blk_row, blk_col,
|
||||
max_tx_size, token_stats);
|
||||
*block += step;
|
||||
}
|
||||
}
|
||||
|
|
@ -1612,14 +1612,13 @@ static void write_modes_sb(AV1_COMP *const cpi, const TileInfo *const tile,
|
|||
|
||||
const int num_planes = av1_num_planes(cm);
|
||||
for (int plane = 0; plane < num_planes; ++plane) {
|
||||
int rcol0, rcol1, rrow0, rrow1, tile_tl_idx;
|
||||
int rcol0, rcol1, rrow0, rrow1;
|
||||
if (av1_loop_restoration_corners_in_sb(cm, plane, mi_row, mi_col, bsize,
|
||||
&rcol0, &rcol1, &rrow0, &rrow1,
|
||||
&tile_tl_idx)) {
|
||||
&rcol0, &rcol1, &rrow0, &rrow1)) {
|
||||
const int rstride = cm->rst_info[plane].horz_units_per_tile;
|
||||
for (int rrow = rrow0; rrow < rrow1; ++rrow) {
|
||||
for (int rcol = rcol0; rcol < rcol1; ++rcol) {
|
||||
const int runit_idx = tile_tl_idx + rcol + rrow * rstride;
|
||||
const int runit_idx = rcol + rrow * rstride;
|
||||
const RestorationUnitInfo *rui =
|
||||
&cm->rst_info[plane].unit_info[runit_idx];
|
||||
loop_restoration_write_sb_coeffs(cm, xd, rui, w, plane,
|
||||
|
|
@ -1705,7 +1704,7 @@ static void write_modes(AV1_COMP *const cpi, const TileInfo *const tile,
|
|||
const int mi_col_end = tile->mi_col_end;
|
||||
int mi_row, mi_col;
|
||||
|
||||
av1_zero_above_context(cm, mi_col_start, mi_col_end, tile->tile_row);
|
||||
av1_zero_above_context(cm, xd, mi_col_start, mi_col_end, tile->tile_row);
|
||||
av1_init_above_context(cm, xd, tile->tile_row);
|
||||
|
||||
if (cpi->common.delta_q_present_flag) {
|
||||
|
|
@ -1779,7 +1778,7 @@ static void encode_restoration_mode(AV1_COMMON *cm,
|
|||
}
|
||||
|
||||
if (num_planes > 1) {
|
||||
int s = AOMMIN(cm->subsampling_x, cm->subsampling_y);
|
||||
int s = AOMMIN(cm->seq_params.subsampling_x, cm->seq_params.subsampling_y);
|
||||
if (s && !chroma_none) {
|
||||
aom_wb_write_bit(wb, cm->rst_info[1].restoration_unit_size !=
|
||||
cm->rst_info[0].restoration_unit_size);
|
||||
|
|
@ -2020,7 +2019,7 @@ static void encode_quantization(const AV1_COMMON *const cm,
|
|||
if (num_planes > 1) {
|
||||
int diff_uv_delta = (cm->u_dc_delta_q != cm->v_dc_delta_q) ||
|
||||
(cm->u_ac_delta_q != cm->v_ac_delta_q);
|
||||
if (cm->separate_uv_delta_q) aom_wb_write_bit(wb, diff_uv_delta);
|
||||
if (cm->seq_params.separate_uv_delta_q) aom_wb_write_bit(wb, diff_uv_delta);
|
||||
write_delta_q(wb, cm->u_dc_delta_q);
|
||||
write_delta_q(wb, cm->u_ac_delta_q);
|
||||
if (diff_uv_delta) {
|
||||
|
|
@ -2032,7 +2031,7 @@ static void encode_quantization(const AV1_COMMON *const cm,
|
|||
if (cm->using_qmatrix) {
|
||||
aom_wb_write_literal(wb, cm->qm_y, QM_LEVEL_BITS);
|
||||
aom_wb_write_literal(wb, cm->qm_u, QM_LEVEL_BITS);
|
||||
if (!cm->separate_uv_delta_q)
|
||||
if (!cm->seq_params.separate_uv_delta_q)
|
||||
assert(cm->qm_u == cm->qm_v);
|
||||
else
|
||||
aom_wb_write_literal(wb, cm->qm_v, QM_LEVEL_BITS);
|
||||
|
|
@ -2240,7 +2239,8 @@ static int get_refresh_mask_gf16(AV1_COMP *cpi) {
|
|||
#endif // USE_GF16_MULTI_LAYER
|
||||
|
||||
static int get_refresh_mask(AV1_COMP *cpi) {
|
||||
if (cpi->common.frame_type == KEY_FRAME || frame_is_sframe(&cpi->common))
|
||||
if ((cpi->common.frame_type == KEY_FRAME && cpi->common.show_frame) ||
|
||||
frame_is_sframe(&cpi->common))
|
||||
return 0xFF;
|
||||
|
||||
int refresh_mask = 0;
|
||||
|
|
@ -2258,9 +2258,15 @@ static int get_refresh_mask(AV1_COMP *cpi) {
|
|||
// LAST3_FRAME.
|
||||
refresh_mask |=
|
||||
(cpi->refresh_last_frame << cpi->ref_fb_idx[LAST_REF_FRAMES - 1]);
|
||||
|
||||
#if USE_SYMM_MULTI_LAYER
|
||||
refresh_mask |=
|
||||
(cpi->new_bwdref_update_rule == 1)
|
||||
? (cpi->refresh_bwd_ref_frame << cpi->ref_fb_idx[EXTREF_FRAME - 1])
|
||||
: (cpi->refresh_bwd_ref_frame << cpi->ref_fb_idx[BWDREF_FRAME - 1]);
|
||||
#else
|
||||
refresh_mask |=
|
||||
(cpi->refresh_bwd_ref_frame << cpi->ref_fb_idx[BWDREF_FRAME - 1]);
|
||||
#endif
|
||||
refresh_mask |=
|
||||
(cpi->refresh_alt2_ref_frame << cpi->ref_fb_idx[ALTREF2_FRAME - 1]);
|
||||
|
||||
|
|
@ -2419,80 +2425,82 @@ static void write_profile(BITSTREAM_PROFILE profile,
|
|||
aom_wb_write_literal(wb, profile, PROFILE_BITS);
|
||||
}
|
||||
|
||||
static void write_bitdepth(AV1_COMMON *const cm,
|
||||
static void write_bitdepth(const SequenceHeader *const seq_params,
|
||||
struct aom_write_bit_buffer *wb) {
|
||||
// Profile 0/1: [0] for 8 bit, [1] 10-bit
|
||||
// Profile 2: [0] for 8 bit, [10] 10-bit, [11] - 12-bit
|
||||
aom_wb_write_bit(wb, cm->bit_depth == AOM_BITS_8 ? 0 : 1);
|
||||
if (cm->profile == PROFILE_2 && cm->bit_depth != AOM_BITS_8) {
|
||||
aom_wb_write_bit(wb, cm->bit_depth == AOM_BITS_10 ? 0 : 1);
|
||||
aom_wb_write_bit(wb, seq_params->bit_depth == AOM_BITS_8 ? 0 : 1);
|
||||
if (seq_params->profile == PROFILE_2 && seq_params->bit_depth != AOM_BITS_8) {
|
||||
aom_wb_write_bit(wb, seq_params->bit_depth == AOM_BITS_10 ? 0 : 1);
|
||||
}
|
||||
}
|
||||
|
||||
static void write_color_config(AV1_COMMON *const cm,
|
||||
static void write_color_config(const SequenceHeader *const seq_params,
|
||||
struct aom_write_bit_buffer *wb) {
|
||||
write_bitdepth(cm, wb);
|
||||
const int is_monochrome = cm->seq_params.monochrome;
|
||||
write_bitdepth(seq_params, wb);
|
||||
const int is_monochrome = seq_params->monochrome;
|
||||
// monochrome bit
|
||||
if (cm->profile != PROFILE_1)
|
||||
if (seq_params->profile != PROFILE_1)
|
||||
aom_wb_write_bit(wb, is_monochrome);
|
||||
else
|
||||
assert(!is_monochrome);
|
||||
if (cm->color_primaries == AOM_CICP_CP_UNSPECIFIED &&
|
||||
cm->transfer_characteristics == AOM_CICP_TC_UNSPECIFIED &&
|
||||
cm->matrix_coefficients == AOM_CICP_MC_UNSPECIFIED) {
|
||||
if (seq_params->color_primaries == AOM_CICP_CP_UNSPECIFIED &&
|
||||
seq_params->transfer_characteristics == AOM_CICP_TC_UNSPECIFIED &&
|
||||
seq_params->matrix_coefficients == AOM_CICP_MC_UNSPECIFIED) {
|
||||
aom_wb_write_bit(wb, 0); // No color description present
|
||||
} else {
|
||||
aom_wb_write_bit(wb, 1); // Color description present
|
||||
aom_wb_write_literal(wb, cm->color_primaries, 8);
|
||||
aom_wb_write_literal(wb, cm->transfer_characteristics, 8);
|
||||
aom_wb_write_literal(wb, cm->matrix_coefficients, 8);
|
||||
aom_wb_write_literal(wb, seq_params->color_primaries, 8);
|
||||
aom_wb_write_literal(wb, seq_params->transfer_characteristics, 8);
|
||||
aom_wb_write_literal(wb, seq_params->matrix_coefficients, 8);
|
||||
}
|
||||
if (is_monochrome) {
|
||||
// 0: [16, 235] (i.e. xvYCC), 1: [0, 255]
|
||||
aom_wb_write_bit(wb, cm->color_range);
|
||||
aom_wb_write_bit(wb, seq_params->color_range);
|
||||
return;
|
||||
}
|
||||
if (cm->color_primaries == AOM_CICP_CP_BT_709 &&
|
||||
cm->transfer_characteristics == AOM_CICP_TC_SRGB &&
|
||||
cm->matrix_coefficients ==
|
||||
if (seq_params->color_primaries == AOM_CICP_CP_BT_709 &&
|
||||
seq_params->transfer_characteristics == AOM_CICP_TC_SRGB &&
|
||||
seq_params->matrix_coefficients ==
|
||||
AOM_CICP_MC_IDENTITY) { // it would be better to remove this
|
||||
// dependency too
|
||||
assert(cm->subsampling_x == 0 && cm->subsampling_y == 0);
|
||||
assert(cm->profile == PROFILE_1 ||
|
||||
(cm->profile == PROFILE_2 && cm->bit_depth == AOM_BITS_12));
|
||||
assert(seq_params->subsampling_x == 0 && seq_params->subsampling_y == 0);
|
||||
assert(seq_params->profile == PROFILE_1 ||
|
||||
(seq_params->profile == PROFILE_2 &&
|
||||
seq_params->bit_depth == AOM_BITS_12));
|
||||
} else {
|
||||
// 0: [16, 235] (i.e. xvYCC), 1: [0, 255]
|
||||
aom_wb_write_bit(wb, cm->color_range);
|
||||
if (cm->profile == PROFILE_0) {
|
||||
aom_wb_write_bit(wb, seq_params->color_range);
|
||||
if (seq_params->profile == PROFILE_0) {
|
||||
// 420 only
|
||||
assert(cm->subsampling_x == 1 && cm->subsampling_y == 1);
|
||||
} else if (cm->profile == PROFILE_1) {
|
||||
assert(seq_params->subsampling_x == 1 && seq_params->subsampling_y == 1);
|
||||
} else if (seq_params->profile == PROFILE_1) {
|
||||
// 444 only
|
||||
assert(cm->subsampling_x == 0 && cm->subsampling_y == 0);
|
||||
} else if (cm->profile == PROFILE_2) {
|
||||
if (cm->bit_depth == AOM_BITS_12) {
|
||||
assert(seq_params->subsampling_x == 0 && seq_params->subsampling_y == 0);
|
||||
} else if (seq_params->profile == PROFILE_2) {
|
||||
if (seq_params->bit_depth == AOM_BITS_12) {
|
||||
// 420, 444 or 422
|
||||
aom_wb_write_bit(wb, cm->subsampling_x);
|
||||
if (cm->subsampling_x == 0) {
|
||||
assert(cm->subsampling_y == 0 &&
|
||||
aom_wb_write_bit(wb, seq_params->subsampling_x);
|
||||
if (seq_params->subsampling_x == 0) {
|
||||
assert(seq_params->subsampling_y == 0 &&
|
||||
"4:4:0 subsampling not allowed in AV1");
|
||||
} else {
|
||||
aom_wb_write_bit(wb, cm->subsampling_y);
|
||||
aom_wb_write_bit(wb, seq_params->subsampling_y);
|
||||
}
|
||||
} else {
|
||||
// 422 only
|
||||
assert(cm->subsampling_x == 1 && cm->subsampling_y == 0);
|
||||
assert(seq_params->subsampling_x == 1 &&
|
||||
seq_params->subsampling_y == 0);
|
||||
}
|
||||
}
|
||||
if (cm->matrix_coefficients == AOM_CICP_MC_IDENTITY) {
|
||||
assert(cm->subsampling_x == 0 && cm->subsampling_y == 0);
|
||||
if (seq_params->matrix_coefficients == AOM_CICP_MC_IDENTITY) {
|
||||
assert(seq_params->subsampling_x == 0 && seq_params->subsampling_y == 0);
|
||||
}
|
||||
if (cm->subsampling_x == 1 && cm->subsampling_y == 1) {
|
||||
aom_wb_write_literal(wb, cm->chroma_sample_position, 2);
|
||||
if (seq_params->subsampling_x == 1 && seq_params->subsampling_y == 1) {
|
||||
aom_wb_write_literal(wb, seq_params->chroma_sample_position, 2);
|
||||
}
|
||||
}
|
||||
aom_wb_write_bit(wb, cm->separate_uv_delta_q);
|
||||
aom_wb_write_bit(wb, seq_params->separate_uv_delta_q);
|
||||
}
|
||||
|
||||
static void write_timing_info_header(AV1_COMMON *const cm,
|
||||
|
|
@ -2517,8 +2525,8 @@ static void write_decoder_model_info(AV1_COMMON *const cm,
|
|||
wb, cm->buffer_model.encoder_decoder_buffer_delay_length - 1, 5);
|
||||
aom_wb_write_unsigned_literal(wb, cm->buffer_model.num_units_in_decoding_tick,
|
||||
32); // Number of units in decoding tick
|
||||
aom_wb_write_literal(wb, cm->buffer_model.buffer_removal_delay_length - 1, 5);
|
||||
aom_wb_write_literal(wb, cm->buffer_model.frame_presentation_delay_length - 1,
|
||||
aom_wb_write_literal(wb, cm->buffer_model.buffer_removal_time_length - 1, 5);
|
||||
aom_wb_write_literal(wb, cm->buffer_model.frame_presentation_time_length - 1,
|
||||
5);
|
||||
}
|
||||
|
||||
|
|
@ -2533,23 +2541,25 @@ static void write_dec_model_op_parameters(AV1_COMMON *const cm,
|
|||
// aom_wb_write_bit(wb, cm->op_params[op_num].has_parameters);
|
||||
// if (!cm->op_params[op_num].has_parameters) return;
|
||||
|
||||
aom_wb_write_literal(wb, cm->op_params[op_num].decoder_buffer_delay,
|
||||
cm->buffer_model.encoder_decoder_buffer_delay_length);
|
||||
aom_wb_write_unsigned_literal(
|
||||
wb, cm->op_params[op_num].decoder_buffer_delay,
|
||||
cm->buffer_model.encoder_decoder_buffer_delay_length);
|
||||
|
||||
aom_wb_write_literal(wb, cm->op_params[op_num].encoder_buffer_delay,
|
||||
cm->buffer_model.encoder_decoder_buffer_delay_length);
|
||||
aom_wb_write_unsigned_literal(
|
||||
wb, cm->op_params[op_num].encoder_buffer_delay,
|
||||
cm->buffer_model.encoder_decoder_buffer_delay_length);
|
||||
|
||||
aom_wb_write_bit(wb, cm->op_params[op_num].low_delay_mode_flag);
|
||||
|
||||
cm->op_frame_timing[op_num].buffer_removal_delay =
|
||||
cm->op_frame_timing[op_num].buffer_removal_time =
|
||||
0; // reset the decoded frame counter
|
||||
}
|
||||
|
||||
static void write_tu_pts_info(AV1_COMMON *const cm,
|
||||
struct aom_write_bit_buffer *wb) {
|
||||
aom_wb_write_unsigned_literal(
|
||||
wb, (uint32_t)cm->tu_presentation_delay,
|
||||
cm->buffer_model.frame_presentation_delay_length);
|
||||
wb, cm->frame_presentation_time,
|
||||
cm->buffer_model.frame_presentation_time_length);
|
||||
}
|
||||
|
||||
static void write_film_grain_params(AV1_COMP *cpi,
|
||||
|
|
@ -2601,8 +2611,8 @@ static void write_film_grain_params(AV1_COMP *cpi,
|
|||
pars->chroma_scaling_from_luma = 0; // for monochrome override to 0
|
||||
|
||||
if (cm->seq_params.monochrome || pars->chroma_scaling_from_luma ||
|
||||
((cm->subsampling_x == 1) && (cm->subsampling_y == 1) &&
|
||||
(pars->num_y_points == 0))) {
|
||||
((cm->seq_params.subsampling_x == 1) &&
|
||||
(cm->seq_params.subsampling_y == 1) && (pars->num_y_points == 0))) {
|
||||
pars->num_cb_points = 0;
|
||||
pars->num_cr_points = 0;
|
||||
} else {
|
||||
|
|
@ -2931,18 +2941,19 @@ static void write_uncompressed_header_obu(AV1_COMP *cpi,
|
|||
struct aom_write_bit_buffer *saved_wb,
|
||||
struct aom_write_bit_buffer *wb) {
|
||||
AV1_COMMON *const cm = &cpi->common;
|
||||
const SequenceHeader *const seq_params = &cm->seq_params;
|
||||
MACROBLOCKD *const xd = &cpi->td.mb.e_mbd;
|
||||
|
||||
// NOTE: By default all coded frames to be used as a reference
|
||||
cm->is_reference_frame = 1;
|
||||
cm->frame_type = cm->intra_only ? INTRA_ONLY_FRAME : cm->frame_type;
|
||||
|
||||
if (cm->seq_params.still_picture) {
|
||||
if (seq_params->still_picture) {
|
||||
assert(cm->show_existing_frame == 0);
|
||||
assert(cm->show_frame == 1);
|
||||
assert(cm->frame_type == KEY_FRAME);
|
||||
}
|
||||
if (!cm->seq_params.reduced_still_picture_hdr) {
|
||||
if (!seq_params->reduced_still_picture_hdr) {
|
||||
if (cm->show_existing_frame) {
|
||||
RefCntBuffer *const frame_bufs = cm->buffer_pool->frame_bufs;
|
||||
const int frame_to_show = cm->ref_frame_map[cpi->existing_fb_idx_to_show];
|
||||
|
|
@ -2957,12 +2968,12 @@ static void write_uncompressed_header_obu(AV1_COMP *cpi,
|
|||
aom_wb_write_bit(wb, 1); // show_existing_frame
|
||||
aom_wb_write_literal(wb, cpi->existing_fb_idx_to_show, 3);
|
||||
|
||||
if (cm->seq_params.decoder_model_info_present_flag &&
|
||||
if (seq_params->decoder_model_info_present_flag &&
|
||||
cm->timing_info.equal_picture_interval == 0) {
|
||||
write_tu_pts_info(cm, wb);
|
||||
}
|
||||
if (cm->seq_params.frame_id_numbers_present_flag) {
|
||||
int frame_id_len = cm->seq_params.frame_id_length;
|
||||
if (seq_params->frame_id_numbers_present_flag) {
|
||||
int frame_id_len = seq_params->frame_id_length;
|
||||
int display_frame_id = cm->ref_frame_id[cpi->existing_fb_idx_to_show];
|
||||
aom_wb_write_literal(wb, display_frame_id, frame_id_len);
|
||||
}
|
||||
|
|
@ -2983,7 +2994,7 @@ static void write_uncompressed_header_obu(AV1_COMP *cpi,
|
|||
|
||||
aom_wb_write_bit(wb, cm->show_frame);
|
||||
if (cm->show_frame) {
|
||||
if (cm->seq_params.decoder_model_info_present_flag &&
|
||||
if (seq_params->decoder_model_info_present_flag &&
|
||||
cm->timing_info.equal_picture_interval == 0)
|
||||
write_tu_pts_info(cm, wb);
|
||||
} else {
|
||||
|
|
@ -2997,18 +3008,18 @@ static void write_uncompressed_header_obu(AV1_COMP *cpi,
|
|||
}
|
||||
aom_wb_write_bit(wb, cm->disable_cdf_update);
|
||||
|
||||
if (cm->seq_params.force_screen_content_tools == 2) {
|
||||
if (seq_params->force_screen_content_tools == 2) {
|
||||
aom_wb_write_bit(wb, cm->allow_screen_content_tools);
|
||||
} else {
|
||||
assert(cm->allow_screen_content_tools ==
|
||||
cm->seq_params.force_screen_content_tools);
|
||||
seq_params->force_screen_content_tools);
|
||||
}
|
||||
|
||||
if (cm->allow_screen_content_tools) {
|
||||
if (cm->seq_params.force_integer_mv == 2) {
|
||||
if (seq_params->force_integer_mv == 2) {
|
||||
aom_wb_write_bit(wb, cm->cur_frame_force_integer_mv);
|
||||
} else {
|
||||
assert(cm->cur_frame_force_integer_mv == cm->seq_params.force_integer_mv);
|
||||
assert(cm->cur_frame_force_integer_mv == seq_params->force_integer_mv);
|
||||
}
|
||||
} else {
|
||||
assert(cm->cur_frame_force_integer_mv == 0);
|
||||
|
|
@ -3018,53 +3029,57 @@ static void write_uncompressed_header_obu(AV1_COMP *cpi,
|
|||
int frame_size_override_flag = 0;
|
||||
cm->frame_refs_short_signaling = 0;
|
||||
|
||||
if (cm->seq_params.reduced_still_picture_hdr) {
|
||||
assert(cm->width == cm->seq_params.max_frame_width &&
|
||||
cm->height == cm->seq_params.max_frame_height);
|
||||
if (seq_params->reduced_still_picture_hdr) {
|
||||
assert(cm->width == seq_params->max_frame_width &&
|
||||
cm->height == seq_params->max_frame_height);
|
||||
} else {
|
||||
if (cm->seq_params.frame_id_numbers_present_flag) {
|
||||
int frame_id_len = cm->seq_params.frame_id_length;
|
||||
if (seq_params->frame_id_numbers_present_flag) {
|
||||
int frame_id_len = seq_params->frame_id_length;
|
||||
aom_wb_write_literal(wb, cm->current_frame_id, frame_id_len);
|
||||
}
|
||||
|
||||
if (cm->width > cm->seq_params.max_frame_width ||
|
||||
cm->height > cm->seq_params.max_frame_height) {
|
||||
if (cm->width > seq_params->max_frame_width ||
|
||||
cm->height > seq_params->max_frame_height) {
|
||||
aom_internal_error(&cm->error, AOM_CODEC_UNSUP_BITSTREAM,
|
||||
"Frame dimensions are larger than the maximum values");
|
||||
}
|
||||
|
||||
frame_size_override_flag =
|
||||
frame_is_sframe(cm) ? 1
|
||||
: (cm->width != cm->seq_params.max_frame_width ||
|
||||
cm->height != cm->seq_params.max_frame_height);
|
||||
: (cm->width != seq_params->max_frame_width ||
|
||||
cm->height != seq_params->max_frame_height);
|
||||
if (!frame_is_sframe(cm)) aom_wb_write_bit(wb, frame_size_override_flag);
|
||||
|
||||
if (cm->seq_params.enable_order_hint)
|
||||
if (seq_params->enable_order_hint)
|
||||
aom_wb_write_literal(wb, cm->frame_offset,
|
||||
cm->seq_params.order_hint_bits_minus_1 + 1);
|
||||
seq_params->order_hint_bits_minus_1 + 1);
|
||||
|
||||
if (!cm->error_resilient_mode && !frame_is_intra_only(cm)) {
|
||||
aom_wb_write_literal(wb, cm->primary_ref_frame, PRIMARY_REF_BITS);
|
||||
}
|
||||
}
|
||||
|
||||
if (cm->seq_params.decoder_model_info_present_flag) {
|
||||
aom_wb_write_bit(wb, cm->buffer_removal_delay_present);
|
||||
if (cm->buffer_removal_delay_present) {
|
||||
if (seq_params->decoder_model_info_present_flag) {
|
||||
aom_wb_write_bit(wb, cm->buffer_removal_time_present);
|
||||
if (cm->buffer_removal_time_present) {
|
||||
for (int op_num = 0;
|
||||
op_num < cm->seq_params.operating_points_cnt_minus_1 + 1; op_num++) {
|
||||
op_num < seq_params->operating_points_cnt_minus_1 + 1; op_num++) {
|
||||
if (cm->op_params[op_num].decoder_model_param_present_flag) {
|
||||
if (((cm->seq_params.operating_point_idc[op_num] >>
|
||||
if (((seq_params->operating_point_idc[op_num] >>
|
||||
cm->temporal_layer_id) &
|
||||
0x1 &&
|
||||
(cm->seq_params.operating_point_idc[op_num] >>
|
||||
(seq_params->operating_point_idc[op_num] >>
|
||||
(cm->spatial_layer_id + 8)) &
|
||||
0x1) ||
|
||||
cm->seq_params.operating_point_idc[op_num] == 0) {
|
||||
aom_wb_write_literal(
|
||||
wb, (uint32_t)cm->op_frame_timing[op_num].buffer_removal_delay,
|
||||
cm->buffer_model.buffer_removal_delay_length);
|
||||
cm->op_frame_timing[op_num].buffer_removal_delay++;
|
||||
seq_params->operating_point_idc[op_num] == 0) {
|
||||
aom_wb_write_unsigned_literal(
|
||||
wb, cm->op_frame_timing[op_num].buffer_removal_time,
|
||||
cm->buffer_model.buffer_removal_time_length);
|
||||
cm->op_frame_timing[op_num].buffer_removal_time++;
|
||||
if (cm->op_frame_timing[op_num].buffer_removal_time == 0) {
|
||||
aom_internal_error(&cm->error, AOM_CODEC_UNSUP_BITSTREAM,
|
||||
"buffer_removal_time overflowed");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -3122,7 +3137,7 @@ static void write_uncompressed_header_obu(AV1_COMP *cpi,
|
|||
|
||||
if (!frame_is_intra_only(cm) || cpi->refresh_frame_mask != 0xFF) {
|
||||
// Write all ref frame order hints if error_resilient_mode == 1
|
||||
if (cm->error_resilient_mode && cm->seq_params.enable_order_hint) {
|
||||
if (cm->error_resilient_mode && seq_params->enable_order_hint) {
|
||||
RefCntBuffer *const frame_bufs = cm->buffer_pool->frame_bufs;
|
||||
for (int ref_idx = 0; ref_idx < REF_FRAMES; ref_idx++) {
|
||||
// Get buffer index
|
||||
|
|
@ -3131,7 +3146,7 @@ static void write_uncompressed_header_obu(AV1_COMP *cpi,
|
|||
|
||||
// Write order hint to bit stream
|
||||
aom_wb_write_literal(wb, frame_bufs[buf_idx].cur_frame_offset,
|
||||
cm->seq_params.order_hint_bits_minus_1 + 1);
|
||||
seq_params->order_hint_bits_minus_1 + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -3156,7 +3171,7 @@ static void write_uncompressed_header_obu(AV1_COMP *cpi,
|
|||
// automatically.
|
||||
#define FRAME_REFS_SHORT_SIGNALING 0
|
||||
#if FRAME_REFS_SHORT_SIGNALING
|
||||
cm->frame_refs_short_signaling = cm->seq_params.enable_order_hint;
|
||||
cm->frame_refs_short_signaling = seq_params->enable_order_hint;
|
||||
#endif // FRAME_REFS_SHORT_SIGNALING
|
||||
|
||||
if (cm->frame_refs_short_signaling) {
|
||||
|
|
@ -3167,7 +3182,7 @@ static void write_uncompressed_header_obu(AV1_COMP *cpi,
|
|||
check_frame_refs_short_signaling(cpi);
|
||||
}
|
||||
|
||||
if (cm->seq_params.enable_order_hint)
|
||||
if (seq_params->enable_order_hint)
|
||||
aom_wb_write_bit(wb, cm->frame_refs_short_signaling);
|
||||
|
||||
if (cm->frame_refs_short_signaling) {
|
||||
|
|
@ -3183,10 +3198,10 @@ static void write_uncompressed_header_obu(AV1_COMP *cpi,
|
|||
if (!cm->frame_refs_short_signaling)
|
||||
aom_wb_write_literal(wb, get_ref_frame_map_idx(cpi, ref_frame),
|
||||
REF_FRAMES_LOG2);
|
||||
if (cm->seq_params.frame_id_numbers_present_flag) {
|
||||
if (seq_params->frame_id_numbers_present_flag) {
|
||||
int i = get_ref_frame_map_idx(cpi, ref_frame);
|
||||
int frame_id_len = cm->seq_params.frame_id_length;
|
||||
int diff_len = cm->seq_params.delta_frame_id_length;
|
||||
int frame_id_len = seq_params->frame_id_length;
|
||||
int diff_len = seq_params->delta_frame_id_length;
|
||||
int delta_frame_id_minus_1 =
|
||||
((cm->current_frame_id - cm->ref_frame_id[i] +
|
||||
(1 << frame_id_len)) %
|
||||
|
|
@ -3222,7 +3237,7 @@ static void write_uncompressed_header_obu(AV1_COMP *cpi,
|
|||
}
|
||||
|
||||
const int might_bwd_adapt =
|
||||
!(cm->seq_params.reduced_still_picture_hdr) && !(cm->disable_cdf_update);
|
||||
!(seq_params->reduced_still_picture_hdr) && !(cm->disable_cdf_update);
|
||||
if (cm->large_scale_tile)
|
||||
cm->refresh_frame_context = REFRESH_FRAME_CONTEXT_DISABLED;
|
||||
|
||||
|
|
@ -3282,7 +3297,8 @@ static void write_uncompressed_header_obu(AV1_COMP *cpi,
|
|||
|
||||
if (!frame_is_intra_only(cm)) write_global_motion(cpi, wb);
|
||||
|
||||
if (cm->film_grain_params_present && (cm->show_frame || cm->showable_frame)) {
|
||||
if (seq_params->film_grain_params_present &&
|
||||
(cm->show_frame || cm->showable_frame)) {
|
||||
int flip_back_update_parameters_flag = 0;
|
||||
if (cm->frame_type != INTER_FRAME &&
|
||||
cm->film_grain_params.update_parameters == 0) {
|
||||
|
|
@ -3497,7 +3513,7 @@ static uint32_t write_sequence_header_obu(AV1_COMP *cpi, uint8_t *const dst) {
|
|||
struct aom_write_bit_buffer wb = { dst, 0 };
|
||||
uint32_t size = 0;
|
||||
|
||||
write_profile(cm->profile, &wb);
|
||||
write_profile(cm->seq_params.profile, &wb);
|
||||
|
||||
// Still picture or not
|
||||
aom_wb_write_bit(&wb, cm->seq_params.still_picture);
|
||||
|
|
@ -3551,9 +3567,9 @@ static uint32_t write_sequence_header_obu(AV1_COMP *cpi, uint8_t *const dst) {
|
|||
}
|
||||
write_sequence_header(cpi, &wb);
|
||||
|
||||
write_color_config(cm, &wb);
|
||||
write_color_config(&cm->seq_params, &wb);
|
||||
|
||||
aom_wb_write_bit(&wb, cm->film_grain_params_present);
|
||||
aom_wb_write_bit(&wb, cm->seq_params.film_grain_params_present);
|
||||
|
||||
add_trailing_bits(&wb);
|
||||
|
||||
|
|
@ -3960,7 +3976,7 @@ int av1_pack_bitstream(AV1_COMP *const cpi, uint8_t *dst, size_t *size) {
|
|||
// The TD is now written outside the frame encode loop
|
||||
|
||||
// write sequence header obu if KEY_FRAME, preceded by 4-byte size
|
||||
if (cm->frame_type == KEY_FRAME) {
|
||||
if (cm->frame_type == KEY_FRAME && cm->show_frame) {
|
||||
obu_header_size = write_obu_header(OBU_SEQUENCE_HEADER, 0, data);
|
||||
|
||||
obu_payload_size = write_sequence_header_obu(cpi, data + obu_header_size);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue