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 * @file 23 * ih264_intra_pred_filters.h 24 * 25 * @brief 26 * Declarations of functions used for intra prediction 27 * 28 * @author 29 * Ittiam 30 * 31 * @remarks 32 * None 33 * 34 ******************************************************************************* 35 */ 36 37#ifndef IH264_INTRA_PRED_FILTERS_H_ 38 39#define IH264_INTRA_PRED_FILTERS_H_ 40 41/*****************************************************************************/ 42/* Macro Expansion */ 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/*! Filter (1,1) i.e (a + b) / 2 */ 48#define FILT11(a,b) ((a + b + 1)>>1) 49/*****************************************************************************/ 50/* Global Variables */ 51/*****************************************************************************/ 52 53/* Global variables used only in assembly files*/ 54extern const WORD8 ih264_gai1_intrapred_luma_plane_coeffs[]; 55extern const WORD8 ih264_gai1_intrapred_chroma_plane_coeffs1[]; 56extern const WORD8 ih264_gai1_intrapred_chroma_plane_coeffs2[]; 57extern const WORD8 ih264_gai1_intrapred_luma_8x8_horz_u[]; 58 59/*****************************************************************************/ 60/* Extern Function Declarations */ 61/*****************************************************************************/ 62 63 64typedef 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 71typedef 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/* No Neon Definitions */ 78 79/* Luma 4x4 Intra pred filters */ 80 81ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_vert; 82 83ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_horz; 84 85ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_dc; 86 87ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_diag_dl; 88 89ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_diag_dr; 90 91ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_vert_r; 92 93ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_horz_d; 94 95ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_vert_l; 96 97ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_horz_u; 98 99/* Luma 8x8 Intra pred filters */ 100 101ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_vert; 102 103ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_horz; 104 105ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_dc; 106 107ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_diag_dl; 108 109ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_diag_dr; 110 111ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_vert_r; 112 113ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_horz_d; 114 115ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_vert_l; 116 117ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_horz_u; 118 119/* Luma 16x16 Intra pred filters */ 120 121ih264_intra_pred_luma_ft ih264_intra_pred_luma_16x16_mode_vert; 122 123ih264_intra_pred_luma_ft ih264_intra_pred_luma_16x16_mode_horz; 124 125ih264_intra_pred_luma_ft ih264_intra_pred_luma_16x16_mode_dc; 126 127ih264_intra_pred_luma_ft ih264_intra_pred_luma_16x16_mode_plane; 128 129/* Chroma 8x8 Intra pred filters */ 130 131typedef ih264_intra_pred_luma_ft ih264_intra_pred_chroma_ft; 132 133ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_dc; 134 135ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_horz; 136 137ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_vert; 138 139ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_plane; 140 141 142ih264_intra_pred_ref_filtering_ft ih264_intra_pred_luma_8x8_mode_ref_filtering; 143 144/* A9 Definition */ 145 146/* Luma 4x4 Intra pred filters */ 147 148ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_vert_a9q; 149 150ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_horz_a9q; 151 152ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_dc_a9q; 153 154ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_diag_dl_a9q; 155 156ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_diag_dr_a9q; 157 158ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_vert_r_a9q; 159 160ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_horz_d_a9q; 161 162ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_vert_l_a9q; 163 164ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_horz_u_a9q; 165 166/* Luma 8x8 Intra pred filters */ 167 168ih264_intra_pred_ref_filtering_ft ih264_intra_pred_luma_8x8_mode_ref_filtering_a9q; 169 170ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_vert_a9q; 171 172ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_horz_a9q; 173 174ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_dc_a9q; 175 176ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_diag_dl_a9q; 177 178ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_diag_dr_a9q; 179 180ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_vert_r_a9q; 181 182ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_horz_d_a9q; 183 184ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_vert_l_a9q; 185 186ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_horz_u_a9q; 187 188/* Luma 16x16 Intra pred filters */ 189 190ih264_intra_pred_luma_ft ih264_intra_pred_luma_16x16_mode_vert_a9q; 191 192ih264_intra_pred_luma_ft ih264_intra_pred_luma_16x16_mode_horz_a9q; 193 194ih264_intra_pred_luma_ft ih264_intra_pred_luma_16x16_mode_dc_a9q; 195 196ih264_intra_pred_luma_ft ih264_intra_pred_luma_16x16_mode_plane_a9q; 197 198/* Chroma 8x8 Intra pred filters */ 199 200ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_dc_a9q; 201 202ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_horz_a9q; 203 204ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_vert_a9q; 205 206ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_plane_a9q; 207 208/* X86 Intrinsic Definitions */ 209 210/* Luma 4x4 Intra pred filters */ 211 212ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_vert_ssse3; 213 214ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_horz_ssse3; 215 216ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_dc_ssse3; 217 218ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_diag_dl_ssse3; 219 220ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_diag_dr_ssse3; 221 222ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_vert_r_ssse3; 223 224ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_horz_d_ssse3; 225 226ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_vert_l_ssse3; 227 228ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_horz_u_ssse3; 229 230/* Luma 8x8 Intra pred filters */ 231 232ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_vert_ssse3; 233 234ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_horz_ssse3; 235 236ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_dc_ssse3; 237 238ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_diag_dl_ssse3; 239 240ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_diag_dr_ssse3; 241 242ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_vert_r_ssse3; 243 244ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_horz_d_ssse3; 245 246ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_vert_l_ssse3; 247 248ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_horz_u_ssse3; 249 250/* Luma 16x16 Intra pred filters */ 251 252ih264_intra_pred_luma_ft ih264_intra_pred_luma_16x16_mode_vert_ssse3; 253 254ih264_intra_pred_luma_ft ih264_intra_pred_luma_16x16_mode_horz_ssse3; 255 256ih264_intra_pred_luma_ft ih264_intra_pred_luma_16x16_mode_dc_ssse3; 257 258ih264_intra_pred_luma_ft ih264_intra_pred_luma_16x16_mode_plane_ssse3; 259 260/* Chroma 8x8 Intra pred filters */ 261 262ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_dc_ssse3; 263 264ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_horz_ssse3; 265 266ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_vert_ssse3; 267 268ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_plane_ssse3; 269 270/* AV8 Definition */ 271 272/* Luma 4x4 Intra pred filters */ 273ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_vert_av8; 274 275ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_horz_av8; 276 277ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_dc_av8; 278 279ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_diag_dl_av8; 280 281ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_diag_dr_av8; 282 283ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_vert_r_av8; 284 285ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_horz_d_av8; 286 287ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_vert_l_av8; 288 289ih264_intra_pred_luma_ft ih264_intra_pred_luma_4x4_mode_horz_u_av8; 290 291/* Luma 8x8 Intra pred filters */ 292 293ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_vert_av8; 294 295ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_horz_av8; 296 297ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_dc_av8; 298 299ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_diag_dl_av8; 300 301ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_diag_dr_av8; 302 303ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_vert_r_av8; 304 305ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_horz_d_av8; 306 307ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_vert_l_av8; 308 309ih264_intra_pred_luma_ft ih264_intra_pred_luma_8x8_mode_horz_u_av8; 310 311/* Luma 16x16 Intra pred filters */ 312 313ih264_intra_pred_luma_ft ih264_intra_pred_luma_16x16_mode_vert_av8; 314 315ih264_intra_pred_luma_ft ih264_intra_pred_luma_16x16_mode_horz_av8; 316 317ih264_intra_pred_luma_ft ih264_intra_pred_luma_16x16_mode_dc_av8; 318 319ih264_intra_pred_luma_ft ih264_intra_pred_luma_16x16_mode_plane_av8; 320 321/* Chroma 8x8 Intra pred filters */ 322 323ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_dc_av8; 324 325ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_horz_av8; 326 327ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_vert_av8; 328 329ih264_intra_pred_chroma_ft ih264_intra_pred_chroma_8x8_mode_plane_av8; 330 331#endif /* IH264_INTRA_PRED_FILTERS_H_ */ 332