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