hv_mw_OsdDraw.h 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. /*
  2. * @file hv_mw_OsdDraw.h
  3. * @brief Header file of osd draw.
  4. *
  5. * @verbatim
  6. * ==============================================================================
  7. * ##### How to use #####
  8. * ==============================================================================
  9. * (+) Use Hv_Mw_OsdDrawInit() to init osd draw data.
  10. * (+) Use Hv_Mw_OsdDraw() to draw osd to hardware.
  11. * (+) Use Hv_Mw_OsdShow() to display osd.
  12. * (+) Use Hv_Mw_OsdAnimitionDraw() to draw osd animition.
  13. * (+) Use Hv_Mw_OsdSceneSetPositionRatio() to set a scene's position by ratio(0-100)
  14. * (+) Use Hv_Mw_OsdSceneSetPosition() to set a scene's position directly
  15. *
  16. * @endverbatim
  17. * @author HiView SoC Software Team
  18. * @version 1.0.0
  19. * @date 2022-09-01
  20. */
  21. #ifndef _HV_MW_OSD_DRAW_H
  22. #define _HV_MW_OSD_DRAW_H
  23. #include "hv_comm_Event.h"
  24. #include "hv_drv_OsdTypes.h"
  25. typedef enum _OsdLogoState
  26. {
  27. OSD_LOGO_WAITING_SHOW,
  28. OSD_LOGO_DRAWING,
  29. OSD_LOGO_SHOWING,
  30. OSD_LOGO_HIDEING,
  31. OSD_LOGO_DONE,
  32. } OsdLogoState;
  33. /**
  34. * @brief 返回是否有OSD正在显示
  35. * @return BOOL HV_TRUE-是,HV_FALSE-否
  36. */
  37. BOOL Hv_Mw_OsdCheckIsShowing(VOID);
  38. /**
  39. * @brief 初始化OSD draw相关数据结构
  40. */
  41. VOID Hv_Mw_OsdDrawInit(VOID);
  42. #ifdef HV_SCALER_DEBUG_VERSION
  43. /**
  44. * @brief 设置当前Logo状态
  45. * @param[in] enState Logo状态
  46. */
  47. VOID Hv_Mw_OsdSetLogoState(OsdLogoState enState);
  48. #endif
  49. /**
  50. * @brief 返回当前Logo状态
  51. * @return OsdLogoState 当前Logo状态
  52. */
  53. OsdLogoState Hv_Mw_OsdGetLogoState(VOID);
  54. /**
  55. * @brief 设置跳过LOGO
  56. */
  57. VOID Hv_Mw_OsdSetLogoBypass(VOID);
  58. /**
  59. * @brief 获取是否跳过LOGO
  60. * @return BOOL HV_TRUE-是,HV_FALSE-否
  61. */
  62. BOOL Hv_Mw_OsdGetLogoBypass(VOID);
  63. #if (HV_PROJECT_CONFIG_OSD_ANIMITION_SUPPORT == HV_CONFIG_ON)
  64. /**
  65. * @brief 设置当前帧是否有改变
  66. * @param[in] bIsModify 是否改变
  67. */
  68. VOID Hv_Mw_OsdDrawSetFrameModify(BOOL bIsModify);
  69. #endif
  70. /**
  71. * @brief 画OSD
  72. * @param[in] pstEvent OsdEvent事件
  73. * @return Status 返回值:成功-HV_SUCCESS,失败-HV_FAILURE, 继续-HV_CONTINUE
  74. */
  75. Status Hv_Mw_OsdDraw(OsdEvent *pstEvent);
  76. /**
  77. * @brief 显示OSD
  78. * @param[in] pstEvent OsdEvent事件
  79. * @return Status 返回值:成功-HV_SUCCESS,失败-HV_FAILURE, 继续-HV_CONTINUE
  80. */
  81. Status Hv_Mw_OsdShow(OsdEvent *pstEvent);
  82. /**
  83. * @brief 显示OSD完成
  84. * @param[in] pstEvent OsdEvent事件
  85. * @return Status 返回值:成功-HV_SUCCESS,失败-HV_FAILURE, 继续-HV_CONTINUE
  86. */
  87. Status Hv_Mw_OsdShowDone(OsdEvent *pstEvent);
  88. /**
  89. * @brief 获取一个font(字符型)组件的位置大小
  90. * @param[in] stCp Osd组件
  91. * @return OsdBox 组件的位置大小信息
  92. */
  93. OsdBox Hv_Mw_OsdGetFontComponentBox(OsdComponent stCp);
  94. #if (HV_PROJECT_CONFIG_OSD_CPU_CANVAS_SUPPORT == HV_CONFIG_ON)
  95. VOID Hv_Mw_OsdCanvasWaveInit(OsdComponent stCp, USHORT16 usXStep, UCHAR8 ucPointW, UCHAR8 ucPointH);
  96. VOID Hv_Mw_OsdCanvasWaveAppendPoint(USHORT16 usY);
  97. #endif
  98. /**
  99. * @brief 获取OSD显示区域大小
  100. * @param[in] pusWidth Osd宽度指针
  101. * @param[in] pusHeight Osd高度指针
  102. */
  103. VOID Hv_Mw_OsdGetDisplaySize(USHORT16 *pusWidth, USHORT16 *pusHeight);
  104. #if (HV_PROJECT_CONFIG_OSD_ROTATION == HV_CONFIG_ON)
  105. /**
  106. * @brief 实现OSD原地旋转,计算并获取旋转时应当设置的位置
  107. * @param[in] pusX 传入当前X位置,获取原地旋转需要设置的X值
  108. * @param[in] pusY 传入当前Y位置,获取原地旋转需要设置的Y值
  109. * @param[in] enPrevRot 之前的旋转角度
  110. * @param[in] enNewRot 新的旋转角度
  111. */
  112. VOID Hv_Mw_OsdCalculateRotateInplacePostion(USHORT16 *pusX, USHORT16 *pusY, OsdRotationType enPrevRot, OsdRotationType enNewRot);
  113. #endif
  114. /**
  115. * @brief 直接设置scene的绝对位置(包括scene旋转之后的位置)
  116. * @param[in] ucSceneId scene的id
  117. * @param[in] usX x方向位置
  118. * @param[in] usY y方向位置
  119. */
  120. VOID Hv_Mw_OsdSceneSetAbsolutePosition(UCHAR8 ucSceneId, USHORT16 usX, USHORT16 usY);
  121. /**
  122. * @brief 取消设置scene的绝对位置
  123. * @param[in] ucSceneId scene的id
  124. */
  125. VOID Hv_Mw_OsdSceneCancelAbsolutePosition(UCHAR8 ucSceneId);
  126. /**
  127. * @brief 设置一个scene的位置(按比例)
  128. * @param[in] ucSceneId scene的id
  129. * @param[in] bIsX 是否为x方向(否则为y方向)
  130. * @param[in] usRatio 位置比例,输入范围:0~100
  131. * @param[in] usLimitStart 限制最小起始位置,为0时不限制(使用实际屏幕大小)
  132. * @param[in] usLimitEnd 限制最大结束位置,为0xffff时不限制(使用实际屏幕大小)
  133. * @return USHORT16 实际设置值(pixel)
  134. */
  135. USHORT16 Hv_Mw_OsdSceneSetPositionRatio(UCHAR8 ucSceneId, BOOL bIsX, USHORT16 usRatio, USHORT16 usLimitStart, USHORT16 usLimitEnd);
  136. /**
  137. * @brief 设置一个scene的位置(实际值)
  138. * @param[in] ucSceneId scene的id
  139. * @param[in] usX x方向位置
  140. * @param[in] usY y方向位置
  141. */
  142. VOID Hv_Mw_OsdSceneSetPosition(UCHAR8 ucSceneId, USHORT16 usX, USHORT16 usY);
  143. /**
  144. * @brief 计算box在边框中的碰撞反射
  145. * @param[in] stBorder 边框结构
  146. * @param[in] pstBox box结构
  147. * @param[in] usDx x方向步长
  148. * @param[in] usDy y方向步长
  149. */
  150. VOID Hv_Mw_OsdCalculateCollisionBox(OsdBox stBorder, OsdBox *pstBox, USHORT16 usDx, USHORT16 usDy);
  151. /**
  152. * @brief 设置OSD显示透明度
  153. * @param[in] ucAlpha 透明度值(0~128)
  154. */
  155. VOID Hv_Mw_OsdSetTransparency(UCHAR8 ucAlpha);
  156. /**
  157. * @brief 获取中央区域的颜色平均值的反色
  158. * @return UINT32 RGB值
  159. */
  160. UINT32 Hv_Mw_OsdGetPartColor(VOID);
  161. VOID Hv_Mw_OsdColorCapturePositionInit(OsdComponent stCp);
  162. VOID Hv_Mw_OsdDynCrosshairEnable(BOOL bEnable);
  163. UINT32 Hv_Mw_OsdGetDynCrosshairBgAvgColor(VOID);
  164. UINT32 Hv_Mw_OsdCalculateRevertColor(VOID);
  165. /**
  166. * @brief 设置OSD组件的颜色值
  167. * @param[in] stCp 组件类型及索引
  168. * @param[in] uiRGB RGB888颜色值
  169. */
  170. VOID Hv_Mw_OsdSetComponentColor(OsdComponent stCp, UINT32 uiRGB);
  171. /**
  172. * @brief 设置OSD旋转
  173. * @param[in] enRotate 旋转角度:0, 90, 180, 270
  174. */
  175. VOID Hv_Mw_OsdSetRotateType(OsdRotationType enRotate);
  176. /**
  177. * @brief 设置OSD不旋转的scene
  178. * @param[in] ucSceneId scene的id
  179. * @param[in] bSkip 是否不旋转,HV_TRUE-是,HV_FALSE-否
  180. */
  181. VOID Hv_Mw_OsdSceneSetRotateSkip(UCHAR8 ucSceneId, BOOL bSkip);
  182. /**
  183. * @brief 获取指定scene是否不旋转
  184. * @return BOOL 是否不旋转,HV_TRUE-是,HV_FALSE-否
  185. */
  186. BOOL Hv_Mw_OsdSceneGetRotateSkip(UCHAR8 ucSceneId);
  187. /**
  188. * @brief 设置Osd菜单语言
  189. * @param[in] usLangId 语言项的id
  190. */
  191. VOID Hv_Mw_OsdSetLanguage(USHORT16 usLangId);
  192. #ifdef HV_SCALER_DEBUG_VERSION
  193. /**
  194. * @brief 输出OSD资源统计数据信息
  195. */
  196. VOID Hv_Mw_OsdResourceDebugStat(VOID);
  197. /**
  198. * @brief 输出Userdata统计数据信息
  199. */
  200. VOID Hv_Mw_OsdUserdataDebugStat(VOID);
  201. /**
  202. * @brief 清除OSD debug信息
  203. */
  204. VOID Hv_Mw_OsdDbgDrawClear(VOID);
  205. #endif
  206. #endif