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