123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327 |
- /**
- * @file VideoRender.h
- * @brief 显示库,将YUV显示出图像.
- * @author qi_zhiyu
- * @par Copyright (c):
- * ZheJiang Dahua Technology Stock Co.Ltd.
- * All Rights Reserved
- * @date 2015-08-17
- * @note 接口是线程不安全的。
- * @version 1.00.1
- */
- #ifndef __VIDEORENDER_H_
- #define __VIDEORENDER_H_
- #ifdef __cplusplus
- extern "C"{
- #endif // end #ifdef __cplusplus
- #ifdef WIN64
- #undef WIN32
- #endif
- /** 编译选项 */
- #ifdef WIN32 // win64位下,会报和def重复定义的警告
- # ifdef _USRDLL // 动态库导出
- # ifdef VIDEORENDER_EXPORTS
- # define VRENDER_API __declspec(dllexport)
- # else
- # define VRENDER_API __declspec(dllimport)
- # endif
- # else
- # define VRENDER_API
- #endif
- #else
- # define VRENDER_API
- #endif //end #ifdef WIN32
- #if (defined (WIN32) || defined(WIN64))
- # define CALLMETHOD __stdcall
- # define CALLBACK __stdcall
- #else
- # define CALLMETHOD
- # define CALLBACK
- #endif // end #if (defined (WIN32) || defined(WIN64))
- #define IN
- #define OUT
- typedef void* VR_HANDLE; /**< 播放API使用的句柄 */
- typedef void* VR_HWND; /**< 窗口句柄 */
- typedef void* VR_HDC; /**< 绘图句柄 */
- typedef void* VR_HFONT; /**< 字体句柄 */
- /**
- * @enum tagRenderMode
- * @brief 视频显示模式枚举定义
- * @attention 无
- */
- typedef enum tagVideoRenderMode
- {
- #if (defined (WIN32) || defined(WIN64))
- VR_MODE_D3D = 0, /**< 使用D3D的方式进行显示 */
- VR_MODE_GDI, /**< 使用GDI显示模式 */
- #elif (defined(LINUX32) || defined(LINUX64))
- VR_MODE_OPENGLX, /**< 使用Opengl的方式进行显示 */
- VR_MODE_X11, /**< 使用X11的方式进行显示 */
- #endif // end #if (defined (WIN32) || defined(WIN64))
- }VR_MODE_E;
- /**
- * @enum tagVideoRenderErr
- * @brief 接口返回值
- * @attention 无
- */
- typedef enum tagVideoRenderErr
- {
- VR_SUCCESS,
- VR_ILLEGAL_PARAM, /**< 非法参数*/
- VR_ERR_ORDER, /**< 调用接口顺序错误*/
- VR_NO_MEMORY, /**< 内存不足*/
- VR_NOT_SUPPORT, /**< 不支持,或是缺少系统库,或是不支持输入的参数值*/
- VR_D3D_PRESENT_FAILED, /**< D3D显示错误 */
- VR_GDI_CREATE_OBJ_FAILED, /**< GGI创建对象失败 */
- VR_DEFAULT_FONT_NOT_EXIST, /**< 默认字体不存在 */
- }VR_ERR_E;
- /**
- * @enum tagVideoRenderPixelType
- * @brief 帧像素类型
- * @attention 无
- */
- typedef enum tagVideoRenderPixelType
- {
- VR_PIXEL_FMT_NONE = -1,
- VR_PIXEL_FMT_YUV420P, ///< planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
- VR_PIXEL_FMT_RGB24, ///< packet RGB 8:8:8, 24bpp, RGBRGB...
- VR_PIXEL_FMT_MONO8, ///< mono8
-
- }VR_PIXEL_TYPE_E;
- /**
- * @struct tagVideoRenderOpenParam
- * @brief 打开视频显示所需要的参数。供VR_Open接口使用。
- * @attention 无
- */
- typedef struct tagVideoRenderOpenParam
- {
- VR_HWND hWnd; /**< 窗口句柄*/
- VR_MODE_E eVideoRenderMode; /**< 显示模式*/
- int nWidth; /**< 视频宽*/
- int nHeight; /**< 视频高*/
- }VR_OPEN_PARAM_S;
- /**
- * @struct tagVideoRenderFrame
- * @brief 显示视频所需要的参数。供VR_RenderFrame接口使用。
- * @attention 无
- */
- typedef struct tagVideoRenderFrame
- {
- #define NUM_DATA_POINTS 4
- unsigned char* data[NUM_DATA_POINTS]; /**< 根据format决定,YUV420P时每个分量分别表示指向Y,U,V缓冲,RGB时,只使用data[0],指向RGB缓冲*/
- int stride[NUM_DATA_POINTS]; /**< 每个分量的跨距*/
- int nWidth; /**< 视频宽,为了防止显示过程中修改分辨率*/
- int nHeight; /**< 视频高,为了防止显示过程中修改分辨率*/
- VR_PIXEL_TYPE_E format;
- }VR_FRAME_S;
- /**
- * @struct tagVideoRenderRenderParam
- * @brief 显示视频所需要的参数。供VR_RenderEx接口使用。
- * @attention 不建议使用,兼容老版本而保留
- */
- typedef struct tagVideoRenderRenderParam
- {
- unsigned char* data[3]; /**< 每个分量分别表示指向Y,U,V缓冲*/
- int stride[3]; /**< 每个分量的跨距*/
- int nWidth[3]; /**< 每个分量的宽*/
- int nHeight[3]; /**< 每个分量的高*/
- }VR_RENDER_PARAM_S;
- #if (defined(WIN32) || defined (WIN64))
- typedef COLORREF VR_COLOR;
- #else
- typedef unsigned int VR_COLOR;
- typedef unsigned char BYTE;
- typedef unsigned short WORD;
- typedef unsigned int DWORD;
- #define GetRValue(rgb) ((BYTE)(rgb))
- #define GetGValue(rgb) ((BYTE)(((WORD)(rgb)) >> 8))
- #define GetBValue(rgb) ((BYTE)((rgb)>>16))
- #define RGB(r,g,b) ((VR_COLOR)(((BYTE)(r)|((WORD)((BYTE)(g))<<8))|(((DWORD)(BYTE)(b))<<16)))
- #endif
- /**
- * @struct tagFontInfo
- * @brief 字体参数。供VR_CreateFont接口使用。
- * @attention 无
- */
- typedef struct tagFontInfo
- {
- unsigned int nFontSize; ///< 字体大小
- }VR_FONT_INFO;
- /**
- * @struct tagVRPoint
- * @brief 点坐标
- * @attention 无
- */
- typedef struct tagVRPoint {
- long x;
- long y;
- } VR_POINT;
- /**
- * @struct tagVRRect
- * @brief 矩形
- * @attention 无
- */
- typedef struct tagVRRect
- {
- int left;
- int top;
- int right;
- int bottom;
- }VR_RECT;
- /**
- * @brief 生成一个播放对象
- * @param[in] pParam:VR_OPEN_PARAM_S结构体。生成播放对象所需要的参数。
- * @param[out] pHandle:VR_HANDLE句柄。输出生成的播放的对象。
- * @Return: VR_ERR_E:播放接口返回值
- * - VR_SUCCESS 表示执行成功
- * - 其他值见 VR_ERR_E枚举
- *
- * @note 执行成功后,需要调用VR_Close来释放资源。
- * @see VR_ERR_E,VR_Close
- */
- VRENDER_API VR_ERR_E CALLMETHOD VR_Open(IN VR_OPEN_PARAM_S* pParam, OUT VR_HANDLE* pHandle);
- /**
- * @brief 将输入的一帧YUV显示出图像
- * @param[in] handle:VR_HANDLE句柄,由VR_Open创建。
- * @param[in] param:VR_FRAME_S结构体。
- * @param[in] pEnlargeRect:VR_RECT结构体。放大矩形区域。原图大小显示,不需要放大时,填NULL;
- * @Return: VR_ERR_E:播放接口返回值
- * - VR_SUCCESS 表示执行成功
- * - 其他值见 VR_ERR_E枚举
- *
- * @note 输入一帧即显示,播放速度由外部输入速度控制。
- * @see VR_ERR_E
- */
- VRENDER_API VR_ERR_E CALLMETHOD VR_RenderFrame(IN VR_HANDLE handle, IN VR_FRAME_S* param, IN VR_RECT* pEnlargeRect);
- /**
- * @brief 关闭播放对象
- * @param[in] handle:VR_HANDLE句柄,由VR_Open创建。
- * @Return: VR_ERR_E:播放接口返回值
- * - VR_SUCCESS 表示执行成功
- * - 其他值见 VR_ERR_E枚举
- *
- * @note 和VR_Open配对使用。
- * @see VR_ERR_E,VR_Open
- */
- VRENDER_API VR_ERR_E CALLMETHOD VR_Close(IN VR_HANDLE handle);
- typedef void (CALLBACK *fnDrawCallback)(VR_HWND hWindow, VR_HDC hDrawHandle, void* pUserData);
- /**
- * @brief 设置GDI回调, 可以使用GDI在画面中绘制叠加显示
- * @param[in] handle:VR_HANDLE句柄,由VR_Open创建。
- * @param[in] callback:回调函数
- * @param[in] pUserData:用户回调参数
- * @Return: VR_ERR_E:播放接口返回值
- * - VR_SUCCESS 表示执行成功
- * - 其他值见 VR_ERR_E枚举
- */
- VRENDER_API VR_ERR_E CALLMETHOD VR_SetDrawCallback(IN VR_HANDLE handle, IN fnDrawCallback callback, IN void* pUserData);
- /**
- * @brief 创建字体句柄
- * @param[in] pFontInfo:字体信息,包括颜色和字体大小。
- * @param[out] hFont:获得字体句柄
- * @Return: VR_ERR_E:播放接口返回值
- * - VR_SUCCESS 表示执行成功
- * - 其他值见 VR_ERR_E枚举
- *
- * @note 画图辅助函数。
- */
- VRENDER_API VR_ERR_E CALLMETHOD VR_CreateFont(IN VR_FONT_INFO* pFontInfo, OUT VR_HFONT* hFont);
- /**
- * @brief 销毁字体句柄
- * @param[in] hFont:字体句柄,由VR_CreateFont创建
- * @Return: VR_ERR_E:播放接口返回值
- * - VR_SUCCESS 表示执行成功
- * - 其他值见 VR_ERR_E枚举
- *
- * @note 画图辅助函数。
- */
- VRENDER_API VR_ERR_E CALLMETHOD VR_DestroyFont(IN VR_HFONT hFont);
- /**
- * @brief 绘字。支持\n符回车显示
- * @param[in] hFont:字体。
- * @param[in] hWindow:窗口句柄,由fnDrawCallback绘图回调输出
- * @param[in] hDrawHandle:绘图句柄,由fnDrawCallback绘图回调输出
- * @param[in] lpText:UNICODE编码缓冲指针,支持中文显示。
- * @param[in] nTextLen:UNICODE编码缓冲大小
- * @param[in] color:字体颜色
- * @param[in] pointStart:开始绘制字符串的位置
- * @Return: VR_ERR_E:播放接口返回值
- * - VR_SUCCESS 表示执行成功
- * - 其他值见 VR_ERR_E枚举
- *
- * @note 画图辅助函数。
- */
- VRENDER_API VR_ERR_E CALLMETHOD VR_DrawText(IN VR_HFONT hFont,
- IN VR_HWND hWindow,
- IN VR_HDC hDrawHandle,
- IN const char* lpText,
- IN int nTextLen,
- IN VR_COLOR color,
- IN VR_POINT* pointStart);
- /**
- * @brief 将输入的一帧YUV显示出图像
- * @param[in] handle:VR_HANDLE句柄,由VR_Open创建。
- * @param[in] param:VR_RENDER_PARAM_S结构体。显示所需要的参数。
- * @param[in] pEnlargeRect:VR_RECT结构体。放大矩形区域。原图大小显示,不需要放大时,填NULL;
- * @attention 此接口不建议使用,建议使用VR_RenderFrame替代。为兼容老版本的使用而保留。
- * @Return: VR_ERR_E:播放接口返回值
- * - VR_SUCCESS 表示执行成功
- * - 其他值见 VR_ERR_E枚举
- *
- * @note 输入一帧即显示,播放速度由外部输入速度控制。
- * @see VR_ERR_E
- */
- VRENDER_API VR_ERR_E CALLMETHOD VR_RenderEx(IN VR_HANDLE handle, IN VR_RENDER_PARAM_S* param, IN VR_RECT* pEnlargeRect);
- /**
- * @brief 将输入的一帧YUV显示出图像
- * @param[in] handle:VR_HANDLE句柄,由VR_Open创建。
- * @param[in] param:VR_RENDER_PARAM_S结构体。显示所需要的参数。
- * @Return: VR_ERR_E:播放接口返回值
- * - VR_SUCCESS 表示执行成功
- * - 其他值见 VR_ERR_E枚举
- *
- * @attention 此接口不建议使用,建议使用VR_RenderFrame替代。为兼容老版本的使用而保留。
- * @note 输入一帧即显示,播放速度由外部输入速度控制。
- * @see VR_ERR_E
- */
- VRENDER_API VR_ERR_E CALLMETHOD VR_Render(IN VR_HANDLE handle, IN VR_RENDER_PARAM_S* param);
- #ifdef __cplusplus
- }
- #endif // end #ifdef __cplusplus
- #endif // end #ifndef __VIDEORENDER_H_
|