| /* |
| * 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 |