| /* | |
| * Copyright (c) 2025, Alliance for Open Media. All rights reserved | |
| * | |
| * This source code is subject to the terms of the BSD 3-Clause Clear License | |
| * and the Alliance for Open Media Patent License 1.0. If the BSD 3-Clause Clear | |
| * License was not distributed with this source code in the LICENSE file, you | |
| * can obtain it at aomedia.org/license/software-license/bsd-3-c-c/. If the | |
| * Alliance for Open Media Patent License 1.0 was not distributed with this | |
| * source code in the PATENTS file, you can obtain it at | |
| * aomedia.org/license/patent-license/. | |
| */ | |
| #include <assert.h> | |
| #include <limits.h> | |
| #include <stdio.h> | |
| #include <string.h> | |
| #include "aom/aom_encoder.h" | |
| #include "aom_dsp/aom_dsp_common.h" | |
| #include "aom_dsp/binary_codes_writer.h" | |
| #include "aom_dsp/bitwriter_buffer.h" | |
| #include "aom_mem/aom_mem.h" | |
| #include "aom_ports/bitops.h" | |
| #include "aom_ports/mem_ops.h" | |
| #include "aom_ports/system_state.h" | |
| #include "av1/common/av1_common_int.h" | |
| #include "av1/common/blockd.h" | |
| #include "av1/common/bru.h" | |
| #include "av1/common/enums.h" | |
| #if CONFIG_BITSTREAM_DEBUG | |
| #include "aom_util/debug_util.h" | |
| #endif // CONFIG_BITSTREAM_DEBUG | |
| #include "common/md5_utils.h" | |
| #include "common/rawenc.h" | |
| #include "av1/common/cdef.h" | |
| #include "av1/common/ccso.h" | |
| #include "av1/common/cfl.h" | |
| #include "av1/common/entropy.h" | |
| #include "av1/common/entropymode.h" | |
| #include "av1/common/entropymv.h" | |
| #include "av1/common/intra_dip.h" | |
| #include "av1/common/mvref_common.h" | |
| #include "av1/common/pred_common.h" | |
| #include "av1/common/quant_common.h" | |
| #include "av1/common/reconinter.h" | |
| #include "av1/common/reconintra.h" | |
| #include "av1/common/secondary_tx.h" | |
| #include "av1/common/seg_common.h" | |
| #include "av1/common/tile_common.h" | |
| #include "av1/encoder/bitstream.h" | |
| #include "av1/common/cost.h" | |
| #include "av1/encoder/encodemv.h" | |
| #include "av1/encoder/encodetxb.h" | |
| #include "av1/encoder/mcomp.h" | |
| #include "av1/encoder/palette.h" | |
| #include "av1/encoder/pickrst.h" | |
| #include "av1/encoder/segmentation.h" | |
| #include "av1/encoder/tokenize.h" | |
| #if CONFIG_CWG_F293_BUFFER_REMOVAL_TIMING | |
| void av1_set_buffer_removal_timing_params(AV1_COMP *const cpi) { | |
| AV1_COMMON *const cm = &cpi->common; | |
| struct OperatingPointSet *ops = &cm->ops_params; | |
| BufferRemovalTimingInfo *brt_info = &cm->brt_info; | |
| // xlayer_id | |
| brt_info->obu_xlayer_id = cm->xlayer_id; | |
| const int xlayer_id = brt_info->obu_xlayer_id; | |
| // ops_id | |
| brt_info->br_ops_id[xlayer_id] = ops->ops_id[xlayer_id]; | |
| const int ops_id = brt_info->br_ops_id[xlayer_id]; | |
| // ops_cnt | |
| brt_info->br_ops_cnt[xlayer_id][ops_id] = ops->ops_cnt[xlayer_id][ops_id]; | |
| const int ops_cnt = brt_info->br_ops_cnt[xlayer_id][ops_id]; | |
| // decoder model information | |
| int br_decoder_model_present_op_flag = 0; | |
| for (int i = 0; i < ops_cnt; i++) { | |
| brt_info->br_decoder_model_present_op_flag[xlayer_id][ops_id][i] = 0; | |
| br_decoder_model_present_op_flag = | |
| brt_info->br_decoder_model_present_op_flag[xlayer_id][ops_id][i]; | |
| if (br_decoder_model_present_op_flag) | |
| brt_info->br_buffer_removal_time[xlayer_id][ops_id][i] = 0; | |
| } | |
| } | |
| uint32_t av1_write_buffer_removal_timing_obu( | |
| const BufferRemovalTimingInfo *brt_info, uint8_t *const dst) { | |
| struct aom_write_bit_buffer wb = { dst, 0 }; | |
| uint32_t size = 0; | |
| int xlayer_id = brt_info->obu_xlayer_id; | |
| int ops_id = brt_info->ops_id; | |
| int ops_cnt = brt_info->br_ops_cnt[xlayer_id][ops_id]; | |
| aom_wb_write_literal(&wb, brt_info->br_ops_id[xlayer_id], 4); | |
| aom_wb_write_literal(&wb, ops_cnt, 3); | |
| for (int i = 0; i < ops_cnt; i++) { | |
| aom_wb_write_bit( | |
| &wb, brt_info->br_decoder_model_present_op_flag[xlayer_id][ops_id][i]); | |
| if (brt_info->br_decoder_model_present_op_flag[xlayer_id][ops_id][i]) | |
| aom_wb_write_uvlc(&wb, | |
| brt_info->br_buffer_removal_time[xlayer_id][ops_id][i]); | |
| } | |
| av1_add_trailing_bits(&wb); | |
| size = aom_wb_bytes_written(&wb); | |
| return size; | |
| } | |
| #endif // CONFIG_CWG_F293_BUFFER_REMOVAL_TIMING |