1 /******************************************************************************
2  *
3  * Copyright (C) 2015 The Android Open Source Project
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at:
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  *****************************************************************************
18  * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19 */
20 #ifndef  _IH264D_DEBLOCKING_H_
21 #define  _IH264D_DEBLOCKING_H_
22 /*!
23  **************************************************************************
24  * \file ih264d_deblocking.h
25  *
26  * \brief
27  *    Declarations of deblocking functions
28  *
29  * \date
30  *    23/11/2002
31  *
32  * \author  AI
33  **************************************************************************
34  */
35 #include "ih264_typedefs.h"
36 #include "ih264_macros.h"
37 #include "ih264_platform_macros.h"
38 #include "ih264d_structs.h"
39 
40 WORD8 ih264d_set_deblocking_parameters(deblk_mb_t * ps_cur_deblk_mb,
41                                        dec_slice_params_t * ps_slice,
42                                        UWORD8 u1_mb_ngbr_availablity,
43                                        UWORD8 u1_mb_field_decoding_flag);
44 
45 void ih264d_copy_intra_pred_line(dec_struct_t *ps_dec,
46                                  dec_mb_info_t *ps_cur_mb_info,
47                                  UWORD32 nmb_index);
48 
49 void FilterBoundaryLeft(tfr_ctxt_t * const ps_tfr_cxt,
50                         const WORD8 i1_cb_qp_idx_ofst,
51                         const WORD8 i1_cr_qp_idx_ofst,
52                         deblk_mb_t * const ps_cur_mb,
53                         UWORD16 u2_strd_y,
54                         UWORD16 u2_strd_uv,
55                         deblk_mb_t * const ps_left_mb,
56                         const UWORD32 pu4_bs_tab[],
57                         const UWORD8 u1_cur_fld);
58 void FilterBoundaryTop(tfr_ctxt_t * const ps_tfr_cxt,
59                        const WORD8 i1_cb_qp_idx_ofst,
60                        const WORD8 i1_cr_qp_idx_ofst,
61                        deblk_mb_t * const ps_cur_mb,
62                        const UWORD16 u2_strd_y,
63                        const UWORD16 u2_strd_uv,
64                        deblk_mb_t * const ps_top_mb,
65                        const UWORD32 u4_bs);
66 void deblock_mb(tfr_ctxt_t * const ps_tfr_cxt,
67                 const WORD8 i1_cb_qp_idx_ofst,
68                 const WORD8 i1_cr_qp_idx_ofst,
69                 deblk_mb_t * const ps_cur_mb,
70                 WORD32 i4_strd_y,
71                 WORD32 i4_strd_uv,
72                 deblk_mb_t * const ps_top_mb,
73                 deblk_mb_t * const ps_left_mb,
74                 const UWORD8 u1_cur_fld,
75                 const UWORD8 u1_extra_top_edge);
76 void ih264d_deblock_mb_mbaff(dec_struct_t *ps_dec,
77                              tfr_ctxt_t * const ps_tfr_cxt,
78                              const WORD8 i1_cb_qp_idx_ofst,
79                              const WORD8 i1_cr_qp_idx_ofst,
80                              deblk_mb_t * const ps_cur_mb,
81                              WORD32 i4_strd_y,
82                              WORD32 i4_strd_uv,
83                              deblk_mb_t * const ps_top_mb,
84                              deblk_mb_t * const ps_left_mb,
85                              const UWORD8 u1_cur_fld,
86                              const UWORD8 u1_extra_top_edge);
87 
88 void ih264d_deblock_picture_mbaff(dec_struct_t * const ps_dec);
89 
90 void ih264d_deblock_picture_non_mbaff(dec_struct_t * const ps_dec);
91 
92 void ih264d_deblock_picture_progressive(dec_struct_t * const ps_dec);
93 
94 void ih264d_compute_bs_mbaff(dec_struct_t * ps_dec,
95                              dec_mb_info_t * ps_cur_mb_info,
96                              const UWORD16 u2_mbxn_mb);
97 void ih264d_compute_bs_non_mbaff(dec_struct_t * ps_dec,
98                                  dec_mb_info_t * ps_cur_mb_info,
99                                  const UWORD16 u2_mbxn_mb);
100 
101 void ih264d_fill_bs_mbedge_2(dec_struct_t * ps_dec,
102                              dec_mb_info_t * ps_cur_mb_info,
103                              const UWORD16 u2_mbxn_mb);
104 
105 void ih264d_fill_bs_mbedge_4(dec_struct_t * ps_dec,
106                              dec_mb_info_t * ps_cur_mb_info,
107                              const UWORD16 u2_mbxn_mb);
108 
109 void ih264d_fill_bs1_16x16mb_pslice(mv_pred_t *ps_cur_mv_pred,
110                                     mv_pred_t *ps_top_mv_pred,
111                                     void **ppv_map_ref_idx_to_poc,
112                                     UWORD32 *pu4_bs_table,
113                                     mv_pred_t *ps_leftmost_mv_pred,
114                                     neighbouradd_t *ps_left_addr,
115                                     void **u4_pic_addrress,
116                                     WORD32 i4_ver_mvlimit);
117 
118 void ih264d_fill_bs1_non16x16mb_pslice(mv_pred_t *ps_cur_mv_pred,
119                                        mv_pred_t *ps_top_mv_pred,
120                                        void **ppv_map_ref_idx_to_poc,
121                                        UWORD32 *pu4_bs_table,
122                                        mv_pred_t *ps_leftmost_mv_pred,
123                                        neighbouradd_t *ps_left_addr,
124                                        void **u4_pic_addrress,
125                                        WORD32 i4_ver_mvlimit);
126 
127 void ih264d_fill_bs1_16x16mb_bslice(mv_pred_t *ps_cur_mv_pred,
128                                     mv_pred_t *ps_top_mv_pred,
129                                     void **ppv_map_ref_idx_to_poc,
130                                     UWORD32 *pu4_bs_table,
131                                     mv_pred_t *ps_leftmost_mv_pred,
132                                     neighbouradd_t *ps_left_addr,
133                                     void **u4_pic_addrress,
134                                     WORD32 i4_ver_mvlimit);
135 
136 void ih264d_fill_bs1_non16x16mb_bslice(mv_pred_t *ps_cur_mv_pred,
137                                        mv_pred_t *ps_top_mv_pred,
138                                        void **ppv_map_ref_idx_to_poc,
139                                        UWORD32 *pu4_bs_table,
140                                        mv_pred_t *ps_leftmost_mv_pred,
141                                        neighbouradd_t *ps_left_addr,
142                                        void **u4_pic_addrress,
143                                        WORD32 i4_ver_mvlimit);
144 
145 void ih264d_fill_bs_xtra_left_edge_cur_fld(UWORD32 *pu4_bs,
146                                            WORD32 u4_left_mb_t_csbp,
147                                            WORD32 u4_left_mb_b_csbp,
148                                            WORD32 u4_cur_mb_csbp,
149                                            UWORD32 u4_cur_mb_top);
150 
151 void ih264d_fill_bs_xtra_left_edge_cur_frm(UWORD32 *pu4_bs,
152                                            WORD32 u4_left_mb_t_csbp,
153                                            WORD32 u4_left_mb_b_csbp,
154                                            WORD32 u4_cur_mb_csbp,
155                                            UWORD32 u4_cur_mb_top);
156 
157 void ih264d_deblock_mb_nonmbaff(dec_struct_t *ps_dec,
158                                 tfr_ctxt_t * const ps_tfr_cxt,
159                                 const WORD8 i1_cb_qp_idx_ofst,
160                                 const WORD8 i1_cr_qp_idx_ofst,
161                                 WORD32 i4_strd_y,
162                                 WORD32 i4_strd_uv);
163 
164 void ih264d_init_deblk_tfr_ctxt(dec_struct_t * ps_dec,
165                                 pad_mgr_t *ps_pad_mgr,
166                                 tfr_ctxt_t *ps_tfr_cxt,
167                                 UWORD16 u2_image_wd_mb,
168                                 UWORD8 u1_mbaff);
169 
170 void ih264d_deblock_mb_level(dec_struct_t *ps_dec,
171                              dec_mb_info_t *ps_cur_mb_info,
172                              UWORD32 nmb_index);
173 
174 #endif /* _IH264D_DEBLOCKING_H_ */
175