Home | History | Annotate | Download | only in common
      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_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 _IH264_INTER_PRED_H_
     91 #define _IH264_INTER_PRED_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 ih264_inter_pred_luma_ft(UWORD8 *pu1_src,
    104                                       UWORD8 *pu1_dst,
    105                                       WORD32 src_strd,
    106                                       WORD32 dst_strd,
    107                                       WORD32 ht,
    108                                       WORD32 wd,
    109                                       UWORD8* pu1_tmp,
    110                                       WORD32 dydx);
    111 
    112 typedef void ih264_interleave_copy_ft(UWORD8 *pu1_src,
    113                                       UWORD8 *pu1_dst,
    114                                       WORD32 src_strd,
    115                                       WORD32 dst_strd,
    116                                       WORD32 ht,
    117                                       WORD32 wd);
    118 
    119 typedef void ih264_inter_pred_luma_bilinear_ft(UWORD8 *pu1_src1,
    120                                                UWORD8 *pu1_src2,
    121                                                UWORD8 *pu1_dst,
    122                                                WORD32 src_strd1,
    123                                                WORD32 src_strd2,
    124                                                WORD32 dst_strd,
    125                                                WORD32 height,
    126                                                WORD32 width);
    127 
    128 typedef void ih264_inter_pred_chroma_ft(UWORD8 *pu1_src,
    129                                         UWORD8 *pu1_dst,
    130                                         WORD32 src_strd,
    131                                         WORD32 dst_strd,
    132                                         WORD32 dx,
    133                                         WORD32 dy,
    134                                         WORD32 ht,
    135                                         WORD32 wd);
    136 
    137 /* No NEON Declarations */
    138 
    139 ih264_inter_pred_luma_ft ih264_inter_pred_luma_copy;
    140 
    141 ih264_interleave_copy_ft ih264_interleave_copy;
    142 
    143 ih264_inter_pred_luma_ft ih264_inter_pred_luma_horz;
    144 
    145 ih264_inter_pred_luma_ft ih264_inter_pred_luma_vert;
    146 
    147 ih264_inter_pred_luma_ft ih264_inter_pred_luma_horz_hpel_vert_hpel;
    148 
    149 ih264_inter_pred_luma_ft ih264_inter_pred_luma_vert_qpel;
    150 
    151 ih264_inter_pred_luma_ft ih264_inter_pred_luma_horz_qpel;
    152 
    153 ih264_inter_pred_luma_ft ih264_inter_pred_luma_horz_qpel_vert_qpel;
    154 
    155 ih264_inter_pred_luma_ft ih264_inter_pred_luma_horz_qpel_vert_hpel;
    156 
    157 ih264_inter_pred_luma_ft ih264_inter_pred_luma_horz_hpel_vert_qpel;
    158 
    159 ih264_inter_pred_luma_bilinear_ft ih264_inter_pred_luma_bilinear;
    160 
    161 ih264_inter_pred_chroma_ft ih264_inter_pred_chroma;
    162 
    163 /* A9 NEON Declarations */
    164 ih264_inter_pred_luma_ft ih264_inter_pred_luma_copy_a9q;
    165 
    166 ih264_interleave_copy_ft ih264_interleave_copy_a9;
    167 
    168 ih264_inter_pred_luma_ft ih264_inter_pred_luma_horz_a9q;
    169 
    170 ih264_inter_pred_luma_ft ih264_inter_pred_luma_vert_a9q;
    171 
    172 ih264_inter_pred_luma_bilinear_ft ih264_inter_pred_luma_bilinear_a9q;
    173 
    174 ih264_inter_pred_luma_ft ih264_inter_pred_luma_horz_hpel_vert_hpel_a9q;
    175 
    176 ih264_inter_pred_luma_ft ih264_inter_pred_luma_horz_qpel_a9q;
    177 
    178 ih264_inter_pred_luma_ft ih264_inter_pred_luma_vert_qpel_a9q;
    179 
    180 ih264_inter_pred_luma_ft ih264_inter_pred_luma_horz_qpel_vert_qpel_a9q;
    181 
    182 ih264_inter_pred_luma_ft ih264_inter_pred_luma_horz_qpel_vert_hpel_a9q;
    183 
    184 ih264_inter_pred_luma_ft ih264_inter_pred_luma_horz_hpel_vert_qpel_a9q;
    185 
    186 ih264_inter_pred_chroma_ft ih264_inter_pred_chroma_a9q;
    187 
    188 /* AV8 NEON Declarations */
    189 ih264_inter_pred_luma_ft ih264_inter_pred_luma_copy_av8;
    190 
    191 ih264_interleave_copy_ft ih264_interleave_copy_av8;
    192 
    193 ih264_inter_pred_luma_ft ih264_inter_pred_luma_horz_av8;
    194 
    195 ih264_inter_pred_luma_ft ih264_inter_pred_luma_vert_av8;
    196 
    197 ih264_inter_pred_luma_ft ih264_inter_pred_luma_horz_hpel_vert_hpel_av8;
    198 
    199 ih264_inter_pred_luma_ft ih264_inter_pred_luma_horz_qpel_av8;
    200 
    201 ih264_inter_pred_luma_ft ih264_inter_pred_luma_vert_qpel_av8;
    202 
    203 ih264_inter_pred_luma_ft ih264_inter_pred_luma_horz_qpel_vert_qpel_av8;
    204 
    205 ih264_inter_pred_luma_ft ih264_inter_pred_luma_horz_qpel_vert_hpel_av8;
    206 
    207 ih264_inter_pred_luma_ft ih264_inter_pred_luma_horz_hpel_vert_qpel_av8;
    208 
    209 ih264_inter_pred_chroma_ft ih264_inter_pred_chroma_av8;
    210 
    211 ih264_inter_pred_chroma_ft ih264_inter_pred_chroma_dx_zero_av8;
    212 
    213 ih264_inter_pred_chroma_ft ih264_inter_pred_chroma_dy_zero_av8;
    214 
    215 
    216 /* SSSE3 Intrinsic Declarations */
    217 ih264_inter_pred_luma_ft ih264_inter_pred_luma_copy_ssse3;
    218 
    219 ih264_inter_pred_luma_ft ih264_inter_pred_luma_horz_ssse3;
    220 
    221 ih264_inter_pred_luma_ft ih264_inter_pred_luma_vert_ssse3;
    222 
    223 ih264_inter_pred_luma_bilinear_ft ih264_inter_pred_luma_bilinear_ssse3;
    224 
    225 ih264_inter_pred_luma_ft ih264_inter_pred_luma_horz_hpel_vert_hpel_ssse3;
    226 
    227 ih264_inter_pred_luma_ft ih264_inter_pred_luma_horz_qpel_ssse3;
    228 
    229 ih264_inter_pred_luma_ft ih264_inter_pred_luma_vert_qpel_ssse3;
    230 
    231 ih264_inter_pred_luma_ft ih264_inter_pred_luma_horz_qpel_vert_qpel_ssse3;
    232 
    233 ih264_inter_pred_luma_ft ih264_inter_pred_luma_horz_qpel_vert_hpel_ssse3;
    234 
    235 ih264_inter_pred_luma_ft ih264_inter_pred_luma_horz_hpel_vert_qpel_ssse3;
    236 
    237 ih264_inter_pred_chroma_ft ih264_inter_pred_chroma_ssse3;
    238 
    239 #endif
    240 
    241 /** Nothing past this point */
    242