ronnie
2022-10-14 1504bb53e29d3d46222c0b3ea994fc494b48e153
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
///*****************************************
//  Copyright (C) 2009-2019
//  ITE Tech. Inc. All Rights Reserved
//  Proprietary and Confidential
///*****************************************
//   @file   <hdmitx_sys.h>
//   @author Jau-Chih.Tseng@ite.com.tw
//   @date   2019/01/03
//   @fileversion: ITE_HDMITX_SAMPLE_3.27
//******************************************/
 
#ifndef _HDMITX_SYS_H_
#define _HDMITX_SYS_H_
 
#define I2S 0
#define SPDIF 1
#define TDM 2
 
#ifndef I2S_FORMAT
#define I2S_FORMAT 0x01 // 32bit audio
#endif
 
#ifndef INPUT_SAMPLE_FREQ
   #define INPUT_SAMPLE_FREQ AUDFS_48KHz
#endif //INPUT_SAMPLE_FREQ
 
#ifndef INPUT_SAMPLE_FREQ_HZ
   #define INPUT_SAMPLE_FREQ_HZ 48000L
#endif //INPUT_SAMPLE_FREQ_HZ
 
#ifndef OUTPUT_CHANNEL
   #define OUTPUT_CHANNEL 2
#endif //OUTPUT_CHANNEL
 
#ifndef CNOFIG_INPUT_AUDIO_TYPE
   #define CNOFIG_INPUT_AUDIO_TYPE T_AUDIO_LPCM
   // #define CNOFIG_INPUT_AUDIO_TYPE T_AUDIO_NLPCM
   // #define CNOFIG_INPUT_AUDIO_TYPE T_AUDIO_HBR
#endif //CNOFIG_INPUT_AUDIO_TYPE
 
#ifndef CONFIG_INPUT_AUDIO_INTERFACE
   #define CONFIG_INPUT_AUDIO_INTERFACE I2S
   // #define CONFIG_INPUT_AUDIO_INTERFACE  SPDIF
#endif //CONFIG_INPUT_AUDIO_INTERFACE
 
#ifndef INPUT_SIGNAL_TYPE
#define INPUT_SIGNAL_TYPE 0 // 24 bit sync seperate
#endif
 
////////////////////////////////////////////////////////////////////////////////
// Internal Data Type
////////////////////////////////////////////////////////////////////////////////
 
typedef enum tagHDMI_Video_Type {
   HDMI_Unkown = 0 ,
   HDMI_640x480p60 = 1 ,
   HDMI_480p60,
   HDMI_480p60_16x9,
   HDMI_720p60,
   HDMI_1080i60,
   HDMI_480i60,
   HDMI_480i60_16x9,
   HDMI_1080p60 = 16,
   HDMI_576p50,
   HDMI_576p50_16x9,
   HDMI_720p50,
   HDMI_1080i50,
   HDMI_576i50,
   HDMI_576i50_16x9,
   HDMI_1080p50 = 31,
   HDMI_1080p24,
   HDMI_1080p25,
   HDMI_1080p30,
   HDMI_720p30 = 61,
} HDMI_Video_Type ;
 
typedef enum tagHDMI_Aspec {
   HDMI_4x3 ,
   HDMI_16x9
} HDMI_Aspec;
 
typedef enum tagHDMI_OutputColorMode {
   HDMI_RGB444,
   HDMI_YUV444,
   HDMI_YUV422
} HDMI_OutputColorMode ;
 
typedef enum tagHDMI_Colorimetry {
   HDMI_ITU601,
   HDMI_ITU709
} HDMI_Colorimetry ;
 
struct VideoTiming {
   ULONG VideoPixelClock ;
   BYTE VIC ;
   BYTE pixelrep ;
   BYTE outputVideoMode ;
} ;
 
 
 
typedef enum _TXVideo_State_Type {
   TXVSTATE_Unplug = 0,
   TXVSTATE_HPD,
   TXVSTATE_WaitForMode,
   TXVSTATE_WaitForVStable,
   TXVSTATE_VideoInit,
   TXVSTATE_VideoSetup,
   TXVSTATE_VideoOn,
   TXVSTATE_Reserved
} TXVideo_State_Type ;
 
 
typedef enum _TXAudio_State_Type {
   TXASTATE_AudioOff = 0,
   TXASTATE_AudioPrepare,
   TXASTATE_AudioOn,
   TXASTATE_AudioFIFOFail,
   TXASTATE_Reserved
} TXAudio_State_Type ;
/////////////////////////////////////////
// RX Capability.
/////////////////////////////////////////
typedef struct {
   BYTE b16bit:1 ;
   BYTE b20bit:1 ;
   BYTE b24bit:1 ;
   BYTE Rsrv:5 ;
} LPCM_BitWidth ;
 
