multimedia/device/mpp/include/hi_comm_ive.h

353 lines
13 KiB
C

/******************************************************************************
Copyright (C), 2001-2014, Hisilicon Tech. Co., Ltd.
******************************************************************************
File Name : hi_comm_ive.h
Version : Initial Draft
Author : Hisilicon multimedia software (IVE) group
Created : 2011/05/16
Description :
History :
1.Date : 2011/05/16
Author :
Modification: Created file
2.Date : 2013/07/01~2014/08/08
Author :
Modification: Add MPI function
******************************************************************************/
#ifndef _HI_COMM_IVE_H_
#define _HI_COMM_IVE_H_
#ifdef __cplusplus
#if __cplusplus
extern "C"{
#endif
#endif
#include "hi_type.h"
#include "hi_errno.h"
/*-----------------------------------------------*
* The fixed-point data type, will be used to *
* represent float data in hardware calculations.*
*-----------------------------------------------*/
/*--u8bit----------------------------------------*/
typedef unsigned char HI_U0Q8;
typedef unsigned char HI_U1Q7;
typedef unsigned char HI_U5Q3;
/*--u16bit---------------------------------------*/
typedef unsigned short HI_U0Q16;
typedef unsigned short HI_U4Q12;
typedef unsigned short HI_U6Q10;
typedef unsigned short HI_U8Q8;
typedef unsigned short HI_U9Q7;
typedef unsigned short HI_U12Q4;
typedef unsigned short HI_U14Q2;
typedef unsigned short HI_U5Q11;
/*--s16bit---------------------------------------*/
typedef short HI_S9Q7;
typedef short HI_S14Q2;
typedef short HI_S1Q15;
/*--u32bit---------------------------------------*/
typedef unsigned int HI_U22Q10;
typedef unsigned int HI_U25Q7;
typedef unsigned int HI_U21Q11;
/*--s32bit---------------------------------------*/
typedef int HI_S25Q7;
typedef int HI_S16Q16;
/*-----------------------------------------------*
* The fixed-point data type combine with flag_bits.*
*-----------------------------------------------*/
/*8bits unsigned integer,4bits decimal fraction,4bits flag_bits*/
typedef unsigned short HI_U8Q4F4;
/*float*/
typedef float HI_FLOAT;
/*double*/
typedef double HI_DOUBLE;
/*
* Type of the IVE_IMAGE_S data.
* Aded by tanbing 2013-7-22
*/
typedef enum hiIVE_IMAGE_TYPE_E
{
IVE_IMAGE_TYPE_U8C1 = 0x0,
IVE_IMAGE_TYPE_S8C1 = 0x1,
IVE_IMAGE_TYPE_YUV420SP = 0x2, /*YUV420 SemiPlanar*/
IVE_IMAGE_TYPE_YUV422SP = 0x3, /*YUV422 SemiPlanar*/
IVE_IMAGE_TYPE_YUV420P = 0x4, /*YUV420 Planar */
IVE_IMAGE_TYPE_YUV422P = 0x5, /*YUV422 planar */
IVE_IMAGE_TYPE_S8C2_PACKAGE = 0x6,
IVE_IMAGE_TYPE_S8C2_PLANAR = 0x7,
IVE_IMAGE_TYPE_S16C1 = 0x8,
IVE_IMAGE_TYPE_U16C1 = 0x9,
IVE_IMAGE_TYPE_U8C3_PACKAGE = 0xa,
IVE_IMAGE_TYPE_U8C3_PLANAR = 0xb,
IVE_IMAGE_TYPE_S32C1 = 0xc,
IVE_IMAGE_TYPE_U32C1 = 0xd,
IVE_IMAGE_TYPE_S64C1 = 0xe,
IVE_IMAGE_TYPE_U64C1 = 0xf,
IVE_IMAGE_TYPE_BUTT
}IVE_IMAGE_TYPE_E;
/*
* Definition of the IVE_IMAGE_S.
* Added by Tan Bing, 2013-7-22.
*/
typedef struct hiIVE_IMAGE_S
{
IVE_IMAGE_TYPE_E enType;
HI_U32 u32PhyAddr[3];
HI_U8 *pu8VirAddr[3];
HI_U16 u16Stride[3];
HI_U16 u16Width;
HI_U16 u16Height;
HI_U16 u16Reserved; /*Can be used such as elemSize*/
}IVE_IMAGE_S;
typedef IVE_IMAGE_S IVE_SRC_IMAGE_S;
typedef IVE_IMAGE_S IVE_DST_IMAGE_S;
/*
* Definition of the IVE_MEM_INFO_S.This struct special purpose for input or ouput, such as Hist, CCL, ShiTomasi.
* Added by Chen Quanfu, 2013-7-23.
*/
typedef struct hiIVE_MEM_INFO_S
{
HI_U32 u32PhyAddr;
HI_U8 *pu8VirAddr;
HI_U32 u32Size;
}IVE_MEM_INFO_S;
typedef IVE_MEM_INFO_S IVE_SRC_MEM_INFO_S;
typedef IVE_MEM_INFO_S IVE_DST_MEM_INFO_S;
/*
*Data struct ,created by Chen Quanfu 2013-07-19
*/
typedef struct hiIVE_DATA_S
{
HI_U32 u32PhyAddr; /*Physical address of the data*/
HI_U8 *pu8VirAddr;
HI_U16 u16Stride; /*2D data stride by byte*/
HI_U16 u16Width; /*2D data width by byte*/
HI_U16 u16Height; /*2D data height*/
HI_U16 u16Reserved;
}IVE_DATA_S;
typedef IVE_DATA_S IVE_SRC_DATA_S;
typedef IVE_DATA_S IVE_DST_DATA_S;
/*
* Definition of the union of IVE_8BIT_U.
* Added by Tan Bing, 2013-7-22.
*/
typedef union hiIVE_8BIT_U
{
HI_S8 s8Val;
HI_U8 u8Val;
}IVE_8BIT_U;
/*
* Definition of u16 point
*/
typedef struct hiIVE_POINT_U16_S
{
HI_U16 u16X;
HI_U16 u16Y;
}IVE_POINT_U16_S;
/*
* Definition of s16 point
*/
typedef struct hiIVE_POINT_S16_S
{
HI_U16 s16X;
HI_U16 s16Y;
}IVE_POINT_S16_S;
/*
*Float point represented by Fixed-point SQ25.7
*/
typedef struct hiIVE_POINT_S25Q7_S
{
HI_S25Q7 s25q7X; /*X coordinate*/
HI_S25Q7 s25q7Y; /*Y coordinate*/
}IVE_POINT_S25Q7_S;
/*
* Definition of rect
*/
typedef struct hiIVE_RECT_U16_S
{
HI_U16 u16X;
HI_U16 u16Y;
HI_U16 u16Width;
HI_U16 u16Height;
}IVE_RECT_U16_S;
typedef struct hiIVE_LOOK_UP_TABLE_S
{
IVE_MEM_INFO_S stTable;
HI_U16 u16ElemNum; /*LUT's elements number*/
HI_U8 u8TabInPreci;
HI_U8 u8TabOutNorm;
HI_S32 s32TabInLower; /*LUT's original input lower limit*/
HI_S32 s32TabInUpper; /*LUT's original input upper limit*/
}IVE_LOOK_UP_TABLE_S;
typedef enum hiEN_IVE_ERR_CODE_E
{
ERR_IVE_SYS_TIMEOUT = 0x40, /* IVE process timeout */
ERR_IVE_QUERY_TIMEOUT = 0x41, /* IVE query timeout */
ERR_IVE_OPEN_FILE = 0x42, /* IVE open file error */
ERR_IVE_READ_FILE = 0x43, /* IVE read file error */
ERR_IVE_WRITE_FILE = 0x44, /* IVE write file error */
ERR_IVE_BUTT
}EN_IVE_ERR_CODE_E;
typedef enum hiEN_FD_ERR_CODE_E
{
ERR_FD_SYS_TIMEOUT = 0x40, /* FD process timeout */
ERR_FD_CFG = 0x41, /* FD configuration error */
ERR_FD_FACE_NUM_OVER = 0x42, /* FD candidate face number over*/
ERR_FD_OPEN_FILE = 0x43, /* FD open file error */
ERR_FD_READ_FILE = 0x44, /* FD read file error */
ERR_FD_WRITE_FILE = 0x45, /* FD write file error */
ERR_FD_BUTT
}EN_FD_ERR_CODE_E;
/************************************************IVE error code ***********************************/
/*Invalid device ID*/
#define HI_ERR_IVE_INVALID_DEVID HI_DEF_ERR(HI_ID_IVE, EN_ERR_LEVEL_ERROR, EN_ERR_INVALID_DEVID)
/*Invalid channel ID*/
#define HI_ERR_IVE_INVALID_CHNID HI_DEF_ERR(HI_ID_IVE, EN_ERR_LEVEL_ERROR, EN_ERR_INVALID_CHNID)
/*At least one parameter is illegal. For example, an illegal enumeration value exists.*/
#define HI_ERR_IVE_ILLEGAL_PARAM HI_DEF_ERR(HI_ID_IVE, EN_ERR_LEVEL_ERROR, EN_ERR_ILLEGAL_PARAM)
/*The channel exists.*/
#define HI_ERR_IVE_EXIST HI_DEF_ERR(HI_ID_IVE, EN_ERR_LEVEL_ERROR, EN_ERR_EXIST)
/*The UN exists.*/
#define HI_ERR_IVE_UNEXIST HI_DEF_ERR(HI_ID_IVE, EN_ERR_LEVEL_ERROR, EN_ERR_UNEXIST)
/*A null point is used.*/
#define HI_ERR_IVE_NULL_PTR HI_DEF_ERR(HI_ID_IVE, EN_ERR_LEVEL_ERROR, EN_ERR_NULL_PTR)
/*Try to enable or initialize the system, device, or channel before configuring attributes.*/
#define HI_ERR_IVE_NOT_CONFIG HI_DEF_ERR(HI_ID_IVE, EN_ERR_LEVEL_ERROR, EN_ERR_NOT_CONFIG)
/*The operation is not supported currently.*/
#define HI_ERR_IVE_NOT_SURPPORT HI_DEF_ERR(HI_ID_IVE, EN_ERR_LEVEL_ERROR, EN_ERR_NOT_SUPPORT)
/*The operation, changing static attributes for example, is not permitted.*/
#define HI_ERR_IVE_NOT_PERM HI_DEF_ERR(HI_ID_IVE, EN_ERR_LEVEL_ERROR, EN_ERR_NOT_PERM)
/*A failure caused by the malloc memory occurs.*/
#define HI_ERR_IVE_NOMEM HI_DEF_ERR(HI_ID_IVE, EN_ERR_LEVEL_ERROR, EN_ERR_NOMEM)
/*A failure caused by the malloc buffer occurs.*/
#define HI_ERR_IVE_NOBUF HI_DEF_ERR(HI_ID_IVE, EN_ERR_LEVEL_ERROR, EN_ERR_NOBUF)
/*The buffer is empty.*/
#define HI_ERR_IVE_BUF_EMPTY HI_DEF_ERR(HI_ID_IVE, EN_ERR_LEVEL_ERROR, EN_ERR_BUF_EMPTY)
/*No buffer is provided for storing new data.*/
#define HI_ERR_IVE_BUF_FULL HI_DEF_ERR(HI_ID_IVE, EN_ERR_LEVEL_ERROR, EN_ERR_BUF_FULL)
/*The system is not ready because it may be not initialized or loaded.
*The error code is returned when a device file fails to be opened. */
#define HI_ERR_IVE_NOTREADY HI_DEF_ERR(HI_ID_IVE, EN_ERR_LEVEL_ERROR, EN_ERR_SYS_NOTREADY)
/*The source address or target address is incorrect during the operations such as calling copy_from_user or copy_to_user.*/
#define HI_ERR_IVE_BADADDR HI_DEF_ERR(HI_ID_IVE, EN_ERR_LEVEL_ERROR, EN_ERR_BADADDR)
/*The resource is busy during the operations such as destroying a VENC channel without deregistering it.*/
#define HI_ERR_IVE_BUSY HI_DEF_ERR(HI_ID_IVE, EN_ERR_LEVEL_ERROR, EN_ERR_BUSY)
/*IVE process timeout: 0xA01D8040*/
#define HI_ERR_IVE_SYS_TIMEOUT HI_DEF_ERR(HI_ID_IVE, EN_ERR_LEVEL_ERROR, ERR_IVE_SYS_TIMEOUT)
/*IVE query timeout: 0xA01D8041*/
#define HI_ERR_IVE_QUERY_TIMEOUT HI_DEF_ERR(HI_ID_IVE, EN_ERR_LEVEL_ERROR, ERR_IVE_QUERY_TIMEOUT)
/*IVE open file error: 0xA01D8042*/
#define HI_ERR_IVE_OPEN_FILE HI_DEF_ERR(HI_ID_IVE, EN_ERR_LEVEL_ERROR, ERR_IVE_OPEN_FILE)
/*IVE read file error: 0xA01D8043*/
#define HI_ERR_IVE_READ_FILE HI_DEF_ERR(HI_ID_IVE, EN_ERR_LEVEL_ERROR, ERR_IVE_READ_FILE)
/*IVE read file error: 0xA01D8044*/
#define HI_ERR_IVE_WRITE_FILE HI_DEF_ERR(HI_ID_IVE, EN_ERR_LEVEL_ERROR, ERR_IVE_WRITE_FILE)
/************************************************FD error code ***********************************/
/*Invalid device ID*/
#define HI_ERR_FD_INVALID_DEVID HI_DEF_ERR(HI_ID_FD, EN_ERR_LEVEL_ERROR, EN_ERR_INVALID_DEVID)
/*Invalid channel ID*/
#define HI_ERR_FD_INVALID_CHNID HI_DEF_ERR(HI_ID_FD, EN_ERR_LEVEL_ERROR, EN_ERR_INVALID_CHNID)
/*At least one parameter is illegal. For example, an illegal enumeration value exists.*/
#define HI_ERR_FD_ILLEGAL_PARAM HI_DEF_ERR(HI_ID_FD, EN_ERR_LEVEL_ERROR, EN_ERR_ILLEGAL_PARAM)
/*The channel exists.*/
#define HI_ERR_FD_EXIST HI_DEF_ERR(HI_ID_FD, EN_ERR_LEVEL_ERROR, EN_ERR_EXIST)
/*The UN exists.*/
#define HI_ERR_FD_UNEXIST HI_DEF_ERR(HI_ID_FD, EN_ERR_LEVEL_ERROR, EN_ERR_UNEXIST)
/*A null point is used.*/
#define HI_ERR_FD_NULL_PTR HI_DEF_ERR(HI_ID_FD, EN_ERR_LEVEL_ERROR, EN_ERR_NULL_PTR)
/*Try to enable or initialize the system, device, or channel before configuring attributes.*/
#define HI_ERR_FD_NOT_CONFIG HI_DEF_ERR(HI_ID_FD, EN_ERR_LEVEL_ERROR, EN_ERR_NOT_CONFIG)
/*The operation is not supported currently.*/
#define HI_ERR_FD_NOT_SURPPORT HI_DEF_ERR(HI_ID_FD, EN_ERR_LEVEL_ERROR, EN_ERR_NOT_SUPPORT)
/*The operation, changing static attributes for example, is not permitted.*/
#define HI_ERR_FD_NOT_PERM HI_DEF_ERR(HI_ID_FD, EN_ERR_LEVEL_ERROR, EN_ERR_NOT_PERM)
/*A failure caused by the malloc memory occurs.*/
#define HI_ERR_FD_NOMEM HI_DEF_ERR(HI_ID_FD, EN_ERR_LEVEL_ERROR, EN_ERR_NOMEM)
/*A failure caused by the malloc buffer occurs.*/
#define HI_ERR_FD_NOBUF HI_DEF_ERR(HI_ID_FD, EN_ERR_LEVEL_ERROR, EN_ERR_NOBUF)
/*The buffer is empty.*/
#define HI_ERR_FD_BUF_EMPTY HI_DEF_ERR(HI_ID_FD, EN_ERR_LEVEL_ERROR, EN_ERR_BUF_EMPTY)
/*No buffer is provided for storing new data.*/
#define HI_ERR_FD_BUF_FULL HI_DEF_ERR(HI_ID_FD, EN_ERR_LEVEL_ERROR, EN_ERR_BUF_FULL)
/*The system is not ready because it may be not initialized or loaded.
*The error code is returned when a device file fails to be opened. */
#define HI_ERR_FD_NOTREADY HI_DEF_ERR(HI_ID_FD, EN_ERR_LEVEL_ERROR, EN_ERR_SYS_NOTREADY)
/*The source address or target address is incorrect during the operations such as calling copy_from_user or copy_to_user.*/
#define HI_ERR_FD_BADADDR HI_DEF_ERR(HI_ID_FD, EN_ERR_LEVEL_ERROR, EN_ERR_BADADDR)
/*The resource is busy during the operations such as destroying a VENC channel without deregistering it.*/
#define HI_ERR_FD_BUSY HI_DEF_ERR(HI_ID_FD, EN_ERR_LEVEL_ERROR, EN_ERR_BUSY)
/*FD process timeout: 0xA02F8040*/
#define HI_ERR_FD_SYS_TIMEOUT HI_DEF_ERR(HI_ID_FD, EN_ERR_LEVEL_ERROR, ERR_FD_SYS_TIMEOUT)
/*FD configuration error: 0xA02F8041*/
#define HI_ERR_FD_CFG HI_DEF_ERR(HI_ID_FD, EN_ERR_LEVEL_ERROR, ERR_FD_CFG)
/*FD candidate face number over: 0xA02F8042*/
#define HI_ERR_FD_FACE_NUM_OVER HI_DEF_ERR(HI_ID_FD, EN_ERR_LEVEL_ERROR, ERR_FD_FACE_NUM_OVER)
/*FD open file error: 0xA02F8043*/
#define HI_ERR_FD_OPEN_FILE HI_DEF_ERR(HI_ID_FD, EN_ERR_LEVEL_ERROR, ERR_FD_OPEN_FILE)
/*FD read file error: 0xA02F8044*/
#define HI_ERR_FD_READ_FILE HI_DEF_ERR(HI_ID_FD, EN_ERR_LEVEL_ERROR, ERR_FD_READ_FILE)
/*FD read file error: 0xA02F8045*/
#define HI_ERR_FD_WRITE_FILE HI_DEF_ERR(HI_ID_FD, EN_ERR_LEVEL_ERROR, ERR_FD_WRITE_FILE)
/************************************************ODT error code ***********************************/
/*ODT exist: 0xA0308004*/
#define HI_ERR_ODT_EXIST HI_DEF_ERR(HI_ID_ODT, EN_ERR_LEVEL_ERROR, EN_ERR_EXIST)
/*ODT the system is not ready because it may be not initialized: 0xA0308010*/
#define HI_ERR_ODT_NOTREADY HI_DEF_ERR(HI_ID_ODT, EN_ERR_LEVEL_ERROR, EN_ERR_SYS_NOTREADY)
/*ODT busy: 0xA0308012*/
#define HI_ERR_ODT_BUSY HI_DEF_ERR(HI_ID_ODT, EN_ERR_LEVEL_ERROR, EN_ERR_BUSY)
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif
#endif/*__HI_COMM_IVE_H__*/