/* * @file hv_mw_OsdDraw.h * @brief Header file of osd draw. * * @verbatim * ============================================================================== * ##### How to use ##### * ============================================================================== * (+) Use Hv_Mw_OsdDrawInit() to init osd draw data. * (+) Use Hv_Mw_OsdDraw() to draw osd to hardware. * (+) Use Hv_Mw_OsdShow() to display osd. * (+) Use Hv_Mw_OsdAnimitionDraw() to draw osd animition. * (+) Use Hv_Mw_OsdSceneSetPositionRatio() to set a scene's position by ratio(0-100) * (+) Use Hv_Mw_OsdSceneSetPosition() to set a scene's position directly * * @endverbatim * @author HiView SoC Software Team * @version 1.0.0 * @date 2022-09-01 */ #ifndef _HV_MW_OSD_DRAW_H #define _HV_MW_OSD_DRAW_H #include "hv_comm_Event.h" #include "hv_drv_OsdTypes.h" typedef enum _OsdLogoState { OSD_LOGO_WAITING_SHOW, OSD_LOGO_DRAWING, OSD_LOGO_SHOWING, OSD_LOGO_HIDEING, OSD_LOGO_DONE, } OsdLogoState; /** * @brief 返回是否有OSD正在显示 * @return BOOL HV_TRUE-是,HV_FALSE-否 */ BOOL Hv_Mw_OsdCheckIsShowing(VOID); /** * @brief 初始化OSD draw相关数据结构 */ VOID Hv_Mw_OsdDrawInit(VOID); #ifdef HV_SCALER_DEBUG_VERSION /** * @brief 设置当前Logo状态 * @param[in] enState Logo状态 */ VOID Hv_Mw_OsdSetLogoState(OsdLogoState enState); #endif /** * @brief 返回当前Logo状态 * @return OsdLogoState 当前Logo状态 */ OsdLogoState Hv_Mw_OsdGetLogoState(VOID); /** * @brief 设置跳过LOGO */ VOID Hv_Mw_OsdSetLogoBypass(VOID); /** * @brief 获取是否跳过LOGO * @return BOOL HV_TRUE-是,HV_FALSE-否 */ BOOL Hv_Mw_OsdGetLogoBypass(VOID); #if (HV_PROJECT_CONFIG_OSD_ANIMITION_SUPPORT == HV_CONFIG_ON) /** * @brief 设置当前帧是否有改变 * @param[in] bIsModify 是否改变 */ VOID Hv_Mw_OsdDrawSetFrameModify(BOOL bIsModify); #endif /** * @brief 画OSD * @param[in] pstEvent OsdEvent事件 * @return Status 返回值:成功-HV_SUCCESS,失败-HV_FAILURE, 继续-HV_CONTINUE */ Status Hv_Mw_OsdDraw(OsdEvent *pstEvent); /** * @brief 显示OSD * @param[in] pstEvent OsdEvent事件 * @return Status 返回值:成功-HV_SUCCESS,失败-HV_FAILURE, 继续-HV_CONTINUE */ Status Hv_Mw_OsdShow(OsdEvent *pstEvent); /** * @brief 显示OSD完成 * @param[in] pstEvent OsdEvent事件 * @return Status 返回值:成功-HV_SUCCESS,失败-HV_FAILURE, 继续-HV_CONTINUE */ Status Hv_Mw_OsdShowDone(OsdEvent *pstEvent); /** * @brief 获取一个font(字符型)组件的位置大小 * @param[in] stCp Osd组件 * @return OsdBox 组件的位置大小信息 */ OsdBox Hv_Mw_OsdGetFontComponentBox(OsdComponent stCp); #if (HV_PROJECT_CONFIG_OSD_CPU_CANVAS_SUPPORT == HV_CONFIG_ON) VOID Hv_Mw_OsdCanvasWaveInit(OsdComponent stCp, USHORT16 usXStep, UCHAR8 ucPointW, UCHAR8 ucPointH); VOID Hv_Mw_OsdCanvasWaveAppendPoint(USHORT16 usY); #endif /** * @brief 获取OSD显示区域大小 * @param[in] pusWidth Osd宽度指针 * @param[in] pusHeight Osd高度指针 */ VOID Hv_Mw_OsdGetDisplaySize(USHORT16 *pusWidth, USHORT16 *pusHeight); #if (HV_PROJECT_CONFIG_OSD_ROTATION == HV_CONFIG_ON) /** * @brief 实现OSD原地旋转,计算并获取旋转时应当设置的位置 * @param[in] pusX 传入当前X位置,获取原地旋转需要设置的X值 * @param[in] pusY 传入当前Y位置,获取原地旋转需要设置的Y值 * @param[in] enPrevRot 之前的旋转角度 * @param[in] enNewRot 新的旋转角度 */ VOID Hv_Mw_OsdCalculateRotateInplacePostion(USHORT16 *pusX, USHORT16 *pusY, OsdRotationType enPrevRot, OsdRotationType enNewRot); #endif /** * @brief 直接设置scene的绝对位置(包括scene旋转之后的位置) * @param[in] ucSceneId scene的id * @param[in] usX x方向位置 * @param[in] usY y方向位置 */ VOID Hv_Mw_OsdSceneSetAbsolutePosition(UCHAR8 ucSceneId, USHORT16 usX, USHORT16 usY); /** * @brief 取消设置scene的绝对位置 * @param[in] ucSceneId scene的id */ VOID Hv_Mw_OsdSceneCancelAbsolutePosition(UCHAR8 ucSceneId); /** * @brief 设置一个scene的位置(按比例) * @param[in] ucSceneId scene的id * @param[in] bIsX 是否为x方向(否则为y方向) * @param[in] usRatio 位置比例,输入范围:0~100 * @param[in] usLimitStart 限制最小起始位置,为0时不限制(使用实际屏幕大小) * @param[in] usLimitEnd 限制最大结束位置,为0xffff时不限制(使用实际屏幕大小) * @return USHORT16 实际设置值(pixel) */ USHORT16 Hv_Mw_OsdSceneSetPositionRatio(UCHAR8 ucSceneId, BOOL bIsX, USHORT16 usRatio, USHORT16 usLimitStart, USHORT16 usLimitEnd); /** * @brief 设置一个scene的位置(实际值) * @param[in] ucSceneId scene的id * @param[in] usX x方向位置 * @param[in] usY y方向位置 */ VOID Hv_Mw_OsdSceneSetPosition(UCHAR8 ucSceneId, USHORT16 usX, USHORT16 usY); /** * @brief 计算box在边框中的碰撞反射 * @param[in] stBorder 边框结构 * @param[in] pstBox box结构 * @param[in] usDx x方向步长 * @param[in] usDy y方向步长 */ VOID Hv_Mw_OsdCalculateCollisionBox(OsdBox stBorder, OsdBox *pstBox, USHORT16 usDx, USHORT16 usDy); /** * @brief 设置OSD显示透明度 * @param[in] ucAlpha 透明度值(0~128) */ VOID Hv_Mw_OsdSetTransparency(UCHAR8 ucAlpha); /** * @brief 获取中央区域的颜色平均值的反色 * @return UINT32 RGB值 */ UINT32 Hv_Mw_OsdGetPartColor(VOID); VOID Hv_Mw_OsdColorCapturePositionInit(OsdComponent stCp); VOID Hv_Mw_OsdDynCrosshairEnable(BOOL bEnable); UINT32 Hv_Mw_OsdGetDynCrosshairBgAvgColor(VOID); UINT32 Hv_Mw_OsdCalculateRevertColor(VOID); /** * @brief 设置OSD组件的颜色值 * @param[in] stCp 组件类型及索引 * @param[in] uiRGB RGB888颜色值 */ VOID Hv_Mw_OsdSetComponentColor(OsdComponent stCp, UINT32 uiRGB); /** * @brief 设置OSD旋转 * @param[in] enRotate 旋转角度:0, 90, 180, 270 */ VOID Hv_Mw_OsdSetRotateType(OsdRotationType enRotate); /** * @brief 设置OSD不旋转的scene * @param[in] ucSceneId scene的id * @param[in] bSkip 是否不旋转,HV_TRUE-是,HV_FALSE-否 */ VOID Hv_Mw_OsdSceneSetRotateSkip(UCHAR8 ucSceneId, BOOL bSkip); /** * @brief 获取指定scene是否不旋转 * @return BOOL 是否不旋转,HV_TRUE-是,HV_FALSE-否 */ BOOL Hv_Mw_OsdSceneGetRotateSkip(UCHAR8 ucSceneId); /** * @brief 设置Osd菜单语言 * @param[in] usLangId 语言项的id */ VOID Hv_Mw_OsdSetLanguage(USHORT16 usLangId); #ifdef HV_SCALER_DEBUG_VERSION /** * @brief 输出OSD资源统计数据信息 */ VOID Hv_Mw_OsdResourceDebugStat(VOID); /** * @brief 输出Userdata统计数据信息 */ VOID Hv_Mw_OsdUserdataDebugStat(VOID); /** * @brief 清除OSD debug信息 */ VOID Hv_Mw_OsdDbgDrawClear(VOID); #endif #endif