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        M4TRAN_transition.h
19 * @brief
20 * @note
21 ******************************************************************************
22*/
23
24#ifndef __M4VFL_TRANSITION_H__
25#define __M4VFL_TRANSITION_H__
26
27#ifdef __cplusplus
28extern "C" {
29#endif
30typedef unsigned char UInt8;
31typedef unsigned long UInt32;
32
33typedef    struct S_M4ViComImagePlane
34{
35    UInt32        u_width;            /* active width, in pixels */
36    UInt32        u_height;            /* active height, in lines */
37    UInt32        u_topleft;            /* index of 1st active pixel */
38    UInt32        u_stride;            /* line stride, in bytes */
39    UInt8        *pac_data;            /* buffer address */
40}    M4ViComImagePlane;
41
42typedef struct S_M4VFL_modifLumParam
43{
44    unsigned short lum_factor;
45    unsigned short copy_chroma;
46} M4VFL_ModifLumParam;
47
48#define     M4VIFI_OK                       0
49#define     M4VIFI_ILLEGAL_FRAME_HEIGHT     8
50#define     M4VIFI_ILLEGAL_FRAME_WIDTH      9
51
52unsigned char M4VFL_modifyLumaByStep(M4ViComImagePlane *plane_in, M4ViComImagePlane *plane_out,
53                                         M4VFL_ModifLumParam *lum_param, void *user_data);
54
55unsigned char M4VFL_modifyLumaWithScale(M4ViComImagePlane *plane_in, M4ViComImagePlane *plane_out,
56                                         unsigned long lum_factor, void *user_data);
57
58/**
59 *************************************************************************************************
60 * M4OSA_ERR M4VIFI_ImageBlendingonYUV420 (void *pUserData,
61 *                                                  M4VIFI_ImagePlane *pPlaneIn1,
62 *                                                  M4VIFI_ImagePlane *pPlaneIn2,
63 *                                                  M4VIFI_ImagePlane *pPlaneOut,
64 *                                                  M4VIFI_UInt32 Progress)
65 * @brief   Blends two YUV 4:2:0 Planar images.
66 * @note    Blends YUV420 planar images,
67 *          Map the value of progress from (0 - 1000) to (0 - 1024)
68 *          Set the range of blendingfactor,
69 *                  1. from 0 to (Progress << 1)            ;for Progress <= 512
70 *                  2. from (( Progress - 512)<< 1) to 1024 ;otherwise
71 *          Set the increment of blendingfactor for each element in the image row by the factor,
72 *                  =  (Range-1) / (image width-1)  ;for width >= range
73 *                  =  (Range) / (image width)      ;otherwise
74 *          Loop on each(= i) row of output Y plane (steps of 2)
75 *              Loop on each(= j) column of output Y plane (steps of 2)
76 *                  Get four Y samples and one U & V sample from two input YUV4:2:0 images and
77 *                  Compute four Y sample and one U & V sample for output YUV4:2:0 image
78 *                      using the following,
79 *                  Out(i,j) = blendingfactor(i,j) * In1(i,j)+ (l - blendingfactor(i,j)) * In2(i,j)
80 *              end loop column
81 *          end loop row.
82 * @param   pUserData: (IN)  User Specific Parameter
83 * @param   pPlaneIn1: (IN)  Pointer to an array of image plane structures maintained for Y, U
84 *                            and V planes.
85 * @param   pPlaneIn2: (IN)  Pointer to an array of image plane structures maintained for Y, U
86 *                            and V planes.
87 * @param   pPlaneOut: (OUT) Pointer to an array of image plane structures maintained for Y, U
88 *                            and V planes.
89 * @param   Progress:  (IN)  Progress value (varies between 0 and 1000)
90 * @return  M4VIFI_OK: No error
91 * @return  M4VIFI_ILLEGAL_FRAME_HEIGHT: Error in height
92 * @return  M4VIFI_ILLEGAL_FRAME_WIDTH:  Error in width
93 ***********************************************************************************************/
94unsigned char M4VIFI_ImageBlendingonYUV420 (void *pUserData, M4ViComImagePlane *pPlaneIn1,
95                                                M4ViComImagePlane *pPlaneIn2,
96                                                M4ViComImagePlane *pPlaneOut, UInt32 Progress);
97
98#ifdef __cplusplus
99}
100#endif /* __cplusplus */
101
102#endif // __M4VFL_TRANSITION_H__
103