📄 hi_video.h
字号:
/****************************************************************************** Copyright (C), 2005, Hisilicon Tech. Co., Ltd. ****************************************************************************** File Name : hi_video.h Version : Initial Draft Author : Hisilicon multimedia software group Created : 2005/5/21 Last Modified : Description : video api definitions Function List : too many ...:P History : 1.Date : 2005/5/21 Author : Z42136 Modification: Created file 2.Date : 2005/7/4 Author : Z42136 Modification: 将videodefs.h和videoDev.h集成到video.h中; 3.Date : 2005/8/9 Author : Z42136 Modification: 将video_api合并到hi_video.h中;******************************************************************************/#ifndef __HI_VIDEO_H__#define __HI_VIDEO_H__/* Includes ----------------------------------------------------------------- *//* external Macros ----------------------------------------------------------- *//* external Constants -------------------------------------------------------- *//* external Types ------------------------------------------------------------ */#define M 0x100000#define K 0x400#define _USE_INTtypedef struct tag_RECT_t{ U32 x; U32 y; U32 w; U32 h;}RECT_t, *PRECT_t;typedef RECT_t VIDEO_RECT_t;typedef struct{ U8 v; U8 u; U8 y; U8 a;}COLOR_AYUV_t;typedef struct{ U8 b; U8 g; U8 r; U8 a;}COLOR_ARGB_t;typedef enum{ VIDEO_ENCODING_MODE_PAL=0, VIDEO_ENCODING_MODE_NTSC, VIDEO_ENCODING_MODE_SUPPORT}VIDEO_ENCODING_MODE_t;typedef enum{ VIDEO_INPUT_MODE_BT656=0, /* ITU-R BT.656 YUV4:2:2视频标准 */ VIDEO_INPUT_MODE_BT601, /* ITU-R BT.601 YUV4:2:2视频标准 */ VIDEO_INPUT_MODE_DIGITAL_CAMERA, /* VGA,QVGA等摄像头的直接数据传输, 数据可以是Bayer的RGB数据或者YCbCr数据 */ VIDEO_INPUT_MODE_RAW_DATA /* CVBS的数字数据或者其他数字数据,不作任何处理 */}VIDEO_INPUT_MODE_t;typedef enum{ VIDEO_OUTPUT_MODE_BT656=0, /* ITU-R BT.656 YUV4:2:2视频标准输出 */ VIDEO_OUTPUT_MODE_BT601, /* ITU-R BT.601 YUV4:2:2视频标准输出 */ VIDEO_OUTPUT_MODE_LCD, /* TFT LCD 输出 */ VIDEO_OUTPUT_MODE_RAW_DATA, /* CVBS的数字数据或者其他数字数据,不作任何处理 */ VIDEO_OUTPUT_MODE_SUPPORT}VIDEO_OUTPUT_MODE_t;typedef enum{ VIDEO_CONTROL_MODE_SLAVER=0, VIDEO_CONTROL_MODE_MASTER}VIDEO_CONTROL_MODE_t;typedef enum{ PIXEL_FORMAT_RGB_1BPP=0, PIXEL_FORMAT_RGB_2BPP, PIXEL_FORMAT_RGB_4BPP, PIXEL_FORMAT_RGB_8BPP, PIXEL_FORMAT_RGB_444, PIXEL_FORMAT_RGB_4444, PIXEL_FORMAT_RGB_555, PIXEL_FORMAT_RGB_565, PIXEL_FORMAT_RGB_1555, /* 9 reserved */ PIXEL_FORMAT_RGB_888=0xA, PIXEL_FORMAT_RGB_8888, PIXEL_FORMAT_RGB_PLANAR_888, /* ??? */ PIXEL_FORMAT_RGB_BAYER, /* ??? */ PIXEL_FORMAT_YUV_A422, PIXEL_FORMAT_YUV_A444, PIXEL_FORMAT_YUV_PLANAR_422, PIXEL_FORMAT_YUV_PLANAR_420, PIXEL_FORMAT_YUV_PLANAR_444, PIXEL_FORMAT_YUV_SEMIPLANAR_422, PIXEL_FORMAT_YUV_SEMIPLANAR_420, PIXEL_FORMAT_YUV_SEMIPLANAR_444, PIXEL_FORMAT_UYVY_PACKAGE_422, PIXEL_FORMAT_YCbCr_PLANAR, PIXEL_FORMAT_SUPPORT, /* for VOU1.0 Main Layer */ PIXEL_FORMAT_YUV_0 = 0, //yuv422 cosited, no up scaling PIXEL_FORMAT_YUV_1, //yuv422 interspersed, no up scaling PIXEL_FORMAT_YUV_2, //yuv422 cosited, 1:2 output PIXEL_FORMAT_YUV_3, //yuv422 interspersed, 1:2 output PIXEL_FORMAT_YUV_4, //yuv420 cosited, no up scaling PIXEL_FORMAT_YUV_5, //yuv420 interspersed, no up scaling PIXEL_FORMAT_YUV_6, //yuv420 cosited, 1:2 output PIXEL_FORMAT_YUV_7, //yuv420 interspersed, 1:2 output PIXEL_FORMAT_YUV_8, //yuv444,yuv->rgb PIXEL_FORMAT_YUV_9, //yuv444, 1:2 output, yuv->rgb PIXEL_FORMAT_YUV_10, PIXEL_FORMAT_YUV_11, PIXEL_FORMAT_YUV_12, PIXEL_FORMAT_YUV_13, PIXEL_FORMAT_YUV_14, PIXEL_FORMAT_YUV_15, /* for HC */ PIXEL_FORMAT_2COLOR = 0, PIXEL_FORMAT_4COLOR, PIXEL_FORMAT_3COLOR, PIXEL_FORMAT_RESERVED, /* not for user */ PIXEL_FORMAT_YUV422 = 0, PIXEL_FORMAT_YUV444, PIXEL_FORMAT_RGB555, PIXEL_FORMAT_RGB888, }PIXEL_FORMAT_t;typedef struct{ PIXEL_FORMAT_t PixelFormat; /* 输入视频数据格式 */ U32 ulWidth; /* 输入视频宽度 */ U32 ulHeight; /* 输入视频高度 */ /* ** 如果采用RGB或者PackageYUV数据格式,则只有pulMemBase[0]有效 ** 如果采用Semi-Planar YUV数据格式,则只有pulMemBase[0~1]有效, ** 分别表示视频Y, C分量存放地址 ** 如果采用Planar YUV数据格式,则pulMemBase[0~2]均有效, ** 分别表示视频Y, U, V分量存放地址 */ U32 ulMemBase[3]; /* A/B/C分量地址 */ U32 ulStride[3]; /* A/B/C分量的行距 */}VIDEO_MEM_t;/* video input -----------------------------------------------------------*/typedef struct{ VIDEO_INPUT_MODE_t InputMode; /* 视频输入模式 */ VIDEO_ENCODING_MODE_t InputNorm; /* 视频输入制式 */ //VIDEO_RECT_t CapRect; /* 视频捕获范围 */}VIDEO_VIU_PARAM_t;typedef enum{ VIDEO_INPUT_FROM_VIU=0, /* 从VIU输入 */ VIDEO_INPUT_FROM_OSD, /* 从OSD输入 */ VIDEO_INPUT_FROM_ZSP, /* ZSP解码后输入 */ VIDEO_INPUT_FROM_USER, /* 用户自定义输入 */ VIDEO_INPUT_FROM_SUPPORT}VIDEO_INPUT_FROM_t;typedef struct{ VIDEO_INPUT_FROM_t InputFrom; /* 输入方式 */ BOOL bMemInSystem; /* 是否使用系统自动管理的帧内存 */ U32 ulMemBufferCount; /* 内存帧个数。如果为1,则表示使用固定帧内存 */ /* ** 如果 bMemInSystem=true, 则InputVideoMem->pul(X)MemBase为系统分配的内存起始地址(R), ** 不需要用户指定 ** 如果 bMemInSystem=true, 则InputVideoMem->pul(X)MemBase为用户指定的内存起始地址(W) ** (X)可以表示A/B/C */ VIDEO_MEM_t * pInputVideoMem; PVOID pInParam;}VIDEO_IN_CFG_t;/* video process ---------------------------------------------------------*/#if 0typedef struct{ VIDEO_RECT_t ZoomTo; VIDEO_FILTER_t Filter;}VIDEO_PROCESS_PARAM_t;#endif#if 0/* VIDEO Process Code */typedef enum{ VIDEO_PROCESS_ZOOM, VIDEO_PROCESS_FILTER, VIDEO_PROCESS_CSC}VIDEO_PROCESS_t;#endiftypedef enum{ VIDEO_FILTER_NONE=0, VIDEO_FILTER_DEFAULT, /* 抗抖动,闪烁 */ /* Anti-flicker filter in order to remove flicker effects which can ** occur inside an OSD when a color difference between pixels ** in top line and pixels in its surrounding bottom lines is too big. */ VIDEO_FILTER_ANTI_FLICKER, /* 抗混淆 */ /* Anti-flutter filter in order to remove flutter effects which can ** occur if the same OSD bitmap is displayed in both fields within ** the same frame. */ VIDEO_FILTER_ANTI_FLUTTER, /* 抗锯齿 */ VIDEO_FILTER_ANTI_ALIASING, /* 用户自定义滤波效果 */ VIDEO_FILTER_USER /* not support */}VIDEO_FILTER_t;typedef struct{ VIDEO_FILTER_t filter; /* 视频输入模式 */}VIDEO_DSU_PARAM_t;typedef enum{ VIDEO_PROCESS_UNIT_DSU=0, /* 输出到VOU */ VIDEO_PROCESS_UNIT_USER, /* 输出到ZSP */ VIDEO_PROCESS_UNIT_SUPPORT}VIDEO_PROCESS_UNIT_t;typedef struct{ VIDEO_PROCESS_UNIT_t ProcessUnit; BOOL bMemInSystem; /* 是否使用系统自动管理的帧内存 */ U32 ulMemBufferCount; /* 内存帧个数。如果为1,则表示使用固定帧内存 */ VIDEO_MEM_t * pProcessOutVideoMem; PVOID pProcessParam;}VIDEO_PROCESS_CFG_t;/* WMV9协议profile */typedef enum{ VIDEO_PROFILE_ADVANCED=0, VIDEO_PROFILE_MAIN, VIDEO_PROFILE_SIMPLE}VIDEO_PROFILE_t;typedef enum{ COLORSPACE_NONE=0, COLORSPACE_STANDARD, /* 标准色彩配置 */ COLORSPACE_SOFTNESS, /* 柔和色彩配置 */ COLORSPACE_VIVID, /* 鲜艳色彩配置 */ COLORSPACE_USER /* 用户自定义色彩配置, 暂不支持 */}VIDEO_COLORSPACE_t;typedef COLOR_ARGB_t GAMMA_TABLE_t[256];/* video out ---------------------------------------------------------------*//* TV输出剪裁 */typedef struct{ U8 Luma_H; /* 亮度信号的最高门限值 */ U8 Luma_L; /* 亮度信号的最低门限值 */ U8 Chroma_H; /* 色度信号的最高门限值 */ U8 Chroma_L; /* 色度信号的最低门限值 */}TV_CLIP_t;typedef enum{ VIDEO_VOU_LAYER_MAIN=0, VIDEO_VOU_LAYER_OVER1, VIDEO_VOU_LAYER_OVER2, VIDEO_VOU_LAYER_HC}VIDEO_VOU_LAYER_t;typedef enum{ PRIORITY_0=0, /* the lowerest priority, botton layer */ PRIORITY_1, PRIORITY_2, PRIORITY_3 /* the highest priority, top layer */}VOU_SHOW_PRIORITY_t;typedef struct{ VIDEO_OUTPUT_MODE_t OutputMode; VIDEO_ENCODING_MODE_t OutputNorm; TV_CLIP_t TVOutClip; VIDEO_VOU_LAYER_t VouLayer; VIDEO_RECT_t LayerRect; U32 LayerAlpha; /* for overlay: 0--100 */ VOU_SHOW_PRIORITY_t LayerPriority;}VIDEO_VOU_PARAM_t;typedef enum{ VIDEO_OUTPUT_TO_VOU=0, /* 输出到VOU */ VIDEO_OUTPUT_TO_ZSP, /* 输出到ZSP */ VIDEO_OUTPUT_TO_USER, /* 用户自定义输出 */ VIDEO_OUTPUT_TO_SUPPORT}VIDEO_OUTPUT_TO_t;typedef struct{ /* 输出方式: VOU, ZSP, 自定义等 */ VIDEO_OUTPUT_TO_t OutputTo; BOOL bMemInSystem; /* 是否使用系统自动管理的帧内存 */ U32 ulMemBufferCount; /* 内存帧个数。如果为1,则表示使用固定帧内存 */ /* ** 如果 bMemInSystem == TRUE 或者 OutputTo == VIDEO_OUTPUT_TO_VOU , ** 则不需要申请pOutputVideoMem,直接使用sourceHandle的Mem. ** ** 如果 bMemInSystem=true, 则InputVideoMem->pul(X)MemBase为系统分配的内存起始地址(R), ** 不需要用户指定 ** 如果 bMemInSystem=true, 则InputVideoMem->pul(X)MemBase为用户指定的内存起始地址(W) ** (X)可以表示A/B/C */ VIDEO_MEM_t * pOutputVideoMem; PVOID pOutParam;}VIDEO_OUT_CFG_t;#define MAX_HANDLE 256typedef U32 VIDEO_HANDLE;/* 0: video_handle not exist */typedef enum{ VIDEO_STEP_INPUT, VIDEO_STEP_PROCESS, VIDEO_STEP_OUTPUT}VIDEO_STEP_t;typedef BOOL(*VIDEO_CALLBACK)(PVOID);typedef struct { VIDEO_CALLBACK pCBStart; VIDEO_CALLBACK pCBDoneCheck; VIDEO_CALLBACK pCBDoneNotify; VIDEO_CALLBACK pCBReset;}VIDEO_OPS_t;#define VIDEO_MODE_CCIR656 0#define VIDEO_MODE_CCIR601 1#define VIDEO_MODE_LCD 2#define VIDEO_NORM_PAL 0#define VIDEO_NORM_NTSC 1#define VIDEO_NORM_SUPPORT 2#define VIDEO_MODE_SECAM 2#define VIDEO_MODE_AUTO 3#define VIDEO_MODE_MASTER 1#define VIDEO_MODE_SLAVER 0/* export functions -----------------------------------------------------*/extern BOOL VIDEO_Init(IN U32 pulVideoMemBase, IN U32 ulVideoMemSize);extern BOOL VIDEO_Enable(void);extern BOOL VIDEO_Disable(void);extern BOOL VIDEO_VIUDisable(void);extern BOOL VIDEO_VIUEnable(void);extern BOOL VIDEO_VOUDisable(void);extern BOOL VIDEO_VOUEnable(void);extern BOOL VIDEO_DisableStep(IN VIDEO_HANDLE StepVideoHandle);extern BOOL VIDEO_EnableStep(IN VIDEO_HANDLE StepVideoHandle);/* input functions */extern VIDEO_HANDLE VIDEO_AddInput( IN VIDEO_IN_CFG_t * pVideoInCfg, IN VIDEO_OPS_t * pInputVideoOps);extern BOOL VIDEO_SetInput( IN VIDEO_HANDLE InputHandle, IN VIDEO_IN_CFG_t * pVideoInCfg, IN VIDEO_OPS_t * pInputVideoOps);extern BOOL VIDEO_DeleteInput(VIDEO_HANDLE InputHandle);/* process functions */extern VIDEO_HANDLE VIDEO_AddProcess( IN VIDEO_HANDLE SourceHandle, IN VIDEO_PROCESS_CFG_t * pVideoProcessCfg, IN VIDEO_OPS_t * pProcessVideoOps);extern BOOL VIDEO_SetProcess( IN VIDEO_HANDLE ProcessHandle, IN VIDEO_HANDLE SourceHandle, IN VIDEO_PROCESS_CFG_t * pVideoProcessCfg, IN VIDEO_OPS_t * pProcessVideoOps);extern BOOL VIDEO_DeleteProcess(VIDEO_HANDLE ProcessHandle);/* output functions */extern VIDEO_HANDLE VIDEO_AddOutput( IN VIDEO_HANDLE SourceHandle, IN VIDEO_OUT_CFG_t * pVideoOutCfg, IN VIDEO_OPS_t * pOutputVideoOps);extern BOOL VIDEO_SetOutput( IN VIDEO_HANDLE OutputHandle, IN VIDEO_HANDLE SourceHandle, IN VIDEO_OUT_CFG_t * pVideoOutCfg, IN VIDEO_OPS_t * pOutputVideoOps);extern BOOL VIDEO_DeleteOutput(IN VIDEO_HANDLE OutputHandle);/* video session functions */extern BOOL VIDEO_StartSession(IN VIDEO_HANDLE InputHandle);extern BOOL VIDEO_StopSession(IN VIDEO_HANDLE InputHandle);extern BOOL VIDEO_GetDefaultStride(IN PIXEL_FORMAT_t PixelFormat, IN U32 ulWidth, OUT U32 ulStrde[]);extern BOOL VIDEO_GetDefaultOps(OUT VIDEO_OPS_t * pVideoOps, IN VIDEO_STEP_t VideoStep);extern BOOL VIDEO_GetVideoMem(IN VIDEO_HANDLE Handle, OUT VIDEO_MEM_t * pVideoMem);extern BOOL VIDEO_GetSourceVideoMem(IN VIDEO_HANDLE Handle, OUT VIDEO_MEM_t * pVideoMem);extern BOOL VIDEO_GetBuffer(IN VIDEO_HANDLE Handle, OUT VIDEO_MEM_t * pVideoMem, IN U32 ulBufferPtr);extern void VIDEO_TextOut(IN VIDEO_MEM_t * pVideoMem, IN U32 ulXStart, IN U32 ulYStart, IN PCHAR pString);/* TDE 加速函数 */#define CPY_STRIDE 0x80extern void VIDEO_wmemcpy(IN U32* pDest, IN const U32* pSrc, IN U32 ulCount);#endif /* __HI_VIDEO_H__ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -