xref: /aosp_15_r20/external/libhevc/encoder/ihevce_cabac_rdo.h (revision c83a76b084498d55f252f48b2e3786804cdf24b7)
1*c83a76b0SSuyog Pawar /******************************************************************************
2*c83a76b0SSuyog Pawar  *
3*c83a76b0SSuyog Pawar  * Copyright (C) 2018 The Android Open Source Project
4*c83a76b0SSuyog Pawar  *
5*c83a76b0SSuyog Pawar  * Licensed under the Apache License, Version 2.0 (the "License");
6*c83a76b0SSuyog Pawar  * you may not use this file except in compliance with the License.
7*c83a76b0SSuyog Pawar  * You may obtain a copy of the License at:
8*c83a76b0SSuyog Pawar  *
9*c83a76b0SSuyog Pawar  * http://www.apache.org/licenses/LICENSE-2.0
10*c83a76b0SSuyog Pawar  *
11*c83a76b0SSuyog Pawar  * Unless required by applicable law or agreed to in writing, software
12*c83a76b0SSuyog Pawar  * distributed under the License is distributed on an "AS IS" BASIS,
13*c83a76b0SSuyog Pawar  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*c83a76b0SSuyog Pawar  * See the License for the specific language governing permissions and
15*c83a76b0SSuyog Pawar  * limitations under the License.
16*c83a76b0SSuyog Pawar  *
17*c83a76b0SSuyog Pawar  *****************************************************************************
18*c83a76b0SSuyog Pawar  * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19*c83a76b0SSuyog Pawar */
20*c83a76b0SSuyog Pawar 
21*c83a76b0SSuyog Pawar /**
22*c83a76b0SSuyog Pawar ******************************************************************************
23*c83a76b0SSuyog Pawar *
24*c83a76b0SSuyog Pawar * @file ihevce_cabac_rdo.h
25*c83a76b0SSuyog Pawar *
26*c83a76b0SSuyog Pawar * @brief
27*c83a76b0SSuyog Pawar *  This file contains function prototypes for rdopt cabac entropy modules
28*c83a76b0SSuyog Pawar *
29*c83a76b0SSuyog Pawar * @author
30*c83a76b0SSuyog Pawar *  ittiam
31*c83a76b0SSuyog Pawar *
32*c83a76b0SSuyog Pawar ******************************************************************************
33*c83a76b0SSuyog Pawar */
34*c83a76b0SSuyog Pawar 
35*c83a76b0SSuyog Pawar #ifndef _IHEVCE_CABAC_RDO_H_
36*c83a76b0SSuyog Pawar #define _IHEVCE_CABAC_RDO_H_
37*c83a76b0SSuyog Pawar 
38*c83a76b0SSuyog Pawar /*****************************************************************************/
39*c83a76b0SSuyog Pawar /* Constant Macros                                                           */
40*c83a76b0SSuyog Pawar /*****************************************************************************/
41*c83a76b0SSuyog Pawar 
42*c83a76b0SSuyog Pawar /*****************************************************************************/
43*c83a76b0SSuyog Pawar /* Function Macros                                                           */
44*c83a76b0SSuyog Pawar /*****************************************************************************/
45*c83a76b0SSuyog Pawar 
46*c83a76b0SSuyog Pawar /*****************************************************************************/
47*c83a76b0SSuyog Pawar /* Enums                                                                     */
48*c83a76b0SSuyog Pawar /*****************************************************************************/
49*c83a76b0SSuyog Pawar typedef enum
50*c83a76b0SSuyog Pawar {
51*c83a76b0SSuyog Pawar     UPDATE_ENT_SYNC_RDO_STATE = 0,
52*c83a76b0SSuyog Pawar     STORE_ENT_SYNC_RDO_STATE = 1,
53*c83a76b0SSuyog Pawar } CABAC_RDO_COPY_STATE_T;
54*c83a76b0SSuyog Pawar 
55*c83a76b0SSuyog Pawar /*****************************************************************************/
56*c83a76b0SSuyog Pawar /* Structures                                                                */
57*c83a76b0SSuyog Pawar /*****************************************************************************/
58*c83a76b0SSuyog Pawar 
59*c83a76b0SSuyog Pawar /*****************************************************************************/
60*c83a76b0SSuyog Pawar /* Extern Function Declarations                                              */
61*c83a76b0SSuyog Pawar /*****************************************************************************/
62*c83a76b0SSuyog Pawar 
63*c83a76b0SSuyog Pawar void ihevce_entropy_rdo_frame_init(
64*c83a76b0SSuyog Pawar     rdopt_entropy_ctxt_t *ps_rdopt_entropy_ctxt,
65*c83a76b0SSuyog Pawar     slice_header_t *ps_slice_hdr,
66*c83a76b0SSuyog Pawar     pps_t *ps_pps,
67*c83a76b0SSuyog Pawar     sps_t *ps_sps,
68*c83a76b0SSuyog Pawar     vps_t *ps_vps,
69*c83a76b0SSuyog Pawar     UWORD8 *pu1_cu_skip_top_row,
70*c83a76b0SSuyog Pawar     rc_quant_t *ps_rc_quant_ctxt);
71*c83a76b0SSuyog Pawar 
72*c83a76b0SSuyog Pawar void ihevce_entropy_rdo_ctb_init(
73*c83a76b0SSuyog Pawar     rdopt_entropy_ctxt_t *ps_rdopt_entropy_ctxt, WORD32 ctb_x, WORD32 ctb_y);
74*c83a76b0SSuyog Pawar 
75*c83a76b0SSuyog Pawar WORD32 ihevce_entropy_rdo_encode_cu(
76*c83a76b0SSuyog Pawar     rdopt_entropy_ctxt_t *ps_rdopt_entropy_ctxt,
77*c83a76b0SSuyog Pawar     enc_loop_cu_final_prms_t *ps_cu_prms,
78*c83a76b0SSuyog Pawar     WORD32 cu_pos_x,
79*c83a76b0SSuyog Pawar     WORD32 cu_pos_y,
80*c83a76b0SSuyog Pawar     WORD32 cu_size,
81*c83a76b0SSuyog Pawar     WORD32 top_avail,
82*c83a76b0SSuyog Pawar     WORD32 left_avail,
83*c83a76b0SSuyog Pawar     void *pv_ecd_coeff,
84*c83a76b0SSuyog Pawar     WORD32 *pi4_cu_rdopt_tex_bits);
85*c83a76b0SSuyog Pawar 
86*c83a76b0SSuyog Pawar void ihevce_entropy_update_best_cu_states(
87*c83a76b0SSuyog Pawar     rdopt_entropy_ctxt_t *ps_rdopt_entropy_ctxt,
88*c83a76b0SSuyog Pawar     WORD32 cu_pos_x,
89*c83a76b0SSuyog Pawar     WORD32 cu_pos_y,
90*c83a76b0SSuyog Pawar     WORD32 cu_size,
91*c83a76b0SSuyog Pawar     WORD32 cu_skip_flag,
92*c83a76b0SSuyog Pawar     WORD32 rdopt_best_cu_idx);
93*c83a76b0SSuyog Pawar 
94*c83a76b0SSuyog Pawar WORD32 ihevce_entropy_rdo_encode_tu(
95*c83a76b0SSuyog Pawar     rdopt_entropy_ctxt_t *ps_rdopt_entropy_ctxt,
96*c83a76b0SSuyog Pawar     void *pv_ecd_coeff,
97*c83a76b0SSuyog Pawar     WORD32 transform_size,
98*c83a76b0SSuyog Pawar     WORD32 is_luma,
99*c83a76b0SSuyog Pawar     WORD32 perform_sbh);
100*c83a76b0SSuyog Pawar 
101*c83a76b0SSuyog Pawar WORD32 ihevce_cabac_rdo_encode_sao(
102*c83a76b0SSuyog Pawar     rdopt_entropy_ctxt_t *ps_rdopt_entropy_ctxt, ctb_enc_loop_out_t *ps_ctb_enc_loop_out);
103*c83a76b0SSuyog Pawar 
104*c83a76b0SSuyog Pawar WORD32 ihevce_update_best_sao_cabac_state(
105*c83a76b0SSuyog Pawar     rdopt_entropy_ctxt_t *ps_rdopt_entropy_ctxt, WORD32 i4_best_buf_idx);
106*c83a76b0SSuyog Pawar 
107*c83a76b0SSuyog Pawar WORD32 ihevce_entropy_rdo_encode_tu_rdoq(
108*c83a76b0SSuyog Pawar     rdopt_entropy_ctxt_t *ps_rdopt_entropy_ctxt,
109*c83a76b0SSuyog Pawar     void *pv_ecd_coeff,
110*c83a76b0SSuyog Pawar     WORD32 transform_size,
111*c83a76b0SSuyog Pawar     WORD32 is_luma,
112*c83a76b0SSuyog Pawar     rdoq_sbh_ctxt_t *ps_rdoq_ctxt,
113*c83a76b0SSuyog Pawar     LWORD64 *pi8_coded_tu_dist,
114*c83a76b0SSuyog Pawar     LWORD64 *pi8_not_coded_tu_dist,
115*c83a76b0SSuyog Pawar     WORD32 perform_sbh);
116*c83a76b0SSuyog Pawar 
117*c83a76b0SSuyog Pawar void ihevce_entropy_rdo_copy_states(
118*c83a76b0SSuyog Pawar     rdopt_entropy_ctxt_t *ps_rdopt_entropy_ctxt, UWORD8 *pu1_entropy_sync_states, WORD32 copy_mode);
119*c83a76b0SSuyog Pawar 
120*c83a76b0SSuyog Pawar #endif /* _IHEVCE_CABAC_RDO_H_ */
121