1 /****************************************************************************** 2 * 3 * Copyright (C) 2022 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 * isvc_inter_pred_filters.h 25 * 26 * @brief 27 * Declarations of functions used for inter prediction 28 * 29 * @author 30 * Ittiam 31 * 32 * @par List of Functions: 33 * -ih264_inter_pred_luma_copy 34 * -ih264_interleave_copy 35 * -ih264_inter_pred_luma_horz 36 * -ih264_inter_pred_luma_vert 37 * -ih264_inter_pred_luma_horz_hpel_vert_hpel 38 * -ih264_inter_pred_luma_vert_qpel 39 * -ih264_inter_pred_luma_horz_qpel 40 * -ih264_inter_pred_luma_horz_qpel_vert_qpel 41 * -ih264_inter_pred_luma_horz_qpel_vert_hpel 42 * -ih264_inter_pred_luma_horz_hpel_vert_qpel 43 * -ih264_inter_pred_luma_bilinear 44 * -ih264_inter_pred_chroma 45 * -ih264_inter_pred_luma_copy_a9q 46 * -ih264_interleave_copy_a9 47 * -ih264_inter_pred_luma_horz_a9q 48 * -ih264_inter_pred_luma_vert_a9q 49 * -ih264_inter_pred_luma_bilinear_a9q 50 * -ih264_inter_pred_luma_horz_hpel_vert_hpel_a9q 51 * -ih264_inter_pred_luma_horz_qpel_a9q 52 * -ih264_inter_pred_luma_vert_qpel_a9q 53 * -ih264_inter_pred_luma_horz_qpel_vert_qpel_a9q 54 * -ih264_inter_pred_luma_horz_qpel_vert_hpel_a9q 55 * -ih264_inter_pred_luma_horz_hpel_vert_qpel_a9q 56 * -ih264_inter_pred_chroma_a9q 57 * -ih264_inter_pred_luma_copy_av8 58 * -ih264_interleave_copy_av8 59 * -ih264_inter_pred_luma_horz_av8 60 * -ih264_inter_pred_luma_vert_av8 61 * -ih264_inter_pred_luma_bilinear_av8 62 * -ih264_inter_pred_luma_horz_hpel_vert_hpel_av8 63 * -ih264_inter_pred_luma_horz_qpel_av8 64 * -ih264_inter_pred_luma_vert_qpel_av8 65 * -ih264_inter_pred_luma_horz_qpel_vert_qpel_av8 66 * -ih264_inter_pred_luma_horz_qpel_vert_hpel_av8 67 * -ih264_inter_pred_luma_horz_hpel_vert_qpel_av8 68 * -ih264_inter_pred_chroma_av8 69 * -ih264_inter_pred_chroma_dx_zero_av8 70 * -ih264_inter_pred_chroma_dy_zero_av8 71 * -ih264_inter_pred_luma_copy_ssse3 72 * -ih264_inter_pred_luma_copy_ssse3 73 * -ih264_inter_pred_luma_horz_ssse3 74 * -ih264_inter_pred_luma_vert_ssse3 75 * -ih264_inter_pred_luma_bilinear_ssse3 76 * -ih264_inter_pred_luma_horz_hpel_vert_hpel_ssse3 77 * -ih264_inter_pred_luma_horz_qpel_ssse3 78 * -ih264_inter_pred_luma_vert_qpel_ssse3 79 * -ih264_inter_pred_luma_horz_qpel_vert_qpel_ssse3 80 * -ih264_inter_pred_luma_horz_qpel_vert_hpel_ssse3 81 * -ih264_inter_pred_luma_horz_hpel_vert_qpel_ssse3 82 * -ih264_inter_pred_chroma_ssse3 83 * 84 * @remarks 85 * None 86 * 87 ******************************************************************************* 88 */ 89 90 #ifndef _ISVC_INTER_PRED_FILTERS_H_ 91 #define _ISVC_INTER_PRED_FILTERS_H_ 92 93 /*****************************************************************************/ 94 /* Constant Data variables */ 95 /*****************************************************************************/ 96 97 extern const WORD32 ih264_g_six_tap[3]; /* coefficients for 6 tap filtering*/ 98 99 /*****************************************************************************/ 100 /* Extern Function Declarations */ 101 /*****************************************************************************/ 102 103 typedef void FT_INTER_PRED_LUMA(UWORD8 *pu1_src, UWORD8 *pu1_dst, WORD32 src_strd, WORD32 dst_strd, 104 WORD32 ht, WORD32 wd, UWORD8 *pu1_tmp, WORD32 dydx); 105 106 typedef void FT_INTERLEAVE_COPY(UWORD8 *pu1_src, UWORD8 *pu1_dst, WORD32 src_strd, WORD32 dst_strd, 107 WORD32 ht, WORD32 wd); 108 109 typedef void FT_INTER_PRED_LUMA_BILINEAR(UWORD8 *pu1_src1, UWORD8 *pu1_src2, UWORD8 *pu1_dst, 110 WORD32 src_strd1, WORD32 src_strd2, WORD32 dst_strd, 111 WORD32 height, WORD32 width); 112 113 typedef void FT_INTER_PRED_CHROMA(UWORD8 *pu1_src, UWORD8 *pu1_dst, WORD32 src_strd, 114 WORD32 dst_strd, WORD32 dx, WORD32 dy, WORD32 ht, WORD32 wd); 115 116 /* No NEON Declarations */ 117 118 FT_INTER_PRED_LUMA ih264_inter_pred_luma_copy; 119 120 FT_INTERLEAVE_COPY ih264_interleave_copy; 121 122 FT_INTER_PRED_LUMA ih264_inter_pred_luma_horz; 123 124 FT_INTER_PRED_LUMA ih264_inter_pred_luma_vert; 125 126 FT_INTER_PRED_LUMA ih264_inter_pred_luma_horz_hpel_vert_hpel; 127 128 FT_INTER_PRED_LUMA ih264_inter_pred_luma_vert_qpel; 129 130 FT_INTER_PRED_LUMA ih264_inter_pred_luma_horz_qpel; 131 132 FT_INTER_PRED_LUMA ih264_inter_pred_luma_horz_qpel_vert_qpel; 133 134 FT_INTER_PRED_LUMA ih264_inter_pred_luma_horz_qpel_vert_hpel; 135 136 FT_INTER_PRED_LUMA ih264_inter_pred_luma_horz_hpel_vert_qpel; 137 138 FT_INTER_PRED_LUMA_BILINEAR ih264_inter_pred_luma_bilinear; 139 140 FT_INTER_PRED_CHROMA ih264_inter_pred_chroma; 141 142 /* A9 NEON Declarations */ 143 FT_INTER_PRED_LUMA ih264_inter_pred_luma_copy_a9q; 144 145 FT_INTERLEAVE_COPY ih264_interleave_copy_a9; 146 147 FT_INTER_PRED_LUMA ih264_inter_pred_luma_horz_a9q; 148 149 FT_INTER_PRED_LUMA ih264_inter_pred_luma_vert_a9q; 150 151 FT_INTER_PRED_LUMA_BILINEAR ih264_inter_pred_luma_bilinear_a9q; 152 153 FT_INTER_PRED_LUMA ih264_inter_pred_luma_horz_hpel_vert_hpel_a9q; 154 155 FT_INTER_PRED_LUMA ih264_inter_pred_luma_horz_qpel_a9q; 156 157 FT_INTER_PRED_LUMA ih264_inter_pred_luma_vert_qpel_a9q; 158 159 FT_INTER_PRED_LUMA ih264_inter_pred_luma_horz_qpel_vert_qpel_a9q; 160 161 FT_INTER_PRED_LUMA ih264_inter_pred_luma_horz_qpel_vert_hpel_a9q; 162 163 FT_INTER_PRED_LUMA ih264_inter_pred_luma_horz_hpel_vert_qpel_a9q; 164 165 FT_INTER_PRED_CHROMA ih264_inter_pred_chroma_a9q; 166 167 /* AV8 NEON Declarations */ 168 FT_INTER_PRED_LUMA ih264_inter_pred_luma_copy_av8; 169 170 FT_INTERLEAVE_COPY ih264_interleave_copy_av8; 171 172 FT_INTER_PRED_LUMA ih264_inter_pred_luma_horz_av8; 173 174 FT_INTER_PRED_LUMA ih264_inter_pred_luma_vert_av8; 175 176 FT_INTER_PRED_LUMA ih264_inter_pred_luma_horz_hpel_vert_hpel_av8; 177 178 FT_INTER_PRED_LUMA ih264_inter_pred_luma_horz_qpel_av8; 179 180 FT_INTER_PRED_LUMA ih264_inter_pred_luma_vert_qpel_av8; 181 182 FT_INTER_PRED_LUMA ih264_inter_pred_luma_horz_qpel_vert_qpel_av8; 183 184 FT_INTER_PRED_LUMA ih264_inter_pred_luma_horz_qpel_vert_hpel_av8; 185 186 FT_INTER_PRED_LUMA ih264_inter_pred_luma_horz_hpel_vert_qpel_av8; 187 188 FT_INTER_PRED_CHROMA ih264_inter_pred_chroma_av8; 189 190 FT_INTER_PRED_CHROMA ih264_inter_pred_chroma_dx_zero_av8; 191 192 FT_INTER_PRED_CHROMA ih264_inter_pred_chroma_dy_zero_av8; 193 194 /* SSSE3 Intrinsic Declarations */ 195 FT_INTER_PRED_LUMA ih264_inter_pred_luma_copy_ssse3; 196 197 FT_INTER_PRED_LUMA ih264_inter_pred_luma_horz_ssse3; 198 199 FT_INTER_PRED_LUMA ih264_inter_pred_luma_vert_ssse3; 200 201 FT_INTER_PRED_LUMA_BILINEAR ih264_inter_pred_luma_bilinear_ssse3; 202 203 FT_INTER_PRED_LUMA ih264_inter_pred_luma_horz_hpel_vert_hpel_ssse3; 204 205 FT_INTER_PRED_LUMA ih264_inter_pred_luma_horz_qpel_ssse3; 206 207 FT_INTER_PRED_LUMA ih264_inter_pred_luma_vert_qpel_ssse3; 208 209 FT_INTER_PRED_LUMA ih264_inter_pred_luma_horz_qpel_vert_qpel_ssse3; 210 211 FT_INTER_PRED_LUMA ih264_inter_pred_luma_horz_qpel_vert_hpel_ssse3; 212 213 FT_INTER_PRED_LUMA ih264_inter_pred_luma_horz_hpel_vert_qpel_ssse3; 214 215 FT_INTER_PRED_CHROMA ih264_inter_pred_chroma_ssse3; 216 217 /** Nothing past this point */ 218 219 #endif 220