1
0
mirror of https://github.com/marqs85/ossc.git synced 2024-06-01 17:41:37 +00:00

it6613: add support for HDR Infoframe

This commit is contained in:
marqs 2023-08-26 11:27:36 +03:00
parent 0ce2809183
commit 4bc98224e4
5 changed files with 246 additions and 152 deletions

View File

@ -339,3 +339,26 @@ void HDMITX_SetAudioInfoFrame(BYTE bAudioDwSampling)
EnableAudioInfoFrame(TRUE, (BYTE *) &AudioInfo);
}
void HDMITX_SetHDRInfoFrame(BYTE HDR_TF)
{
int i;
HDR_InfoFrame HDRInfo;
HDRInfo.info.Type = HDR_INFOFRAME_TYPE;
HDRInfo.info.Ver = HDR_INFOFRAME_VER;
HDRInfo.info.Len = HDR_INFOFRAME_LEN;
HDRInfo.info.TF = HDR_TF;
for (i=1; i<HDR_INFOFRAME_LEN; i++) {
HDRInfo.pktbyte.HDR_DB[i] = 0;
}
/*HDRInfo.pktbyte.HDR_DB[22] = 0xe8;
HDRInfo.pktbyte.HDR_DB[23] = 0x03;
HDRInfo.pktbyte.HDR_DB[24] = 0xfa;
HDRInfo.pktbyte.HDR_DB[25] = 0x00;*/
EnableHDRInfoFrame(TRUE, (BYTE *) &HDRInfo);
}

View File

@ -27,5 +27,6 @@ bool HDMITX_IsSinkSupportColorDepth30(void);
void HDMITX_SetOutputColorDepth(int ColorDepth);
void HDMITX_SetAudioInfoFrame(BYTE bAudioDwSampling);
void HDMITX_SetHDRInfoFrame(BYTE enableHDR);
#endif /*HDMI_TX_H_*/

View File

@ -80,6 +80,7 @@ static SYS_STATUS SetAVIInfoFrame(AVI_InfoFrame *pAVIInfoFrame) ;
static SYS_STATUS SetAudioInfoFrame(Audio_InfoFrame *pAudioInfoFrame) ;
static SYS_STATUS SetSPDInfoFrame(SPD_InfoFrame *pSPDInfoFrame) ;
static SYS_STATUS SetMPEGInfoFrame(MPEG_InfoFrame *pMPGInfoFrame) ;
static SYS_STATUS SetHDRInfoFrame(HDR_InfoFrame *pHDRInfoFrame) ;
static SYS_STATUS ReadEDID(BYTE *pData,BYTE bSegment,BYTE offset,SHORT Count) ;
static void AbortDDC() ;
static void ClearDDCFIFO() ;
@ -823,6 +824,22 @@ EnableAudioInfoFrame(BYTE bEnable,BYTE *pAudioInfoFrame)
return FALSE ;
}
BOOL
EnableHDRInfoFrame(BYTE bEnable, BYTE *pHDRInfoFrame)
{
if (!bEnable) {
DISABLE_NULL_PKT();
return TRUE;
}
if(SetHDRInfoFrame((HDR_InfoFrame *)pHDRInfoFrame) == ER_SUCCESS)
{
return TRUE;
}
return FALSE ;
}
void
SetAVMute(BYTE bEnable)
{
@ -3388,6 +3405,38 @@ SetAudioInfoFrame(Audio_InfoFrame *pAudioInfoFrame)
return ER_SUCCESS ;
}
static SYS_STATUS
SetHDRInfoFrame(HDR_InfoFrame *pHDRInfoFrame)
{
int i ;
BYTE ucData ;
if(!pHDRInfoFrame)
{
return ER_FAIL ;
}
Switch_HDMITX_Bank(1) ;
HDMITX_WriteI2C_Byte(REG_TX_PKT_HB00, (0x80+pHDRInfoFrame->info.Type));
HDMITX_WriteI2C_Byte(REG_TX_PKT_HB01, pHDRInfoFrame->info.Ver);
HDMITX_WriteI2C_Byte(REG_TX_PKT_HB02, pHDRInfoFrame->info.Len);
for(i = 0; i < HDR_INFOFRAME_LEN ; i++)
HDMITX_WriteI2C_Byte(REG_TX_PKT_PB01+i, pHDRInfoFrame->pktbyte.HDR_DB[i]);
for(i = 0,ucData = 0 ; i< HDR_INFOFRAME_LEN ; i++)
{
ucData -= pHDRInfoFrame->pktbyte.HDR_DB[i] ;
}
ucData -= 0x80+HDR_INFOFRAME_VER+HDR_INFOFRAME_TYPE+HDR_INFOFRAME_LEN ;
HDMITX_WriteI2C_Byte(REG_TX_PKT_PB00, ucData);
Switch_HDMITX_Bank(0) ;
ENABLE_NULL_PKT();
return ER_SUCCESS ;
}
//////////////////////////////////////////////////////////////////////
// Function: SetSPDInfoFrame()
// Parameter: pSPDInfoFrame - the pointer to HDMI SPD Infoframe ucData

