/*******************************************************************************
* Copyright (C) Marvell International Ltd. and its affiliates
*
* Marvell GPL License Option
*
* If you received this File from Marvell, you may opt to use, redistribute and/or
* modify this File in accordance with the terms and conditions of the General
* Public License Version 2, June 1991 (the "GPL License"), a copy of which is
* available along with the File in the license.txt file or by writing to the Free
* Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
* on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
*
* THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
* WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
* DISCLAIMED.  The GPL License provides additional details about this warranty
* disclaimer.
********************************************************************************/

#ifndef _VPP_FE_DLR_H_
#define _VPP_FE_DLR_H_

#include "thinvpp_api.h"
#include "thinvpp_module.h"

/**********************************************************************
*Data structure definitions for FE DLR  block driver                                                 *
***********************************************************************/

#define PIXEL_PER_BEAT_YUV_422   4
#define PIXEL_PER_BEAT_ARGB_8888 2
#define PIXEL_PER_BEAT_LUT8      8

/*Enum for CSC mode*/
typedef enum VPP_FE_DLR_CSC_MODES
{
    VPP_FE_DLR_CSC_BYPASS_MODE = 0,
    VPP_FE_DLR_CSC_601_TO_709,
    VPP_FE_DLR_CSC_709_TO_601,
    VPP_FE_DLR_CSC_RGB_TO_YUV_709,
    VPP_FE_DLR_CSC_YUV_709_TO_RGB,
    VPP_FE_DLR_CSC_RGB_TO_YUV_601,
    VPP_FE_DLR_CSC_YUV_601_TO_RGB,
    VPP_FE_DLR_CSC_sRGB_TO_YUV_709,
    VPP_FE_DLR_CSC_YUV_709_TO_sRGB,
    VPP_FE_DLR_CSC_sRGB_TO_YUV_601,
    VPP_FE_DLR_CSC_YUV_601_TO_sRGB,
    VPP_FE_DLR_CSC_MAX_MODES
} VPP_FE_DLR_CSC_MODES;

/*Enum for dataloader in-line channel*/
typedef enum VPP_FE_DLR_CHANNEL
{
    VPP_FE_DLR_CHANNEL_BG = 0,
    VPP_FE_DLR_CHANNEL_MAIN,
    VPP_FE_DLR_CHANNEL_PIP,
    VPP_FE_DLR_CHANNEL_PG,
    VPP_FE_DLR_CHANNEL_IG,
    VPP_FE_DLR_CHANNEL_CURSOR,
    VPP_FE_DLR_CHANNEL_MOSD,
    VPP_FE_DLR_CHANNEL_OFFLINE, //used in loading defult value for BG and off-line scaling data loader
    VPP_FE_DLR_CHANNEL_MAX = VPP_FE_DLR_CHANNEL_OFFLINE

}VPP_FE_DLR_CHANNEL;

/*Enum for dataloader off-line channel*/
typedef enum VPP_FE_DLR_OFFLINE_CHANNEL
{
    VPP_FE_DLR_OFFLINE_MAIN_W = 0,
    VPP_FE_DLR_OFFLINE_MAIN_R,
    VPP_FE_DLR_OFFLINE_PIP_W,
    VPP_FE_DLR_OFFLINE_PIP_R,
    VPP_FE_DLR_OFFLINE_AUX_W,
    VPP_FE_DLR_OFFLINE_AUX_R,
    VPP_FE_DLR_SEL_MAX

}VPP_FE_DLR_OFFLINE_CHANNEL;

/*input data format*/
typedef enum VPP_FE_DLR_FMT_SRC_FMT
{
    VPP_FE_DLR_SRC_FMT_YUV422 = 0,
    VPP_FE_DLR_SRC_FMT_ARGB32 = 0,
    VPP_FE_DLR_SRC_FMT_ARGB24,
    VPP_FE_DLR_SRC_FMT_ARGB4444,
    VPP_FE_DLR_SRC_FMT_RGB565,
    VPP_FE_DLR_SRC_FMT_ARGB1555,
    VPP_FE_DLR_SRC_FMT_LUT8,
    VPP_FE_DLR_SRC_FMT_MAX

}VPP_FE_DLR_FMT_SRC_FMT;

