#ifndef _OSDCONFIG_H
#define _OSDCONFIG_H

#define HV_PROJECT_CONFIG_OSD_SCALER                         HV_CONFIG_OFF
#define HV_PROJECT_CONFIG_OSD_GRAPHIC                        HV_CONFIG_OFF
#define HV_PROJECT_CONFIG_OSD_DDRPATH                        HV_CONFIG_OFF
#define HV_PROJECT_CONFIG_OSD_ROTATION                       HV_CONFIG_ON
#define HV_PROJECT_CONFIG_OSD_LOGO_ROTATION                  HV_CONFIG_OFF
#define HV_PROJECT_CONFIG_OSD_KEY_ROTATION                   HV_CONFIG_OFF
#define HV_PROJECT_CONFIG_OSD_FORCE_REDRAW_ALL               HV_CONFIG_OFF
#define HV_PROJECT_CONFIG_OSD_FORCE_MULTIFRAME_DRAW          HV_CONFIG_OFF
#define HV_PROJECT_CONFIG_OSD_ANIMITION_SUPPORT              HV_CONFIG_OFF
#define HV_PROJECT_CONFIG_OSD_LOGO_INCODE                    HV_CONFIG_OFF
#define HV_PROJECT_CONFIG_OSD_LOGO_EFFECT                    HV_CONFIG_ON
#define HV_PROJECT_CONFIG_OSD_LOGO_USE_SCENE                 HV_CONFIG_OFF

#if ((HV_PROJECT_CONFIG_OSD_ROTATION == HV_CONFIG_ON) || (HV_PROJECT_CONFIG_OSD_FORCE_MULTIFRAME_DRAW == HV_CONFIG_ON))
#undef HV_PROJECT_CONFIG_OSD_DDRPATH
#define HV_PROJECT_CONFIG_OSD_DDRPATH                        HV_CONFIG_ON
#endif

#if (HV_PROJECT_CONFIG_OSD_LOGO_ROTATION == HV_CONFIG_ON)
#undef HV_PROJECT_CONFIG_OSD_LOGO_EFFECT
#define HV_PROJECT_CONFIG_OSD_LOGO_EFFECT                    HV_CONFIG_OFF
#endif

#ifdef  CONFIG_USER_PANEL_RESOLUTION_TYPE_UHD
#if (HV_PROJECT_CONFIG_OSD_DDRPATH == HV_CONFIG_ON)
/* 由于OSD DDR画布大小限制（最大支持2560*1440），所以UHD下OSD过DDR绘制，则必须开启OSD SCALER  */
#undef HV_PROJECT_CONFIG_OSD_SCALER
#define HV_PROJECT_CONFIG_OSD_SCALER                        HV_CONFIG_ON
#endif
#endif

#define OSD_DEBUG_PRINT_NAME

/* 定义该宏表示：允许item禁用时自动隐藏，且item list自动对齐，注意：需要将item的disable hide检查放在
   Hv_App_Cb_ItemCheckDisableHide接口中，且此item之后（Next）的所有的item（同一个item list内）
   都需在OSD Tool侧打开 DYN_POS 开关 */
#define OSD_CHECK_DISABLE_HIDE_AND_ITEMLIST_AUTO_ALIGN

/* 定义该宏表示：显示item时将自动进行disable检查，已经显示的item需调用Refresh相关接口进行刷新
   关闭该宏则需每次操作后调用Hv_App_CheckItemDisableState更新界面 */
#define OSD_CHECK_DISABLE_BY_EACH_ITEM

#ifndef OSD_CHECK_DISABLE_BY_EACH_ITEM
/* Item最大禁用个数 */
#define OSD_DISABLE_ITEM_NUM_MAX        (64)
#endif

/* 通过OSDdesign工具完成item与userdata的绑定 */
#define OSD_ITEM_BIND_USERDATA_BY_TOOL

/* OSD界面单个window的最大行数（Y） */
#define OSD_FONT_Y_NUM_MAX             (48)

/* AsciiString组件的字符串最大长度 */
#define OSD_ASCII_STRING_LENGTH_MAX    (48)

/* 同一级菜单所显示的最大item数量 */
#define OSD_MENU_SHOW_ITEM_NUM_MAX      (11)

/* LOGO显示时间 */
#define HV_PROJECT_CONFIG_OSD_LOGO_SHOW_TIME                (3)

/* 弹窗提示显示时间 */
#define HV_PROJECT_CONFIG_OSD_DIALOG_SHOW_TIME              (3)

/* 自动刷新默认频率 */
#define HV_PROJECT_CONFIG_OSD_DEFAULT_REFRESH_PERIOD_MS     (250)


#if (HV_PROJECT_CONFIG_OSD_DDRPATH == HV_CONFIG_ON)
/* 画到DDR中的像素格式
 *    FORMAT                Bytes
 * 0: RGBA8888              4
 * 1: RGBA4444              2
 * 2: RGB565                2
 * 5: RGB888                3
 */
#define HV_OSD_CONFIG_DDR_FORMAT                            2
#if (HV_OSD_CONFIG_DDR_FORMAT == 0)
#define HV_OSD_CONFIG_DDR_PIXEL_BYTES                       4
#elif (HV_OSD_CONFIG_DDR_FORMAT == 1)
#define HV_OSD_CONFIG_DDR_PIXEL_BYTES                       2
#elif (HV_OSD_CONFIG_DDR_FORMAT == 2)
#define HV_OSD_CONFIG_DDR_PIXEL_BYTES                       2
#elif (HV_OSD_CONFIG_DDR_FORMAT == 5)
#define HV_OSD_CONFIG_DDR_PIXEL_BYTES                       3
#else
#error "OSD DDR format not supported"
#endif

#define HV_OSD_CONFIG_FRAMERATE_MIN                         60
#endif

/* graphic中存储的像素格式
 *    FORMAT                Bytes
 * 0: RGBA8888              4
 * 1: RGBA4444              2
 * 2: RGB565                2
 * 5: RGB888                3
 */
#define HV_OSD_CONFIG_GRAPHIC_FORMAT                        2

#define HV_OSD_CONFIG_FONT_AS_BACKGROUND                    HV_CONFIG_ON

/* dynamic load resource */
#define HV_OSD_CONFIG_DYNAMIC_BANK_COUNT                    15

/* column最小宽度 */
#define HV_OSD_CONFIG_COLUMN_MINWIDTH                       5

#define HV_OSD_CONFIG_RESERVE_SLOTS_BYROW                   (HV_CONFIG_OFF)
#if (HV_OSD_CONFIG_RESERVE_SLOTS_BYROW == HV_CONFIG_OFF)

/* update区域不够的时候，一次扩充增加的格子个数 */
#define HV_OSD_CONFIG_SLOTS_EXPAND                          (32)

/* update区域不够的时候，一次扩充增加的最大字节数*/
#define HV_OSD_CONFIG_EXPAND_REGION_MAX                     (3 * 1024)

#else

#define HV_OSD_CONFIG_ROW_RESOURCE_THRESHOLD                0.5
/* 每行资源占用的格子数 / 每行index格子数的占比 */
#define HV_OSD_CONFIG_ROW_RESOURCE_COUNT_RATIO              1

#endif

#define HV_OSD_CONFIG_BLANK_COLUMN_MARGIN                   4

/*
 * 绘制字符的最大的行数
 *
 * osd driver记录每一行绘制的component信息
 * 在OsdRowInfo结构体中，osd初始化的时候会
 * 静态分配OSD_MAX_ROW_COUNT个OsdRowInfo
 * 结构体，可以调整这个宏的值来减少内存占用
 */
#define OSD_MAX_ROW_COUNT               64
/*
 * info window预留的行数
 *
 * info window和画正常菜单的window不同，正常菜单window
 * 可以提前计算出来一共有多少row，这样分配index的时候能够
 * 提前知道需要多少空间。index window里的字符串支持手动和
 * 自动换行，提前计算不出来占用多少行，所以在分配index的
 * 时候，需要预留OSD_RESERVED_PUNCTUATED_ROWS行空间出来，
 * 再分配column空间，填充的时候直接填充column，字符串画完之后，
 * 再根据实际的行数拷贝row信息到column的开头
 *
 * 实际项目中，根据解释性文字占用的最大行数来定义
 * OSD_RESERVED_PUNCTUATED_ROWS，最极限的情况就是
 * 浪费(OSD_RESERVED_PUNCTUATED_ROWS - 4) * 4个字节的
 * index空间
 */
#define OSD_RESERVED_PUNCTUATED_ROWS    48

/*
 * 每行row最大可能画的component个数
 *
 * 在OsdRowInfo结构体中存放component*的数组，
 * 数组长度为OSD_ROW_MAX_COMPONENTS，可以调整
 * 这个宏的值来减少内存占用
 */
#define OSD_ROW_MAX_COMPONENTS          16

/* colorkey */
#define HV_OSD_CONFIG_COLORKEY                  HV_CONFIG_ON
#if (HV_OSD_CONFIG_COLORKEY == HV_CONFIG_ON)
#define HV_OSD_CONFIG_COLORKEY_VALUE            0xabcdef
#endif /* HV_OSD_CONFIG_COLORKEY */

/* keep OFF, this is only for debug */
#define HV_OSD_CONFIG_TRANSFER_USING_MEMCPY         HV_CONFIG_OFF
#define HV_OSD_CONFIG_DOUBLE_BUFFER_USING_MEMCPY    HV_CONFIG_OFF


#endif
