117 lines
4.3 KiB
C
117 lines
4.3 KiB
C
|
/*
|
||
|
* SPDX-License-Identifier: MIT
|
||
|
* Copyright (C) 2004 - 2021 AJA Video Systems, Inc.
|
||
|
*/
|
||
|
////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// Filename: ntv2dispalyid.h
|
||
|
// Purpose: HDMI edid parser
|
||
|
//
|
||
|
///////////////////////////////////////////////////////////////
|
||
|
|
||
|
#ifndef NTV2_DISPLAYID_H
|
||
|
#define NTV2_DISPLAYID_H
|
||
|
|
||
|
#include "ntv2system.h"
|
||
|
|
||
|
|
||
|
enum ntv2_displayid_protocol
|
||
|
{
|
||
|
ntv2_displayid_protocol_unknown,
|
||
|
ntv2_displayid_protocol_dvi, /* no CEA-861 extension (therefore, no audio, RGB only) */
|
||
|
ntv2_displayid_protocol_hdmiv1, /* adds CEA-861 extension rev 1, timing only */
|
||
|
ntv2_displayid_protocol_hdmi, /* adds CEA-861 extension rev >1, audio, YCbCr and DeepColor options */
|
||
|
ntv2_displayid_protocol_size
|
||
|
};
|
||
|
|
||
|
struct ntv2_displayid_video
|
||
|
{
|
||
|
enum ntv2_displayid_protocol protocol; /* DVI vs HDMI */
|
||
|
|
||
|
bool underscan; /* true if sink device underscans IT video formats by default */
|
||
|
bool ycbcr_444; /* true if sink device supports YCbCr 4:4:4 in addition to RGB */
|
||
|
bool ycbcr_422; /* true if sink device supports YCbCr 4:2:2 in addition to RGB */
|
||
|
bool ycbcr_420; /* true if sink device supports YCbCr 4:2:0 in addition to RGB */
|
||
|
bool dc_48bit; /* true if sink device supports 48-bit (16 bits per component) RGB */
|
||
|
bool dc_36bit; /* true if sink device supports 36-bit (12 bits per component) RGB */
|
||
|
bool dc_30bit; /* true if sink device supports 30-bit (10 bits per component) RGB */
|
||
|
bool dc_y444; /* true if the 48-bit, 36-bit, and 30-bit flags ALSO apply to YCbCr inputs */
|
||
|
|
||
|
uint32_t max_clock_freq; /* maximum TMDS clock frequency supported by sink device (MHz / 0 = unknown) */
|
||
|
|
||
|
bool graphics; /* true if sink device has special graphics processing */
|
||
|
bool photo; /* true if sink device has special photo processing */
|
||
|
bool cinema; /* true if sink device has special cinema processing */
|
||
|
bool game; /* true if sink device has special game processing */
|
||
|
|
||
|
uint32_t video_latency; /* video latency (mSec / 0 = unknown) */
|
||
|
uint32_t audio_latency; /* audio latency (mSec / 0 = unknown) */
|
||
|
uint32_t int_video_latency; /* interlaced video latency (mSec / 0 = unknown) */
|
||
|
uint32_t int_audio_latency; /* interlaced audio latency (mSec / 0 = unknown) */
|
||
|
|
||
|
bool quad_30; /* true if sink device supports 1920x2160 29.97/30 */
|
||
|
bool quad_25; /* true if sink device supports 1920x2160 25 */
|
||
|
bool quad_24; /* true if sink device supports 1920x2160 23.98/24 */
|
||
|
bool four_24; /* true if sink device supports 2048x2160 24 */
|
||
|
|
||
|
uint32_t max_tmds_csc; /* maximum TMDS character rate supported above 340 Mcsc (0 = not supported) */
|
||
|
|
||
|
bool osd_disparity; /* true if sink supports receiving 3d osd displarity in the hf-vsif */
|
||
|
bool dual_view; /* true if sink supports 3d dual view */
|
||
|
bool indep_view; /* true if sink supports 3d independent view */
|
||
|
bool lte_scramble; /* true if sink supports scrambling below 340 Mcsc */
|
||
|
bool rr_capable; /* true if sink supports scdc read request */
|
||
|
bool scdc_present; /* true if sink supports scdc */
|
||
|
bool dc_30bit_420; /* true if sink supports 30 bit 420 */
|
||
|
bool dc_36bit_420; /* true if sink supports 36 bit 420 */
|
||
|
bool dc_48bit_420; /* true if sink supports 48 bit 420 */
|
||
|
};
|
||
|
|
||
|
struct ntv2_displayid_audio
|
||
|
{
|
||
|
enum ntv2_displayid_protocol protocol; /* DVI vs HDMI */
|
||
|
|
||
|
bool basic_audio; /* true if sink device supports basic audio */
|
||
|
|
||
|
uint32_t num_lpcm_channels; /* max number of channels from LPCM Short Audio Descriptors (if present) */
|
||
|
};
|
||
|
|
||
|
|
||
|
/**
|
||
|
* HDMI EDID register callback function
|
||
|
*
|
||
|
* Callback to obtain EDID register data.
|
||
|
*
|
||
|
* @param[in] pContext Callback context
|
||
|
* @param[in] blockNum Register block number
|
||
|
* @param[in] regNum Register number within the block
|
||
|
* @param[out] regVal Register value
|
||
|
* @return AJA_STATUS_SUCCESS if register read works
|
||
|
*/
|
||
|
typedef bool ntv2_displayid_callback(void* context, uint8_t block_num, uint8_t reg_num, uint8_t* reg_val);
|
||
|
|
||
|
|
||
|
struct ntv2_displayid
|
||
|
{
|
||
|
struct ntv2_displayid_video video;
|
||
|
struct ntv2_displayid_audio audio;
|
||
|
ntv2_displayid_callback* callback;
|
||
|
void* context;
|
||
|
};
|
||
|
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C"
|
||
|
{
|
||
|
#endif
|
||
|
|
||
|
void ntv2_displayid_config(struct ntv2_displayid* ntv2_did, ntv2_displayid_callback* callback, void* context);
|
||
|
void ntv2_displayid_clear(struct ntv2_displayid* ntv2_did);
|
||
|
bool ntv2_displayid_update(struct ntv2_displayid* ntv2_did);
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#endif
|