1*437bfbebSnyanmisaka /* 2*437bfbebSnyanmisaka * 3*437bfbebSnyanmisaka * Copyright 2020 Rockchip Electronics Co. LTD 4*437bfbebSnyanmisaka * 5*437bfbebSnyanmisaka * Licensed under the Apache License, Version 2.0 (the "License"); 6*437bfbebSnyanmisaka * you may not use this file except in compliance with the License. 7*437bfbebSnyanmisaka * You may obtain a copy of the License at 8*437bfbebSnyanmisaka * 9*437bfbebSnyanmisaka * http://www.apache.org/licenses/LICENSE-2.0 10*437bfbebSnyanmisaka * 11*437bfbebSnyanmisaka * Unless required by applicable law or agreed to in writing, software 12*437bfbebSnyanmisaka * distributed under the License is distributed on an "AS IS" BASIS, 13*437bfbebSnyanmisaka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*437bfbebSnyanmisaka * See the License for the specific language governing permissions and 15*437bfbebSnyanmisaka * limitations under the License. 16*437bfbebSnyanmisaka */ 17*437bfbebSnyanmisaka 18*437bfbebSnyanmisaka #ifndef __HAL_H265D_COM_H__ 19*437bfbebSnyanmisaka #define __HAL_H265D_COM_H__ 20*437bfbebSnyanmisaka 21*437bfbebSnyanmisaka #include "rk_type.h" 22*437bfbebSnyanmisaka #include <limits.h> 23*437bfbebSnyanmisaka 24*437bfbebSnyanmisaka #define SCALING_LIST_SIZE (81 * 1360) 25*437bfbebSnyanmisaka #define RPS_SIZE (600 * 32) 26*437bfbebSnyanmisaka #define SCALING_LIST_SIZE_NUM 4 27*437bfbebSnyanmisaka 28*437bfbebSnyanmisaka #define L0 0 29*437bfbebSnyanmisaka #define L1 1 30*437bfbebSnyanmisaka #define MAX_REFS 16 31*437bfbebSnyanmisaka 32*437bfbebSnyanmisaka #define IS_IDR(nal_type) (nal_type == 19 || nal_type == 20) 33*437bfbebSnyanmisaka #define IS_BLA(nal_type) (nal_type == 17 || nal_type == 16 || nal_type == 18) 34*437bfbebSnyanmisaka #define IS_IRAP(nal_type) (nal_type >= 16 && nal_type <= 23) 35*437bfbebSnyanmisaka 36*437bfbebSnyanmisaka enum RPSType { 37*437bfbebSnyanmisaka ST_CURR_BEF = 0, 38*437bfbebSnyanmisaka ST_CURR_AFT, 39*437bfbebSnyanmisaka ST_FOLL, 40*437bfbebSnyanmisaka LT_CURR, 41*437bfbebSnyanmisaka LT_FOLL, 42*437bfbebSnyanmisaka NB_RPS_TYPE, 43*437bfbebSnyanmisaka }; 44*437bfbebSnyanmisaka 45*437bfbebSnyanmisaka enum SliceType { 46*437bfbebSnyanmisaka B_SLICE = 0, 47*437bfbebSnyanmisaka P_SLICE = 1, 48*437bfbebSnyanmisaka I_SLICE = 2, 49*437bfbebSnyanmisaka }; 50*437bfbebSnyanmisaka 51*437bfbebSnyanmisaka typedef struct slice_ref_map { 52*437bfbebSnyanmisaka RK_U8 dpb_index; 53*437bfbebSnyanmisaka RK_U8 is_long_term; 54*437bfbebSnyanmisaka } slice_ref_map_t; 55*437bfbebSnyanmisaka 56*437bfbebSnyanmisaka typedef struct ShortTermRPS { 57*437bfbebSnyanmisaka RK_U32 num_negative_pics; 58*437bfbebSnyanmisaka RK_S32 num_delta_pocs; 59*437bfbebSnyanmisaka RK_S32 delta_poc[32]; 60*437bfbebSnyanmisaka RK_U8 used[32]; 61*437bfbebSnyanmisaka } ShortTermRPS; 62*437bfbebSnyanmisaka 63*437bfbebSnyanmisaka typedef struct LongTermRPS { 64*437bfbebSnyanmisaka RK_S32 poc[32]; 65*437bfbebSnyanmisaka RK_U8 used[32]; 66*437bfbebSnyanmisaka RK_U8 nb_refs; 67*437bfbebSnyanmisaka } LongTermRPS; 68*437bfbebSnyanmisaka 69*437bfbebSnyanmisaka typedef struct RefPicList { 70*437bfbebSnyanmisaka RK_U32 dpb_index[MAX_REFS]; 71*437bfbebSnyanmisaka RK_U32 nb_refs; 72*437bfbebSnyanmisaka } RefPicList_t; 73*437bfbebSnyanmisaka 74*437bfbebSnyanmisaka typedef struct RefPicListTab { 75*437bfbebSnyanmisaka RefPicList_t refPicList[2]; 76*437bfbebSnyanmisaka } RefPicListTab_t; 77*437bfbebSnyanmisaka 78*437bfbebSnyanmisaka typedef struct SliceHeader { 79*437bfbebSnyanmisaka RK_U32 pps_id; 80*437bfbebSnyanmisaka 81*437bfbebSnyanmisaka ///< address (in raster order) of the first block in the current slice segment 82*437bfbebSnyanmisaka RK_U32 slice_segment_addr; 83*437bfbebSnyanmisaka ///< address (in raster order) of the first block in the current slice 84*437bfbebSnyanmisaka RK_U32 slice_addr; 85*437bfbebSnyanmisaka 86*437bfbebSnyanmisaka enum SliceType slice_type; 87*437bfbebSnyanmisaka 88*437bfbebSnyanmisaka RK_S32 pic_order_cnt_lsb; 89*437bfbebSnyanmisaka 90*437bfbebSnyanmisaka RK_U8 first_slice_in_pic_flag; 91*437bfbebSnyanmisaka RK_U8 dependent_slice_segment_flag; 92*437bfbebSnyanmisaka RK_U8 pic_output_flag; 93*437bfbebSnyanmisaka RK_U8 colour_plane_id; 94*437bfbebSnyanmisaka 95*437bfbebSnyanmisaka ///< RPS coded in the slice header itself is stored here 96*437bfbebSnyanmisaka ShortTermRPS slice_rps; 97*437bfbebSnyanmisaka const ShortTermRPS *short_term_rps; 98*437bfbebSnyanmisaka LongTermRPS long_term_rps; 99*437bfbebSnyanmisaka RK_U32 list_entry_lx[2][32]; 100*437bfbebSnyanmisaka 101*437bfbebSnyanmisaka RK_U8 rpl_modification_flag[2]; 102*437bfbebSnyanmisaka RK_U8 no_output_of_prior_pics_flag; 103*437bfbebSnyanmisaka RK_U8 slice_temporal_mvp_enabled_flag; 104*437bfbebSnyanmisaka 105*437bfbebSnyanmisaka RK_U32 nb_refs[2]; 106*437bfbebSnyanmisaka 107*437bfbebSnyanmisaka RK_U8 slice_sample_adaptive_offset_flag[3]; 108*437bfbebSnyanmisaka RK_U8 mvd_l1_zero_flag; 109*437bfbebSnyanmisaka 110*437bfbebSnyanmisaka RK_U8 cabac_init_flag; 111*437bfbebSnyanmisaka RK_U8 disable_deblocking_filter_flag; ///< slice_header_disable_deblocking_filter_flag 112*437bfbebSnyanmisaka RK_U8 slice_loop_filter_across_slices_enabled_flag; 113*437bfbebSnyanmisaka RK_U8 collocated_list; 114*437bfbebSnyanmisaka 115*437bfbebSnyanmisaka RK_U32 collocated_ref_idx; 116*437bfbebSnyanmisaka 117*437bfbebSnyanmisaka RK_S32 slice_qp_delta; 118*437bfbebSnyanmisaka RK_S32 slice_cb_qp_offset; 119*437bfbebSnyanmisaka RK_S32 slice_cr_qp_offset; 120*437bfbebSnyanmisaka 121*437bfbebSnyanmisaka RK_S32 beta_offset; ///< beta_offset_div2 * 2 122*437bfbebSnyanmisaka RK_S32 tc_offset; ///< tc_offset_div2 * 2 123*437bfbebSnyanmisaka 124*437bfbebSnyanmisaka RK_U32 max_num_merge_cand; ///< 5 - 5_minus_max_num_merge_cand 125*437bfbebSnyanmisaka 126*437bfbebSnyanmisaka RK_S32 *entry_point_offset; 127*437bfbebSnyanmisaka RK_S32 * offset; 128*437bfbebSnyanmisaka RK_S32 * size; 129*437bfbebSnyanmisaka RK_S32 num_entry_point_offsets; 130*437bfbebSnyanmisaka 131*437bfbebSnyanmisaka RK_S8 slice_qp; 132*437bfbebSnyanmisaka 133*437bfbebSnyanmisaka RK_U8 luma_log2_weight_denom; 134*437bfbebSnyanmisaka RK_S16 chroma_log2_weight_denom; 135*437bfbebSnyanmisaka 136*437bfbebSnyanmisaka RK_S32 slice_ctb_addr_rs; 137*437bfbebSnyanmisaka } SliceHeader_t; 138*437bfbebSnyanmisaka 139*437bfbebSnyanmisaka extern RK_U8 hal_hevc_diag_scan4x4_x[16]; 140*437bfbebSnyanmisaka extern RK_U8 hal_hevc_diag_scan4x4_y[16]; 141*437bfbebSnyanmisaka extern RK_U8 hal_hevc_diag_scan8x8_x[64]; 142*437bfbebSnyanmisaka extern RK_U8 hal_hevc_diag_scan8x8_y[64]; 143*437bfbebSnyanmisaka extern RK_U8 cabac_table[27456]; 144*437bfbebSnyanmisaka 145*437bfbebSnyanmisaka #ifdef __cplusplus 146*437bfbebSnyanmisaka extern "C" { 147*437bfbebSnyanmisaka #endif 148*437bfbebSnyanmisaka 149*437bfbebSnyanmisaka RK_U32 hevc_ver_align(RK_U32 val); 150*437bfbebSnyanmisaka RK_U32 hevc_hor_align(RK_U32 val); 151*437bfbebSnyanmisaka void hal_record_scaling_list(scalingFactor_t *pScalingFactor_out, scalingList_t *pScalingList); 152*437bfbebSnyanmisaka RK_S32 hal_h265d_slice_hw_rps(void *dxva, void *rps_buf, void* sw_rps_buf, RK_U32 fast_mode); 153*437bfbebSnyanmisaka RK_S32 hal_h265d_slice_output_rps(void *dxva, void *rps_buf); 154*437bfbebSnyanmisaka void hal_h265d_output_scalinglist_packet(void *hal, void *ptr, void *dxva); 155*437bfbebSnyanmisaka 156*437bfbebSnyanmisaka #ifdef __cplusplus 157*437bfbebSnyanmisaka } 158*437bfbebSnyanmisaka #endif 159*437bfbebSnyanmisaka 160*437bfbebSnyanmisaka #endif /*__HAL_H265D_COM_H__*/ 161