1*a97c2a1fSXin Li /****************************************************************************** 2*a97c2a1fSXin Li * 3*a97c2a1fSXin Li * Copyright (C) 2015 The Android Open Source Project 4*a97c2a1fSXin Li * 5*a97c2a1fSXin Li * Licensed under the Apache License, Version 2.0 (the "License"); 6*a97c2a1fSXin Li * you may not use this file except in compliance with the License. 7*a97c2a1fSXin Li * You may obtain a copy of the License at: 8*a97c2a1fSXin Li * 9*a97c2a1fSXin Li * http://www.apache.org/licenses/LICENSE-2.0 10*a97c2a1fSXin Li * 11*a97c2a1fSXin Li * Unless required by applicable law or agreed to in writing, software 12*a97c2a1fSXin Li * distributed under the License is distributed on an "AS IS" BASIS, 13*a97c2a1fSXin Li * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*a97c2a1fSXin Li * See the License for the specific language governing permissions and 15*a97c2a1fSXin Li * limitations under the License. 16*a97c2a1fSXin Li * 17*a97c2a1fSXin Li ***************************************************************************** 18*a97c2a1fSXin Li * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore 19*a97c2a1fSXin Li */ 20*a97c2a1fSXin Li /** 21*a97c2a1fSXin Li ******************************************************************************* 22*a97c2a1fSXin Li * @file 23*a97c2a1fSXin Li * ideint.h 24*a97c2a1fSXin Li * 25*a97c2a1fSXin Li * @brief 26*a97c2a1fSXin Li * Deinterlacer API file 27*a97c2a1fSXin Li * 28*a97c2a1fSXin Li * @author 29*a97c2a1fSXin Li * Ittiam 30*a97c2a1fSXin Li * 31*a97c2a1fSXin Li * @par List of Functions: 32*a97c2a1fSXin Li * 33*a97c2a1fSXin Li * @remarks 34*a97c2a1fSXin Li * None 35*a97c2a1fSXin Li * 36*a97c2a1fSXin Li ******************************************************************************* 37*a97c2a1fSXin Li */ 38*a97c2a1fSXin Li 39*a97c2a1fSXin Li #ifndef __IDEINT_H__ 40*a97c2a1fSXin Li #define __IDEINT_H__ 41*a97c2a1fSXin Li 42*a97c2a1fSXin Li /** Error codes */ 43*a97c2a1fSXin Li typedef enum 44*a97c2a1fSXin Li { 45*a97c2a1fSXin Li /** Dummy error code */ 46*a97c2a1fSXin Li IDEINT_ERROR_NA = 0x7FFFFFFF, 47*a97c2a1fSXin Li 48*a97c2a1fSXin Li /** No error */ 49*a97c2a1fSXin Li IDEINT_ERROR_NONE = 0, 50*a97c2a1fSXin Li 51*a97c2a1fSXin Li /** Invalid Context */ 52*a97c2a1fSXin Li IDEINT_INVALID_CTXT, 53*a97c2a1fSXin Li 54*a97c2a1fSXin Li /** Start row not aligned to 8 */ 55*a97c2a1fSXin Li IDEINT_START_ROW_UNALIGNED, 56*a97c2a1fSXin Li 57*a97c2a1fSXin Li 58*a97c2a1fSXin Li }IDEINT_ERROR_T; 59*a97c2a1fSXin Li 60*a97c2a1fSXin Li /** Modes of deinterlacing */ 61*a97c2a1fSXin Li typedef enum 62*a97c2a1fSXin Li { 63*a97c2a1fSXin Li /** Dummy mode */ 64*a97c2a1fSXin Li IDEINT_MODE_NA = 0x7FFFFFFF, 65*a97c2a1fSXin Li 66*a97c2a1fSXin Li /** Weave two fields to get a frame, no filtering */ 67*a97c2a1fSXin Li IDEINT_MODE_WEAVE = 0, 68*a97c2a1fSXin Li 69*a97c2a1fSXin Li /** Weave two fields in static blocks and 70*a97c2a1fSXin Li spatial filtering for non-static blocks */ 71*a97c2a1fSXin Li IDEINT_MODE_SPATIAL, 72*a97c2a1fSXin Li 73*a97c2a1fSXin Li }IDEINT_MODE_T; 74*a97c2a1fSXin Li 75*a97c2a1fSXin Li /** Deinterlacer parameters */ 76*a97c2a1fSXin Li typedef struct 77*a97c2a1fSXin Li { 78*a97c2a1fSXin Li /** Mode for deinterlacing */ 79*a97c2a1fSXin Li IDEINT_MODE_T e_mode; 80*a97c2a1fSXin Li 81*a97c2a1fSXin Li /** Flag to indicate if the current field is top field, 82*a97c2a1fSXin Li * Prev and Next field are assumed to be of opposite parity 83*a97c2a1fSXin Li */ 84*a97c2a1fSXin Li WORD32 i4_cur_fld_top; 85*a97c2a1fSXin Li 86*a97c2a1fSXin Li /** Flag to signal if weave should be disabled. 87*a97c2a1fSXin Li * i.e. output already contains weaved fields 88*a97c2a1fSXin Li */ 89*a97c2a1fSXin Li WORD32 i4_disable_weave; 90*a97c2a1fSXin Li 91*a97c2a1fSXin Li /** CPU Architecture */ 92*a97c2a1fSXin Li ICV_ARCH_T e_arch; 93*a97c2a1fSXin Li 94*a97c2a1fSXin Li /** SOC */ 95*a97c2a1fSXin Li ICV_SOC_T e_soc; 96*a97c2a1fSXin Li 97*a97c2a1fSXin Li /** Pointer to a function for aligned allocation. 98*a97c2a1fSXin Li * If NULL, then malloc will be used internally 99*a97c2a1fSXin Li * Module will allocate if any extra memory is needed 100*a97c2a1fSXin Li */ 101*a97c2a1fSXin Li void *(*pf_aligned_alloc)(WORD32 alignment, WORD32 size); 102*a97c2a1fSXin Li 103*a97c2a1fSXin Li /** Pointer to a function for aligned free. 104*a97c2a1fSXin Li * If NULL, then free will be used internally 105*a97c2a1fSXin Li */ 106*a97c2a1fSXin Li void (*pf_aligned_free)(void *pv_buf); 107*a97c2a1fSXin Li 108*a97c2a1fSXin Li }ideint_params_t; 109*a97c2a1fSXin Li 110*a97c2a1fSXin Li /** Deinterlacer context size */ 111*a97c2a1fSXin Li WORD32 ideint_ctxt_size(void); 112*a97c2a1fSXin Li 113*a97c2a1fSXin Li /** Deinterlacer process */ 114*a97c2a1fSXin Li IDEINT_ERROR_T ideint_process(void *pv_ctxt, 115*a97c2a1fSXin Li icv_pic_t *ps_prv_fld, 116*a97c2a1fSXin Li icv_pic_t *ps_cur_fld, 117*a97c2a1fSXin Li icv_pic_t *ps_nxt_fld, 118*a97c2a1fSXin Li icv_pic_t *ps_out_frm, 119*a97c2a1fSXin Li ideint_params_t *ps_params, 120*a97c2a1fSXin Li WORD32 start_row, 121*a97c2a1fSXin Li WORD32 num_rows); 122*a97c2a1fSXin Li 123*a97c2a1fSXin Li #endif /* __IDEINT_H__ */ 124