17c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*
27c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Copyright (C) 2011 The Android Open Source Project
37c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
47c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Licensed under the Apache License, Version 2.0 (the "License");
57c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * you may not use this file except in compliance with the License.
67c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * You may obtain a copy of the License at
77c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
87c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *      http://www.apache.org/licenses/LICENSE-2.0
97c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Unless required by applicable law or agreed to in writing, software
117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * distributed under the License is distributed on an "AS IS" BASIS,
127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * See the License for the specific language governing permissions and
147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * limitations under the License.
157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /**
177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @file        M4TRAN_transition.h
197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief
207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note
217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifndef __M4VFL_TRANSITION_H__
257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define __M4VFL_TRANSITION_H__
267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef __cplusplus
287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargiextern "C" {
297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif
307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargitypedef unsigned char UInt8;
317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargitypedef unsigned long UInt32;
327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargitypedef    struct S_M4ViComImagePlane
347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    UInt32        u_width;            /* active width, in pixels */
367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    UInt32        u_height;            /* active height, in lines */
377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    UInt32        u_topleft;            /* index of 1st active pixel */
387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    UInt32        u_stride;            /* line stride, in bytes */
397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    UInt8        *pac_data;            /* buffer address */
407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}    M4ViComImagePlane;
417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargitypedef struct S_M4VFL_modifLumParam
437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    unsigned short lum_factor;
457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    unsigned short copy_chroma;
467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} M4VFL_ModifLumParam;
477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define     M4VIFI_OK                       0
497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define     M4VIFI_ILLEGAL_FRAME_HEIGHT     8
507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define     M4VIFI_ILLEGAL_FRAME_WIDTH      9
517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargiunsigned char M4VFL_modifyLumaByStep(M4ViComImagePlane *plane_in, M4ViComImagePlane *plane_out,
537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                         M4VFL_ModifLumParam *lum_param, void *user_data);
547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargiunsigned char M4VFL_modifyLumaWithScale(M4ViComImagePlane *plane_in, M4ViComImagePlane *plane_out,
567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                         unsigned long lum_factor, void *user_data);
577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *************************************************************************************************
607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4VIFI_ImageBlendingonYUV420 (void *pUserData,
617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *                                                  M4VIFI_ImagePlane *pPlaneIn1,
627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *                                                  M4VIFI_ImagePlane *pPlaneIn2,
637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *                                                  M4VIFI_ImagePlane *pPlaneOut,
647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *                                                  M4VIFI_UInt32 Progress)
657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief   Blends two YUV 4:2:0 Planar images.
667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note    Blends YUV420 planar images,
677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *          Map the value of progress from (0 - 1000) to (0 - 1024)
687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *          Set the range of blendingfactor,
697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *                  1. from 0 to (Progress << 1)            ;for Progress <= 512
707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *                  2. from (( Progress - 512)<< 1) to 1024 ;otherwise
717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *          Set the increment of blendingfactor for each element in the image row by the factor,
727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *                  =  (Range-1) / (image width-1)  ;for width >= range
737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *                  =  (Range) / (image width)      ;otherwise
747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *          Loop on each(= i) row of output Y plane (steps of 2)
757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *              Loop on each(= j) column of output Y plane (steps of 2)
767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *                  Get four Y samples and one U & V sample from two input YUV4:2:0 images and
777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *                  Compute four Y sample and one U & V sample for output YUV4:2:0 image
787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *                      using the following,
797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *                  Out(i,j) = blendingfactor(i,j) * In1(i,j)+ (l - blendingfactor(i,j)) * In2(i,j)
807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *              end loop column
817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *          end loop row.
827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   pUserData: (IN)  User Specific Parameter
837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   pPlaneIn1: (IN)  Pointer to an array of image plane structures maintained for Y, U
847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *                            and V planes.
857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   pPlaneIn2: (IN)  Pointer to an array of image plane structures maintained for Y, U
867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *                            and V planes.
877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   pPlaneOut: (OUT) Pointer to an array of image plane structures maintained for Y, U
887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *                            and V planes.
897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   Progress:  (IN)  Progress value (varies between 0 and 1000)
907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return  M4VIFI_OK: No error
917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return  M4VIFI_ILLEGAL_FRAME_HEIGHT: Error in height
927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return  M4VIFI_ILLEGAL_FRAME_WIDTH:  Error in width
937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ***********************************************************************************************/
947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargiunsigned char M4VIFI_ImageBlendingonYUV420 (void *pUserData, M4ViComImagePlane *pPlaneIn1,
957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                                M4ViComImagePlane *pPlaneIn2,
967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                                M4ViComImagePlane *pPlaneOut, UInt32 Progress);
977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef __cplusplus
997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
1007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /* __cplusplus */
1017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif // __M4VFL_TRANSITION_H__
103