Home | History | Annotate | Download | only in encoder
      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  *  ih264e_half_pel.h
     25  *
     26  * @brief
     27  *  Contains extern declarations of subpel functions used by the encoder
     28  *
     29  * @author
     30  *  ittiam
     31  *
     32  * @remarks
     33  *  none
     34  *
     35  *******************************************************************************
     36  */
     37 
     38 #ifndef IH264E_HALF_PEL_H_
     39 #define IH264E_HALF_PEL_H_
     40 
     41 /*****************************************************************************/
     42 /* Global constants                                                          */
     43 /*****************************************************************************/
     44 /*
     45  * Dimensions of subpel plane buffers
     46  */
     47 #define HP_PL_WD  MB_SIZE + 1
     48 #define HP_PL_HT  MB_SIZE + 1
     49 
     50 /*****************************************************************************/
     51 /* Extern Function Declarations                                              */
     52 /*****************************************************************************/
     53 
     54 /**
     55 *******************************************************************************
     56 *
     57 * @brief
     58 *  Interprediction luma filter for horizontal input (Filter run for width = 17
     59 *  and height =16)
     60 *
     61 * @par Description:
     62 *  Applies a 6 tap horizontal filter .The output is  clipped to 8 bits
     63 *  sec 8.4.2.2.1 titled "Luma sample interpolation process"
     64 *
     65 * @param[in] pu1_src
     66 *  UWORD8 pointer to the source
     67 *
     68 * @param[out] pu1_dst
     69 *  UWORD8 pointer to the destination
     70 *
     71 * @param[in] src_strd
     72 *  integer source stride
     73 *
     74 * @param[in] dst_strd
     75 *  integer destination stride
     76 *
     77 * @returns
     78 *
     79 * @remarks
     80 *  None
     81 *
     82 *******************************************************************************
     83 */
     84 typedef void ih264e_sixtapfilter_horz_ft(UWORD8 *pu1_src,
     85                                          UWORD8 *pu1_dst,
     86                                          WORD32 src_strd,
     87                                          WORD32 dst_strd);
     88 
     89 ih264e_sixtapfilter_horz_ft ih264e_sixtapfilter_horz;
     90 
     91 /* arm assembly */
     92 ih264e_sixtapfilter_horz_ft ih264e_sixtapfilter_horz_a9q;
     93 ih264e_sixtapfilter_horz_ft ih264e_sixtapfilter_horz_av8;
     94 
     95 /* x86 intrinsics*/
     96 ih264e_sixtapfilter_horz_ft ih264e_sixtapfilter_horz_ssse3;
     97 
     98 /**
     99 *******************************************************************************
    100 *
    101 * @brief
    102 *  This function implements a two stage cascaded six tap filter. It applies
    103 *  the six tap filter in the vertical direction on the predictor values,
    104 *  followed by applying the same filter in the horizontal direction on the
    105 *  output of the first stage. The six tap filtering operation is described in
    106 *  sec 8.4.2.2.1 titled "Luma sample interpolation process" (Filter run for
    107 *  width = 17 and height = 17)
    108 *
    109 * @par Description:
    110 *  The function interpolates the predictors first in the vertical direction and
    111 *  then in the horizontal direction to output the (1/2,1/2). The output of the
    112 *  first stage of the filter is stored in the buffer pointed to by
    113 *  pi16_pred1(only in C) in 16 bit precision.
    114 *
    115 * @param[in] pu1_src
    116 *  UWORD8 pointer to the source
    117 *
    118 * @param[out] pu1_dst1
    119 *  UWORD8 pointer to the destination (Horizontal filtered output)
    120 *
    121 * @param[out] pu1_dst2
    122 *  UWORD8 pointer to the destination (output after applying vertical filter to
    123 *  the intermediate horizontal output)
    124 *
    125 * @param[in] src_strd
    126 *  integer source stride
    127 
    128 * @param[in] dst_strd
    129 *  integer destination stride of pu1_dst
    130 *
    131 * @param[in] pi4_pred
    132 *  Pointer to 16bit intermediate buffer (used only in c)
    133 *
    134 * @param[in] i4_pred_strd
    135 *  integer destination stride of pi16_pred1
    136 *
    137 * @returns
    138 *
    139 * @remarks
    140 *  None
    141 *
    142 *******************************************************************************
    143 */
    144 typedef void ih264e_sixtap_filter_2dvh_vert_ft(UWORD8 *pu1_src,
    145                                                UWORD8 *pu1_dst1,
    146                                                UWORD8 *pu1_dst2,
    147                                                WORD32 src_strd,
    148                                                WORD32 dst_strd,
    149                                                WORD32 *pi4_pred,
    150                                                WORD32 i4_pred_strd);
    151 
    152 ih264e_sixtap_filter_2dvh_vert_ft ih264e_sixtap_filter_2dvh_vert;
    153 
    154 /* assembly */
    155 ih264e_sixtap_filter_2dvh_vert_ft ih264e_sixtap_filter_2dvh_vert_a9q;
    156 
    157 ih264e_sixtap_filter_2dvh_vert_ft ih264e_sixtap_filter_2dvh_vert_av8;
    158 
    159 /* x86 intrinsics */
    160 ih264e_sixtap_filter_2dvh_vert_ft ih264e_sixtap_filter_2dvh_vert_ssse3;
    161 
    162 #endif /* IH264E_HALF_PEL_H_ */
    163