/* Copyright (c), 2001-2022, Shenshu Tech. Co., Ltd. */ #ifndef OT_COMMON_HDMI_H #define OT_COMMON_HDMI_H #include "ot_type.h" #include "ot_errno.h" #ifdef __cplusplus #if __cplusplus extern "C" { #endif #endif #define OT_HDMI_MAX_AUDIO_CAPBILITY_CNT 16 #define OT_HDMI_MAX_SAMPLE_RATE_NUM 8 #define OT_HDMI_MAX_BIT_DEPTH_NUM 6 #define OT_HDMI_DETAIL_TIMING_MAX 10 #define OT_HDMI_EDID_RAW_DATA_LEN 512 #define OT_HDMI_VENDOR_NAME_LEN 8 #define OT_HDMI_HW_PARAM_NUM 4 #define OT_HDMI_BKSV_LEN 5 #define OT_HDMI_MANUFACTURE_NAME_LEN 4 /* user data len:31 - 4(pkt header) - 5(4K- the length must be 0x05) */ #define OT_HDMI_VENDOR_USER_DATA_MAX_LEN 22 typedef enum { OT_ERRNO_HDMI_NOT_INIT = 1, OT_ERRNO_HDMI_INVALID_PARAM, OT_ERRNO_HDMI_NULL_PTR, OT_ERRNO_HDMI_DEV_NOT_OPEN, OT_ERRNO_HDMI_DEV_NOT_CONNECT, OT_ERRNO_HDMI_READ_SINK_FAILED, OT_ERRNO_HDMI_INIT_ALREADY, OT_ERRNO_HDMI_CALLBACK_ALREADY, OT_ERRNO_HDMI_INVALID_CALLBACK, OT_ERRNO_HDMI_FEATURE_NO_SUPPORT, OT_ERRNO_HDMI_BUS_BUSY, OT_ERRNO_HDMI_READ_EVENT_FAILED, OT_ERRNO_HDMI_NOT_START, OT_ERRNO_HDMI_READ_EDID_FAILED, OT_ERRNO_HDMI_INIT_FAILED, OT_ERRNO_HDMI_CREATE_TESK_FAILED, OT_ERRNO_HDMI_MALLOC_FAILED, OT_ERRNO_HDMI_FREE_FAILED, OT_ERRNO_HDMI_PTHREAD_CREATE_FAILED, OT_ERRNO_HDMI_PTHREAD_JOIN_FAILED, OT_ERRNO_HDMI_STRATEGY_FAILED, OT_ERRNO_HDMI_SET_ATTR_FAILED, OT_ERRNO_HDMI_CALLBACK_NOT_REGISTER, OT_ERRNO_HDMI_UNKNOWN_CMD, OT_ERRNO_HDMI_MUTEX_LOCK_FAILED, ERR_HDMI_BUTT } ot_hdmi_errno; typedef enum { OT_HDMI_AUDIO_CHN_CNT_STREAM, OT_HDMI_AUDIO_CHN_CNT_2, OT_HDMI_AUDIO_CHN_CNT_3, OT_HDMI_AUDIO_CHN_CNT_4, OT_HDMI_AUDIO_CHN_CNT_5, OT_HDMI_AUDIO_CHN_CNT_6, OT_HDMI_AUDIO_CHN_CNT_7, OT_HDMI_AUDIO_CHN_CNT_8, OT_HDMI_AUDIO_CHN_CNT_BUTT } ot_hdmi_audio_chn_cnt; typedef enum { OT_HDMI_AUDIO_SAMPLE_SIZE_STREAM, OT_HDMI_AUDIO_SAMPLE_SIZE_16, OT_HDMI_AUDIO_SAMPLE_SIZE_20, OT_HDMI_AUDIO_SAMPLE_SIZE_24, OT_HDMI_AUDIO_SAMPLE_SIZE_BUTT } ot_hdmi_audio_sample_size; typedef enum { OT_HDMI_AUDIO_SAMPLE_FREQ_STREAM, OT_HDMI_AUDIO_SAMPLE_FREQ_32000, OT_HDMI_AUDIO_SAMPLE_FREQ_44100, OT_HDMI_AUDIO_SAMPLE_FREQ_48000, OT_HDMI_AUDIO_SAMPLE_FREQ_88200, OT_HDMI_AUDIO_SAMPLE_FREQ_96000, OT_HDMI_AUDIO_SAMPLE_FREQ_176400, OT_HDMI_AUDIO_SAMPLE_FREQ_192000, OT_HDMI_AUDIO_SAMPLE_FREQ_BUTT } ot_hdmi_audio_sample_freq; typedef enum { OT_HDMI_LEVEL_SHIFT_VAL_0_DB, OT_HDMI_LEVEL_SHIFT_VAL_1_DB, OT_HDMI_LEVEL_SHIFT_VAL_2_DB, OT_HDMI_LEVEL_SHIFT_VAL_3_DB, OT_HDMI_LEVEL_SHIFT_VAL_4_DB, OT_HDMI_LEVEL_SHIFT_VAL_5_DB, OT_HDMI_LEVEL_SHIFT_VAL_6_DB, OT_HDMI_LEVEL_SHIFT_VAL_7_DB, OT_HDMI_LEVEL_SHIFT_VAL_8_DB, OT_HDMI_LEVEL_SHIFT_VAL_9_DB, OT_HDMI_LEVEL_SHIFT_VAL_10_DB, OT_HDMI_LEVEL_SHIFT_VAL_11_DB, OT_HDMI_LEVEL_SHIFT_VAL_12_DB, OT_HDMI_LEVEL_SHIFT_VAL_13_DB, OT_HDMI_LEVEL_SHIFT_VAL_14_DB, OT_HDMI_LEVEL_SHIFT_VAL_15_DB, OT_HDMI_LEVEL_SHIFT_VAL_BUTT } ot_hdmi_level_shift_val; typedef enum { OT_HDMI_LFE_PLAYBACK_NO, OT_HDMI_LFE_PLAYBACK_0_DB, OT_HDMI_LFE_PLAYBACK_10_DB, OT_HDMI_LFE_PLAYBACK_BUTT } ot_hdmi_lfe_playback_level; typedef enum { OT_INFOFRAME_TYPE_AVI, OT_INFOFRAME_TYPE_AUDIO, OT_INFOFRAME_TYPE_VENDORSPEC, OT_INFOFRAME_TYPE_BUTT } ot_hdmi_infoframe_type; typedef enum { OT_HDMI_VIDEO_FORMAT_1080P_60, OT_HDMI_VIDEO_FORMAT_1080P_50, OT_HDMI_VIDEO_FORMAT_1080P_30, OT_HDMI_VIDEO_FORMAT_1080P_25, OT_HDMI_VIDEO_FORMAT_1080P_24, OT_HDMI_VIDEO_FORMAT_1080i_60, OT_HDMI_VIDEO_FORMAT_1080i_50, OT_HDMI_VIDEO_FORMAT_720P_60, OT_HDMI_VIDEO_FORMAT_720P_50, OT_HDMI_VIDEO_FORMAT_576P_50, OT_HDMI_VIDEO_FORMAT_480P_60, OT_HDMI_VIDEO_FORMAT_PAL, OT_HDMI_VIDEO_FORMAT_NTSC, OT_HDMI_VIDEO_FORMAT_861D_640X480_60, OT_HDMI_VIDEO_FORMAT_VESA_800X600_60, OT_HDMI_VIDEO_FORMAT_VESA_1024X768_60, OT_HDMI_VIDEO_FORMAT_VESA_1280X800_60, OT_HDMI_VIDEO_FORMAT_VESA_1280X1024_60, OT_HDMI_VIDEO_FORMAT_VESA_1366X768_60, OT_HDMI_VIDEO_FORMAT_VESA_1440X900_60, OT_HDMI_VIDEO_FORMAT_VESA_1400X1050_60, OT_HDMI_VIDEO_FORMAT_VESA_1600X1200_60, OT_HDMI_VIDEO_FORMAT_VESA_1680X1050_60, OT_HDMI_VIDEO_FORMAT_VESA_1920X1200_60, OT_HDMI_VIDEO_FORMAT_2560x1440_30, OT_HDMI_VIDEO_FORMAT_2560x1440_60, OT_HDMI_VIDEO_FORMAT_2560x1600_60, OT_HDMI_VIDEO_FORMAT_1920x2160_30, OT_HDMI_VIDEO_FORMAT_3840X2160P_24, OT_HDMI_VIDEO_FORMAT_3840X2160P_25, OT_HDMI_VIDEO_FORMAT_3840X2160P_30, OT_HDMI_VIDEO_FORMAT_3840X2160P_50, OT_HDMI_VIDEO_FORMAT_3840X2160P_60, OT_HDMI_VIDEO_FORMAT_4096X2160P_24, OT_HDMI_VIDEO_FORMAT_4096X2160P_25, OT_HDMI_VIDEO_FORMAT_4096X2160P_30, OT_HDMI_VIDEO_FORMAT_4096X2160P_50, OT_HDMI_VIDEO_FORMAT_4096X2160P_60, OT_HDMI_VIDEO_FORMAT_3840X2160P_120, OT_HDMI_VIDEO_FORMAT_4096X2160P_120, OT_HDMI_VIDEO_FORMAT_7680X4320P_30, OT_HDMI_VIDEO_FORMAT_VESA_CUSTOMER_DEFINE, OT_HDMI_VIDEO_FORMAT_BUTT } ot_hdmi_video_format; typedef enum { OT_HDMI_PIC_ASPECT_RATIO_NO_DATA, OT_HDMI_PIC_ASPECT_RATIO_4TO3, OT_HDMI_PIC_ASPECT_RATIO_16TO9, OT_HDMI_PIC_ASPECT_RATIO_64TO27, OT_HDMI_PIC_ASPECT_RATIO_256TO135, OT_HDMI_PIC_ASPECT_RATIO_BUTT } ot_pic_aspect_ratio; typedef enum { OT_HDMI_ACTIVE_ASPECT_RATIO_16TO9_TOP = 2, OT_HDMI_ACTIVE_ASPECT_RATIO_14TO9_TOP, OT_HDMI_ACTIVE_ASPECT_RATIO_16TO9_BOX_CENTER, OT_HDMI_ACTIVE_ASPECT_RATIO_SAME_PIC = 8, OT_HDMI_ACTIVE_ASPECT_RATIO_4TO3_CENTER, OT_HDMI_ACTIVE_ASPECT_RATIO_16TO9_CENTER, OT_HDMI_ACTIVE_ASPECT_RATIO_14TO9_CENTER, OT_HDMI_ACTIVE_ASPECT_RATIO_4TO3_14_9 = 13, OT_HDMI_ACTIVE_ASPECT_RATIO_16TO9_14_9, OT_HDMI_ACTIVE_ASPECT_RATIO_16TO9_4_3, OT_HDMI_ACTIVE_ASPECT_RATIO_BUTT } ot_hdmi_active_aspect_ratio; typedef enum { OT_HDMI_SAMPLE_RATE_UNKNOWN, /* unknown sample rate */ OT_HDMI_SAMPLE_RATE_8K, /* 8K sample rate */ OT_HDMI_SAMPLE_RATE_11K, /* 11.025K sample rate */ OT_HDMI_SAMPLE_RATE_12K, /* 12K sample rate */ OT_HDMI_SAMPLE_RATE_16K, /* 16K sample rate */ OT_HDMI_SAMPLE_RATE_22K, /* 22.050K sample rate */ OT_HDMI_SAMPLE_RATE_24K, /* 24K sample rate */ OT_HDMI_SAMPLE_RATE_32K, /* 32K sample rate */ OT_HDMI_SAMPLE_RATE_44K, /* 44.1K sample rate */ OT_HDMI_SAMPLE_RATE_48K, /* 48K sample rate */ OT_HDMI_SAMPLE_RATE_88K, /* 88.2K sample rate */ OT_HDMI_SAMPLE_RATE_96K, /* 96K sample rate */ OT_HDMI_SAMPLE_RATE_176K, /* 176K sample rate */ OT_HDMI_SAMPLE_RATE_192K, /* 192K sample rate */ OT_HDMI_SAMPLE_RATE_768K, /* 768K sample rate */ OT_HDMI_SAMPLE_RATE_BUTT } ot_hdmi_sample_rate; typedef enum { OT_HDMI_AUDIO_FORMAT_CODE_RESERVED, /* Audio coding type, refer stream,default type */ OT_HDMI_AUDIO_FORMAT_CODE_PCM, /* Audio coding PCM type */ OT_HDMI_AUDIO_FORMAT_CODE_AC3, /* Audio coding AC3 type */ OT_HDMI_AUDIO_FORMAT_CODE_MPEG1, /* Audio coding MPEG1 type */ OT_HDMI_AUDIO_FORMAT_CODE_MP3, /* Audio coding MP3 type */ OT_HDMI_AUDIO_FORMAT_CODE_MPEG2, /* Audio coding MPEG2 type */ OT_HDMI_AUDIO_FORMAT_CODE_AAC, /* Audio coding AAC type */ OT_HDMI_AUDIO_FORMAT_CODE_DTS, /* Audio coding DTS type */ OT_HDMI_AUDIO_FORMAT_CODE_ATRAC, /* Audio coding ATRAC type */ OT_HDMI_AUDIO_FORMAT_CODE_ONE_BIT, /* Audio coding ONE BIT AUDIO type */ OT_HDMI_AUDIO_FORMAT_CODE_DDP, /* Audio coding DDPLUS type */ OT_HDMI_AUDIO_FORMAT_CODE_DTS_HD, /* Audio coding DTS HD type */ OT_HDMI_AUDIO_FORMAT_CODE_MAT, /* Audio coding MAT type */ OT_HDMI_AUDIO_FORMAT_CODE_DST, /* Audio coding DST type */ OT_HDMI_AUDIO_FORMAT_CODE_WMA_PRO, /* Audio coding WMA PRO type */ OT_HDMI_AUDIO_FORMAT_CODE_BUTT } ot_hdmi_audio_format_code; typedef enum { OT_HDMI_BIT_DEPTH_UNKNOWN, /* unknown bit width */ OT_HDMI_BIT_DEPTH_8, /* 8 bits width */ OT_HDMI_BIT_DEPTH_16, /* 16 bits width */ OT_HDMI_BIT_DEPTH_18, /* 18 bits width */ OT_HDMI_BIT_DEPTH_20, /* 20 bits width */ OT_HDMI_BIT_DEPTH_24, /* 24 bits width */ OT_HDMI_BIT_DEPTH_32, /* 32 bits width */ OT_HDMI_BIT_DEPTH_BUTT } ot_hdmi_bit_depth; typedef enum { OT_HDMI_ID_0, OT_HDMI_ID_1, OT_HDMI_ID_BUTT } ot_hdmi_id; typedef enum { OT_HDMI_EVENT_HOTPLUG = 0x10, /* HDMI hot-plug event */ OT_HDMI_EVENT_NO_PLUG, /* HDMI cable disconnection event */ OT_HDMI_EVENT_EDID_FAIL, /* HDMI EDID read failure event */ OT_HDMI_EVENT_BUTT } ot_hdmi_event_type; typedef enum { OT_HDMI_VIDEO_MODE_RGB444, OT_HDMI_VIDEO_MODE_YCBCR422, OT_HDMI_VIDEO_MODE_YCBCR444, OT_HDMI_VIDEO_MODE_YCBCR420, OT_HDMI_VIDEO_MODE_BUTT } ot_hdmi_video_mode; /* Color Component Sample format and chroma sampling format enum,see EIA-CEA-861-D/F */ typedef enum { OT_HDMI_COLOR_SPACE_RGB444, OT_HDMI_COLOR_SPACE_YCBCR422, OT_HDMI_COLOR_SPACE_YCBCR444, /* following is new featrue of CEA-861-F */ OT_HDMI_COLOR_SPACE_YCBCR420, OT_HDMI_COLOR_SPACE_BUTT } ot_hdmi_color_space; typedef enum { OT_HDMI_DEEP_COLOR_24BIT, /* HDMI Deep Color 24bit mode */ OT_HDMI_DEEP_COLOR_30BIT, /* HDMI Deep Color 30bit mode */ OT_HDMI_DEEP_COLOR_36BIT, /* HDMI Deep Color 36bit mode */ OT_HDMI_DEEP_COLOR_BUTT } ot_hdmi_deep_color; typedef enum { OT_HDMI_BAR_INFO_NOT_VALID, /* Bar Data not valid */ OT_HDMI_BAR_INFO_V, /* Vertical bar data valid */ OT_HDMI_BAR_INFO_H, /* Horizontal bar data valid */ OT_HDMI_BAR_INFO_VH, /* Horizontal and Vertical bar data valid */ OT_HDMI_BAR_INFO_BUTT } ot_hdmi_bar_info; typedef enum { OT_HDMI_SCAN_INFO_NO_DATA, /* No Scan information */ OT_HDMI_SCAN_INFO_OVERSCANNED, /* Scan information, Overscanned (for television) */ OT_HDMI_SCAN_INFO_UNDERSCANNED, /* Scan information, Underscanned (for computer) */ OT_HDMI_SCAN_INFO_BUTT } ot_hdmi_scan_info; typedef enum { OT_HDMI_PIC_NON_UNIFORM_SCALING, /* No Known, non-uniform picture scaling */ OT_HDMI_PIC_SCALING_H, /* Picture has been scaled horizontally */ OT_HDMI_PIC_SCALING_V, /* Picture has been scaled Vertically */ OT_HDMI_PIC_SCALING_HV, /* Picture has been scaled horizontally and Vertically */ OT_HDMI_PIC_SCALING_BUTT } ot_hdmi_pic_scaline; typedef enum { OT_HDMI_COMMON_COLORIMETRY_NO_DATA, /* Colorimetry No Data option */ OT_HDMI_COMMON_COLORIMETRY_ITU601, /* Colorimetry ITU601 option */ OT_HDMI_COMMON_COLORIMETRY_ITU709, /* Colorimetry ITU709 option */ OT_HDMI_COMMON_COLORIMETRY_BUTT /* Colorimetry extended option */ } ot_hdmi_colorimetry; typedef enum { OT_HDMI_COMMON_COLORIMETRY_XVYCC_601, /* Colorimetry xvYCC601 extended option */ OT_HDMI_COMMON_COLORIMETRY_XVYCC_709, /* Colorimetry xvYCC709 extended option */ OT_HDMI_COMMON_COLORIMETRY_S_YCC_601, /* Colorimetry S YCC 601 extended option */ OT_HDMI_COMMON_COLORIMETRY_ADOBE_YCC_601, /* Colorimetry ADOBE YCC 601 extended option */ OT_HDMI_COMMON_COLORIMETRY_ADOBE_RGB, /* Colorimetry ADOBE RGB extended option */ OT_HDMI_COMMON_COLORIMETRY_2020_CONST_LUMINOUS, /* Colorimetry ITU2020 extended option */ OT_HDMI_COMMON_COLORIMETRY_2020_NON_CONST_LUMINOUS, /* Colorimetry ITU2020 extended option */ OT_HDMI_COMMON_COLORIMETRY_EXT_BUTT } ot_hdmi_ex_colorimetry; typedef enum { OT_HDMI_RGB_QUANT_DEFAULT_RANGE, /* Default range, it depends on the video format */ OT_HDMI_RGB_QUANT_LIMITED_RANGE, /* Limited quantization range of 220 levels when receiving a CE video format */ OT_HDMI_RGB_QUANT_FULL_RANGE, /* Full quantization range of 256 levels when receiving an IT video format */ OT_HDMI_RGB_QUANT_FULL_BUTT } ot_hdmi_rgb_quant_range; typedef enum { OT_HDMI_YCC_QUANT_LIMITED_RANGE, /* Limited quantization range of 220 levels when receiving a CE video format */ OT_HDMI_YCC_QUANT_FULL_RANGE, /* Full quantization range of 256 levels when receiving an IT video format */ OT_HDMI_YCC_QUANT_BUTT } ot_hdmi_ycc_quant_range; typedef enum { OT_HDMI_PIXEL_REPET_NO, OT_HDMI_PIXEL_REPET_2_TIMES, OT_HDMI_PIXEL_REPET_3_TIMES, OT_HDMI_PIXEL_REPET_4_TIMES, OT_HDMI_PIXEL_REPET_5_TIMES, OT_HDMI_PIXEL_REPET_6_TIMES, OT_HDMI_PIXEL_REPET_7_TIMES, OT_HDMI_PIXEL_REPET_8_TIMES, OT_HDMI_PIXEL_REPET_9_TIMES, OT_HDMI_PIXEL_REPET_10_TIMES, OT_HDMI_PIXEL_REPET_BUTT } ot_hdmi_pixel_repetition; typedef enum { OT_HDMI_CONTNET_GRAPHIC, OT_HDMI_CONTNET_PHOTO, OT_HDMI_CONTNET_CINEMA, OT_HDMI_CONTNET_GAME, OT_HDMI_CONTNET_BUTT } ot_hdmi_content_type; typedef enum { OT_HDMI_AUDIO_CODING_REFER_STREAM_HEAD, OT_HDMI_AUDIO_CODING_PCM, OT_HDMI_AUDIO_CODING_AC3, OT_HDMI_AUDIO_CODING_MPEG1, OT_HDMI_AUDIO_CODING_MP3, OT_HDMI_AUDIO_CODING_MPEG2, OT_HDMI_AUDIO_CODING_AACLC, OT_HDMI_AUDIO_CODING_DTS, OT_HDMI_AUDIO_CODING_ATRAC, OT_HDMI_AUDIO_CODIND_ONE_BIT_AUDIO, OT_HDMI_AUDIO_CODING_ENAHNCED_AC3, OT_HDMI_AUDIO_CODING_DTS_HD, OT_HDMI_AUDIO_CODING_MAT, OT_HDMI_AUDIO_CODING_DST, OT_HDMI_AUDIO_CODING_WMA_PRO, OT_HDMI_AUDIO_CODING_BUTT } ot_hdmi_coding_type; typedef enum { OT_HDMI_AUDIO_SPEAKER_FL_FR, OT_HDMI_AUDIO_SPEAKER_LFE, OT_HDMI_AUDIO_SPEAKER_FC, OT_HDMI_AUDIO_SPEAKER_RL_RR, OT_HDMI_AUDIO_SPEAKER_RC, OT_HDMI_AUDIO_SPEAKER_FLC_FRC, OT_HDMI_AUDIO_SPEAKER_RLC_RRC, OT_HDMI_AUDIO_SPEAKER_FLW_FRW, OT_HDMI_AUDIO_SPEAKER_FLH_FRH, OT_HDMI_AUDIO_SPEAKER_TC, OT_HDMI_AUDIO_SPEAKER_FCH, OT_HDMI_AUDIO_SPEAKER_BUTT } ot_hdmi_audio_speaker; typedef void (*ot_hdmi_callback)(ot_hdmi_event_type event, td_void *private_data); typedef struct { ot_hdmi_audio_format_code audio_format_code; /* Audio coding type */ ot_hdmi_sample_rate support_sample_rate[OT_HDMI_MAX_SAMPLE_RATE_NUM]; /* Audio sample rate */ td_u8 audio_chn; /* Aud Channel of the coding type */ /* sample bit depth,when audio format code is OT_UNF_EDID_AUDIO_FORMAT_CODE_PCM */ ot_hdmi_bit_depth support_bit_depth[OT_HDMI_MAX_BIT_DEPTH_NUM]; /* sample bit depth Num,when audio format code is OT_UNF_EDID_AUDIO_FORMAT_CODE_PCM */ td_u32 support_bit_depth_num; /* * enter max bit rate,when audio format code is * OT_UNF_EDID_AUDIO_FORMAT_CODE_AC3 - OT_UNF_EDID_AUDIO_FORMAT_CODE_ATRAC */ td_u32 max_bit_rate; } ot_hdmi_audio_info; typedef struct { td_bool eotf_sdr; /* Traditional gamma - SDR Luminance Range. */ td_bool eotf_hdr; /* Traditional gamma - HDR Luminance Range. */ td_bool eotf_smpte_st2084; /* SMPTE ST 2084 */ td_bool eotf_hlg; /* Hybrid Log-Gamma(HLG) based on Recommendation ITU-R BT.2100-0 */ td_bool eotf_future; /* Future EOTF */ } ot_hdmi_eotf; /* EDID Supported Static Metadata Descriptor */ typedef struct { td_bool descriptor_type1; /* Support Static Metadata Type 1 or not. */ } ot_hdmi_hdr_metadata_type; typedef struct { ot_hdmi_eotf eotf; /* EOTF support. */ ot_hdmi_hdr_metadata_type metadata; /* static metadata descriptor type(ID) support. */ td_u8 max_luma_cv; /* Desired Content Max Luminance Data. Real value(in 1cd/m^2) = 50.2^(CV/32) */ td_u8 avg_luma_cv; /* Desired Content Max Frame-average Luminance. Real value(in 1cd/m^2) = 50.2^(CV/32) */ /* * Desired Content Min Luminance Data. * Real value(in 1cd/m^2) = u8MaxLuminance_CV * (u8MinLuminance_CV/255)^2 / 100 */ td_u8 min_luma_cv; } ot_hdmi_hdr_capability; typedef struct { td_u32 vfb; /* vertical front blank */ td_u32 vbb; /* vertical back blank */ td_u32 vact; /* vertical active area */ td_u32 hfb; /* horizontal front blank */ td_u32 hbb; /* horizontal back blank */ td_u32 hact; /* horizontal active area */ td_u32 vpw; /* vertical sync pulse width */ td_u32 hpw; /* horizontal sync pulse width */ td_bool idv; /* flag of data valid signal is needed flip */ td_bool ihs; /* flag of horizontal sync pulse is needed flip */ td_bool ivs; /* flag of vertical sync pulse is needed flip */ td_u32 img_width; /* image width */ td_u32 img_height; /* image height */ td_u32 aspect_ratio_w; /* aspect ratio width */ td_u32 aspect_ratio_h; /* aspect ratio height */ td_bool interlace; /* flag of interlace */ td_s32 pixel_clk; /* pixelc clk for this timing, unit:KHz */ } ot_hdmi_timing_info; typedef struct { td_u32 detail_timing_num; ot_hdmi_timing_info detail_timing[OT_HDMI_DETAIL_TIMING_MAX]; } ot_hdmi_detail_timing; typedef struct { td_bool is_connected; /* Whether the devices are connected. */ /* Whether the HDMI is supported by the device. If the HDMI is not supported by the device, the device is DVI. */ td_bool support_hdmi; td_bool is_sink_power_on; /* Whether the sink device is powered on. */ ot_hdmi_video_format native_video_format; /* Physical resolution of the display device. */ /* * Video capability set. * TD_TRUE: This display format is supported. * TD_FALSE: This display format is not supported. */ td_bool support_video_format[OT_HDMI_VIDEO_FORMAT_BUTT]; /* * Whether the YCBCR display is supported. * TD_TRUE: The YCBCR display is supported. * TD_FALSE: Only red-green-blue (RGB) is supported. */ td_bool support_ycbcr; /* Whether the xvYCC601 color format is supported. */ td_bool support_xvycc601; /* Whether the xvYCC709 color format is supported. */ td_bool support_xvycc709; /* Transfer profile supported by xvYCC601. 1: P0; 2: P1; 4: P2. */ td_u8 md_bit; /* Num of audio Info */ td_u32 audio_info_num; /* Audio Info.For details, see Table 37 in EIA-CEA-861-D. */ ot_hdmi_audio_info audio_info[OT_HDMI_MAX_AUDIO_CAPBILITY_CNT]; /* Speaker position. For details, see the definition of SpeakerDATABlock in EIA-CEA-861-D. */ td_bool speaker[OT_HDMI_AUDIO_SPEAKER_BUTT]; /* Device vendor flag */ td_u8 manufacture_name[OT_HDMI_MANUFACTURE_NAME_LEN]; /* Device ID. */ td_u32 pdt_code; /* Device sequence number. */ td_u32 serial_num; /* Device production data (week). */ td_u32 week_of_manufacture; /* Set the production data (year). */ td_u32 year_of_manufacture; /* Device version number */ td_u8 version; /* Device sub version number */ td_u8 revision; /* EDID extended block number */ td_u8 edid_ex_blk_num; /* Valid flag of the consumer electronics control (CEC) physical address */ td_bool is_phys_addr_valid; /* CEC physical address A */ td_u8 phys_addr_a; /* CEC physical address B */ td_u8 phys_addr_b; /* CEC physical address C */ td_u8 phys_addr_c; /* CEC physical address D */ td_u8 phys_addr_d; /* Whether to support the DVI dual-link operation. */ td_bool support_dvi_dual; /* Whether to support the YCBCR 4:4:4 deep-color mode. */ td_bool support_deepcolor_ycbcr444; /* Whether to support the deep-color 30-bit mode. */ td_bool support_deepcolor_30bit; /* Whether to support the deep-color 36-bit mode. */ td_bool support_deepcolor_36bit; /* Whether to support the deep-color 48-bit mode. */ td_bool support_deepcolor_48bit; /* Whether to support the Supports_AI mode. */ td_bool support_ai; /* Maximum TMDS clock. */ td_u32 max_tmds_clk; /* Delay flag bit. */ td_bool i_latency_fields_present; /* whether Video_Latency and Audio_Latency fields are present */ td_bool latency_fields_present; /* Special video format */ td_bool hdmi_video_present; /* Video delay */ td_u8 video_latency; /* Audio delay */ td_u8 audio_latency; /* Video delay in interlaced video mode */ td_u8 interlaced_video_latency; /* Audio delay in interlaced video mode */ td_u8 interlaced_audio_latency; /* Whether to support the YUV420 deep-color 30-bit mode. */ td_bool support_y420_dc_30bit; /* Whether to support the YUV420 deep-color 36-bit mode. */ td_bool support_y420_dc_36bit; /* Whether to support the YUV420 deep-color 48-bit mode. */ td_bool support_y420_dc_48bit; /* Whether to support HDMI2.0. */ td_bool support_hdmi_2_0; /* the format support YUV420 */ td_bool support_y420_format[OT_HDMI_VIDEO_FORMAT_BUTT]; /* the format only support YUV420 */ td_bool only_support_y420_format[OT_HDMI_VIDEO_FORMAT_BUTT]; /* * flag of RGB Quantization Range selectable. * when TD_TRUE,sink expect full/limited range is selectable;or sink expect default range. */ td_bool ycc_quant_selectable; /* * flag of YCC Quantization Range selectable. * when TD_TRUE,sink expect full/limited range is selectable;or sink expect default range. */ td_bool rgb_quant_selectable; /* HDR support flag.When HDR Static Metadata Data Block is indicated,flag TD_TRUE;or,TD_FALSE. */ td_bool support_hdr; /* HDR capability */ ot_hdmi_hdr_capability hdr; /* Detailed timing information */ ot_hdmi_detail_timing detailed_timing; } ot_hdmi_sink_capability; typedef struct { /* Whether to forcibly output the video over the HDMI. */ td_bool hdmi_en; /* Video norm. This value of the video norm must be consistent with the norm of the video output. */ ot_hdmi_video_format video_format; /* DeepColor output mode.It is OT_HDMI_DEEP_COLOR_24BIT by default. */ ot_hdmi_deep_color deep_color_mode; /* Whether to enable the audio. */ td_bool audio_en; /* Audio sampling rate. This parameter needs to be consistent with that of the VO. */ ot_hdmi_sample_rate sample_rate; /* Audio bit width. It is 16 by default. This parameter needs to be consistent with that of the VO. */ ot_hdmi_bit_depth bit_depth; /* Whether to enable auth mode. 0: disabled 1: enabled */ td_bool auth_mode_en; /* * Enable flag of deep color mode adapting case of user setting incorrect, * default: TD_FALSE.When user have no any adapting strategy,suggestion TD_TRUE */ td_bool deep_color_adapt_en; /* * Pixclk of enVideoFmt(unit is kHz). * (This param is valid only when enVideoFmt is OT_HDMI_VIDEO_FMT_VESA_CUSTOMER_DEFINE) */ td_u32 pix_clk; } ot_hdmi_attr; typedef struct { td_bool edid_valid; td_u32 edid_len; td_u8 edid[OT_HDMI_EDID_RAW_DATA_LEN]; } ot_hdmi_edid; typedef struct { ot_hdmi_audio_chn_cnt chn_cnt; ot_hdmi_coding_type coding_type; ot_hdmi_audio_sample_size sample_size; ot_hdmi_audio_sample_freq sampling_freq; td_u8 chn_alloc; /* Channel/Speaker Allocation.Range [0,255] */ ot_hdmi_level_shift_val level_shift; ot_hdmi_lfe_playback_level lfe_playback_level; td_bool down_mix_inhibit; } ot_hdmi_audio_infoframe; typedef struct { ot_hdmi_video_format timing_mode; ot_hdmi_color_space color_space; td_bool active_info_present; ot_hdmi_bar_info bar_info; ot_hdmi_scan_info scan_info; ot_hdmi_colorimetry colorimetry; ot_hdmi_ex_colorimetry ex_colorimetry; ot_pic_aspect_ratio aspect_ratio; ot_hdmi_active_aspect_ratio active_aspect_ratio; ot_hdmi_pic_scaline pic_scaling; ot_hdmi_rgb_quant_range rgb_quant; td_bool is_it_content; ot_hdmi_pixel_repetition pixel_repetition; ot_hdmi_content_type content_type; ot_hdmi_ycc_quant_range ycc_quant; td_u16 line_n_end_of_top_bar; td_u16 line_n_start_of_bot_bar; td_u16 pixel_n_end_of_left_bar; td_u16 pixel_n_start_of_right_bar; } ot_hdmi_avi_infoframe; typedef struct { td_u8 data_len; td_u8 user_data[OT_HDMI_VENDOR_USER_DATA_MAX_LEN]; } ot_hdmi_vendorspec_infoframe; typedef union { ot_hdmi_avi_infoframe avi_infoframe; /* AUTO:ot_hdmi_infoframe_type:OT_INFOFRAME_TYPE_AVI; */ ot_hdmi_audio_infoframe audio_infoframe; /* AUTO:ot_hdmi_infoframe_type:OT_INFOFRAME_TYPE_AUDIO; */ ot_hdmi_vendorspec_infoframe vendor_spec_infoframe; /* AUTO:ot_hdmi_infoframe_type:OT_INFOFRAME_TYPE_VENDORSPEC; */ } ot_hdmi_infoframe_unit; typedef struct { ot_hdmi_infoframe_type infoframe_type; /* InfoFrame type */ ot_hdmi_infoframe_unit infoframe_unit; /* InfoFrame date */ } ot_hdmi_infoframe; typedef struct { ot_hdmi_callback hdmi_event_callback; /* Event handling callback function */ td_void *private_data; /* Private data of the callback functions and parameters */ } ot_hdmi_callback_func; typedef struct { td_u32 i_de_main_clk; td_u32 i_de_main_data; td_u32 i_main_clk; td_u32 i_main_data; td_u32 ft_cap_clk; td_u32 ft_cap_data; } ot_hdmi_hw_param; typedef struct { ot_hdmi_hw_param hw_param[OT_HDMI_HW_PARAM_NUM]; } ot_hdmi_hw_spec; typedef struct { td_bool is_connected; /* The Device is connected or disconnected */ td_bool is_sink_power_on; /* The sink is PowerOn or not */ } ot_hdmi_status; typedef enum { OT_HDMI_TRACE_LEN_0, OT_HDMI_TRACE_LEN_1, OT_HDMI_TRACE_LEN_2, OT_HDMI_TRACE_LEN_3, OT_HDMI_TRACE_LEN_4, OT_HDMI_TRACE_LEN_5, OT_HDMI_TRACE_LEN_6, OT_HDMI_TRACE_LEN_7, OT_HDMI_TRACE_LEN_8, OT_HDMI_TRACE_DEFAULT, OT_HDMI_TRACE_BUTT } ot_hdmi_trace_len; typedef struct { td_bool emi_en; /* emi enable/disable */ ot_hdmi_trace_len trace_len; /* Phy parameters selection. */ } ot_hdmi_mod_param; #define OT_ERR_HDMI_NOT_INIT OT_DEFINE_ERR(OT_ID_HDMI, OT_ERR_LEVEL_ERROR, OT_ERRNO_HDMI_NOT_INIT) #define OT_ERR_HDMI_INVALID_PARA OT_DEFINE_ERR(OT_ID_HDMI, OT_ERR_LEVEL_ERROR, OT_ERRNO_HDMI_INVALID_PARAM) #define OT_ERR_HDMI_NULL_PTR OT_DEFINE_ERR(OT_ID_HDMI, OT_ERR_LEVEL_ERROR, OT_ERRNO_HDMI_NULL_PTR) #define OT_ERR_HDMI_DEV_NOT_OPEN OT_DEFINE_ERR(OT_ID_HDMI, OT_ERR_LEVEL_ERROR, OT_ERRNO_HDMI_DEV_NOT_OPEN) #define OT_ERR_HDMI_DEV_NOT_CONNECT OT_DEFINE_ERR(OT_ID_HDMI, OT_ERR_LEVEL_ERROR, OT_ERRNO_HDMI_DEV_NOT_CONNECT) #define OT_ERR_HDMI_READ_SINK_FAILED OT_DEFINE_ERR(OT_ID_HDMI, OT_ERR_LEVEL_ERROR, OT_ERRNO_HDMI_READ_SINK_FAILED) #define OT_ERR_HDMI_INIT_ALREADY OT_DEFINE_ERR(OT_ID_HDMI, OT_ERR_LEVEL_ERROR, OT_ERRNO_HDMI_INIT_ALREADY) #define OT_ERR_HDMI_CALLBACK_ALREADY OT_DEFINE_ERR(OT_ID_HDMI, OT_ERR_LEVEL_ERROR, OT_ERRNO_HDMI_CALLBACK_ALREADY) #define OT_ERR_HDMI_INVALID_CALLBACK OT_DEFINE_ERR(OT_ID_HDMI, OT_ERR_LEVEL_ERROR, OT_ERRNO_HDMI_INVALID_CALLBACK) #define OT_ERR_HDMI_FEATURE_NO_SUPPORT \ OT_DEFINE_ERR(OT_ID_HDMI, OT_ERR_LEVEL_ERROR, OT_ERRNO_HDMI_FEATURE_NO_SUPPORT) #define OT_ERR_HDMI_BUS_BUSY OT_DEFINE_ERR(OT_ID_HDMI, OT_ERR_LEVEL_ERROR, OT_ERRNO_HDMI_BUS_BUSY) #define OT_ERR_HDMI_READ_EVENT_FAILED OT_DEFINE_ERR(OT_ID_HDMI, OT_ERR_LEVEL_ERROR, OT_ERRNO_HDMI_READ_EVENT_FAILED) #define OT_ERR_HDMI_NOT_START OT_DEFINE_ERR(OT_ID_HDMI, OT_ERR_LEVEL_ERROR, OT_ERRNO_HDMI_NOT_START) #define OT_ERR_HDMI_READ_EDID_FAILED OT_DEFINE_ERR(OT_ID_HDMI, OT_ERR_LEVEL_ERROR, OT_ERRNO_HDMI_READ_EDID_FAILED) #define OT_ERR_HDMI_INIT_FAILED OT_DEFINE_ERR(OT_ID_HDMI, OT_ERR_LEVEL_ERROR, OT_ERRNO_HDMI_INIT_FAILED) #define OT_ERR_HDMI_CREATE_TESK_FAILED \ OT_DEFINE_ERR(OT_ID_HDMI, OT_ERR_LEVEL_ERROR, OT_ERRNO_HDMI_CREATE_TESK_FAILED) #define OT_ERR_HDMI_MALLOC_FAILED OT_DEFINE_ERR(OT_ID_HDMI, OT_ERR_LEVEL_ERROR, OT_ERRNO_HDMI_MALLOC_FAILED) #define OT_ERR_HDMI_FREE_FAILED OT_DEFINE_ERR(OT_ID_HDMI, OT_ERR_LEVEL_ERROR, OT_ERRNO_HDMI_FREE_FAILED) #define OT_ERR_HDMI_PTHREAD_CREATE_FAILED \ OT_DEFINE_ERR(OT_ID_HDMI, OT_ERR_LEVEL_ERROR, OT_ERRNO_HDMI_PTHREAD_CREATE_FAILED) #define OT_ERR_HDMI_PTHREAD_JOIN_FAILED \ OT_DEFINE_ERR(OT_ID_HDMI, OT_ERR_LEVEL_ERROR, OT_ERRNO_HDMI_PTHREAD_JOIN_FAILED) #define OT_ERR_HDMI_STRATEGY_FAILED OT_DEFINE_ERR(OT_ID_HDMI, OT_ERR_LEVEL_ERROR, OT_ERRNO_HDMI_STRATEGY_FAILED) #define OT_ERR_HDMI_SET_ATTR_FAILED OT_DEFINE_ERR(OT_ID_HDMI, OT_ERR_LEVEL_ERROR, OT_ERRNO_HDMI_SET_ATTR_FAILED) #define OT_ERR_HDMI_CALLBACK_NOT_REGISTER \ OT_DEFINE_ERR(OT_ID_HDMI, OT_ERR_LEVEL_ERROR, OT_ERRNO_HDMI_CALLBACK_NOT_REGISTER) #define OT_ERR_HDMI_UNKNOWN_COMMAND OT_DEFINE_ERR(OT_ID_HDMI, OT_ERR_LEVEL_ERROR, OT_ERRNO_HDMI_UNKNOWN_CMD) #define OT_ERR_HDMI_MUTEX_LOCK_FAILED OT_DEFINE_ERR(OT_ID_HDMI, OT_ERR_LEVEL_ERROR, OT_ERRNO_HDMI_MUTEX_LOCK_FAILED) #ifdef __cplusplus #if __cplusplus } #endif #endif #endif