hv_drv_OsdEffect.c 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. /**
  2. * @file hv_drv_OsdEffect.c
  3. * @brief Osd Driver Effect c file.
  4. * @details This file provides the following functions: \n
  5. * (1) font Blink effect functions \n
  6. * (2) font fade in/out functions \n
  7. * (3) font shutter in/out functions \n
  8. *
  9. * @author HiView SoC Software Team
  10. * @version 1.0.0
  11. * @date 2022-08-31
  12. * @copyright Copyright(c),2022-8, Hiview Software. All rights reserved.
  13. * @par History:
  14. * <table>
  15. * <tr><th>Author <th>Date <th>Change Description
  16. * <tr><td>OSD Group <td>2022-08-31 <td>create
  17. * </table>
  18. */
  19. #include "hv_drv_Osd.h"
  20. #include "hv_cal_Osd.h"
  21. VOID Hv_Drv_OsdEffect_SetBlinkPeriod(OsdWindowPhyId enId, USHORT16 usMs)
  22. {
  23. USHORT16 usFrames = 0;
  24. UCHAR8 ucFrameSet = 0;
  25. usFrames = (usMs * PANEL_FRAME_RATE_TYP) / 1000;
  26. HV_ASSERT_TRUE_VOID(usFrames != 0);
  27. if (usFrames >= 15)
  28. {
  29. ucFrameSet = (usFrames - 7) >> 3;
  30. }
  31. OSD_DRV_LOG_DEBUG("Osd Blink Period set to %u frames",
  32. (ucFrameSet << 3) + 7);
  33. Hv_Drv_OsdWindow_SetCurrentWindow(enId);
  34. Hv_Cal_OsdWindow_SetFontBlinkRate(ucFrameSet);
  35. }
  36. VOID Hv_Drv_OsdEffect_SetBlinkDuration(OsdWindowPhyId enId, OsdBlinkDuty enDuty)
  37. {
  38. OSD_DRV_LOG_DEBUG("Osd Blink duration set to %d", enDuty);
  39. Hv_Drv_OsdWindow_SetCurrentWindow(enId);
  40. Hv_Cal_OsdWindow_SetFontBlinkDuty(enDuty);
  41. }
  42. VOID Hv_Drv_OsdEffect_SetBlinkEnable(OsdWindowPhyId enId, USHORT16 usY, BOOL bEnable)
  43. {
  44. OsdRowInfo *pstRowInfo = NULL;
  45. OsdIndexRow *pstRow = NULL;
  46. Hv_Drv_OsdWindow_SetCurrentWindow(enId);
  47. pstRowInfo = Hv_Drv_OsdFont_GetRowInfoByYaxis(usY, HV_FALSE);
  48. if (NULL == pstRowInfo)
  49. {
  50. OSD_DRV_LOG_ERROR("could not find Row @ %u", usY);
  51. return;
  52. }
  53. pstRow = Hv_Drv_OsdIndex_GetRow(pstRowInfo->ucRowIndex);
  54. if (NULL == pstRow)
  55. {
  56. OSD_DRV_LOG_ERROR("could not find RowIndex @ %u", usY);
  57. return;
  58. }
  59. Hv_Cal_OsdIndex_SetRowBlinkEnable(pstRow, bEnable);
  60. Hv_Drv_OsdIndex_SetChangeRange(OSD_SRAM_CHANGE_PARTIAL,
  61. (UINT32)pstRowInfo->pucColumnStart,
  62. (UINT32)(pstRowInfo->pucColumnStart
  63. + OSD_INDEX_COLUMN_SIZE * pstRowInfo->ucRowLen));
  64. }
  65. VOID Hv_Drv_OsdEffect_SetFadeInOutSpeed(OsdWindowPhyId enId, USHORT16 usMs)
  66. {
  67. USHORT16 usFrames = 0;
  68. UCHAR8 ucFrameInterval = 0;
  69. UCHAR8 ucDelta = 0;
  70. if (usMs < 1000)
  71. {
  72. OSD_DRV_LOG_WARN("Warning: Osd set fade in/out time less than 1 second");
  73. }
  74. usFrames = (usMs * PANEL_FRAME_RATE_TYP) / 1000;
  75. HV_ASSERT_TRUE_VOID(usFrames != 0);
  76. ucFrameInterval = usFrames >= 32 ? 31: (usFrames - 1);
  77. ucDelta = 256 / (ucFrameInterval + 1);
  78. Hv_Drv_OsdWindow_SetCurrentWindow(enId);
  79. Hv_Cal_OsdWindow_SetFontTransSpeed(ucDelta);
  80. Hv_Cal_OsdWindow_SetFontTransFrame(ucFrameInterval);
  81. OSD_DRV_LOG_DEBUG("osd fade in/out: change %u every %u frame",
  82. ucDelta, ucFrameInterval);
  83. }
  84. VOID Hv_Drv_OsdEffect_StartFadeInOut(OsdWindowPhyId enId, BOOL bIsShowing)
  85. {
  86. OsdTransDirection enDirection = OSD_TRANS_DI_V_H;
  87. if (!bIsShowing)
  88. {
  89. enDirection = OSD_TRANS_DI_H;
  90. }
  91. Hv_Drv_OsdWindow_SetCurrentWindow(enId);
  92. Hv_Cal_OsdWindow_SetFontTransDirection(enDirection);
  93. Hv_Cal_OsdWindow_SetFontTransMode(OSD_TRANS_MODE_FADE);
  94. Hv_Cal_OsdWindow_SetFontEnable(bIsShowing);
  95. OSD_DRV_LOG_DEBUG("osd start fade %s", bIsShowing ? "in" : "out");
  96. }
  97. VOID Hv_Drv_OsdEffect_SetShutterSpeed(OsdWindowPhyId enId, USHORT16 usMs)
  98. {
  99. USHORT16 usFrames = 0;
  100. UCHAR8 ucSteps = 0;
  101. UCHAR8 ucFrameInterval = 0;
  102. usFrames = (usMs * PANEL_FRAME_RATE_TYP) / 1000;
  103. HV_ASSERT_TRUE_VOID(usFrames != 0);
  104. ucSteps = OSD_SHUTTER_SEGMENT / OSD_SHUTTER_STEP;
  105. ucFrameInterval = usFrames / ucSteps;
  106. ucFrameInterval = ucFrameInterval == 0 ? 1 : ucFrameInterval;
  107. Hv_Drv_OsdWindow_SetCurrentWindow(enId);
  108. Hv_Cal_OsdWindow_SetFontTransSpeed(OSD_SHUTTER_STEP);
  109. Hv_Cal_OsdWindow_SetFontTransFrame(ucFrameInterval);
  110. Hv_Cal_OsdWindow_SetFontTransStartPos(OSD_SHUTTER_SEGMENT, OSD_SHUTTER_SEGMENT);
  111. OSD_DRV_LOG_DEBUG("osd shutter in/out: segment %u change %u every %u frame",
  112. OSD_SHUTTER_SEGMENT, OSD_SHUTTER_STEP, ucFrameInterval);
  113. }
  114. VOID Hv_Drv_OsdEffect_StartShutterInOut(OsdWindowPhyId enId, BOOL bIsShowing, OsdTransDirection enDirection)
  115. {
  116. Hv_Drv_OsdWindow_SetCurrentWindow(enId);
  117. Hv_Cal_OsdWindow_SetFontTransDirection(enDirection);
  118. Hv_Cal_OsdWindow_SetFontTransMode(OSD_TRANS_MODE_SHUTTER);
  119. Hv_Cal_OsdWindow_SetFontEnable(bIsShowing);
  120. OSD_DRV_LOG_DEBUG("osd start shutter %s, direction %d",
  121. bIsShowing ? "in" : "out", enDirection);
  122. }
  123. VOID Hv_Drv_OsdEffect_SetShutter2(OsdWindowPhyId enId, UCHAR8 ucSpeed, OsdTransDirection enDirection)
  124. {
  125. USHORT16 usWidth = 0;
  126. USHORT16 usHeight = 0;
  127. Hv_Drv_OsdWindow_SetCurrentWindow(enId);
  128. Hv_Cal_OsdWindow_SetFontTransSpeed(ucSpeed);
  129. Hv_Cal_OsdWindow_SetFontTransFrame(1);
  130. Hv_Cal_OsdWindow_GetSize(&usWidth, &usHeight);
  131. Hv_Cal_OsdWindow_SetFontTransStartPos(0, 0);
  132. Hv_Cal_OsdWindow_SetFontTransCen(usWidth >> 3, usHeight >> 3);
  133. Hv_Cal_OsdWindow_SetFontTransDirection(enDirection);
  134. Hv_Cal_OsdWindow_SetFontTransMode(OSD_TRANS_MODE_SHUTTER2);
  135. }
  136. VOID Hv_Drv_OsdEffect_DisableTranMode(OsdWindowPhyId enId)
  137. {
  138. Hv_Drv_OsdWindow_SetCurrentWindow(enId);
  139. Hv_Cal_OsdWindow_SetFontTransMode(OSD_TRANS_MODE_NONE);
  140. }