/*input data components order in OSD or PG graphic planes. In B0, for graphic planes*/
typedef enum VPP_FE_DLR_FMT_ORDER_OSD_PG
{
    VPP_FE_DLR_ORDER_OSD_PG_ARGB = 0,
    VPP_FE_DLR_ORDER_OSD_PG_ABGR,
    VPP_FE_DLR_ORDER_OSD_PG_RGBA,
    VPP_FE_DLR_ORDER_OSD_PG_BGRA,
    VPP_FE_DLR_ORDER_OSD_PG_MAX

}VPP_FE_DLR_FMT_ORDER_OSD_PG;

/*input data components order in PG graphic plane. In B0, for graphic planes*/
typedef enum VPP_FE_DLR_FMT_ORDER_PG
{
    VPP_FE_DLR_ORDER_PG_AVYU = 0,
    VPP_FE_DLR_ORDER_PG_AUYV,
    VPP_FE_DLR_ORDER_PG_VYUA,
    VPP_FE_DLR_ORDER_PG_UYVA,
    VPP_FE_DLR_ORDER_PG_MAX

}VPP_FE_DLR_FMT_ORDER_PG;

/*input data components order in video or PIP planes. In B0, for video planes*/
typedef enum VPP_FE_DLR_FMT_ORDER_VIDEO
{
    VPP_FE_DLR_ORDER_VIDEO_AVYU = 0,
    VPP_FE_DLR_ORDER_VIDEO_AUYV,
    VPP_FE_DLR_ORDER_VIDEO_VYUA,
    VPP_FE_DLR_ORDER_VIDEO_UYVA,
    VPP_FE_DLR_ORDER_VIDEO_MAX

}VPP_FE_DLR_FMT_ORDER_VIDEO;

/*input data format for main video*/
typedef enum VPP_FE_DLR_MAIN_INPUT_FMT
{
    VPP_FE_DLR_MAIN_INTERLACED = 0,
    VPP_FE_DLR_MAIN_PROGRESSIVE

}VPP_FE_DLR_MAIN_INPUT_FMT;

/*data loader input resolution*/
typedef struct VPP_FE_DLR_INPUT_RES_T
{
    unsigned int HRes;
    unsigned int VRes;

}VPP_FE_DLR_INPUT_RES, *PVPP_FE_DLR_INPUT_RES;

/*data loader plane start location*/
typedef struct VPP_FE_DLR_PLANE_START_LOC_T
{
    unsigned int HLoc;
    unsigned int VLoc;

}VPP_FE_DLR_PLANE_START_LOC, *PVPP_FE_DLR_PLANE_START_LOC;

/*data loader plane input format*/
typedef struct VPP_FE_DLR_PLANE_DATA_FMT_T
{
    unsigned char SrcFmt;
    unsigned char FmtOrder;

}VPP_FE_DLR_PLANE_DATA_FMT, *PVPP_FE_DLR_PLANE_DATA_FMT;

int FE_DLR_LoadDefaultVal(THINVPP_OBJ *vpp_obj, int Channel);
int FE_DLR_ClearChannel(THINVPP_OBJ *vpp_obj, int Channel);
int FE_DLR_ClearOffLineChannel(THINVPP_OBJ *vpp_obj, int Channel, int Clear);
int FE_DLR_SetPlaneSize(THINVPP_OBJ *vpp_obj, int Channel, PVPP_FE_DLR_INPUT_RES pPlaneSize, unsigned int CropWpl);
int FE_DLR_SetPlaneDataFmt(THINVPP_OBJ *vpp_obj, int Channel, PVPP_FE_DLR_PLANE_DATA_FMT pDataFmt);
int FE_DLR_EnableChannel(THINVPP_OBJ *vpp_obj, int Channel, int Enable);
int FE_DLR_EnableOffLineChannel(THINVPP_OBJ *vpp_obj, int Channel, int Enable);
int FE_DLR_SetOffLineChannel(THINVPP_OBJ *vpp_obj, int Channel, PVPP_FE_DLR_INPUT_RES pRes);
int FE_DLR_SetDummyTG(THINVPP_OBJ *vpp_obj, PVPP_FE_DLR_INPUT_RES pTotRes, int progressive, int sensio);

int FE_DLR_SetVPDMX(THINVPP_OBJ *vpp_obj, PVPP_FE_DLR_INPUT_RES pTotRes, int progressive, int sensio);
#endif

