Home | History | Annotate | Download | only in inc
      1 /*
      2  * Copyright (C) 2011 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 /**
     17  ******************************************************************************
     18  * @file        M4VIFI_FiltersAPI.h
     19  * @brief        External API and Data definitions for the video filter library
     20  * @note        This file defines and declares data common to the video filter library:
     21  *                    -# data types
     22  *                    -# error codes
     23  *                    -# external API's
     24  *                    -# API level structure definition
     25  ******************************************************************************
     26 */
     27 
     28 #ifndef _M4VIFI_FILTERSAPI_H_
     29 
     30 #define _M4VIFI_FILTERSAPI_H_
     31 
     32 #ifdef __cplusplus
     33 
     34 extern "C" {
     35 
     36 #endif /* __cplusplus */
     37 
     38     /**
     39      ***********************************************************
     40      *                    Data types definition
     41      ***********************************************************
     42     */
     43 
     44     typedef unsigned char M4VIFI_UInt8;
     45     typedef char M4VIFI_Int8;
     46     typedef unsigned short M4VIFI_UInt16;
     47     typedef unsigned long M4VIFI_UInt32;
     48     typedef short M4VIFI_Int16;
     49     typedef long M4VIFI_Int32;
     50     typedef float M4VIFI_Float;
     51     typedef double M4VIFI_Double;
     52     typedef unsigned char M4VIFI_ErrorCode;
     53 
     54 /**
     55  ***********************************************************
     56  *                    Error codes definition
     57  ***********************************************************
     58 */
     59 #define M4VIFI_OK                        0
     60 #define M4VIFI_INVALID_PARAM            7
     61 #define M4VIFI_ILLEGAL_FRAME_HEIGHT        8
     62 #define M4VIFI_ILLEGAL_FRAME_WIDTH        9
     63 
     64 /**
     65  ***********************************************************
     66  *                    Other basic definitions
     67  ***********************************************************
     68 */
     69 #define CNST    const
     70 #define EXTERN    extern
     71 
     72 #ifndef NULL
     73 #define NULL    0
     74 
     75 #endif
     76 #ifndef FALSE
     77 #define FALSE    0
     78 #define TRUE    !FALSE
     79 
     80 #endif
     81 
     82 /**
     83  ***********************************************************
     84  *                    Structures definition
     85  ***********************************************************
     86 */
     87 
     88 /**
     89  ******************************************************************************
     90  * structure    M4VIFI_ImagePlane
     91  * @brief        Texture (YUV) planes structure
     92  * @note        This structure details the image planes for the output textures:
     93  *                sizes (in pixels) are luma plane sizes, the 3 pointers point
     94  *                to the Y, U and V buffers which store data in planar format.
     95  ******************************************************************************
     96 */
     97 
     98     typedef struct
     99         {
    100         M4VIFI_UInt32 u_width;   /**< Width of luma in pixel unit */
    101         M4VIFI_UInt32 u_height;  /**< Height of luma in pixel unit */
    102         M4VIFI_UInt32 u_topleft; /**< Pointer to first texture active pixel */
    103         M4VIFI_UInt32 u_stride;  /**< Stride value */
    104         M4VIFI_UInt8 *pac_data;  /**< Pointer to the data */
    105         } M4VIFI_ImagePlane;
    106 
    107 /**
    108  ******************************************************************************
    109  * structure    M4VIFI_FramingData
    110  * @brief        Data necessary to add an overlay on an image
    111  * @note        This structure details the position and the data of the overlay
    112  ******************************************************************************
    113 */
    114     typedef struct
    115         {
    116         M4VIFI_UInt32
    117             m_xPosStep; /**< X positioning of the overlay vs main picture.
    118                                   X positioning is expressed in percentage vs the main
    119                                    picture width.
    120                                   m_xPosStep must be expressed by step of 1% and between
    121                                   -50/+50%.
    122                                   0% means overlay is centered vs main picture on
    123                                    X abscissa. */
    124         M4VIFI_UInt32
    125             m_yPosStep; /**< Y positioning of the overlay vs main picture.
    126                                   Y positioning is expressed in percentage vs the main
    127                                    picture width.
    128                                   m_xPosStep must be expressed by step of 1% and between
    129                                    -50/+50%.
    130                                   0% means overlay is centered vs main picture on
    131                                    Y abscissa. */
    132 
    133         M4VIFI_ImagePlane
    134             *
    135                 m_imagePlane; /**< Pointer to the framing image with alpha channel */
    136         } M4VIFI_FramingData;
    137 
    138 /**
    139  ******************************************************************************
    140  * structure    M4VIFI_HLSoffset
    141  * @brief        HLS offset structure
    142  * @note        This structure have the hue, saturation and lightness value
    143  *                for quality enhancement. Range of values neccessarily be
    144  *                hue = -360 to 360, sat = 0 to 100 and light = 0 t0 100
    145  ******************************************************************************
    146 */
    147     typedef struct
    148         {
    149         M4VIFI_Int16 hue;   /**< Hue offset */
    150         M4VIFI_Int16 sat;   /**< Saturation offset */
    151         M4VIFI_Int16 light; /**< Light offset */
    152         } M4VIFI_HLSoffset;
    153 
    154 /**
    155  ******************************************************************************
    156  * structure    M4VIFI_Tranformation
    157  * @brief        Image Tranformation Structure
    158  * @note        Image Tranformation Request
    159  *                rotation : 1 -> +90deg Rotation
    160  *                          -1 -> -90deg Rotation
    161  *                           0 ->  No Rotation
    162  ******************************************************************************
    163 */
    164     typedef struct
    165         {
    166         M4VIFI_Int32 i32_rotation; /**< Rotation Flag        */
    167         } M4VIFI_Tranformation;
    168 
    169 /**
    170  ******************************************************************************
    171  * structure    M4VIFI_pContext
    172  * @brief        New Structures
    173  * @note        -# Structure of M4VIFI_HLSoffset
    174  ******************************************************************************
    175 */
    176     typedef struct
    177         {
    178         M4VIFI_HLSoffset hlsOffset; /**< HLS offset structure */
    179         } M4VIFI_pContext;
    180 
    181     /*
    182      *****************************************************
    183      *                    External API functions
    184      *****************************************************
    185     */
    186 
    187     /**< Effect filters */
    188     M4VIFI_UInt8 M4VIFI_SepiaYUV420toYUV420(void *pUserData,
    189         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    190     M4VIFI_UInt8 M4VIFI_GrayscaleYUV420toYUV420(void *pUserData,
    191         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    192     M4VIFI_UInt8 M4VIFI_ContrastYUV420toYUV420(void *pUserData,
    193         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    194     M4VIFI_UInt8 M4VIFI_NegativeYUV420toYUV420(void *pUserData,
    195         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    196     M4VIFI_UInt8 M4VIFI_FlipYUV420toYUV420(void *pUserData,
    197         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    198     M4VIFI_UInt8 M4VIFI_MirrorYUV420toYUV420(void *pUserData,
    199         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    200     M4VIFI_UInt8 M4VIFI_Rotate180YUV420toYUV420(void *pUserData,
    201         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    202     M4VIFI_UInt8 M4VIFI_Rotate90RightYUV420toYUV420(void *pUserData,
    203         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    204     M4VIFI_UInt8 M4VIFI_Rotate90LeftYUV420toYUV420(void *pUserData,
    205         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    206     M4VIFI_UInt8 M4VIFI_ColorRYUV420toYUV420(void *pUserData,
    207         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    208     M4VIFI_UInt8 M4VIFI_ColorGYUV420toYUV420(void *pUserData,
    209         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    210     M4VIFI_UInt8 M4VIFI_ColorBYUV420toYUV420(void *pUserData,
    211         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    212     M4VIFI_UInt8 M4VIFI_FramingRGB565toYUV420(void *pUserData,
    213         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    214     M4VIFI_UInt8 M4VIFI_FramingYUV420(void *pUserData,
    215         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    216     M4VIFI_UInt8 M4VIFI_SetHueInYUV420(void *pUserData,
    217         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    218     M4VIFI_UInt8 M4VIFI_ColdYUV420toYUV420(void *pUserData,
    219         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    220     M4VIFI_UInt8 M4VIFI_WarmYUV420toYUV420(void *pUserData,
    221         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    222 
    223 /*                ADS Compiler                */
    224 
    225 /*        Generic ARM assembly functions        */
    226 #if defined ADS_ARM
    227 
    228     /** Apply grayscale effect RGB565toRGB565 */
    229 
    230     M4VIFI_UInt8 M4VIFI_GrayscaleRGB565toRGB565(void *pUserData,
    231         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    232 
    233     /** Resize Bilinear RGB888toRGB888 */
    234     M4VIFI_UInt8 M4VIFI_ResizeBilinearRGB888toRGB888(void *pUserData,
    235         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    236 
    237     /** Resize Bilinear RGB565toRGB565 */
    238     M4VIFI_UInt8 M4VIFI_ResizeBilinearRGB565toRGB565(void *pUserData,
    239         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    240 
    241     /** Resize Bilinear YUV420toYUV420 */
    242     M4VIFI_UInt8 M4VIFI_ResizeBilinearYUV420toYUV420(void *pUserData,
    243         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    244 
    245     /** RGB565 to YUV420 */
    246     M4VIFI_UInt8 M4VIFI_RGB565toYUV420AdsArm(void *pUserData,
    247         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    248     /** BGR565 to YUV420 */
    249     M4VIFI_UInt8 M4VIFI_BGR565toYUV420AdsArm(void *pUserData,
    250         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    251 
    252     /** YUV422 to YUV420 */
    253     M4VIFI_UInt8 M4VIFI_UYVYtoYUV420AdsArm(void *pUserData,
    254         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    255 
    256     /** YUV420 to RGB565 */
    257     M4VIFI_UInt8 M4VIFI_YUV420toRGB565AdsArm(void *pUserData,
    258         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    259     /** YUV420 to BGR565 */
    260     M4VIFI_UInt8 M4VIFI_YUV420toBGR565AdsArm(void *pUserData,
    261         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    262 
    263     /** Resize Bilinear YUV420toRGB565 */
    264     M4VIFI_UInt8 M4VIFI_ResizeBilinearYUV420toRGB565AdsArm(void *pUserData,
    265         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    266     /** Resize Bilinear YUV420toBGR565 */
    267     M4VIFI_UInt8 M4VIFI_ResizeBilinearYUV420toBGR565AdsArm(void *pUserData,
    268         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    269     /** Resize Bilinear YUV420toRGB565 with rotation +90 or -90 */
    270     M4VIFI_UInt8 M4VIFI_ResizeBilinearYUV420toRGB565RotatedRightAdsArm(
    271         void *pUserData,
    272             M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    273     M4VIFI_UInt8 M4VIFI_ResizeBilinearYUV420toRGB565RotatedLeftAdsArm(
    274         void *pUserData,
    275             M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    276     /** Resize Bilinear YUV420toBGR565 with rotation +90 or -90 */
    277     M4VIFI_UInt8 M4VIFI_ResizeBilinearYUV420toBGR565RotatedRightAdsArm(
    278         void *pUserData,
    279             M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    280     M4VIFI_UInt8 M4VIFI_ResizeBilinearYUV420toBGR565RotatedLeftAdsArm(
    281         void *pUserData,
    282             M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    283     /** Modify HLS in RGB565 */
    284     M4VIFI_UInt8 M4VIFI_SetHLSinRGB565AdsArm(void *pUserData,
    285         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    286     /** Modify HLS in BGR565 */
    287     M4VIFI_UInt8 M4VIFI_SetHLSinBGR565AdsArm(void *pUserData,
    288         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    289 
    290 #define M4VIFI_RGB565toYUV420                                M4VIFI_RGB565toYUV420AdsArm
    291 #define M4VIFI_BGR565toYUV420                                M4VIFI_BGR565toYUV420AdsArm
    292 #define M4VIFI_UYVYtoYUV420                                    M4VIFI_UYVYtoYUV420AdsArm
    293 #define M4VIFI_YUV420toRGB565                                M4VIFI_YUV420toRGB565AdsArm
    294 #define M4VIFI_YUV420toBGR565                                M4VIFI_YUV420toBGR565AdsArm
    295 #define M4VIFI_ResizeBilinearYUV420toRGB565             \
    296                            M4VIFI_ResizeBilinearYUV420toRGB565AdsArm
    297 
    298 #define M4VIFI_ResizeBilinearYUV420toBGR565             \
    299                            M4VIFI_ResizeBilinearYUV420toBGR565AdsArm
    300 
    301 #define M4VIFI_ResizeBilinearYUV420toRGB565RotatedRight \
    302                            M4VIFI_ResizeBilinearYUV420toRGB565RotatedRightAdsArm
    303 
    304 #define M4VIFI_ResizeBilinearYUV420toRGB565RotatedLeft  \
    305                            M4VIFI_ResizeBilinearYUV420toRGB565RotatedLeftAdsArm
    306 
    307 #define M4VIFI_ResizeBilinearYUV420toBGR565RotatedRight \
    308                            M4VIFI_ResizeBilinearYUV420toBGR565RotatedRightAdsArm
    309 
    310 #define M4VIFI_ResizeBilinearYUV420toBGR565RotatedLeft  \
    311                            M4VIFI_ResizeBilinearYUV420toBGR565RotatedLeftAdsArm
    312 
    313 #define M4VIFI_SetHLSinRGB565                                M4VIFI_SetHLSinRGB565AdsArm
    314 #define M4VIFI_SetHLSinBGR565                                M4VIFI_SetHLSinBGR565AdsArm
    315 
    316 /*        ARM9E assembly functions        */
    317 #elif defined ADS_ARM9E
    318 
    319     /** Apply grayscale effect RGB565toRGB565 */
    320 
    321     M4VIFI_UInt8 M4VIFI_GrayscaleRGB565toRGB565(void *pUserData,
    322         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    323 
    324     /** Resize Bilinear YUV888toYUV888 */
    325     M4VIFI_UInt8 M4VIFI_ResizeBilinearRGB888toRGB888(void *pUserData,
    326         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    327 
    328     /** Resize Bilinear YUV565toYUV565 */
    329     M4VIFI_UInt8 M4VIFI_ResizeBilinearRGB565toRGB565(void *pUserData,
    330         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    331     /** Resize Bilinear YUV420toYUV420 */
    332     M4VIFI_UInt8 M4VIFI_ResizeBilinearYUV420toYUV420(void *pUserData,
    333         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    334 
    335     /** RGB565 to YUV420 */
    336     M4VIFI_UInt8 M4VIFI_RGB565toYUV420AdsArm9E(void *pUserData,
    337         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    338     /** BGR565 to YUV420 */
    339     M4VIFI_UInt8 M4VIFI_BGR565toYUV420AdsArm9E(void *pUserData,
    340         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    341 
    342     /** YUV422 to YUV420 */
    343     M4VIFI_UInt8 M4VIFI_UYVYtoYUV420AdsArm9E(void *pUserData,
    344         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    345 
    346     /** YUV420 to RGB565 */
    347     M4VIFI_UInt8 M4VIFI_YUV420toRGB565AdsArm9E(void *pUserData,
    348         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    349     /** YUV420 to BGR565 */
    350     M4VIFI_UInt8 M4VIFI_YUV420toBGR565AdsArm9E(void *pUserData,
    351         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    352 
    353     /** Resize Bilinear YUV420toRGB565 */
    354     M4VIFI_UInt8 M4VIFI_ResizeBilinearYUV420toRGB565AdsArm9E(void *pUserData,
    355         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    356     /** Resize Bilinear YUV420toBGR565 */
    357     M4VIFI_UInt8 M4VIFI_ResizeBilinearYUV420toBGR565AdsArm9E(void *pUserData,
    358         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    359     /** Resize Bilinear YUV420toRGB565 with rotation +90 or -90 */
    360     M4VIFI_UInt8 M4VIFI_ResizeBilinearYUV420toRGB565RotatedRightAdsArm9E(
    361         void *pUserData,
    362             M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    363     M4VIFI_UInt8 M4VIFI_ResizeBilinearYUV420toRGB565RotatedLeftAdsArm9E(
    364         void *pUserData,
    365             M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    366     /** Resize Bilinear YUV420toBGR565 with rotation +90 or -90 */
    367     M4VIFI_UInt8 M4VIFI_ResizeBilinearYUV420toBGR565RotatedRightAdsArm9E(
    368         void *pUserData,
    369             M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    370     M4VIFI_UInt8 M4VIFI_ResizeBilinearYUV420toBGR565RotatedLeftAdsArm9E(
    371         void *pUserData,
    372             M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    373     /** Modify HLS in RGB565 */
    374     M4VIFI_UInt8 M4VIFI_SetHLSinRGB565AdsArm9E(void *pUserData,
    375         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    376     /** Modify HLS in BGR565 */
    377     M4VIFI_UInt8 M4VIFI_SetHLSinBGR565AdsArm9E(void *pUserData,
    378         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    379 
    380     /** Resize YUV420toYUV420 from QCIF to QVGA*/
    381     M4VIFI_UInt8 M4VIFI_YUV420QCIFtoYUV420QVGAAdsArm9E(void *pUserData,
    382         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    383     /**Resize YUV420toRGB565 from QCIF to QVGA*/
    384     M4VIFI_UInt8 M4VIFI_YUV420QCIFtoRGB565QVGAAdsArm9E(void *pUserData,
    385         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    386     /**Resize YUV420toRGB565 from QCIF to QVGA with rotation +90*/
    387     M4VIFI_UInt8 M4VIFI_YUV420QCIFtoRGB565QVGA_RRAdsArm9E(void *pUserData,
    388         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    389     /**Resize YUV420toRGB565 from QCIF to QVGA with rotation -90*/
    390     M4VIFI_UInt8 M4VIFI_YUV420QCIFtoRGB565QVGA_RLAdsArm9E(void *pUserData,
    391         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    392 /** Resizes YUV420 Planar Image and stores in YUV420 Linear format with/without +or-90 rotation*/
    393     M4VIFI_UInt8 M4VIFI_YUV420PlanartoYUV420LinearAdsArm9E(void *pUserData,
    394         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    395 
    396 #define M4VIFI_RGB565toYUV420                                M4VIFI_RGB565toYUV420AdsArm9E
    397 #define M4VIFI_BGR565toYUV420                                M4VIFI_BGR565toYUV420AdsArm9E
    398 #define M4VIFI_UYVYtoYUV420                                    M4VIFI_UYVYtoYUV420AdsArm9E
    399 #define M4VIFI_YUV420toRGB565                                M4VIFI_YUV420toRGB565AdsArm9E
    400 #define M4VIFI_YUV420toBGR565                                M4VIFI_YUV420toBGR565AdsArm9E
    401 #define M4VIFI_ResizeBilinearYUV420toRGB565 \
    402                            M4VIFI_ResizeBilinearYUV420toRGB565AdsArm9E
    403 #define M4VIFI_ResizeBilinearYUV420toBGR565 \
    404                            M4VIFI_ResizeBilinearYUV420toBGR565AdsArm9E
    405 #define M4VIFI_ResizeBilinearYUV420toRGB565RotatedRight \
    406                            M4VIFI_ResizeBilinearYUV420toRGB565RotatedRightAdsArm9E
    407 #define M4VIFI_ResizeBilinearYUV420toRGB565RotatedLeft \
    408                            M4VIFI_ResizeBilinearYUV420toRGB565RotatedLeftAdsArm9E
    409 #define M4VIFI_ResizeBilinearYUV420toBGR565RotatedRight \
    410                            M4VIFI_ResizeBilinearYUV420toBGR565RotatedRightAdsArm9E
    411 #define M4VIFI_ResizeBilinearYUV420toBGR565RotatedLeft \
    412                            M4VIFI_ResizeBilinearYUV420toBGR565RotatedLeftAdsArm9E
    413 #define M4VIFI_SetHLSinRGB565                            M4VIFI_SetHLSinRGB565AdsArm9E
    414 #define M4VIFI_SetHLSinBGR565                            M4VIFI_SetHLSinBGR565AdsArm9E
    415 #define M4VIFI_YUV420QCIFtoYUV420QVGA                    M4VIFI_YUV420QCIFtoYUV420QVGAAdsArm9E
    416 #define M4VIFI_YUV420QCIFtoRGB565QVGA                    M4VIFI_YUV420QCIFtoRGB565QVGAAdsArm9E
    417 #define M4VIFI_YUV420QCIFtoRGB565QVGA_RR                 M4VIFI_YUV420QCIFtoRGB565QVGA_RRAdsArm9E
    418 #define M4VIFI_YUV420QCIFtoRGB565QVGA_RL                 M4VIFI_YUV420QCIFtoRGB565QVGA_RLAdsArm9E
    419 #define M4VIFI_YUV420PlanartoYUV420Linear                M4VIFI_YUV420PlanartoYUV420LinearAdsArm9E
    420 /*                GCC Compiler                */
    421 /*        Generic ARM assembly functions        */
    422 
    423 #elif defined GCC_ARM
    424 
    425     /** Apply grayscale effect RGB565toRGB565 */
    426 
    427     M4VIFI_UInt8 M4VIFI_GrayscaleRGB565toRGB565(void *pUserData,
    428         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    429 
    430     /** Resize Bilinear YUV888toYUV888 */
    431     M4VIFI_UInt8 M4VIFI_ResizeBilinearRGB888toRGB888(void *pUserData,
    432         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    433 
    434     /** Resize Bilinear YUV565toYUV565 */
    435     M4VIFI_UInt8 M4VIFI_ResizeBilinearRGB565toRGB565(void *pUserData,
    436         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    437 
    438     /** Resize Bilinear YUV420toYUV420 */
    439     M4VIFI_UInt8 M4VIFI_ResizeBilinearYUV420toYUV420(void *pUserData,
    440         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    441 
    442     /** RGB565 to YUV420 */
    443     M4VIFI_UInt8 M4VIFI_RGB565toYUV420GccArm(void *pUserData,
    444         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    445     /** BGR565 to YUV420 */
    446     M4VIFI_UInt8 M4VIFI_BGR565toYUV420GccArm(void *pUserData,
    447         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    448 
    449     /** YUV420 to RGB565 */
    450     M4VIFI_UInt8 M4VIFI_YUV420toRGB565GccArm(void *pUserData,
    451         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    452     /** YUV420 to BGR565 */
    453     M4VIFI_UInt8 M4VIFI_YUV420toBGR565GccArm(void *pUserData,
    454         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    455 
    456     /** Resize Bilinear YUV420toRGB565 */
    457     M4VIFI_UInt8 M4VIFI_ResizeBilinearYUV420toRGB565GccArm(void *pUserData,
    458         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    459 
    460     /** Resize Bilinear YUV420toBGR565 */
    461     M4VIFI_UInt8 M4VIFI_ResizeBilinearYUV420toBGR565GccArm(void *pUserData,
    462         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    463 
    464     /** Resize Bilinear YUV420toRGB565 with rotation +90 or -90 */
    465     M4VIFI_UInt8 M4VIFI_ResizeBilinearYUV420toRGB565RotatedRightGccArm(
    466         void *pUserData,
    467             M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    468     M4VIFI_UInt8 M4VIFI_ResizeBilinearYUV420toRGB565RotatedLeftGccArm(
    469         void *pUserData,
    470             M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    471 
    472     /** Resize Bilinear YUV420toBGR565 with rotation +90 or -90 */
    473     M4VIFI_UInt8 M4VIFI_ResizeBilinearYUV420toBGR565RotatedRightGccArm(
    474         void *pUserData,
    475             M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    476     M4VIFI_UInt8 M4VIFI_ResizeBilinearYUV420toBGR565RotatedLeftGccArm(
    477         void *pUserData,
    478             M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    479 
    480     /** Modify HLS in RGB565 */
    481     M4VIFI_UInt8 M4VIFI_SetHLSinRGB565GccArm(void *pUserData,
    482         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    483 
    484     /** Modify HLS in BGR565 */
    485     M4VIFI_UInt8 M4VIFI_SetHLSinBGR565GccArm(void *pUserData,
    486         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    487 
    488 #define M4VIFI_RGB565toYUV420                                M4VIFI_RGB565toYUV420GccArm
    489 #define M4VIFI_BGR565toYUV420                                M4VIFI_BGR565toYUV420GccArm
    490 #define M4VIFI_YUV420toRGB565                                M4VIFI_YUV420toRGB565GccArm
    491 #define M4VIFI_YUV420toBGR565                                M4VIFI_YUV420toBGR565GccArm
    492 #define M4VIFI_ResizeBilinearYUV420toRGB565 \
    493                                M4VIFI_ResizeBilinearYUV420toRGB565GccArm
    494 #define M4VIFI_ResizeBilinearYUV420toBGR565 \
    495                                M4VIFI_ResizeBilinearYUV420toBGR565GccArm
    496 #define M4VIFI_ResizeBilinearYUV420toRGB565RotatedRight \
    497                                M4VIFI_ResizeBilinearYUV420toRGB565RotatedRightGccArm
    498 #define M4VIFI_ResizeBilinearYUV420toRGB565RotatedLeft \
    499                                M4VIFI_ResizeBilinearYUV420toRGB565RotatedLeftGccArm
    500 #define M4VIFI_ResizeBilinearYUV420toBGR565RotatedRight \
    501                                M4VIFI_ResizeBilinearYUV420toBGR565RotatedRightGccArm
    502 #define M4VIFI_ResizeBilinearYUV420toBGR565RotatedLeft \
    503                                M4VIFI_ResizeBilinearYUV420toBGR565RotatedLeftGccArm
    504 #define M4VIFI_SetHLSinRGB565                                M4VIFI_SetHLSinRGB565GccArm
    505 #define M4VIFI_SetHLSinBGR565                                M4VIFI_SetHLSinBGR565GccArm
    506 
    507 /*        ARM9E assembly functions        */
    508 #elif defined GCC_ARM9E
    509 
    510     /** Apply grayscale effect RGB565toRGB565 */
    511 
    512     M4VIFI_UInt8 M4VIFI_GrayscaleRGB565toRGB565(void *pUserData,
    513         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    514 
    515     /** Resize Bilinear YUV888toYUV888 */
    516     M4VIFI_UInt8 M4VIFI_ResizeBilinearRGB888toRGB888(void *pUserData,
    517         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    518 
    519     /** Resize Bilinear YUV565toYUV565 */
    520     M4VIFI_UInt8 M4VIFI_ResizeBilinearRGB565toRGB565(void *pUserData,
    521         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    522 
    523     /** Resize Bilinear YUV420toYUV420 */
    524     M4VIFI_UInt8 M4VIFI_ResizeBilinearYUV420toYUV420(void *pUserData,
    525         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    526 
    527     /** RGB565 to YUV420 */
    528     M4VIFI_UInt8 M4VIFI_RGB565toYUV420GccArm9E(void *pUserData,
    529         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    530     /** BGR565 to YUV420 */
    531     M4VIFI_UInt8 M4VIFI_BGR565toYUV420GccArm9E(void *pUserData,
    532         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    533 
    534     /** YUV420 to RGB565 */
    535     M4VIFI_UInt8 M4VIFI_YUV420toRGB565GccArm9E(void *pUserData,
    536         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    537     /** YUV420 to BGR565 */
    538     M4VIFI_UInt8 M4VIFI_YUV420toBGR565GccArm9E(void *pUserData,
    539         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    540 
    541     /** Resize Bilinear YUV420toRGB565 */
    542     M4VIFI_UInt8 M4VIFI_ResizeBilinearYUV420toRGB565GccArm9E(void *pUserData,
    543         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    544     /** Resize Bilinear YUV420toBGR565 */
    545     M4VIFI_UInt8 M4VIFI_ResizeBilinearYUV420toBGR565GccArm9E(void *pUserData,
    546         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    547 
    548     /** Resize Bilinear YUV420toRGB565 with rotation +90 or -90 */
    549     M4VIFI_UInt8 M4VIFI_ResizeBilinearYUV420toRGB565RotatedRightGccArm9E(
    550         void *pUserData,
    551             M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    552     M4VIFI_UInt8 M4VIFI_ResizeBilinearYUV420toRGB565RotatedLeftGccArm9E(
    553         void *pUserData,
    554             M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    555 
    556     /** Resize Bilinear YUV420toBGR565 with rotation +90 or -90 */
    557     M4VIFI_UInt8 M4VIFI_ResizeBilinearYUV420toBGR565RotatedRightGccArm9E(
    558         void *pUserData,
    559             M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    560     M4VIFI_UInt8 M4VIFI_ResizeBilinearYUV420toBGR565RotatedLeftGccArm9E(
    561         void *pUserData,
    562             M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    563     /** Modify HLS in RGB565 */
    564     M4VIFI_UInt8 M4VIFI_SetHLSinRGB565GccArm9E(void *pUserData,
    565         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    566     /** Modify HLS in BGR565 */
    567     M4VIFI_UInt8 M4VIFI_SetHLSinBGR565GccArm9E(void *pUserData,
    568         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    569 
    570 #define M4VIFI_RGB565toYUV420                                M4VIFI_RGB565toYUV420GccArm9E
    571 #define M4VIFI_BGR565toYUV420                                M4VIFI_BGR565toYUV420GccArm9E
    572 #define M4VIFI_YUV420toRGB565                                M4VIFI_YUV420toRGB565GccArm9E
    573 #define M4VIFI_YUV420toBGR565                                M4VIFI_YUV420toBGR565GccArm9E
    574 #define M4VIFI_ResizeBilinearYUV420toRGB565 \
    575                                    M4VIFI_ResizeBilinearYUV420toRGB565GccArm9E
    576 #define M4VIFI_ResizeBilinearYUV420toBGR565 \
    577                                    M4VIFI_ResizeBilinearYUV420toBGR565GccArm9E
    578 #define M4VIFI_ResizeBilinearYUV420toRGB565RotatedRight \
    579                                    M4VIFI_ResizeBilinearYUV420toRGB565RotatedRightGccArm9E
    580 #define M4VIFI_ResizeBilinearYUV420toRGB565RotatedLeft \
    581                                    M4VIFI_ResizeBilinearYUV420toRGB565RotatedLeftGccArm9E
    582 #define M4VIFI_ResizeBilinearYUV420toBGR565RotatedRight \
    583                                    M4VIFI_ResizeBilinearYUV420toBGR565RotatedRightGccArm9E
    584 #define M4VIFI_ResizeBilinearYUV420toBGR565RotatedLeft \
    585                                    M4VIFI_ResizeBilinearYUV420toBGR565RotatedLeftGccArm9E
    586 #define M4VIFI_SetHLSinBGR565                                M4VIFI_SetHLSinBGR565GccArm9E
    587 #define M4VIFI_SetHLSinRGB565                                M4VIFI_SetHLSinRGB565GccArm9E
    588 
    589 /* TI CCS assembly files */
    590 #elif defined TI411_ARM9E
    591 
    592     /** Apply grayscale effect RGB565toRGB565 */
    593 
    594     M4VIFI_UInt8 M4VIFI_GrayscaleRGB565toRGB565(void *pUserData,
    595         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    596 
    597     /** Resize Bilinear YUV888toYUV888 */
    598     M4VIFI_UInt8 M4VIFI_ResizeBilinearRGB888toRGB888(void *pUserData,
    599         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    600 
    601     /** Resize Bilinear YUV565toYUV565 */
    602     M4VIFI_UInt8 M4VIFI_ResizeBilinearRGB565toRGB565(void *pUserData,
    603         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    604 
    605     /** Resize Bilinear YUV420toYUV420 */
    606     M4VIFI_UInt8 M4VIFI_ResizeBilinearYUV420toYUV420(void *pUserData,
    607         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    608 
    609     /** YUV420 (Planar) to RGB565 */
    610     M4VIFI_UInt8 M4VIFI_YUV420toRGB565(void *pUserData,
    611         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    612     /** YUV420 (Planar) to Resized RGB565 */
    613     M4VIFI_UInt8 M4VIFI_ResizeBilinearYUV420toRGB565(void *pUserData,
    614         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    615     /** YUV420 (Planar) to Resized RGB888 */
    616     M4VIFI_UInt8 M4VIFI_ResizeBilinearYUV420toRGB888(void *pUserData,
    617         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    618     /** YUV420(Planar) to Resized and Rotated (-90) RGB565 */
    619     M4VIFI_UInt8 M4VIFI_ResizeBilinearYUV420toRGB565RotatedLeft(void *pUserData,
    620         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    621 
    622     /** YUV420(Planar) to Resized and Rotated (+90) RGB565 */
    623     M4VIFI_UInt8 M4VIFI_ResizeBilinearYUV420toRGB565RotatedRight(
    624         void *pUserData,
    625             M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    626 
    627     /** YUV420(Planar) to Resized YUV420(Planar) */
    628     M4VIFI_UInt8 M4VIFI_YUV420QCIFtoYUV420QVGA(void *pUserData,
    629         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    630 
    631     /** Resize YUV420(Planar) of QCIF to RGB565 of QVGA resolution */
    632     M4VIFI_UInt8 M4VIFI_YUV420QCIFtoRGB565QVGA(void *pUserData,
    633         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    634 
    635 /** Resize YUV420(Planar) of QCIF to RGB565 of QVGA resolution with rotation(-90) */
    636     M4VIFI_UInt8 M4VIFI_YUV420QCIFtoRGB565QVGA_RL(void *pUserData,
    637         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    638 
    639 /** Resize YUV420(Planar) of QCIF to RGB565 of QVGA resolution with rotation(+90) */
    640     M4VIFI_UInt8 M4VIFI_YUV420QCIFtoRGB565QVGA_RR(void *pUserData,
    641         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    642 
    643 #define M4VIFI_YUV420toRGB565                             M4VIFI_YUV420toRGB565Ti411Arm9E
    644 #define M4VIFI_ResizeBilinearYUV420toRGB565 \
    645                                 M4VIFI_ResizeBilinearYUV420toRGB565Ti411Arm9E
    646 #define M4VIFI_ResizeBilinearYUV420toRGB565RotatedLeft \
    647                                M4VIFI_ResizeBilinearYUV420toRGB565RotatedLeftTi411Arm9E
    648 #define M4VIFI_ResizeBilinearYUV420toRGB565RotatedRight \
    649                                M4VIFI_ResizeBilinearYUV420toRGB565RotatedRightTi411Arm9E
    650 
    651 #define M4VIFI_YUV420QCIFtoYUV420QVGA       M4VIFI_YUV420QCIFtoYUV420QVGATi411Arm9E
    652 #define M4VIFI_YUV420QCIFtoRGB565QVGA       M4VIFI_YUV420QCIFtoRGB565QVGATi411Arm9E
    653 #define M4VIFI_YUV420QCIFtoRGB565QVGA_RL  M4VIFI_YUV420QCIFtoRGB565QVGA_RLTi411Arm9E
    654 #define M4VIFI_YUV420QCIFtoRGB565QVGA_RR  M4VIFI_YUV420QCIFtoRGB565QVGA_RRTi411Arm9E
    655 
    656 /*        ANSI C Functions        */
    657 #else
    658 
    659     /** Apply grayscale effect RGB565toRGB565 */
    660 
    661     M4VIFI_UInt8 M4VIFI_GrayscaleRGB565toRGB565(void *pUserData,
    662         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    663 
    664     /** Resize Bilinear YUV888toYUV888 */
    665     M4VIFI_UInt8 M4VIFI_ResizeBilinearRGB888toRGB888(void *pUserData,
    666         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    667 
    668     /** Resize Bilinear YUV565toYUV565 */
    669     M4VIFI_UInt8 M4VIFI_ResizeBilinearRGB565toRGB565(void *pUserData,
    670         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    671 
    672     /** Resize Bilinear YUV420toYUV420 */
    673     M4VIFI_UInt8 M4VIFI_ResizeBilinearYUV420toYUV420(void *pUserData,
    674         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    675 
    676     /** RGB565 to YUV420 */
    677     M4VIFI_UInt8 M4VIFI_RGB565toYUV420(void *pUserData,
    678         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    679     /** BRG565 to YUV420 */
    680     M4VIFI_UInt8 M4VIFI_BGR565toYUV420(void *pUserData,
    681         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    682     /** BRG888 to YUV420 */
    683     M4VIFI_UInt8 M4VIFI_BGR888toYUV420(void *pUserData,
    684         M4VIFI_ImagePlane *PlaneIn, M4VIFI_ImagePlane PlaneOut[3]);
    685     /** RGB888 to YUV420 */
    686     M4VIFI_UInt8 M4VIFI_RGB888toYUV420(void *pUserData,
    687         M4VIFI_ImagePlane *PlaneIn, M4VIFI_ImagePlane PlaneOut[3]);
    688 
    689     /** YUV422 to YUV420 */
    690     M4VIFI_UInt8 M4VIFI_UYVYtoYUV420(void *pUserData,
    691         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    692 
    693     /** YUV420 to RGB565 */
    694     M4VIFI_UInt8 M4VIFI_YUV420toRGB565(void *pUserData,
    695         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    696     /** YUV420 to BGR565 */
    697     M4VIFI_UInt8 M4VIFI_YUV420toBGR565(void *pUserData,
    698         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    699     /** YUV420 to BGR565 */
    700     M4VIFI_UInt8 M4VIFI_YUV420toBGR565RotatedLeft(void *pUserData,
    701         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    702     /** YUV420 to BGR565 */
    703     M4VIFI_UInt8 M4VIFI_YUV420toBGR565RotatedRight(void *pUserData,
    704         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    705     /** YUV420 to BGR24 */
    706     M4VIFI_UInt8 M4VIFI_YUV420toBGR24(void *pUserData,
    707         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    708     /** YUV420 to RGB24 */
    709     M4VIFI_UInt8 M4VIFI_YUV420toRGB24(void *pUserData,
    710         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    711     /** Resize Bilinear YUV420toYUV420 */
    712     M4VIFI_UInt8 M4VIFI_ResizeBilinearYUV420toYUV420(void *pUserData,
    713         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    714     /** Resize Bilinear YUV420toRGB565 */
    715     M4VIFI_UInt8 M4VIFI_ResizeBilinearYUV420toRGB565(void *pUserData,
    716         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    717     M4VIFI_UInt8 M4VIFI_ResizeBilinearYUV420toRGB888(void *pUserData,
    718         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    719     /** Resize Bilinear YUV420toBGR565 */
    720     M4VIFI_UInt8 M4VIFI_ResizeBilinearYUV420toBGR565(void *pUserData,
    721         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    722     /** Resize Bilinear YUV420toRGB565 with rotation +90 or -90 */
    723     M4VIFI_UInt8 M4VIFI_ResizeBilinearYUV420toRGB565RotatedRight(
    724         void *pUserData,
    725             M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    726     M4VIFI_UInt8 M4VIFI_ResizeBilinearYUV420toRGB565RotatedLeft(void *pUserData,
    727         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    728     /** Resize Bilinear YUV420toBGR565 with rotation +90 or -90 */
    729     M4VIFI_UInt8 M4VIFI_ResizeBilinearYUV420toBGR565RotatedRight(
    730         void *pUserData,
    731             M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    732     M4VIFI_UInt8 M4VIFI_ResizeBilinearYUV420toBGR565RotatedLeft(void *pUserData,
    733         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    734     /** Modify HLS in RGB565 */
    735     M4VIFI_UInt8 M4VIFI_SetHLSinRGB565(void *pUserData,
    736         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    737     /** Modify HLS in BGR565 */
    738     M4VIFI_UInt8 M4VIFI_SetHLSinBGR565(void *pUserData,
    739         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *PlaneOut);
    740     /**Resize YUV420toYUV420 from QCIF to QVGA*/
    741     M4VIFI_UInt8 M4VIFI_YUV420QCIFtoYUV420QVGA(void *pUserData,
    742         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    743     /**Resize YUV420toRGB565 from QCIF to QVGA*/
    744     M4VIFI_UInt8 M4VIFI_YUV420QCIFtoRGB565QVGA(void *pUserData,
    745         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    746     /**Resize YUV420toRGB565 from QCIF to QVGA with rotation +90*/
    747     M4VIFI_UInt8 M4VIFI_YUV420QCIFtoRGB565QVGA_RR(void *pUserData,
    748         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    749     /**Resize YUV420toRGB565 from QCIF to QVGA with rotation -90*/
    750     M4VIFI_UInt8 M4VIFI_YUV420QCIFtoRGB565QVGA_RL(void *pUserData,
    751         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    752 /** Resizes YUV420 Planar Image and stores in YUV420 Linear format with/without +or-90 rotation*/
    753     M4VIFI_UInt8 M4VIFI_YUV420PlanartoYUV420Linear(void *pUserData,
    754         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    755 
    756 /** Resizes YUV420 Planar Image and stores in YUV422 Interleaved format
    757      with/without +or-90 rotation*/
    758     M4VIFI_UInt8 M4VIFI_YUV420PlanartoYUV422Interleaved(void *pUserData,
    759         M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    760 #endif
    761 
    762     /** definition of the converter function types */
    763 
    764     typedef M4VIFI_UInt8 M4VIFI_PlanConverterFunctionType(void
    765         *pContext, M4VIFI_ImagePlane* in, M4VIFI_ImagePlane* out);
    766 
    767     /** definition of the preprocessing function types */
    768     typedef M4VIFI_UInt8 M4VIFI_PreprocessFunctionType(void
    769         *pContext, M4VIFI_ImagePlane* in, M4VIFI_ImagePlane* out);
    770 
    771     M4VIFI_UInt8 M4VIFI_YUV420toYUV420(void *user_data,
    772         M4VIFI_ImagePlane *PlaneIn, M4VIFI_ImagePlane *PlaneOut);
    773     M4VIFI_UInt8 M4VIFI_YUV420PlanarToYUV420Semiplanar(void *user_data,
    774         M4VIFI_ImagePlane *PlaneIn, M4VIFI_ImagePlane *PlaneOut);
    775     M4VIFI_UInt8 M4VIFI_SemiplanarYUV420toYUV420(void *user_data,
    776         M4VIFI_ImagePlane *PlaneIn, M4VIFI_ImagePlane *PlaneOut);
    777 #ifdef __cplusplus
    778 
    779 }
    780 
    781 #endif /* __cplusplus */
    782 
    783 #endif /* _M4VIFI_FILTERSAPI_H_ */
    784 
    785 /* End of file M4VIFI_FiltersAPI.h */
    786