/*
* Copyright (C) 2011 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
******************************************************************************
* @file M4TRAN_transition.h
* @brief
* @note
******************************************************************************
*/
#ifndef __M4VFL_TRANSITION_H__
#define __M4VFL_TRANSITION_H__
#ifdef __cplusplus
extern "C" {
#endif
typedef unsigned char UInt8;
typedef unsigned long UInt32;
typedef struct S_M4ViComImagePlane
{
UInt32 u_width; /* active width, in pixels */
UInt32 u_height; /* active height, in lines */
UInt32 u_topleft; /* index of 1st active pixel */
UInt32 u_stride; /* line stride, in bytes */
UInt8 *pac_data; /* buffer address */
} M4ViComImagePlane;
typedef struct S_M4VFL_modifLumParam
{
unsigned short lum_factor;
unsigned short copy_chroma;
} M4VFL_ModifLumParam;
#define M4VIFI_OK 0
#define M4VIFI_ILLEGAL_FRAME_HEIGHT 8
#define M4VIFI_ILLEGAL_FRAME_WIDTH 9
unsigned char M4VFL_modifyLumaByStep(M4ViComImagePlane *plane_in, M4ViComImagePlane *plane_out,
M4VFL_ModifLumParam *lum_param, void *user_data);
unsigned char M4VFL_modifyLumaWithScale(M4ViComImagePlane *plane_in, M4ViComImagePlane *plane_out,
unsigned long lum_factor, void *user_data);
/**
*************************************************************************************************
* M4OSA_ERR M4VIFI_ImageBlendingonYUV420 (void *pUserData,
* M4VIFI_ImagePlane *pPlaneIn1,
* M4VIFI_ImagePlane *pPlaneIn2,
* M4VIFI_ImagePlane *pPlaneOut,
* M4VIFI_UInt32 Progress)
* @brief Blends two YUV 4:2:0 Planar images.
* @note Blends YUV420 planar images,
* Map the value of progress from (0 - 1000) to (0 - 1024)
* Set the range of blendingfactor,
* 1. from 0 to (Progress << 1) ;for Progress <= 512
* 2. from (( Progress - 512)<< 1) to 1024 ;otherwise
* Set the increment of blendingfactor for each element in the image row by the factor,
* = (Range-1) / (image width-1) ;for width >= range
* = (Range) / (image width) ;otherwise
* Loop on each(= i) row of output Y plane (steps of 2)
* Loop on each(= j) column of output Y plane (steps of 2)
* Get four Y samples and one U & V sample from two input YUV4:2:0 images and
* Compute four Y sample and one U & V sample for output YUV4:2:0 image
* using the following,
* Out(i,j) = blendingfactor(i,j) * In1(i,j)+ (l - blendingfactor(i,j)) * In2(i,j)
* end loop column
* end loop row.
* @param pUserData: (IN) User Specific Parameter
* @param pPlaneIn1: (IN) Pointer to an array of image plane structures maintained for Y, U
* and V planes.
* @param pPlaneIn2: (IN) Pointer to an array of image plane structures maintained for Y, U
* and V planes.
* @param pPlaneOut: (OUT) Pointer to an array of image plane structures maintained for Y, U
* and V planes.
* @param Progress: (IN) Progress value (varies between 0 and 1000)
* @return M4VIFI_OK: No error
* @return M4VIFI_ILLEGAL_FRAME_HEIGHT: Error in height
* @return M4VIFI_ILLEGAL_FRAME_WIDTH: Error in width
***********************************************************************************************/
unsigned char M4VIFI_ImageBlendingonYUV420 (void *pUserData, M4ViComImagePlane *pPlaneIn1,
M4ViComImagePlane *pPlaneIn2,
M4ViComImagePlane *pPlaneOut, UInt32 Progress);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif // __M4VFL_TRANSITION_H__