/**
 * @file hv_drv_OsdRotate.h
 * @brief Osd driver rotation interface.
 * @verbatim
 * ==============================================================================
 *                        ##### How to use this driver #####
 * ==============================================================================
 * (+) Use Hv_Drv_OsdSetRotateType(...) to set rotate type.
 * (+) Use Hv_Drv_OsdGetRotateType(...) to get rotate type.
 * (+) Use Hv_Drv_OsdAppendDrawAreaBox(...) to append draw area box for rotation.
 * (+) Use Hv_Drv_OsdRotationWhole(...) to rotate whole DDR buffer.
 * (+) Use Hv_Drv_OsdRotationArea(...) to rotate areas in DDR buffer.
 *
 * @endverbatim
 *
 * @author HiView SoC Software Team
 * @version 0.0.1
 * @date 2022-08-22
 */

#ifndef _HV_DRV_OSDROTATE_H
#define _HV_DRV_OSDROTATE_H

#include "hv_comm_DataType.h"
#include "hv_drv_OsdTypes.h"

#if (HV_PROJECT_CONFIG_OSD_ROTATION == HV_CONFIG_ON)

/**
 * @brief set rotate type
 * @param[in] enRotate rotate type
 */
VOID Hv_Drv_OsdSetRotateType(OsdRotationType enRotate);

/**
 * @brief get rotate type
 * @return OsdRotationType rotate type
 */
OsdRotationType Hv_Drv_OsdGetRotateType(VOID);

OsdRotationType Hv_Drv_OsdGetRealRotateType(VOID);
/**
 * @brief set rotate skip
 * @param[in] bSkip HV_TRUE-skip(do not rotate), HV_FALSE-do not skip
 */
VOID Hv_Drv_OsdSetRotateSkip(BOOL bSkip);

/**
 * @brief get rotate skip
 * @return BOOL HV_TRUE-skip(do not rotate), HV_FALSE-do not skip
 */
BOOL Hv_Drv_OsdGetRotateSkip(VOID);

/**
 * @brief append draw area box for rotation
 * @param[in] stBox area box: x, y, width, height
 */
VOID Hv_Drv_OsdAppendDrawAreaBox(OsdBox stBox);

/**
 * @brief clear draw area box for rotation
 */
VOID Hv_Drv_OsdClearDrawAreaBox(VOID);


VOID Hv_Drv_OsdSetRotationPartFlag(UCHAR8 ucSceneId);

VOID Hv_Drv_OsdRecordAbsolutePostion(USHORT16 usX, USHORT16 usY);
VOID Hv_Drv_OsdCancelAbsolutePostion(VOID);

/**
 * @brief rotate whole DDR buffer
 */
VOID Hv_Drv_OsdRotationWhole(VOID);

/**
 * @brief rotate areas in DDR buffer
 */
VOID Hv_Drv_OsdRotationArea(UCHAR8 ucSceneId);

#if (HV_PROJECT_CONFIG_OSD_ROTATION_TYPE == OSD_ROTATE_IN_PLACE_ALL)
VOID Hv_Drv_OsdCalculateUnrotateBoxOnScreen(OsdBox *pstBox, UINT32 uiTotalWidth, UINT32 uiTotalHeight, OsdRotationType enRotate);
#else
VOID Hv_Drv_OsdCalculateRotateBoxOnScreen(OsdBox *pstBox, UINT32 uiTotalWidth, UINT32 uiTotalHeight, OsdRotationType enRotate);
#endif

#endif
#endif
