123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240 |
- /*
- * @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
|