My Project
 All Classes
MWHDMIPackets.h
1 // CONFIDENTIAL and PROPRIETARY software of Magewell Electronics Co., Ltd.
3 // Copyright (c) 2011-2014 Magewell Electronics Co., Ltd. (Nanjing)
4 // All rights reserved.
5 // This copyright notice MUST be reproduced on all authorized copies.
7 
8 #pragma once
9 
10 #pragma pack(push)
11 #pragma pack(1)
12 
13 // AVI infoframe
14 #define HDMI_EC_XVYCC601 0x00
15 #define HDMI_EC_XVYCC709 0x01
16 #define HDMI_EC_SYCC601 0x02
17 #define HDMI_EC_ADOBEYCC601 0x03
18 #define HDMI_EC_ADOBERGB 0x04
19 
20 #define HDMI_YQ_LIMITED_RANGE 0x00
21 #define HDMI_YQ_FULL_RANGE 0x01
22 
23 #define HDMI_CN_NONE_OR_GRAPHICS 0x00
24 #define HDMI_CN_PHOTO 0x01
25 #define HDMI_CN_CINEMA 0x02
26 #define HDMI_CN_GAME 0x03
27 
28 typedef struct _HDMI_VIC_FORMAT {
29  WORD cx;
30  WORD cy;
31  BOOLEAN bInterlaced;
32  WORD wAspectX;
33  WORD wAspectY;
34  DWORD dwFrameDuration;
36 
37 static const HDMI_VIC_FORMAT g_aHDMIVICFormats[] = {
38  /* 0 */ { 0, 0, FALSE, 0, 0, 0, },
39  /* 1 */ { 640, 480, FALSE, 4, 3, 166667, },
40  /* 2 */ { 720, 480, FALSE, 4, 3, 166667, },
41  /* 3 */ { 720, 480, FALSE, 16, 9, 166667, },
42  /* 4 */ { 1280, 720, FALSE, 16, 9, 166667, },
43  /* 5 */ { 1920, 1080, TRUE, 16, 9, 333333, },
44  /* 6 */ { 720, 480, TRUE, 4, 3, 333333, },
45  /* 7 */ { 720, 480, TRUE, 16, 9, 333333, },
46  /* 8 */ { 720, 240, FALSE, 4, 3, 166667, },
47  /* 9 */ { 720, 240, FALSE, 16, 9, 166667, },
48  /* 10 */ { 2880, 480, TRUE, 4, 3, 333333, },
49  /* 11 */ { 2880, 480, TRUE, 16, 9, 333333, },
50  /* 12 */ { 2880, 240, FALSE, 4, 3, 166667, },
51  /* 13 */ { 2880, 240, FALSE, 16, 9, 166667, },
52  /* 14 */ { 1440, 480, FALSE, 4, 3, 166667, },
53  /* 15 */ { 1440, 480, FALSE, 16, 9, 166667, },
54  /* 16 */ { 1920, 1080, FALSE, 16, 9, 166667, },
55  /* 17 */ { 720, 576, FALSE, 4, 3, 200000, },
56  /* 18 */ { 720, 576, FALSE, 16, 9, 200000, },
57  /* 19 */ { 1280, 720, FALSE, 16, 9, 200000, },
58  /* 20 */ { 1920, 1080, TRUE, 16, 9, 400000, },
59  /* 21 */ { 720, 576, TRUE, 4, 3, 400000, },
60  /* 22 */ { 720, 576, TRUE, 16, 9, 400000, },
61  /* 23 */ { 720, 288, FALSE, 4, 3, 200000, },
62  /* 24 */ { 720, 288, FALSE, 16, 9, 200000, },
63  /* 25 */ { 2880, 576, TRUE, 4, 3, 400000, },
64  /* 26 */ { 2880, 576, TRUE, 4, 3, 400000, },
65  /* 27 */ { 2880, 288, FALSE, 4, 3, 200000, },
66  /* 28 */ { 2880, 288, FALSE, 16, 9, 200000, },
67  /* 29 */ { 1440, 576, FALSE, 4, 3, 200000, },
68  /* 30 */ { 1440, 576, FALSE, 16, 9, 200000, },
69  /* 31 */ { 1920, 1080, FALSE, 16, 9, 200000, },
70  /* 32 */ { 1920, 1080, FALSE, 16, 9, 416667, },
71  /* 33 */ { 1920, 1080, FALSE, 16, 9, 400000, },
72  /* 34 */ { 1920, 1080, FALSE, 16, 9, 333333, },
73  /* 35 */ { 2880, 480, FALSE, 4, 3, 166667, },
74  /* 36 */ { 2880, 480, FALSE, 16, 9, 166667, },
75  /* 37 */ { 2880, 576, FALSE, 4, 3, 200000, },
76  /* 38 */ { 2880, 576, FALSE, 16, 9, 200000, },
77  /* 39 */ { 1920, 1080, TRUE, 16, 9, 400000, },
78  /* 40 */ { 1920, 1080, TRUE, 16, 9, 200000, },
79  /* 41 */ { 1280, 720, FALSE, 16, 9, 100000, },
80  /* 42 */ { 720, 576, FALSE, 4, 3, 100000, },
81  /* 43 */ { 720, 576, FALSE, 16, 9, 100000, },
82  /* 44 */ { 720, 576, TRUE, 4, 3, 200000, },
83  /* 45 */ { 720, 576, TRUE, 16, 9, 200000, },
84  /* 46 */ { 1920, 1080, TRUE, 16, 9, 166667, },
85  /* 47 */ { 1280, 720, FALSE, 16, 9, 83333, },
86  /* 48 */ { 720, 480, FALSE, 4, 3, 83333, },
87  /* 49 */ { 720, 480, FALSE, 16, 9, 83333, },
88  /* 50 */ { 720, 480, TRUE, 4, 3, 166667, },
89  /* 51 */ { 720, 480, TRUE, 16, 9, 166667, },
90  /* 52 */ { 720, 576, FALSE, 4, 3, 50000, },
91  /* 53 */ { 720, 576, FALSE, 16, 9, 50000, },
92  /* 54 */ { 720, 576, TRUE, 4, 3, 100000, },
93  /* 55 */ { 720, 576, TRUE, 16, 9, 100000, },
94  /* 56 */ { 720, 480, FALSE, 4, 3, 41667, },
95  /* 57 */ { 720, 480, FALSE, 16, 9, 41667, },
96  /* 58 */ { 720, 480, TRUE, 4, 3, 83333, },
97  /* 59 */ { 720, 480, TRUE, 16, 9, 83333, },
98  /* 60 */ { 1280, 720, FALSE, 16, 9, 416667, },
99  /* 61 */ { 1280, 720, FALSE, 16, 9, 400000, },
100  /* 62 */ { 1280, 720, FALSE, 16, 9, 333333, },
101  /* 63 */ { 1920, 1080, FALSE, 16, 9, 83333, },
102  /* 64 */ { 1920, 1080, FALSE, 16, 9, 100000 },
103 };
104 
105 static const HDMI_VIC_FORMAT g_aHDMIExtVICFormats[] = {
106  /* 0 */ { 0, 0, FALSE, 0, 0, 0, },
107  /* 1 */ { 3840, 2160, FALSE, 16, 9, 333333, },
108  /* 2 */ { 3840, 2160, FALSE, 16, 9, 400000, },
109  /* 3 */ { 3840, 2160, FALSE, 16, 9, 416667, },
110  /* 4 */ { 4096, 2160, FALSE, 16, 9, 416667 },
111 };
112 
113 static const BYTE g_abyDefaultYUV709VICs[] = {
114  0, 1, 4, 5, 16, 19, 20, 31, 32, 33, 34, 39, 40, 46, 47, 60, 61, 62, 63, 64
115 };
116 
117 // byRGB_YCbCr
118 typedef enum _HDMI_PIXEL_ENCODING {
119  HDMI_ENCODING_RGB_444 = 0,
120  HDMI_ENCODING_YUV_422 = 1,
121  HDMI_ENCODING_YUV_444 = 2,
122  HDMI_ENCODING_YUV_420 = 3
123 } HDMI_PXIEL_ENCODING;
124 
126  BYTE byScanInfo : 2;
127  BYTE byBarDataPresent : 2;
128  BYTE byActiveFormatInfoPresent : 1;
129  BYTE byRGB_YCbCr : 2;
130  BYTE byFutureUseByte1 : 1;
131 
132  BYTE byActivePortionAspectRatio : 4;
133  BYTE byCodedFrameAspectRatio : 2;
134  BYTE byColorimetry : 2;
135 
136  BYTE byNonUniformPictureScaling : 2;
137  BYTE byRGBQuantizationRange : 2;
138  BYTE byExtendedColorimetry : 3;
139  BYTE byITContent : 1;
140 
141  BYTE byVIC : 7;
142  BYTE byFutureUseByte4 : 1;
143 
144  BYTE byPixelRepetitionFactor : 4;
145  BYTE byITContentType : 2;
146  BYTE byYCCQuantizationRange : 2;
147 
148  WORD wEndOfTopBar;
149  WORD wStartOfBottomBar;
150  WORD wEndOfLeftBar;
151  WORD wStartOfRightBar;
153 
155  BYTE byEOTF;
156  BYTE byMetadataDescriptorID;
157 
158  BYTE display_primaries_lsb_x0;
159  BYTE display_primaries_msb_x0;
160  BYTE display_primaries_lsb_y0;
161  BYTE display_primaries_msb_y0;
162 
163  BYTE display_primaries_lsb_x1;
164  BYTE display_primaries_msb_x1;
165  BYTE display_primaries_lsb_y1;
166  BYTE display_primaries_msb_y1;
167 
168  BYTE display_primaries_lsb_x2;
169  BYTE display_primaries_msb_x2;
170  BYTE display_primaries_lsb_y2;
171  BYTE display_primaries_msb_y2;
172 
173  BYTE white_point_lsb_x;
174  BYTE white_point_msb_x;
175  BYTE white_point_lsb_y;
176  BYTE white_point_msb_y;
177 
178  BYTE max_display_mastering_lsb_luminance;
179  BYTE max_display_mastering_msb_luminance;
180  BYTE min_display_mastering_lsb_luminance;
181  BYTE min_display_mastering_msb_luminance;
182 
183  BYTE maximum_content_light_level_lsb;
184  BYTE maximum_content_light_level_msb;
185 
186  BYTE maximum_frame_average_light_level_lsb;
187  BYTE maximum_frame_average_light_level_msb;
189 
190 
191 // Audio infoframe
192 #define HDMI_AUDIO_CODING_TYPE_STREAM 0x00
193 #define HDMI_AUDIO_CODING_TYPE_PCM 0x01
194 #define HDMI_AUDIO_CODING_TYPE_AC3 0x02
195 #define HDMI_AUDIO_CODING_TYPE_MPEG1 0x03
196 #define HDMI_AUDIO_CODING_TYPE_MP3 0x04
197 #define HDMI_AUDIO_CODING_TYPE_MPEG2 0x05
198 #define HDMI_AUDIO_CODING_TYPE_AAC_LC 0x06
199 #define HDMI_AUDIO_CODING_TYPE_DTS 0x07
200 #define HDMI_AUDIO_CODING_TYPE_ATRAC 0x08
201 #define HDMI_AUDIO_CODING_TYPE_DSD 0x09
202 #define HDMI_AUDIO_CODING_TYPE_EAC3 0x0A
203 #define HDMI_AUDIO_CODING_TYPE_DTS_HD 0x0B
204 
205 #define HDMI_AUDIO_SAMPLE_SIZE_STREAM 0x00
206 #define HDMI_AUDIO_SAMPLE_SIZE_16BIT 0x01
207 #define HDMI_AUDIO_SAMPLE_SIZE_20BIT 0x02
208 #define HDMI_AUDIO_SAMPLE_SIZE_24BIT 0x03
209 
210 #define HDMI_AUDIO_SAMPLE_RATE_STREAM 0x00
211 #define HDMI_AUDIO_SAMPLE_RATE_32000 0x01
212 #define HDMI_AUDIO_SAMPLE_RATE_44100 0x02
213 #define HDMI_AUDIO_SAMPLE_RATE_48000 0x03
214 #define HDMI_AUDIO_SAMPLE_RATE_88200 0x04
215 #define HDMI_AUDIO_SAMPLE_RATE_96000 0x05
216 #define HDMI_AUDIO_SAMPLE_RATE_176400 0x06
217 #define HDMI_AUDIO_SAMPLE_RATE_192000 0x07
218 
220  BYTE byChannelCount : 3; // +1 for channel count
221  BYTE byReserved1 : 1;
222  BYTE byAudioCodingType : 4;
223 
224  BYTE bySampleSize : 2;
225  BYTE bySampleFrequency : 3;
226  BYTE byReserved2 : 3;
227 
228  BYTE byAudioCodingExtensionType : 5;
229  BYTE byReserved3 : 3;
230 
231  BYTE byChannelAllocation;
232 
233  BYTE byLFEPlaybackLevel : 2;
234  BYTE byReserved4 : 1;
235  BYTE byLevelShiftValue : 4;
236  BYTE byDownMixInhibitFlag : 1;
238 
239 // SPD Infoframe
240 #define HDMI_SPD_SORUCE_UNKOWN 0x00
241 #define HDMI_SPD_SORUCE_DIGITAL_STB 0x01
242 #define HDMI_SPD_SORUCE_DVD_PLAYER 0x02
243 #define HDMI_SPD_SORUCE_D_VHS 0x03
244 #define HDMI_SPD_SORUCE_HDD_RECORDER 0x04
245 #define HDMI_SPD_SORUCE_DVC 0x05
246 #define HDMI_SPD_SORUCE_DSC 0x06
247 #define HDMI_SPD_SORUCE_VIDEO_CD 0x07
248 #define HDMI_SPD_SORUCE_GAME 0x08
249 #define HDMI_SPD_SORUCE_PC_GENERAL 0x09
250 #define HDMI_SPD_SORUCE_BLUE_RAY_DISC 0x0A
251 #define HDMI_SPD_SORUCE_SUPER_AUDIO_CD 0x0B
252 #define HDMI_SPD_SORUCE_HD_DVD 0x0C
253 #define HDMI_SPD_SORUCE_PMP 0x0D
254 
256  CHAR achVendorName[8];
257  CHAR achProductDescription[16];
258  BYTE bySourceInformation;
260 
261 // HDMI 1.4b VS Infoframe
262 #define HDMI14B_VS_REGISTRATION_ID 0x000C03
263 
264 #define HDMI14B_VS_FORMAT_NONE 0x00
265 #define HDMI14B_VS_FORMAT_EXT_RES 0x01
266 #define HDMI14B_VS_FORMAT_3D_FORMAT 0x02
267 
268 // by3DStructure
269 #define HDMI14B_3DS_FRAME_PACKING 0x00
270 #define HDMI14B_3DS_FIELD_ALTERNATIVE 0x01
271 #define HDMI14B_3DS_LINE_ALTERNATIVE 0x02
272 #define HDMI14B_3DS_SIDE_BY_SIDE_FULL 0x03
273 #define HDMI14B_3DS_TOP_AND_BOTTOM 0x06
274 #define HDMI14B_3DS_SIDE_BY_SIDE_HALF 0x08
275 
276 // by3DExtData
277 #define HDMI_SUB_SAMPLING_HORIZONTAL_00 0x00
278 #define HDMI_SUB_SAMPLING_HORIZONTAL_01 0x01
279 #define HDMI_SUB_SAMPLING_HORIZONTAL_10 0x02
280 #define HDMI_SUB_SAMPLING_HORIZONTAL_11 0x03
281 #define HDMI_SUB_SAMPLING_QUINCUNX_ODD_ODD 0x04
282 #define HDMI_SUB_SAMPLING_QUINCUNX_ODD_EVEN 0x05
283 #define HDMI_SUB_SAMPLING_QUINCUNX_EVEN_ODD 0x06
284 #define HDMI_SUB_SAMPLING_QUINCUNX_EVEN_EVEN 0x07
285 
286 typedef struct _HDMI14B_VS_DATA_EXT_RES {
287  BYTE byHDMI_VIC;
289 
291  BYTE byReserved1 : 3;
292  BYTE by3DMetaPresent : 1;
293  BYTE by3DStructure : 4;
294 
295  BYTE byReserved2 : 4;
296  BYTE by3DExtData : 4;
297 
298  BYTE by3DMetadataLength : 5;
299  BYTE by3DMetadataType : 3;
301 
302 typedef struct _HDMI14B_VS_DATA {
303  BYTE byReserved1 : 5;
304  BYTE byHDMIVideoFormat : 3;
305 
306  union {
307  HDMI14B_VS_DATA_EXT_RES vsDataExtRes;
308  HDMI14B_VS_DATA_3D_FORMAT vsData3DFormat;
309  };
311 
312 // Generic VS Infoframe
314  BYTE abyRegistrationId[3];
315 
316  union {
317  BYTE abyVSData[24];
318  HDMI14B_VS_DATA vsDataHDMI14B;
319  };
321 
322 static inline DWORD hdmi_payload_GetRegistrationId(HDMI_VS_INFOFRAME_PAYLOAD *payload)
323 {
324  return payload->abyRegistrationId[0] | (payload->abyRegistrationId[1] << 8)
325  | (payload->abyRegistrationId[2] << 16);
326 }
327 
328 // Generic Infoframe
329 #define HDMI_INFOFRAME_TYPE_VS 0x81
330 #define HDMI_INFOFRAME_TYPE_AVI 0x82
331 #define HDMI_INFOFRAME_TYPE_SPD 0x83
332 #define HDMI_INFOFRAME_TYPE_AUDIO 0x84
333 #define HDMI_INFOFRAME_TYPE_MS 0x85
334 #define HDMI_INFOFRAME_TYPE_VBI 0x86
335 #define HDMI_INFOFRAME_TYPE_HDR 0x87
336 
337 
338 typedef struct _HDMI_INFOFRAME_HEADER {
339  BYTE byPacketType;
340  BYTE byVersion;
341  BYTE byLength : 5;
342  BYTE byReservedZero : 3;
344 
345 typedef struct _HDMI_INFOFRAME_PACKET {
346  HDMI_INFOFRAME_HEADER header;
347  BYTE byChecksum;
348 
349  union {
350  BYTE abyPayload[27];
351  HDMI_AVI_INFOFRAME_PAYLOAD aviInfoFramePayload;
352  HDMI_AUDIO_INFOFRAME_PAYLOAD audioInfoFramePayload;
353  HDMI_SPD_INFOFRAME_PAYLOAD spdInfoFramePayload;
354  HDMI_VS_INFOFRAME_PAYLOAD vsInfoFramePayload;
355  HDMI_HDR_INFOFRAME_PAYLOAD hdrInfoFramePayload;
356  };
358 
359 static inline BOOLEAN hdmi_info_IsValid(HDMI_INFOFRAME_PACKET *info)
360 {
361  unsigned char *pbyData = (unsigned char *)&info->header;
362  BYTE cbData = info->header.byLength + sizeof(info->header) + 1;
363 
364  BYTE bySum = 0;
365  while (cbData-- != 0)
366  bySum += *pbyData++;
367 
368  return (bySum == 0);
369 }
370 
371 #pragma pack(pop)
372 
Definition: MWHDMIPackets.h:219
Definition: MWHDMIPackets.h:125
Definition: MWHDMIPackets.h:154
Definition: MWHDMIPackets.h:313
Definition: MWHDMIPackets.h:286
Definition: MWHDMIPackets.h:302
Definition: MWHDMIPackets.h:338
Definition: MWHDMIPackets.h:28
Definition: MWHDMIPackets.h:255
Definition: MWHDMIPackets.h:290
Definition: MWHDMIPackets.h:345