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 21 /** 22 ******************************************************************************* 23 * @file 24 * ih264_intra_pred_filters.h 25 * 26 * @brief 27 * Declarations of functions used for intra prediction 28 * 29 * @author 30 * ittiam 31 * 32 * @remarks 33 * none 34 * 35 ******************************************************************************* 36 */ 37 38 #ifndef _IH264_INTRA_PRED_FILTERS_H_ 39 #define _IH264_INTRA_PRED_FILTERS_H_ 40 41 /*****************************************************************************/ 42 /* Function Macros */ 43 /*****************************************************************************/ 44 45 /*! Filter (1,2,1) i.e (a + 2b + c) / 4 */ 46 #define FILT121(a,b,c) ((a + (b << 1) + c + 2) >> 2) 47 48 /*! Filter (1,1) i.e (a + b) / 2 */ 49 #define FILT11(a,b) ((a + b + 1) >> 1) 50 51 /*****************************************************************************/ 52 /* Global Variables */ 53 /*****************************************************************************/ 54 /* Note: Global variables used only in assembly files */ 55 extern const WORD8 ih264_gai1_intrapred_luma_plane_coeffs[]; 56 extern const WORD8 ih264_gai1_intrapred_chroma_plane_coeffs1[]; 57 extern const WORD8 ih264_gai1_intrapred_chroma_plane_coeffs2[]; 58 extern const WORD8 ih264_gai1_intrapred_luma_8x8_horz_u[]; 59 60 /*****************************************************************************/ 61 /* Extern Function Declarations */ 62 /*****************************************************************************/ 63 64 typedef void ih264_intra_pred_ref_filtering_ft(UWORD8 *pu1_left, 65 UWORD8 *pu1_topleft, 66 UWORD8 *pu1_top, 67 UWORD8 *pu1_dst, 68 WORD32 left_strd, 69 WORD32 ngbr_avail); 70 71 typedef void ih264_intra_pred_luma_ft(UWORD8 *pu1_src, 72 UWORD8 *pu1_dst, 73 WORD32 src_strd, 74 WORD32 dst_strd, 75 WORD32 ngbr_avail); 76 77 typedef ih264_intra_pred_luma_ft ih264_intra_pred_chroma_ft; 78 79 /* C Declarations */ 80 /* Luma 4x4 Intra pred filters */ 81 ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_vert; 82 ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_horz; 83 ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_dc; 84 ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_diag_dl; 85 ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_diag_dr; 86 ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_vert_r; 87 ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_horz_d; 88 ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_vert_l; 89 ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_horz_u; 90 /* Luma 8x8 Intra pred filters */ 91 ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_vert; 92 ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_horz; 93 ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_dc; 94 ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_diag_dl; 95 ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_diag_dr; 96 ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_vert_r; 97 ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_horz_d; 98 ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_vert_l; 99 ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_horz_u; 100 /* Luma 16x16 Intra pred filters */ 101 ih264_intra_pred_luma_ft ih264_intra_pred_luma_16x16_mode_vert; 102 ih264_intra_pred_luma_ft ih264_intra_pred_luma_16x16_mode_horz; 103 ih264_intra_pred_luma_ft ih264_intra_pred_luma_16x16_mode_dc; 104 ih264_intra_pred_luma_ft ih264_intra_pred_luma_16x16_mode_plane; 105 /* Chroma 8x8 Intra pred filters */ 106 ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_dc; 107 ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_horz; 108 ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_vert; 109 ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_plane; 110 ih264_intra_pred_ref_filtering_ft ih264_intra_pred_luma_8x8_mode_ref_filtering; 111 112 /* A9 Declarations */ 113 /* Luma 4x4 Intra pred filters */ 114 ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_vert_a9q; 115 ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_horz_a9q; 116 ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_dc_a9q; 117 ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_diag_dl_a9q; 118 ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_diag_dr_a9q; 119 ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_vert_r_a9q; 120 ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_horz_d_a9q; 121 ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_vert_l_a9q; 122 ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_horz_u_a9q; 123 /* Luma 8x8 Intra pred filters */ 124 ih264_intra_pred_ref_filtering_ft ih264_intra_pred_luma_8x8_mode_ref_filtering_a9q; 125 ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_vert_a9q; 126 ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_horz_a9q; 127 ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_dc_a9q; 128 ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_diag_dl_a9q; 129 ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_diag_dr_a9q; 130 ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_vert_r_a9q; 131 ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_horz_d_a9q; 132 ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_vert_l_a9q; 133 ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_horz_u_a9q; 134 /* Luma 16x16 Intra pred filters */ 135 ih264_intra_pred_luma_ft ih264_intra_pred_luma_16x16_mode_vert_a9q; 136 ih264_intra_pred_luma_ft ih264_intra_pred_luma_16x16_mode_horz_a9q; 137 ih264_intra_pred_luma_ft ih264_intra_pred_luma_16x16_mode_dc_a9q; 138 ih264_intra_pred_luma_ft ih264_intra_pred_luma_16x16_mode_plane_a9q; 139 /* Chroma 8x8 Intra pred filters */ 140 ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_dc_a9q; 141 ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_horz_a9q; 142 ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_vert_a9q; 143 ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_plane_a9q; 144 145 /* SSSE3 Intrinsic Declarationss */ 146 /* Luma 4x4 Intra pred filters */ 147 ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_vert_ssse3; 148 ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_horz_ssse3; 149 ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_dc_ssse3; 150 ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_diag_dl_ssse3; 151 ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_diag_dr_ssse3; 152 ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_vert_r_ssse3; 153 ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_horz_d_ssse3; 154 ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_vert_l_ssse3; 155 ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_horz_u_ssse3; 156 /* Luma 8x8 Intra pred filters */ 157 ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_vert_ssse3; 158 ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_horz_ssse3; 159 ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_dc_ssse3; 160 ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_diag_dl_ssse3; 161 ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_diag_dr_ssse3; 162 ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_vert_r_ssse3; 163 ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_horz_d_ssse3; 164 ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_vert_l_ssse3; 165 ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_horz_u_ssse3; 166 /* Luma 16x16 Intra pred filters */ 167 ih264_intra_pred_luma_ft ih264_intra_pred_luma_16x16_mode_vert_ssse3; 168 ih264_intra_pred_luma_ft ih264_intra_pred_luma_16x16_mode_horz_ssse3; 169 ih264_intra_pred_luma_ft ih264_intra_pred_luma_16x16_mode_dc_ssse3; 170 ih264_intra_pred_luma_ft ih264_intra_pred_luma_16x16_mode_plane_ssse3; 171 /* Chroma 8x8 Intra pred filters */ 172 ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_dc_ssse3; 173 ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_horz_ssse3; 174 ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_vert_ssse3; 175 ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_plane_ssse3; 176 177 /* AV8 Declarations */ 178 /* Luma 4x4 Intra pred filters */ 179 ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_vert_av8; 180 ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_horz_av8; 181 ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_dc_av8; 182 ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_diag_dl_av8; 183 ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_diag_dr_av8; 184 ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_vert_r_av8; 185 ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_horz_d_av8; 186 ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_vert_l_av8; 187 ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_horz_u_av8; 188 /* Luma 8x8 Intra pred filters */ 189 ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_vert_av8; 190 ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_horz_av8; 191 ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_dc_av8; 192 ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_diag_dl_av8; 193 ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_diag_dr_av8; 194 ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_vert_r_av8; 195 ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_horz_d_av8; 196 ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_vert_l_av8; 197 ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_horz_u_av8; 198 /* Luma 16x16 Intra pred filters */ 199 ih264_intra_pred_luma_ft ih264_intra_pred_luma_16x16_mode_vert_av8; 200 ih264_intra_pred_luma_ft ih264_intra_pred_luma_16x16_mode_horz_av8; 201 ih264_intra_pred_luma_ft ih264_intra_pred_luma_16x16_mode_dc_av8; 202 ih264_intra_pred_luma_ft ih264_intra_pred_luma_16x16_mode_plane_av8; 203 /* Chroma 8x8 Intra pred filters */ 204 ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_dc_av8; 205 ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_horz_av8; 206 ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_vert_av8; 207 ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_plane_av8; 208 209 #endif /* _IH264_INTRA_PRED_FILTERS_H_ */ 210