View File

@ -828,6 +828,7 @@ BOOL CheckHDMITX(BYTE *pHPD,BYTE *pHPDChange) ;
BOOL EnableHDCP(BYTE bEnable) ;
BOOL EnableAVIInfoFrame(BYTE bEnable,BYTE *pAVIInfoFrame);
BOOL EnableAudioInfoFrame(BYTE bEnable,BYTE *pAudioInfoFrame);
BOOL EnableHDRInfoFrame(BYTE bEnable, BYTE *pHDRInfoFrame);
// BOOL EnableVideoOutputIndirect(BYTE xCnt,BYTE inputColorMode,BYTE outputColorMode,BYTE bHDMI) ;
void SetAVMute(BYTE bEnable) ;
void SetOutputColorDepthPhase(BYTE ColorDepth,BYTE bPhase) ;

View File

@ -195,18 +195,21 @@ typedef union _VideoFormatCode
#define SPD_INFOFRAME_TYPE 0x03
#define AUDIO_INFOFRAME_TYPE 0x04
#define MPEG_INFOFRAME_TYPE 0x05
#define HDR_INFOFRAME_TYPE 0x07
#define VENDORSPEC_INFOFRAME_VER 0x01
#define AVI_INFOFRAME_VER 0x02
#define SPD_INFOFRAME_VER 0x01
#define AUDIO_INFOFRAME_VER 0x01
#define MPEG_INFOFRAME_VER 0x01
#define HDR_INFOFRAME_VER 0x01
#define VENDORSPEC_INFOFRAME_LEN 8
#define AVI_INFOFRAME_LEN 13
#define SPD_INFOFRAME_LEN 25
#define AUDIO_INFOFRAME_LEN 10
#define MPEG_INFOFRAME_LEN 10
#define HDR_INFOFRAME_LEN 26
#define ACP_PKT_LEN 9
#define ISRC1_PKT_LEN 16
@ -316,6 +319,23 @@ typedef union _SPD_InfoFrame {
} pktbyte ;
} SPD_InfoFrame ;
// HDR
typedef union _HDR_InfoFrame {
struct {
BYTE Type ;
BYTE Ver ;
BYTE Len ;
BYTE TF ; // vendor name character in 7bit ascii characters
BYTE DESC_ID ; // product description character in 7bit ascii characters
BYTE DESC[24] ;
} info ;
struct {
BYTE HDR_HB[3] ;
BYTE HDR_DB[HDR_INFOFRAME_LEN] ;
} pktbyte ;
} HDR_InfoFrame ;
///////////////////////////////////////////////////////////////////////////
// Using for interface.
///////////////////////////////////////////////////////////////////////////