LibMWCapture  3.3.1
LibMWCapture Documentation
MWHDMIPackets.h
Go to the documentation of this file.
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 {
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 {
124 
131 
135 
140 
141  BYTE byVIC : 7;
143 
147 
153 
157 
162 
167 
172 
177 
182 
185 
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
223 
227 
230 
232 
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 
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 {
289 
294 
297 
301 
302 typedef struct _HDMI14B_VS_DATA {
305 
306  union {
309  };
311 
312 // Generic VS Infoframe
315 
316  union {
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 {
344 
345 typedef struct _HDMI_INFOFRAME_PACKET {
348 
349  union {
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 
struct _HDMI_INFOFRAME_PACKET HDMI_INFOFRAME_PACKET
#define WORD
Definition: WinTypes.h:23
HDMI_HDR_INFOFRAME_PAYLOAD hdrInfoFramePayload
struct _HDMI14B_VS_DATA_EXT_RES HDMI14B_VS_DATA_EXT_RES
struct _HDMI_AVI_INFOFRAME_PAYLOAD HDMI_AVI_INFOFRAME_PAYLOAD
#define DWORD
Definition: WinTypes.h:31
enum _HDMI_PIXEL_ENCODING HDMI_PXIEL_ENCODING
HDMI_VS_INFOFRAME_PAYLOAD vsInfoFramePayload
struct _HDMI14B_VS_DATA HDMI14B_VS_DATA
HDMI14B_VS_DATA vsDataHDMI14B
#define BYTE
Definition: WinTypes.h:15
#define FALSE
Definition: WinTypes.h:56
struct _HDMI14B_VS_DATA_3D_FORMAT HDMI14B_VS_DATA_3D_FORMAT
#define BOOLEAN
Definition: WinTypes.h:50
HDMI14B_VS_DATA_3D_FORMAT vsData3DFormat
HDMI_AUDIO_INFOFRAME_PAYLOAD audioInfoFramePayload
HDMI_AVI_INFOFRAME_PAYLOAD aviInfoFramePayload
HDMI_INFOFRAME_HEADER header
struct _HDMI_HDR_INFOFRAME_PAYLOAD HDMI_HDR_INFOFRAME_PAYLOAD
struct _HDMI_VIC_FORMAT HDMI_VIC_FORMAT
struct _HDMI_SPD_INFOFRAME_PAYLOAD HDMI_SPD_INFOFRAME_PAYLOAD
HDMI_SPD_INFOFRAME_PAYLOAD spdInfoFramePayload
struct _HDMI_AUDIO_INFOFRAME_PAYLOAD HDMI_AUDIO_INFOFRAME_PAYLOAD
struct _HDMI_INFOFRAME_HEADER HDMI_INFOFRAME_HEADER
HDMI14B_VS_DATA_EXT_RES vsDataExtRes
#define TRUE
Definition: WinTypes.h:53
#define CHAR
Definition: WinTypes.h:19
_HDMI_PIXEL_ENCODING
struct _HDMI_VS_INFOFRAME_PAYLOAD HDMI_VS_INFOFRAME_PAYLOAD