typedef enum {
   AUD_RESERVED_0 = 0 ,
   AUD_LPCM,
   AUD_AC3,
   AUD_MPEG1,
   AUD_MP3,
   AUD_MPEG2,
   AUD_AAC,
   AUD_DTS,
   AUD_ATRAC,
   AUD_ONE_BIT_AUDIO,
   AUD_DOLBY_DIGITAL_PLUS,
   AUD_DTS_HD,
   AUD_MAT_MLP,
   AUD_DST,
   AUD_WMA_PRO,
   AUD_RESERVED_15
} AUDIO_FORMAT_CODE ;
 
typedef union {
   struct {
       BYTE channel:3 ;
       BYTE AudioFormatCode:4 ;
       BYTE Rsrv1:1 ;
 
       BYTE b32KHz:1 ;
       BYTE b44_1KHz:1 ;
       BYTE b48KHz:1 ;
       BYTE b88_2KHz:1 ;
       BYTE b96KHz:1 ;
       BYTE b176_4KHz:1 ;
       BYTE b192KHz:1 ;
       BYTE Rsrv2:1 ;
       BYTE ucCode ;
   } s ;
   BYTE uc[3] ;
} AUDDESCRIPTOR ;
 
typedef union {
   struct {
       BYTE FL_FR:1 ;
       BYTE LFE:1 ;
       BYTE FC:1 ;
       BYTE RL_RR:1 ;
       BYTE RC:1 ;
       BYTE FLC_FRC:1 ;
       BYTE RLC_RRC:1 ;
       BYTE Reserve:1 ;
       BYTE Unuse[2] ;
   } s ;
   BYTE uc[3] ;
} SPK_ALLOC ;
 
#define CEA_SUPPORT_UNDERSCAN (1<<7)
#define CEA_SUPPORT_AUDIO (1<<6)
#define CEA_SUPPORT_YUV444 (1<<5)
#define CEA_SUPPORT_YUV422 (1<<4)
#define CEA_NATIVE_MASK 0xF
 
 
#define HDMI_DC_SUPPORT_AI (1<<7)
#define HDMI_DC_SUPPORT_48 (1<<6)
#define HDMI_DC_SUPPORT_36 (1<<5)
#define HDMI_DC_SUPPORT_30 (1<<4)
#define HDMI_DC_SUPPORT_Y444 (1<<3)
#define HDMI_DC_SUPPORT_DVI_DUAL 1
 
typedef union _tag_DCSUPPORT {
   struct {
       BYTE DVI_Dual:1 ;
       BYTE Rsvd:2 ;
       BYTE DC_Y444:1 ;
       BYTE DC_30Bit:1 ;
       BYTE DC_36Bit:1 ;
       BYTE DC_48Bit:1 ;
       BYTE SUPPORT_AI:1 ;
   } info ;
   BYTE uc ;
} DCSUPPORT ;
 
typedef union _LATENCY_SUPPORT{
   struct {
       BYTE Rsvd:6 ;
       BYTE I_Latency_Present:1 ;
       BYTE Latency_Present:1 ;
   } info ;
   BYTE uc ;
} LATENCY_SUPPORT ;
 
#define HDMI_IEEEOUI 0x0c03
#define MAX_VODMODE_COUNT 32
#define MAX_AUDDES_COUNT 4
 
typedef struct _RX_CAP{
   BYTE VideoMode ;
   BYTE NativeVDOMode ;
   BYTE VDOMode[8] ;
   BYTE AUDDesCount ;
   AUDDESCRIPTOR AUDDes[MAX_AUDDES_COUNT] ;
   BYTE PA[2] ;
   ULONG IEEEOUI ;
   DCSUPPORT dc ;
   BYTE MaxTMDSClock ;
   LATENCY_SUPPORT lsupport ;
   SPK_ALLOC   SpeakerAllocBlk ;
   BYTE ValidCEA:1 ;
   BYTE ValidHDMI:1 ;
   BYTE Valid3D:1 ;
} RX_CAP ;
 
///////////////////////////////////////////////////////////////////////
// Output Mode Type
///////////////////////////////////////////////////////////////////////
 
#define RES_ASPEC_4x3 0
#define RES_ASPEC_16x9 1
#define F_MODE_REPT_NO 0
#define F_MODE_REPT_TWICE 1
#define F_MODE_REPT_QUATRO 3
#define F_MODE_CSC_ITU601 0
#define F_MODE_CSC_ITU709 1
 
void InitHDMITX_Variable();
void HDMITX_ChangeDisplayOption(HDMI_Video_Type VideoMode, HDMI_OutputColorMode OutputColorMode);
void HDMITX_SetOutput();
void HDMITX_DevLoopProc();
void ConfigfHdmiVendorSpecificInfoFrame(BYTE _3D_Stru);
void HDMITX_ChangeAudioOption(BYTE Option, BYTE channelNum, BYTE AudioFs);
void HDMITX_SetAudioOutput();
void HDMITX_ChangeColorDepth(BYTE colorDepth);
 
#endif // _HDMITX_SYS_H_