Home | History | Annotate | Download | only in encoder
      1 /******************************************************************************
      2  *
      3  * Copyright (C) 2018 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 ihevce_had_satd.h
     23 *
     24 * \brief
     25 *    This file contains function prototypes of HAD and SATD functions
     26 *
     27 * \date
     28 *    18/09/2012
     29 *
     30 * \author
     31 *    Ittiam
     32 *
     33 ******************************************************************************
     34 */
     35 
     36 #ifndef _IHEVCE_HAD_SATD_H_
     37 #define _IHEVCE_HAD_SATD_H_
     38 
     39 /*****************************************************************************/
     40 /* Constant Macros                                                           */
     41 /*****************************************************************************/
     42 
     43 /*****************************************************************************/
     44 /* Function Macros                                                           */
     45 /*****************************************************************************/
     46 
     47 /*****************************************************************************/
     48 /* Typedefs                                                                  */
     49 /*****************************************************************************/
     50 
     51 /*****************************************************************************/
     52 /* Enums                                                                     */
     53 /*****************************************************************************/
     54 
     55 /* @breif enum for hadamard transform block sizes supported : 4x4 to 32x32 */
     56 typedef enum
     57 {
     58     HAD_4x4 = 0,
     59     HAD_8x8 = 1,
     60     HAD_16x16 = 2,
     61     HAD_32x32 = 3,
     62     HAD_INVALID = 4
     63 } HAD_SIZE_T;
     64 
     65 /*****************************************************************************/
     66 /* Structure                                                                 */
     67 /*****************************************************************************/
     68 
     69 /*****************************************************************************/
     70 /* Extern Function Declarations                                              */
     71 /*****************************************************************************/
     72 
     73 UWORD32 ihevce_HAD_4x4_8bit(
     74     UWORD8 *pu1_origin,
     75     WORD32 src_strd,
     76     UWORD8 *pu1_pred_buf,
     77     WORD32 pred_strd,
     78     WORD16 *pi2_dst,
     79     WORD32 dst_strd);
     80 
     81 UWORD32 ihevce_HAD_8x8_8bit(
     82     UWORD8 *pu1_origin,
     83     WORD32 src_strd,
     84     UWORD8 *pu1_pred_buf,
     85     WORD32 pred_strd,
     86     WORD16 *pi2_dst,
     87     WORD32 dst_strd);
     88 
     89 UWORD32 ihevce_compute_ac_had_8x8_8bit(
     90     UWORD8 *pu1_origin,
     91     WORD32 src_strd,
     92     UWORD8 *pu1_pred_buf,
     93     WORD32 pred_strd,
     94     WORD16 *pi2_dst,
     95     WORD32 dst_strd);
     96 
     97 UWORD32 ihevce_HAD_16x16_8bit(
     98     UWORD8 *pu1_origin,
     99     WORD32 src_strd,
    100     UWORD8 *pu1_pred_buf,
    101     WORD32 pred_strd,
    102     WORD16 *pi2_dst,
    103     WORD32 dst_strd);
    104 
    105 UWORD32 ihevce_HAD_32x32_8bit(
    106     UWORD8 *pu1_origin,
    107     WORD32 src_strd,
    108     UWORD8 *pu1_pred_buf,
    109     WORD32 pred_strd,
    110     WORD16 *pi2_dst,
    111     WORD32 dst_strd);
    112 
    113 typedef WORD32 FT_HAD_16X16_R(
    114     UWORD8 *pu1_src,
    115     WORD32 src_strd,
    116     UWORD8 *pu1_pred,
    117     WORD32 pred_strd,
    118     WORD16 *pi2_dst,
    119     WORD32 dst_strd,
    120     WORD32 **ppi4_hsad,
    121     WORD32 **ppi4_tu_split,
    122     WORD32 **ppi4_tu_early_cbf,
    123     WORD32 pos_x_y_4x4,
    124     WORD32 num_4x4_in_row,
    125     WORD32 lambda,
    126     WORD32 lambda_q_shift,
    127     WORD32 i4_frm_qstep,
    128     WORD32 i4_cur_depth,
    129     WORD32 i4_max_depth,
    130     WORD32 i4_max_tr_size,
    131     WORD32 *pi4_tu_split_cost,
    132     void *pv_func_sel);
    133 
    134 typedef UWORD32 FT_HAD_32X32_USING_16X16(
    135     WORD16 *pi2_16x16_had,
    136     WORD32 had16_strd,
    137     WORD16 *pi2_dst,
    138     WORD32 dst_strd,
    139     WORD32 i4_frm_qstep,
    140     WORD32 *pi4_cbf);
    141 
    142 typedef UWORD32 ihevce_compute_16x16HAD_using_8x8_ft(
    143     WORD16 *pi2_8x8_had,
    144     WORD32 had8_strd,
    145     WORD16 *pi2_dst,
    146     WORD32 dst_strd,
    147     WORD32 i4_frm_qstep,
    148     WORD32 *pi4_cbf);
    149 
    150 typedef WORD32 FT_HAD_8X8_USING_4_4X4_R(
    151     UWORD8 *pu1_src,
    152     WORD32 src_strd,
    153     UWORD8 *pu1_pred,
    154     WORD32 pred_strd,
    155     WORD16 *pi2_dst,
    156     WORD32 dst_strd,
    157     WORD32 **ppi4_hsad,
    158     WORD32 **ppi4_tu_split,
    159     WORD32 **ppi4_tu_early_cbf,
    160     WORD32 pos_x_y_4x4,
    161     WORD32 num_4x4_in_row,
    162     WORD32 lambda,
    163     WORD32 lambda_q_shift,
    164     WORD32 i4_frm_qstep,
    165     WORD32 i4_cur_depth,
    166     WORD32 i4_max_depth,
    167     WORD32 i4_max_tr_size,
    168     WORD32 *pi4_tu_split_cost,
    169     void *pv_func_sel);
    170 
    171 WORD32 ihevce_had_16x16_r_noise_detect(
    172     UWORD8 *pu1_src,
    173     WORD32 src_strd,
    174     UWORD8 *pu1_pred,
    175     WORD32 pred_strd,
    176     WORD16 *pi2_dst,
    177     WORD32 dst_strd,
    178     WORD32 pos_x_y_4x4,
    179     WORD32 num_4x4_in_row,
    180     WORD32 scaling_for_pred);
    181 
    182 UWORD32 ihevce_compute_8x8HAD_using_4x4_noise_detect(
    183     WORD16 *pi2_4x4_had,
    184     WORD32 had4_strd,
    185     WORD16 *pi2_dst,
    186     WORD32 dst_strd,
    187     WORD32 i4_frm_qstep,
    188     WORD32 *pi4_cbf);
    189 void ihevce_had4_4x4_noise_detect(
    190     UWORD8 *pu1_src,
    191     WORD32 src_strd,
    192     UWORD8 *pu1_pred,
    193     WORD32 pred_strd,
    194     WORD16 *pi2_dst4x4,
    195     WORD16 *pi2_residue,
    196     WORD32 dst_strd,
    197     WORD32 scaling_for_pred);
    198 
    199 void ihevce_had_8x8_using_4_4x4_noise_detect(
    200     UWORD8 *pu1_src,
    201     WORD32 src_strd,
    202     UWORD8 *pu1_pred,
    203     WORD32 pred_strd,
    204     WORD16 *pi2_dst,
    205     WORD32 dst_strd,
    206     WORD32 pos_x_y_4x4,
    207     WORD32 num_4x4_in_row,
    208     WORD32 scaling_for_pred);
    209 
    210 void ihevce_had_8x8_using_4_4x4(
    211     UWORD8 *pu1_src,
    212     WORD32 src_strd,
    213     UWORD8 *pu1_pred,
    214     WORD32 pred_strd,
    215     WORD16 *pi2_dst,
    216     WORD32 dst_strd,
    217     WORD32 **ppi4_hsad,
    218     WORD32 pos_x_y_4x4,
    219     WORD32 num_4x4_in_row);
    220 
    221 typedef void ihevce_had_nxn_r_ft(
    222     UWORD8 *pu1_src,
    223     WORD32 src_strd,
    224     UWORD8 *pu1_pred,
    225     WORD32 pred_strd,
    226     WORD16 *pi2_dst,
    227     WORD32 dst_strd,
    228     WORD32 **ppi4_hsad,
    229     WORD32 **ppi4_tu_split,
    230     WORD32 **ppi4_tu_early_cbf,
    231     WORD32 pos_x_y_4x4,
    232     WORD32 num_4x4_in_row,
    233     WORD32 lambda,
    234     WORD32 lambda_q_shift,
    235     WORD32 i4_frm_qstep,
    236     WORD32 i4_cur_depth,
    237     WORD32 i4_max_depth,
    238     WORD32 i4_max_tr_size,
    239     WORD32 *pi4_tu_split_cost,
    240     void *pv_func_sel);
    241 
    242 UWORD32 ihevce_mat_add_shift_satd_16bit(
    243     WORD16 *pi2_buf1,
    244     WORD32 buf1_strd,
    245     WORD16 *pi2_buf2,
    246     WORD32 buf2_strd,
    247     WORD16 *pi2_dst,
    248     WORD32 dst_strd,
    249     WORD32 size,
    250     WORD32 shift,
    251     WORD32 threshold,
    252     WORD32 *pi4_cbf);
    253 
    254 UWORD32 ihevce_mat_sub_shift_satd_16bit(
    255     WORD16 *pi2_buf1,
    256     WORD32 buf1_strd,
    257     WORD16 *pi2_buf2,
    258     WORD32 buf2_strd,
    259     WORD16 *pi2_dst,
    260     WORD32 dst_strd,
    261     WORD32 size,
    262     WORD32 shift,
    263     WORD32 threshold,
    264     WORD32 *pi4_cbf);
    265 
    266 void ihevce_mat_add_16bit(
    267     WORD16 *pi2_buf1,
    268     WORD32 buf1_strd,
    269     WORD16 *pi2_buf2,
    270     WORD32 buf2_strd,
    271     WORD16 *pi2_dst,
    272     WORD32 dst_strd,
    273     WORD32 size,
    274     WORD32 threshold);
    275 
    276 void ihevce_mat_sub_16bit(
    277     WORD16 *pi2_buf1,
    278     WORD32 buf1_strd,
    279     WORD16 *pi2_buf2,
    280     WORD32 buf2_strd,
    281     WORD16 *pi2_dst,
    282     WORD32 dst_strd,
    283     WORD32 size,
    284     WORD32 threshold);
    285 
    286 UWORD32 ihevce_compute_16x16HAD_using_8x8_noise_detect(
    287     WORD16 *pi2_8x8_had,
    288     WORD32 had8_strd,
    289     WORD16 *pi2_dst,
    290     WORD32 dst_strd,
    291     WORD32 i4_frm_qstep,
    292     WORD32 *pi4_cbf);
    293 
    294 /******* C declarations ****************/
    295 FT_HAD_8X8_USING_4_4X4_R ihevce_had_8x8_using_4_4x4_r;
    296 FT_HAD_16X16_R ihevce_had_16x16_r;
    297 FT_HAD_32X32_USING_16X16 ihevce_compute_32x32HAD_using_16x16;
    298 
    299 /******** A9Q declarations **********/
    300 FT_HAD_8X8_USING_4_4X4_R ihevce_had_8x8_using_4_4x4_r_neon;
    301 FT_HAD_16X16_R ihevce_had_16x16_r_neon;
    302 FT_HAD_32X32_USING_16X16 ihevce_compute_32x32HAD_using_16x16_neon;
    303 
    304 #endif /* _IHEVCE_HAD_SATD_H_ */
    305