/**
* @file hv_drv_OsdEffect.c
* @brief Osd Driver Effect c file.
* @details This file provides the following functions: \n
* (1) font Blink effect functions \n
* (2) font fade in/out functions \n
* (3) font shutter in/out functions \n
*
* @author HiView SoC Software Team
* @version 1.0.0
* @date 2022-08-31
* @copyright Copyright(c),2022-8, Hiview Software. All rights reserved.
* @par History:
*
* Author | Date | Change Description
* |
---|
OSD Group | 2022-08-31 | create
* |
*/
#include "hv_drv_Osd.h"
#include "hv_cal_Osd.h"
VOID Hv_Drv_OsdEffect_SetBlinkPeriod(OsdWindowPhyId enId, USHORT16 usMs)
{
USHORT16 usFrames = 0;
UCHAR8 ucFrameSet = 0;
usFrames = (usMs * PANEL_FRAME_RATE_TYP) / 1000;
HV_ASSERT_TRUE_VOID(usFrames != 0);
if (usFrames >= 15)
{
ucFrameSet = (usFrames - 7) >> 3;
}
OSD_DRV_LOG_DEBUG("Osd Blink Period set to %u frames",
(ucFrameSet << 3) + 7);
Hv_Drv_OsdWindow_SetCurrentWindow(enId);
Hv_Cal_OsdWindow_SetFontBlinkRate(ucFrameSet);
}
VOID Hv_Drv_OsdEffect_SetBlinkDuration(OsdWindowPhyId enId, OsdBlinkDuty enDuty)
{
OSD_DRV_LOG_DEBUG("Osd Blink duration set to %d", enDuty);
Hv_Drv_OsdWindow_SetCurrentWindow(enId);
Hv_Cal_OsdWindow_SetFontBlinkDuty(enDuty);
}
VOID Hv_Drv_OsdEffect_SetBlinkEnable(OsdWindowPhyId enId, USHORT16 usY, BOOL bEnable)
{
OsdRowInfo *pstRowInfo = NULL;
OsdIndexRow *pstRow = NULL;
Hv_Drv_OsdWindow_SetCurrentWindow(enId);
pstRowInfo = Hv_Drv_OsdFont_GetRowInfoByYaxis(usY, HV_FALSE);
if (NULL == pstRowInfo)
{
OSD_DRV_LOG_ERROR("could not find Row @ %u", usY);
return;
}
pstRow = Hv_Drv_OsdIndex_GetRow(pstRowInfo->ucRowIndex);
if (NULL == pstRow)
{
OSD_DRV_LOG_ERROR("could not find RowIndex @ %u", usY);
return;
}
Hv_Cal_OsdIndex_SetRowBlinkEnable(pstRow, bEnable);
Hv_Drv_OsdIndex_SetChangeRange(OSD_SRAM_CHANGE_PARTIAL,
(UINT32)pstRowInfo->pucColumnStart,
(UINT32)(pstRowInfo->pucColumnStart
+ OSD_INDEX_COLUMN_SIZE * pstRowInfo->ucRowLen));
}
VOID Hv_Drv_OsdEffect_SetFadeInOutSpeed(OsdWindowPhyId enId, USHORT16 usMs)
{
USHORT16 usFrames = 0;
UCHAR8 ucFrameInterval = 0;
UCHAR8 ucDelta = 0;
if (usMs < 1000)
{
OSD_DRV_LOG_WARN("Warning: Osd set fade in/out time less than 1 second");
}
usFrames = (usMs * PANEL_FRAME_RATE_TYP) / 1000;
HV_ASSERT_TRUE_VOID(usFrames != 0);
ucFrameInterval = usFrames >= 32 ? 31: (usFrames - 1);
ucDelta = 256 / (ucFrameInterval + 1);
Hv_Drv_OsdWindow_SetCurrentWindow(enId);
Hv_Cal_OsdWindow_SetFontTransSpeed(ucDelta);
Hv_Cal_OsdWindow_SetFontTransFrame(ucFrameInterval);
OSD_DRV_LOG_DEBUG("osd fade in/out: change %u every %u frame",
ucDelta, ucFrameInterval);
}
VOID Hv_Drv_OsdEffect_StartFadeInOut(OsdWindowPhyId enId, BOOL bIsShowing)
{
OsdTransDirection enDirection = OSD_TRANS_DI_V_H;
if (!bIsShowing)
{
enDirection = OSD_TRANS_DI_H;
}
Hv_Drv_OsdWindow_SetCurrentWindow(enId);
Hv_Cal_OsdWindow_SetFontTransDirection(enDirection);
Hv_Cal_OsdWindow_SetFontTransMode(OSD_TRANS_MODE_FADE);
Hv_Cal_OsdWindow_SetFontEnable(bIsShowing);
OSD_DRV_LOG_DEBUG("osd start fade %s", bIsShowing ? "in" : "out");
}
VOID Hv_Drv_OsdEffect_SetShutterSpeed(OsdWindowPhyId enId, USHORT16 usMs)
{
USHORT16 usFrames = 0;
UCHAR8 ucSteps = 0;
UCHAR8 ucFrameInterval = 0;
usFrames = (usMs * PANEL_FRAME_RATE_TYP) / 1000;
HV_ASSERT_TRUE_VOID(usFrames != 0);
ucSteps = OSD_SHUTTER_SEGMENT / OSD_SHUTTER_STEP;
ucFrameInterval = usFrames / ucSteps;
ucFrameInterval = ucFrameInterval == 0 ? 1 : ucFrameInterval;
Hv_Drv_OsdWindow_SetCurrentWindow(enId);
Hv_Cal_OsdWindow_SetFontTransSpeed(OSD_SHUTTER_STEP);
Hv_Cal_OsdWindow_SetFontTransFrame(ucFrameInterval);
Hv_Cal_OsdWindow_SetFontTransStartPos(OSD_SHUTTER_SEGMENT, OSD_SHUTTER_SEGMENT);
OSD_DRV_LOG_DEBUG("osd shutter in/out: segment %u change %u every %u frame",
OSD_SHUTTER_SEGMENT, OSD_SHUTTER_STEP, ucFrameInterval);
}
VOID Hv_Drv_OsdEffect_StartShutterInOut(OsdWindowPhyId enId, BOOL bIsShowing, OsdTransDirection enDirection)
{
Hv_Drv_OsdWindow_SetCurrentWindow(enId);
Hv_Cal_OsdWindow_SetFontTransDirection(enDirection);
Hv_Cal_OsdWindow_SetFontTransMode(OSD_TRANS_MODE_SHUTTER);
Hv_Cal_OsdWindow_SetFontEnable(bIsShowing);
OSD_DRV_LOG_DEBUG("osd start shutter %s, direction %d",
bIsShowing ? "in" : "out", enDirection);
}
VOID Hv_Drv_OsdEffect_SetShutter2(OsdWindowPhyId enId, UCHAR8 ucSpeed, OsdTransDirection enDirection)
{
USHORT16 usWidth = 0;
USHORT16 usHeight = 0;
Hv_Drv_OsdWindow_SetCurrentWindow(enId);
Hv_Cal_OsdWindow_SetFontTransSpeed(ucSpeed);
Hv_Cal_OsdWindow_SetFontTransFrame(1);
Hv_Cal_OsdWindow_GetSize(&usWidth, &usHeight);
Hv_Cal_OsdWindow_SetFontTransStartPos(0, 0);
Hv_Cal_OsdWindow_SetFontTransCen(usWidth >> 3, usHeight >> 3);
Hv_Cal_OsdWindow_SetFontTransDirection(enDirection);
Hv_Cal_OsdWindow_SetFontTransMode(OSD_TRANS_MODE_SHUTTER2);
}
VOID Hv_Drv_OsdEffect_DisableTranMode(OsdWindowPhyId enId)
{
Hv_Drv_OsdWindow_SetCurrentWindow(enId);
Hv_Cal_OsdWindow_SetFontTransMode(OSD_TRANS_MODE_NONE);
}