hv_mw_OsdAnimation.h 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. /*
  2. * @file hv_mw_OsdAnimation.h
  3. * @brief Header file of osd animation.
  4. *
  5. * @verbatim
  6. * ==============================================================================
  7. * ##### How to use #####
  8. * ==============================================================================
  9. * (+) Use Hv_Mw_OsdAnimInit() to init osd animation.
  10. *
  11. * @endverbatim
  12. * @author HiView SoC Software Team
  13. * @version 1.0.0
  14. * @date 2024-02-20
  15. */
  16. #ifndef _HV_MW_OSD_ANIMATION_H
  17. #define _HV_MW_OSD_ANIMATION_H
  18. #if (HV_PROJECT_CONFIG_OSD_ANIMITION_SUPPORT == HV_CONFIG_ON)
  19. typedef enum _AnimCurveType
  20. {
  21. ANIM_CURVE_LINEAR = 0, /* 线性 */
  22. ANIM_CURVE_EASE_IN, /* 缓入:先慢后快 */
  23. ANIM_CURVE_EASE_OUT, /* 缓出:先快后慢 */
  24. ANIM_CURVE_EASE_INOUT, /* 缓入缓出:先慢后快最后慢 */
  25. } AnimCurveType;
  26. typedef enum _AnimPosType
  27. {
  28. ANIM_POS_X = 0, /* Only x change */
  29. ANIM_POS_Y, /* Only y change */
  30. ANIM_POS_XY, /* x and y change */
  31. } AnimPosType;
  32. typedef enum _AnimSizeType
  33. {
  34. ANIM_SIZE_LR_EXPAND = 0, /* From left to right expand */
  35. ANIM_SIZE_LR_COLLAPSE, /* From left to right collapse */
  36. ANIM_SIZE_RL_EXPAND, /* From right to left expand */
  37. ANIM_SIZE_RL_COLLAPSE, /* From right to left collapse */
  38. ANIM_SIZE_TB_EXPAND, /* From top to bottom expand */
  39. ANIM_SIZE_TB_COLLAPSE, /* From top to bottom collapse */
  40. ANIM_SIZE_BT_EXPAND, /* From bottom to top expand */
  41. ANIM_SIZE_BT_COLLAPSE, /* From bottom to top collapse */
  42. ANIM_SIZE_CE_EXPAND, /* From center to edge expand */
  43. ANIM_SIZE_CE_COLLAPSE, /* From center to edge collapse */
  44. ANIM_SIZE_EC_EXPAND, /* From edge to center expand */
  45. ANIM_SIZE_EC_COLLAPSE, /* From edge to center collapse */
  46. } AnimSizeType;
  47. typedef enum _AnimPaletteType
  48. {
  49. ANIM_PALETTE_INDEPENDENT = 0, /* 使用用户指定的palette */
  50. ANIM_PALETTE_SHARED, /* 使用工具生成的palette */
  51. } AnimPaletteType;
  52. typedef enum _AnimMarqueeType
  53. {
  54. ANIM_MARQUEE = 0,
  55. ANIM_MARQUEE_AUTO,
  56. ANIM_MARQUEE_LIST,
  57. } AnimMarqueeType;
  58. typedef struct _OsdAnimition OsdAnimitionParam;
  59. typedef void (*AnimitonExecuteCallbackFn)(OsdAnimitionParam* pstAnimitionParam);
  60. typedef void (*AnimitonFinishCallbackFn)(OsdAnimitionParam* pstFinishParam);
  61. typedef struct _OsdAnimition
  62. {
  63. /* 动画属性 */
  64. USHORT16 usDelayTime; /* Delay frame numbers before the animation starting */
  65. USHORT16 usDurationTime; /* Duration of animation in frame numbers */
  66. USHORT16 usSpacingTime; /* Spacing frame numbers of animation between two execution */
  67. USHORT16 usStart; /* Animation start value */
  68. USHORT16 usEnd; /* Animation end value */
  69. USHORT16 usId; /* Element id, include cp id, item id and scene id */
  70. UCHAR8 ucElementType; /* Element type, include cp, item and scene id */
  71. UCHAR8 ucOperateType; /* Operate type */
  72. AnimCurveType enCurveType; /* Curve type, linearity is default */
  73. VOID *UserParam; /* User param to animate */
  74. AnimitonExecuteCallbackFn ExecuteCbFn; /* Function to set the new value */
  75. AnimitonFinishCallbackFn FinishCbFn; /* Function to call when animation is finished */
  76. /* 内部状态 */
  77. BOOL bRunning; /* True: the animation is running */
  78. USHORT16 usRemainTime; /* Remaining frame numbers for animation */
  79. /* 双向链表节点 */
  80. struct LinkedList stNode; /* Animation note list */
  81. } OsdAnimition;
  82. typedef struct _AnimPosParam
  83. {
  84. USHORT16 usYStart;
  85. USHORT16 usYEnd;
  86. } AnimPosParam;
  87. typedef struct _AnimSizeParam
  88. {
  89. USHORT16 usHeightStart;
  90. USHORT16 usHeightEnd;
  91. } AnimSizeParam;
  92. typedef struct _AnimColorParam
  93. {
  94. UINT32 uiStart;
  95. UINT32 uiEnd;
  96. USHORT16 usOriginalPalette;
  97. USHORT16 usNewPalette; /* no used for shared */
  98. UCHAR8 ucPaletteLen;
  99. UCHAR8 ucPaletteType;
  100. } AnimColorParam;
  101. typedef struct _AnimCurveMap
  102. {
  103. USHORT16 usStart;
  104. USHORT16 usEnd;
  105. USHORT16 usDurationTime;
  106. USHORT16 usRemainTime;
  107. } AnimCurveMap;
  108. typedef struct _AnimRangeParam
  109. {
  110. USHORT16 usX;
  111. USHORT16 usY;
  112. USHORT16 usWidth;
  113. USHORT16 usHeight;
  114. } AnimRangeParam;
  115. /*入:大到小:先快后慢;出:小到大:先慢后快*/
  116. #define EASE_MAPPING_VALUE(Cur, Total, newMin, newMax) \
  117. ({\
  118. UINT32 uiVal;\
  119. UINT32 uiClampCurVal = clamp_val(Cur, 0, Total);\
  120. if(Total == 0)\
  121. {\
  122. uiVal = newMin;\
  123. }\
  124. else\
  125. {\
  126. uiVal = (((uiClampCurVal) * (uiClampCurVal) * ((newMax)-(newMin))) / ((Total) * (Total))+(newMin));\
  127. }\
  128. uiVal;\
  129. })
  130. /*入:大到小:先慢后快;出:小到大:先快后慢*/
  131. #define EASE2_MAPPING_VALUE(Cur, Total, newMin, newMax) \
  132. ({\
  133. UINT32 uiVal;\
  134. UINT32 uiClampCurVal = clamp_val(Cur, 0, Total);\
  135. if(Total == 0)\
  136. {\
  137. uiVal = newMin;\
  138. }\
  139. else\
  140. {\
  141. uiVal = ((newMax) - ((uiClampCurVal) * (uiClampCurVal) * ((newMax)-(newMin))) / ((Total) * (Total)));\
  142. }\
  143. uiVal;\
  144. })
  145. /**
  146. * @brief OSD动画初始化
  147. * @param[in] pstAnimParam Osd动画相关初始化数据
  148. */
  149. VOID Hv_Mw_OsdAnimInit(VOID);
  150. BOOL Hv_Mw_OsdAnimIsDoing(VOID);
  151. Status Hv_Mw_OsdDoAnimition(VOID);
  152. VOID Hv_Mw_OsdAnimDefaultExecCbFn(OsdAnimition *pstAnimParam);
  153. VOID Hv_Mw_OsdAnimDefaultFinishCbFn(OsdAnimition *pstAnimParam);
  154. OsdAnimition *Hv_Mw_OsdAnimCreate(OsdAnimitionParam *pstAnimParam);
  155. VOID Hv_Mw_OsdAnimDestroy(OsdAnimition *pstAnimNode);
  156. VOID Hv_Mw_OsdAnimFinish(OsdAnimition *pstAnimNode);
  157. VOID Hv_Mw_OsdAnimFinishAll(VOID);
  158. VOID Hv_Mw_OsdAnimForceTerminal(OsdAnimition *pstAnimNode);
  159. VOID Hv_Mw_OsdAnimTerminal();
  160. VOID Hv_Mw_OsdAnimSetAlpha(OsdUniversalAlphaType enType, UCHAR8 ucAlpha);
  161. USHORT16 Hv_Mw_OsdAnimGetCompPaletteOffset(OsdComponent stCp);
  162. VOID Hv_Mw_OsdAnimSetCompPaletteOffset(OsdComponent stCp, USHORT16 usPaletteOffset);
  163. VOID Hv_Mw_OsdAnimGetCompColor(USHORT16 usPaletteOffset, UINT32 *puiRGBTbl, CHAR8 ucRGBLen);
  164. VOID Hv_Mw_OsdAnimSetCompColor(OsdComponent stCp, USHORT16 usPaletteOffset, UINT32 *puiRGBTbl, CHAR8 ucRGBLen);
  165. UINT32 Hv_Mw_OsdAnimGetSingleColor(USHORT16 usPaletteOffset);
  166. VOID Hv_Mw_OsdAnimSetSingleColor(OsdComponent stCp, USHORT16 usPaletteOffset, UINT32 uiRGB);
  167. UCHAR8 Hv_Mw_OsdAnimGetCompNums(OsdComponent stCp);
  168. VOID Hv_Mw_OsdAnimSetCompTurns(OsdComponent stCp, CHAR8 ucCurNum);
  169. USHORT16 Hv_Mw_OsdAnimGetTransparency(UCHAR8 ucTrans, UCHAR8 ucMaxTrans, UCHAR8 ucMaxRealTrans);
  170. VOID Hv_Mw_OsdAnimGetCompRange(OsdComponent stCp, AnimRangeParam *pstRangeParam);
  171. VOID Hv_Mw_OsdAnimSetCompRange(OsdComponent stCp, AnimRangeParam *pstRangeParam);
  172. USHORT16 Hv_Mw_OsdAnimGetCompResourceSize(OsdComponent stCp);
  173. VOID Hv_Mw_OsdAnimSetItemPosition(USHORT16 usItemId, USHORT16 usX, USHORT16 usY);
  174. USHORT16 Hv_Mw_OsdAnimCurveMapping(AnimCurveType enCurveType, AnimCurveMap *pstMapParam);
  175. VOID Hv_Mw_OsdAnimUpdateScenePos(OsdAnimition *pstAnimParam);
  176. VOID Hv_Mw_OsdAnimUpdateSceneAlpha(OsdAnimition *pstAnimParam);
  177. VOID Hv_Mw_OsdAnimUpdateCompColor(OsdAnimition *pstAnimParam);
  178. VOID Hv_Mw_OsdAnimUpdateBmpColor(OsdAnimition *pstAnimParam);
  179. VOID Hv_Mw_OsdAnimUpdateItemSequence(OsdAnimition *pstAnimParam);
  180. VOID Hv_Mw_OsdAnimUpdateCompList(OsdAnimition *pstAnimParam);
  181. VOID Hv_Mw_OsdAnimUpdateCompSize(OsdAnimition *pstAnimParam);
  182. VOID Hv_Mw_OsdAnimUpdateCompPos(OsdAnimition *pstAnimParam);
  183. VOID Hv_Mw_OsdAnimUpdateItemPos(OsdAnimition *pstAnimParam);
  184. VOID Hv_Mw_OsdAnimUpdateCursorPos(OsdAnimition *pstAnimParam);
  185. #if (HV_CONFIG_ON == HV_PROJECT_CONFIG_OSD_MARQUEE)
  186. #if (HV_CONFIG_ON == HV_OSD_CONFIG_MARQUEE_AUTO_CHECK_EXCESS)
  187. VOID Hv_Mw_OsdCheckAutoMarquee(VOID);
  188. #endif
  189. VOID Hv_Mw_OsdAnimUpdateMarquee(OsdAnimition *pstAnimParam);
  190. VOID Hv_Mw_OsdAnimFinishMarquee(OsdAnimition *pstAnimParam);
  191. VOID Hv_Mw_OsdComponentInitMarquee(OsdComponent stCp);
  192. #endif
  193. #endif
  194. #endif