My Project
 All Classes
MWCaptureExtension.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 #include <stdint.h>
11 #include "WinTypes.h"
12 #include "MWCommon.h"
13 #include "MWSMPTE.h"
14 #include "MWIEC60958.h"
15 #include "MWHDMIPackets.h"
16 
17 #ifndef _MAX_PATH
18 #define _MAX_PATH (512)
19 #endif
20 
21 #pragma pack(push)
22 #pragma pack(1)
23 
24 #ifdef __cplusplus
25 extern "C"
26 {
27 #endif
28 
29 #ifndef HPCICHANNEL
30 #define HPCICHANNEL int
31 #endif
32 
33 #ifndef HCHANNEL
34 #define HCHANNEL void *
35 #endif
36 
37 #ifndef MWCAP_PTR64
38 #define MWCAP_PTR64 MWCAP_PTR
39 #endif
40 
41 #ifndef MWHANDLE
42 #define MWHANDLE MWCAP_PTR
43 #endif
44 
45 #ifndef LPBYTE
46 #define LPBYTE unsigned char*
47 #endif
48 
49 #ifndef HTIMER
50 #define HTIMER MWCAP_PTR
51 #endif
52 
53 #ifndef HNOTIFY
54 #define HNOTIFY MWCAP_PTR
55 #endif
56 
57 #ifndef HOSD
58 #define HOSD MWCAP_PTR
59 #endif
60 
61 #ifndef LPVOID
62 #define LPVOID void *
63 #endif
64 
65 #ifndef ULONG
66 #define ULONG unsigned long
67 #endif
68 
69 #ifndef HANDLE64
70 #define HANDLE64 MWCAP_PTR
71 #endif
72 
73 #ifdef __cplusplus
74 }
75 #endif
76 
78 // Magewell Capture Extensions
79 
81 // Data structs
82 typedef CHAR MWCAP_BOOL;
83 
84 typedef union _LARGE_INTEGER {
85  struct {
86  DWORD LowPart;
87  DWORD HighPart;
88  };
89  struct {
90  DWORD LowPart;
91  DWORD HighPart;
92  } u;
93  LONGLONG QuadPart;
95 
96 typedef enum _MW_RESULT_ {
97  MW_SUCCEEDED = 0x00,
98  MW_FAILED,
99  MW_ENODATA,
100  MW_INVALID_PARAMS
101 } MW_RESULT;
102 
103 #define INPUT_SOURCE(type, index) (((type) << 8) | ((index) & 0xFF))
104 #define INPUT_TYPE(source) ((source) >> 8)
105 #define INPUT_INDEX(source) ((source) & 0xFF)
106 
107 typedef enum _MWCAP_PRODUCT_ID {
108  MWCAP_PRODUCT_ID_PRO_CAPTURE_AIO = 0x00000102,
109  MWCAP_PRODUCT_ID_PRO_CAPTURE_DVI = 0x00000103,
110  MWCAP_PRODUCT_ID_PRO_CAPTURE_HDMI = 0x00000104,
111  MWCAP_PRODUCT_ID_PRO_CAPTURE_SDI = 0x00000105,
112  MWCAP_PRODUCT_ID_PRO_CAPTURE_DUAL_SDI = 0x00000106,
113  MWCAP_PRODUCT_ID_PRO_CAPTURE_DUAL_DVI = 0x00000107,
114  MWCAP_PRODUCT_ID_PRO_CAPTURE_DUAL_HDMI = 0x00000108,
115  MWCAP_PRODUCT_ID_PRO_CAPTURE_QUAD_SDI = 0x00000109,
116  MWCAP_PRODUCT_ID_PRO_CAPTURE_QUAD_HDMI = 0x00000110,
117  MWCAP_PRODUCT_ID_PRO_CAPTURE_MINI_HDMI = 0x00000111,
118  MWCAP_PRODUCT_ID_PRO_CAPTURE_HDMI_4K = 0x00000112,
119  MWCAP_PRODUCT_ID_PRO_CAPTURE_MINI_SDI = 0x00000113,
120  MWCAP_PRODUCT_ID_PRO_CAPTURE_AIO_4K_PLUS = 0x00000114,
121  MWCAP_PRODUCT_ID_PRO_CAPTURE_HDMI_4K_PLUS = 0x00000115,
122  MWCAP_PRODUCT_ID_PRO_CAPTURE_DVI_4K = 0x00000116,
123  MWCAP_PRODUCT_ID_PRO_CAPTURE_AIO_4K = 0x00000117,
124  MWCAP_PRODUCT_ID_PRO_CAPTURE_SDI_4K_PLUS = 0x00000118,
125  MWCAP_PRODUCT_ID_PRO_CAPTURE_DUAL_HDMI_4K_PLUS = 0x00000119,
126  MWCAP_PRODUCT_ID_PRO_CAPTURE_DUAL_SDI_4K_PLUS = 0x00000120,
127 
128  MWCAP_PRODUCT_ID_ECO_CAPTURE_OCTA_SDI = 0x00000150,
129  MWCAP_PRODUCT_ID_ECO_CAPTURE_DUAL_HDMI_M2 = 0x00000151,
130  MWCAP_PRODUCT_ID_ECO_CAPTURE_HDMI_4K_M2 = 0x00000152,
131  MWCAP_PRODUCT_ID_ECO_CAPTURE_DUAL_SDI_M2 = 0x00000153,
132  MWCAP_PRODUCT_ID_ECO_CAPTURE_QUAD_SDI_M2 = 0x00000154,
133 
134  MWCAP_PRODUCT_ID_USB_CAPTURE_HDMI_PLUS = 0x00000204,
135  MWCAP_PRODUCT_ID_USB_CAPTURE_SDI_PLUS = 0x00000205,
136  MWCAP_PRODUCT_ID_USB_CAPTURE_HDMI = 0x00000206,
137  MWCAP_PRODUCT_ID_USB_CAPTURE_SDI = 0x00000207,
138  MWCAP_PRODUCT_ID_USB_CAPTURE_DVI = 0x00000208,
139  MWCAP_PRODUCT_ID_USB_CAPTURE_HDMI_4K = 0x00000209,
140  MWCAP_PRODUCT_ID_USB_CAPTURE_SDI_4K = 0x00000210,
141  MWCAP_PRODUCT_ID_USB_CAPTURE_AIO = 0x00000211,
142  MWCAP_PRODUCT_ID_USB_CAPTURE_AIO_4K = 0x00000212
143 } MWCAP_PRODUCT_ID;
144 
145 // A/V input type & source
146 typedef enum _MWCAP_VIDEO_INPUT_TYPE {
147  MWCAP_VIDEO_INPUT_TYPE_NONE = 0x00,
148  MWCAP_VIDEO_INPUT_TYPE_HDMI = 0x01,
149  MWCAP_VIDEO_INPUT_TYPE_VGA = 0x02,
150  MWCAP_VIDEO_INPUT_TYPE_SDI = 0x04,
151  MWCAP_VIDEO_INPUT_TYPE_COMPONENT = 0x08,
152  MWCAP_VIDEO_INPUT_TYPE_CVBS = 0x10,
153  MWCAP_VIDEO_INPUT_TYPE_YC = 0x20
154 } MWCAP_VIDEO_INPUT_TYPE;
155 
156 typedef enum _MWCAP_AUDIO_INPUT_TYPE {
157  MWCAP_AUDIO_INPUT_TYPE_NONE = 0x00,
158  MWCAP_AUDIO_INPUT_TYPE_HDMI = 0x01,
159  MWCAP_AUDIO_INPUT_TYPE_SDI = 0x02,
160  MWCAP_AUDIO_INPUT_TYPE_LINE_IN = 0x04,
161  MWCAP_AUDIO_INPUT_TYPE_MIC_IN = 0x08
162 } MWCAP_AUDIO_INPUT_TYPE;
163 
164 typedef enum _MWCAP_PCIE_LINK_TYPE {
165  MWCAP_PCIE_LINK_GEN_1 = 0x01,
166  MWCAP_PCIE_LINK_GEN_2 = 0x02,
167  MWCAP_PCIE_LINK_GEN_3 = 0x04,
168  MWCAP_PCIE_LINK_GEN_4 = 0x08
169 } MWCAP_PCIE_LINK_TYPE;
170 
171 typedef enum _MWCAP_VIDEO_TIMING_TYPE {
172  MWCAP_VIDEO_TIMING_NONE = 0x00000000,
173  MWCAP_VIDEO_TIMING_LEGACY = 0x00000001,
174  MWCAP_VIDEO_TIMING_DMT = 0x00000002,
175  MWCAP_VIDEO_TIMING_CEA = 0x00000004,
176  MWCAP_VIDEO_TIMING_GTF = 0x00000008,
177  MWCAP_VIDEO_TIMING_CVT = 0x00000010,
178  MWCAP_VIDEO_TIMING_CVT_RB = 0x00000020,
179  MWCAP_VIDEO_TIMING_FAILSAFE = 0x00002000
180 } MWCAP_VIDEO_TIMING_TYPE;
181 
182 typedef enum _MWCAP_VIDEO_COLOR_FORMAT {
183  MWCAP_VIDEO_COLOR_FORMAT_UNKNOWN = 0x00,
184  MWCAP_VIDEO_COLOR_FORMAT_RGB = 0x01,
185  MWCAP_VIDEO_COLOR_FORMAT_YUV601 = 0x02,
186  MWCAP_VIDEO_COLOR_FORMAT_YUV709 = 0x03,
187  MWCAP_VIDEO_COLOR_FORMAT_YUV2020 = 0x04,
188  MWCAP_VIDEO_COLOR_FORMAT_YUV2020C = 0x05 // Constant luminance, not supported yet.
189 } MWCAP_VIDEO_COLOR_FORMAT;
190 
191 typedef enum _MWCAP_VIDEO_QUANTIZATION_RANGE {
192  MWCAP_VIDEO_QUANTIZATION_UNKNOWN = 0x00,
193  MWCAP_VIDEO_QUANTIZATION_FULL = 0x01, // Black level: 0, White level: 255/1023/4095/65535
194  MWCAP_VIDEO_QUANTIZATION_LIMITED = 0x02 // Black level: 16/64/256/4096, White level: 235(240)/940(960)/3760(3840)/60160(61440)
195 } MWCAP_VIDEO_QUANTIZATION_RANGE;
196 
197 typedef enum _MWCAP_VIDEO_SATURATION_RANGE {
198  MWCAP_VIDEO_SATURATION_UNKNOWN = 0x00,
199  MWCAP_VIDEO_SATURATION_FULL = 0x01, // Min: 0, Max: 255/1023/4095/65535
200  MWCAP_VIDEO_SATURATION_LIMITED = 0x02, // Min: 16/64/256/4096, Max: 235(240)/940(960)/3760(3840)/60160(61440)
201  MWCAP_VIDEO_SATURATION_EXTENDED_GAMUT = 0x03 // Min: 1/4/16/256, Max: 254/1019/4079/65279
202 } MWCAP_VIDEO_SATURATION_RANGE;
203 
204 typedef enum _MWCAP_VIDEO_FRAME_TYPE {
205  MWCAP_VIDEO_FRAME_2D = 0x00,
206  MWCAP_VIDEO_FRAME_3D_TOP_AND_BOTTOM_FULL = 0x01,
207  MWCAP_VIDEO_FRAME_3D_TOP_AND_BOTTOM_HALF = 0x02,
208  MWCAP_VIDEO_FRAME_3D_SIDE_BY_SIDE_FULL = 0x03,
209  MWCAP_VIDEO_FRAME_3D_SIDE_BY_SIDE_HALF = 0x04
210 } MWCAP_VIDEO_FRAME_TYPE;
211 
212 typedef enum _MWCAP_VIDEO_DEINTERLACE_MODE {
213  MWCAP_VIDEO_DEINTERLACE_WEAVE = 0x00,
214  MWCAP_VIDEO_DEINTERLACE_BLEND = 0x01,
215  MWCAP_VIDEO_DEINTERLACE_TOP_FIELD = 0x02,
216  MWCAP_VIDEO_DEINTERLACE_BOTTOM_FIELD = 0x03
217 } MWCAP_VIDEO_DEINTERLACE_MODE;
218 
219 typedef enum _MWCAP_VIDEO_ASPECT_RATIO_CONVERT_MODE {
220  MWCAP_VIDEO_ASPECT_RATIO_IGNORE = 0x00,
221  MWCAP_VIDEO_ASPECT_RATIO_CROPPING = 0x01,
222  MWCAP_VIDEO_ASPECT_RATIO_PADDING = 0x02
223 } MWCAP_VIDEO_ASPECT_RATIO_CONVERT_MODE;
224 
225 typedef enum _MWCAP_VIDEO_SYNC_TYPE {
226  VIDEO_SYNC_ALL = 0x07,
227  VIDEO_SYNC_HS_VS = 0x01,
228  VIDEO_SYNC_CS = 0x02,
229  VIDEO_SYNC_EMBEDDED = 0x04
230 } MWCAP_VIDEO_SYNC_TYPE;
231 
232 typedef struct _MWCAP_VIDEO_SYNC_INFO {
233  BYTE bySyncType;
234  BOOLEAN bHSPolarity;
235  BOOLEAN bVSPolarity;
236  BOOLEAN bInterlaced;
237  DWORD dwFrameDuration;
238  WORD wVSyncLineCount;
239  WORD wFrameLineCount;
241 
242 typedef struct _MWCAP_VIDEO_TIMING {
243  DWORD dwType;
244  DWORD dwPixelClock;
245  BOOLEAN bInterlaced;
246  BYTE bySyncType;
247  BOOLEAN bHSPolarity;
248  BOOLEAN bVSPolarity;
249  WORD wHActive;
250  WORD wHFrontPorch;
251  WORD wHSyncWidth;
252  WORD wHBackPorch;
253  WORD wVActive;
254  WORD wVFrontPorch;
255  WORD wVSyncWidth;
256  WORD wVBackPorch;
258 
260  WORD wAspectX;
261  WORD wAspectY;
262  WORD x;
263  WORD y;
264  WORD cx;
265  WORD cy;
266  WORD cxTotal;
267  BYTE byClampPos;
269 
270 typedef struct _MWCAP_SIZE {
271  WORD cx;
272  WORD cy;
273 } MWCAP_SIZE;
274 
275 typedef struct _MWCAP_RECT {
276  WORD x;
277  WORD y;
278  WORD cx;
279  WORD cy;
280 } MWCAP_RECT;
281 
283  DWORD dwMin;
284  DWORD dwMax;
285  DWORD dwStep;
286  DWORD dwDefault;
288 
289 #define MWCAP_DWORD_PARAMETER_FLAG_AUTO 0x01
290 
292  DWORD dwFlags;
293  DWORD dwValue;
295 
296 // Product informations
297 typedef struct _MWCAP_CHANNEL_INFO {
298  WORD wFamilyID;
299  WORD wProductID;
300  CHAR chHardwareVersion;
301  BYTE byFirmwareID;
302  DWORD dwFirmwareVersion;
303  DWORD dwDriverVersion;
304  CHAR szFamilyName[MW_FAMILY_NAME_LEN];
305  CHAR szProductName[MW_PRODUCT_NAME_LEN];
306  CHAR szFirmwareName[MW_FIRMWARE_NAME_LEN];
307  CHAR szBoardSerialNo[MW_SERIAL_NO_LEN];
308  BYTE byBoardIndex;
309  BYTE byChannelIndex;
311 
312 typedef struct _MWCAP_PRO_CAPTURE_INFO {
313  BYTE byPCIBusID;
314  BYTE byPCIDevID;
315  BYTE byLinkType;
316  BYTE byLinkWidth;
317  BYTE byBoardIndex;
318  WORD wMaxPayloadSize;
319  WORD wMaxReadRequestSize;
320  DWORD cbTotalMemorySize;
321  DWORD cbFreeMemorySize;
323 
324 typedef struct _MWCAP_VIDEO_CAPS {
325  DWORD dwCaps;
326  WORD wMaxInputWidth;
327  WORD wMaxInputHeight;
328  WORD wMaxOutputWidth;
329  WORD wMaxOutputHeight;
331 
332 typedef struct _MWCAP_AUDIO_CAPS {
333  DWORD dwCaps;
335 
336 // Firmware upgrade
337 typedef struct _MWCAP_FIRMWARE_STORAGE {
338  DWORD cbStorage;
339  DWORD cbEraseBlock;
340  DWORD cbProgramBlock;
341  DWORD cbHeaderOffset;
343 
344 typedef struct _MWCAP_FIRMWARE_ERASE {
345  DWORD cbOffset;
346  DWORD cbErase;
348 
349 // Device misc controls
350 typedef enum _MWCAP_LED_MODE {
351  MWCAP_LED_AUTO = 0x00000000,
352  MWCAP_LED_OFF = 0x80000000,
353  MWCAP_LED_ON = 0x80000001,
354  MWCAP_LED_BLINK = 0x80000002,
355  MWCAP_LED_DBL_BLINK = 0x80000003,
356  MWCAP_LED_BREATH = 0x80000004
357 } MWCAP_LED_MODE;
358 
359 // Signal status
361  SDI_TYPE sdiType;
362  SDI_SCANNING_FORMAT sdiScanningFormat;
363  SDI_BIT_DEPTH sdiBitDepth;
364  SDI_SAMPLING_STRUCT sdiSamplingStruct;
365  BOOLEAN bST352DataValid;
366  DWORD dwST352Data;
368 
369 typedef struct _MWCAP_HDMI_VIDEO_TIMING {
370  BOOLEAN bInterlaced;
371  DWORD dwFrameDuration;
372  WORD wHSyncWidth;
373  WORD wHFrontPorch;
374  WORD wHBackPorch;
375  WORD wHActive;
376  WORD wHTotalWidth;
377  WORD wField0VSyncWidth;
378  WORD wField0VFrontPorch;
379  WORD wField0VBackPorch;
380  WORD wField0VActive;
381  WORD wField0VTotalHeight;
382  WORD wField1VSyncWidth;
383  WORD wField1VFrontPorch;
384  WORD wField1VBackPorch;
385  WORD wField1VActive;
386  WORD wField1VTotalHeight;
388 
390  BOOLEAN bHDMIMode;
391  BOOLEAN bHDCP;
392  BYTE byBitDepth;
393  HDMI_PXIEL_ENCODING pixelEncoding;
394  BYTE byVIC;
395  BOOLEAN bITContent;
396  BOOLEAN b3DFormat;
397  BYTE by3DStructure;
398  BYTE bySideBySideHalfSubSampling;
399  MWCAP_HDMI_VIDEO_TIMING videoTiming;
401 
403  MWCAP_VIDEO_SYNC_INFO syncInfo;
404  BOOLEAN bTriLevelSync;
405  MWCAP_VIDEO_TIMING videoTiming; // Not valid for custom video timing
406  MWCAP_VIDEO_TIMING_SETTINGS videoTimingSettings;
408 
409 typedef enum _MWCAP_SD_VIDEO_STANDARD {
410  MWCAP_SD_VIDEO_NONE,
411  MWCAP_SD_VIDEO_NTSC_M,
412  MWCAP_SD_VIDEO_NTSC_433,
413  MWCAP_SD_VIDEO_PAL_M,
414  MWCAP_SD_VIDEO_PAL_60,
415  MWCAP_SD_VIDEO_PAL_COMBN,
416  MWCAP_SD_VIDEO_PAL_BGHID,
417  MWCAP_SD_VIDEO_SECAM,
418  MWCAP_SD_VIDEO_SECAM_60
419 } MWCAP_SD_VIDEO_STANDARD;
420 
422  MWCAP_SD_VIDEO_STANDARD standard;
423  BOOLEAN b50Hz;
425 
427  BOOLEAN bValid;
428  DWORD dwVideoInputType;
429  union {
430  MWCAP_SDI_SPECIFIC_STATUS sdiStatus;
431  MWCAP_HDMI_SPECIFIC_STATUS hdmiStatus;
432  MWCAP_COMPONENT_SPECIFIC_STATUS vgaComponentStatus;
433  MWCAP_CVBS_YC_SPECIFIC_STATUS cvbsYcStatus;
434  };
436 
437 typedef enum _MWCAP_VIDEO_SIGNAL_STATE {
438  MWCAP_VIDEO_SIGNAL_NONE, // No signal detectd
439  MWCAP_VIDEO_SIGNAL_UNSUPPORTED, // Video signal status not valid
440  MWCAP_VIDEO_SIGNAL_LOCKING, // Video signal status valid but not locked yet
441  MWCAP_VIDEO_SIGNAL_LOCKED // Every thing OK
442 } MWCAP_VIDEO_SIGNAL_STATE;
443 
445  MWCAP_VIDEO_SIGNAL_STATE state;
446  int x;
447  int y;
448  int cx;
449  int cy;
450  int cxTotal;
451  int cyTotal;
452  BOOLEAN bInterlaced;
453  DWORD dwFrameDuration;
454  int nAspectX;
455  int nAspectY;
456  BOOLEAN bSegmentedFrame;
457  MWCAP_VIDEO_FRAME_TYPE frameType;
458  MWCAP_VIDEO_COLOR_FORMAT colorFormat;
459  MWCAP_VIDEO_QUANTIZATION_RANGE quantRange;
460  MWCAP_VIDEO_SATURATION_RANGE satRange;
462 
464  WORD wChannelValid;
465  BOOLEAN bLPCM;
466  BYTE cBitsPerSample;
467  DWORD dwSampleRate;
468  BOOLEAN bChannelStatusValid;
469  IEC60958_CHANNEL_STATUS channelStatus;
471 
472 // Hardware timer
473 typedef struct _MWCAP_TIMER_EXPIRE_TIME {
474  MWCAP_PTR pvTimer;
475  LONGLONG llExpireTime;
477 
479  MWCAP_PTR pvTimer; // get
480  MWCAP_PTR pvEvent; // set
482 
483 // Notifications
484 #define MWCAP_NOTIFY_INPUT_SORUCE_START_SCAN 0x0001ULL
485 #define MWCAP_NOTIFY_INPUT_SORUCE_STOP_SCAN 0x0002ULL
486 #define MWCAP_NOTIFY_INPUT_SORUCE_SCAN_CHANGE 0x0003ULL
487 
488 #define MWCAP_NOTIFY_VIDEO_INPUT_SOURCE_CHANGE 0x0004ULL
489 #define MWCAP_NOTIFY_AUDIO_INPUT_SOURCE_CHANGE 0x0008ULL
490 
491 // MWCAP_KSPROPERTY_INPUT_SPECIFIC_STATUS
492 #define MWCAP_NOTIFY_INPUT_SPECIFIC_CHANGE 0x0010ULL
493 
494 // MWCAP_KSPROPERTY_VIDEO_SIGNAL_STATUS
495 #define MWCAP_NOTIFY_VIDEO_SIGNAL_CHANGE 0x0020ULL
496 
497 // MWCAP_KSPROPERTY_AUDIO_SIGNAL_STATUS
498 #define MWCAP_NOTIFY_AUDIO_SIGNAL_CHANGE 0x0040ULL
499 
500 // MWCAP_KSPROPERTY_VIDEO_FRAME_INFO
501 #define MWCAP_NOTIFY_VIDEO_FIELD_BUFFERING 0x0080ULL
502 #define MWCAP_NOTIFY_VIDEO_FRAME_BUFFERING 0x0100ULL
503 #define MWCAP_NOTIFY_VIDEO_FIELD_BUFFERED 0x0200ULL
504 #define MWCAP_NOTIFY_VIDEO_FRAME_BUFFERED 0x0400ULL
505 #define MWCAP_NOTIFY_VIDEO_SMPTE_TIME_CODE 0x0800ULL
506 
507 // MWCAP_KSPROPERTY_AUDIO_CAPTURE_FRAME
508 #define MWCAP_NOTIFY_AUDIO_FRAME_BUFFERED 0x1000ULL
509 #define MWCAP_NOTIFY_AUDIO_INPUT_RESET 0x2000ULL
510 
511 // MWCAP_KSPROPERTY_VIDEO_SAMPLING_PHASE
512 #define MWCAP_NOTIFY_VIDEO_SAMPLING_PHASE_CHANGE 0x4000ULL
513 
514 #define MWCAP_NOTIFY_LOOP_THROUGH_CHANGED 0x8000ULL
515 #define MWCAP_NOTIFY_LOOP_THROUGH_EDID_CHANGED 0x10000ULL
516 
517 #define MWCAP_NOTIFY_NEW_SDI_ANC_PACKET 0x20000ULL
518 
519 // MWCAP_KSPROPERTY_HDMI_INFOFRAME_VALID, MWCAP_KSPROPERTY_HDMI_INFOFRAME_PACKET
520 #define MWCAP_NOTIFY_HDMI_INFOFRAME_AVI (1ULL << (32 + MWCAP_HDMI_INFOFRAME_ID_AVI))
521 #define MWCAP_NOTIFY_HDMI_INFOFRAME_AUDIO (1ULL << (32 + MWCAP_HDMI_INFOFRAME_ID_AUDIO))
522 #define MWCAP_NOTIFY_HDMI_INFOFRAME_SPD (1ULL << (32 + MWCAP_HDMI_INFOFRAME_ID_SPD))
523 #define MWCAP_NOTIFY_HDMI_INFOFRAME_MS (1ULL << (32 + MWCAP_HDMI_INFOFRAME_ID_MS))
524 #define MWCAP_NOTIFY_HDMI_INFOFRAME_VS (1ULL << (32 + MWCAP_HDMI_INFOFRAME_ID_VS))
525 #define MWCAP_NOTIFY_HDMI_INFOFRAME_ACP (1ULL << (32 + MWCAP_HDMI_INFOFRAME_ID_ACP))
526 #define MWCAP_NOTIFY_HDMI_INFOFRAME_ISRC1 (1ULL << (32 + MWCAP_HDMI_INFOFRAME_ID_ISRC1))
527 #define MWCAP_NOTIFY_HDMI_INFOFRAME_ISRC2 (1ULL << (32 + MWCAP_HDMI_INFOFRAME_ID_ISRC2))
528 #define MWCAP_NOTIFY_HDMI_INFOFRAME_GAMUT (1ULL << (32 + MWCAP_HDMI_INFOFRAME_ID_GAMUT))
529 
531  MWCAP_PTR pvNotify; // get
532  ULONGLONG ullEnableBits; // set
533  MWCAP_PTR pvEvent; // set
535 
536 typedef struct _MWCAP_NOTIFY_STATUS {
537  MWCAP_PTR pvNotify; // set
538  ULONGLONG ullStatusBits; // get
540 
541 typedef struct _MWCAP_NOTIFY_ENABLE {
542  MWCAP_PTR pvNotify; // set
543  ULONGLONG ullEnableBits; // set
545 
546 // Video frame information
547 #define MWCAP_MAX_VIDEO_FRAME_COUNT 8
548 
549 typedef struct _MWCAP_SMPTE_TIMECODE {
550  BYTE byFrames;
551  BYTE bySeconds;
552  BYTE byMinutes;
553  BYTE byHours;
555 
556 typedef enum _MWCAP_VIDEO_FRAME_STATE {
557  MWCAP_VIDEO_FRAME_STATE_INITIAL,
558  MWCAP_VIDEO_FRAME_STATE_F0_BUFFERING,
559  MWCAP_VIDEO_FRAME_STATE_F1_BUFFERING,
560  MWCAP_VIDEO_FRAME_STATE_BUFFERED
561 } MWCAP_VIDEO_FRAME_STATE;
562 
563 typedef struct _MWCAP_VIDEO_BUFFER_INFO {
564  DWORD cMaxFrames;
565 
566  BYTE iNewestBuffering;
567  BYTE iBufferingFieldIndex;
568 
569  BYTE iNewestBuffered;
570  BYTE iBufferedFieldIndex;
571 
572  BYTE iNewestBufferedFullFrame;
573  DWORD cBufferedFullFrames;
575 
576 typedef struct _MWCAP_VIDEO_FRAME_INFO {
577  MWCAP_VIDEO_FRAME_STATE state;
578 
579  BOOLEAN bInterlaced;
580  BOOLEAN bSegmentedFrame;
581  BOOLEAN bTopFieldFirst;
582  BOOLEAN bTopFieldInverted;
583 
584  int cx;
585  int cy;
586  int nAspectX;
587  int nAspectY;
588 
589  LONGLONG allFieldStartTimes[2];
590  LONGLONG allFieldBufferedTimes[2];
591  MWCAP_SMPTE_TIMECODE aSMPTETimeCodes[2];
593 
594 // Video capture
596  MWCAP_PTR hEvent;
598 
599 #define MWCAP_VIDEO_MAX_NUM_OSD_RECTS 4
600 
601 #define MWCAP_VIDEO_FRAME_ID_NEWEST_BUFFERED (-1)
602 #define MWCAP_VIDEO_FRAME_ID_NEWEST_BUFFERING (-2)
603 #define MWCAP_VIDEO_FRAME_ID_NEXT_BUFFERED (-3)
604 #define MWCAP_VIDEO_FRAME_ID_NEXT_BUFFERING (-4)
605 
606 #define MWCAP_VIDEO_FRAME_ID_EMPTY (-100) // Used in MWCAP_VIDEO_CAPTURE_STATUS
607 
608 #define MWCAP_VIDEO_PROCESS_FLIP 0x00000001
609 #define MWCAP_VIDEO_PROCESS_MIRROR 0x00000002
610 
611 
613  // Processing parameters
614  DWORD dwFOURCC;
615  WORD cx;
616  WORD cy;
617  int nAspectX;
618  int nAspectY;
619  MWCAP_VIDEO_COLOR_FORMAT colorFormat;
620  MWCAP_VIDEO_QUANTIZATION_RANGE quantRange;
621  MWCAP_VIDEO_SATURATION_RANGE satRange;
622 
623  SHORT sContrast; // [50, 200]
624  SHORT sBrightness; // [-100, 100]
625  SHORT sSaturation; // [0, 200]
626  SHORT sHue; // [-90, 90]
627 
628  RECT rectSource;
629  RECT rectTarget;
630 
631  MWCAP_VIDEO_DEINTERLACE_MODE deinterlaceMode;
632  MWCAP_VIDEO_ASPECT_RATIO_CONVERT_MODE aspectRatioConvertMode;
633 
634  // Source frame
635  int iSrcFrame;
636 
637  // OSD (within rectTarget and [0,0-cx,cy))
638  MWCAP_PTR pOSDImage;
639  RECT aOSDRects[MWCAP_VIDEO_MAX_NUM_OSD_RECTS];
640  int cOSDRects;
641 
642  // Buffer parameters
643  BOOLEAN bPhysicalAddress;
644  union {
645  MWCAP_PTR pvFrame;
646  LARGE_INTEGER liPhysicalAddress;
647  };
648 
649  DWORD cbFrame;
650  DWORD cbStride;
651 
652  BOOLEAN bBottomUp;
653 
654  // 0: Not use partial notify
655  WORD cyPartialNotify;
656 
657  DWORD dwProcessSwitchs; // MWCAP_VIDEO_PROCESS_xx
658 
659  // Context
660  MWCAP_PTR pvContext;
662 
664  MWCAP_PTR pvContext;
665 
666  BOOLEAN bPhysicalAddress;
667  union {
668  MWCAP_PTR pvFrame;
669  LARGE_INTEGER liPhysicalAddress;
670  };
671 
672  int iFrame;
673 
674  BOOLEAN bFrameCompleted;
675  WORD cyCompleted;
676  WORD cyCompletedPrev;
678 
679 // Audio capture
680 #define MWCAP_AUDIO_FRAME_SYNC_CODE 0xFECA0357
681 #define MWCAP_AUDIO_SAMPLES_PER_FRAME 192
682 #define MWCAP_AUDIO_MAX_NUM_CHANNELS 8
683 
684 // Audio samples are 32bits wide, cBitsPerSample of high bits are valid
685 // Sample layout: 0L, 1L, 2L, 3L, 0R, 1R, 2R, 3R
687  DWORD cFrameCount;
688  DWORD iFrame;
689  DWORD dwSyncCode;
690  DWORD dwReserved;
691  LONGLONG llTimestamp;
692  DWORD adwSamples[MWCAP_AUDIO_SAMPLES_PER_FRAME * MWCAP_AUDIO_MAX_NUM_CHANNELS];
694 
695 // HDMI status
696 typedef enum _MWCAP_HDMI_INFOFRAME_ID {
697  MWCAP_HDMI_INFOFRAME_ID_AVI,
698  MWCAP_HDMI_INFOFRAME_ID_AUDIO,
699  MWCAP_HDMI_INFOFRAME_ID_SPD,
700  MWCAP_HDMI_INFOFRAME_ID_MS,
701  MWCAP_HDMI_INFOFRAME_ID_VS,
702  MWCAP_HDMI_INFOFRAME_ID_ACP,
703  MWCAP_HDMI_INFOFRAME_ID_ISRC1,
704  MWCAP_HDMI_INFOFRAME_ID_ISRC2,
705  MWCAP_HDMI_INFOFRAME_ID_GAMUT,
706  MWCAP_HDMI_INFOFRAME_ID_VBI,
707  MWCAP_HDMI_INFOFRAME_ID_HDR,
708  MWCAP_HDMI_INFOFRAME_COUNT
709 } MWCAP_HDMI_INFOFRAME_ID;
710 
711 typedef enum _MWCAP_HDMI_INFOFRAME_MASK {
712  MWCAP_HDMI_INFOFRAME_MASK_AVI = (1 << MWCAP_HDMI_INFOFRAME_ID_AVI),
713  MWCAP_HDMI_INFOFRAME_MASK_AUDIO = (1 << MWCAP_HDMI_INFOFRAME_ID_AUDIO),
714  MWCAP_HDMI_INFOFRAME_MASK_SPD = (1 << MWCAP_HDMI_INFOFRAME_ID_SPD),
715  MWCAP_HDMI_INFOFRAME_MASK_MS = (1 << MWCAP_HDMI_INFOFRAME_ID_MS),
716  MWCAP_HDMI_INFOFRAME_MASK_VS = (1 << MWCAP_HDMI_INFOFRAME_ID_VS),
717  MWCAP_HDMI_INFOFRAME_MASK_ACP = (1 << MWCAP_HDMI_INFOFRAME_ID_ACP),
718  MWCAP_HDMI_INFOFRAME_MASK_ISRC1 = (1 << MWCAP_HDMI_INFOFRAME_ID_ISRC1),
719  MWCAP_HDMI_INFOFRAME_MASK_ISRC2 = (1 << MWCAP_HDMI_INFOFRAME_ID_ISRC2),
720  MWCAP_HDMI_INFOFRAME_MASK_GAMUT = (1 << MWCAP_HDMI_INFOFRAME_ID_GAMUT),
721  MWCAP_HDMI_INFOFRAME_MASK_VBI = (1 << MWCAP_HDMI_INFOFRAME_ID_VBI),
722  MWCAP_HDMI_INFOFRAME_MASK_HDR = (1 << MWCAP_HDMI_INFOFRAME_ID_HDR)
723 } MWCAP_HDMI_INFOFRAME_MASK;
724 
726  int nAspectX;
727  int nAspectY;
729 
731  // Valid flag
732  BOOLEAN bConnected;
733 
734  // Basic information
735  LONG cx;
736  LONG cy;
737  DWORD dwFrameDuration;
738  DWORD dwFOURCC;
739 
740  // Preferred parameters
741  int nAspectX;
742  int nAspectY;
743  MWCAP_VIDEO_COLOR_FORMAT colorFormat;
744  MWCAP_VIDEO_QUANTIZATION_RANGE quantRange;
745  MWCAP_VIDEO_SATURATION_RANGE satRange;
747 
749  DWORD dwProcessSwitchs;
750  RECT rectSource;
751  int nAspectX;
752  int nAspectY;
753  BOOLEAN bLowLatency;
754  MWCAP_VIDEO_COLOR_FORMAT colorFormat;
755  MWCAP_VIDEO_QUANTIZATION_RANGE quantRange;
756  MWCAP_VIDEO_SATURATION_RANGE satRange;
757  MWCAP_VIDEO_DEINTERLACE_MODE deinterlaceMode;
758  MWCAP_VIDEO_ASPECT_RATIO_CONVERT_MODE aspectRatioConvertMode;
760 
761 #define MWCAP_VIDEO_MAX_NUM_PREFERRED_TIMINGS 8
762 
764  WORD cx; // set
765  WORD cy; // set
766  MWCAP_PTR pvImage; // get
768 
769 typedef struct _MWCAP_VIDEO_IMAGE_REF {
770  MWCAP_PTR pvImage; // set
771  int nRefCount; // get
773 
775  // Destination parameters
776  MWCAP_PTR pvDestImage;
777  MWCAP_VIDEO_COLOR_FORMAT cfDest;
778  WORD xDest;
779  WORD yDest;
780  WORD cxDest;
781  WORD cyDest;
782 
783  MWCAP_VIDEO_QUANTIZATION_RANGE quantRangeDest;
784  MWCAP_VIDEO_SATURATION_RANGE satRangeDest;
785 
786  // Source parameters
787  BOOLEAN bSrcPhysicalAddress;
788  union {
789  MWCAP_PTR pvSrcFrame;
790  LARGE_INTEGER liSrcPhysicalAddress;
791  };
792 
793  DWORD cbSrcFrame;
794  DWORD cbSrcStride;
795 
796  WORD cxSrc;
797  WORD cySrc;
798  BOOLEAN bSrcBottomUp;
799  BOOLEAN bSrcPixelAlpha;
800  BOOLEAN bSrcPixelXBGR;
802 
804  BOOLEAN bEnable;
805  char szPNGFilePath[_MAX_PATH];
807 
808 typedef struct _MWCAP_VIDEO_OSD_IMAGE {
809  MWCAP_PTR pvOSDImage;
810  RECT aOSDRects[MWCAP_VIDEO_MAX_NUM_OSD_RECTS];
811  int cOSDRects;
813 
815  MWCAP_VIDEO_SYNC_INFO syncInfo;
816  MWCAP_VIDEO_TIMING_SETTINGS videoTimingSettings;
818 
819 typedef struct _MWCAP_VIDEO_PIN_BUFFER {
820  MWCAP_PTR pvBuffer;
821  DWORD cbBuffer;
822  int mem_type; /* see mw-dma-mem.h */
823  unsigned long long reserved;
825 
826 typedef enum _MW_VIDEO_CAPTURE_MODE {
827  MW_VIDEO_CAPTURE_NORMAL = 0x00,
828  MW_VIDEO_CAPTURE_LOW_LATENCY,
829 } MW_VIDEO_CAPTURE_MODE;
830 
831 typedef enum _MWCAP_AUDIO_CAPTURE_NODE {
832  MWCAP_AUDIO_CAPTURE_NODE_DEFAULT,
833  MWCAP_AUDIO_CAPTURE_NODE_EMBEDDED_CAPTURE,
834  MWCAP_AUDIO_CAPTURE_NODE_MICROPHONE,
835  MWCAP_AUDIO_CAPTURE_NODE_USB_CAPTURE,
836  MWCAP_AUDIO_CAPTURE_NODE_LINE_IN,
837 } MWCAP_AUDIO_CAPTURE_NODE;
838 
839 typedef enum _MWCAP_AUDIO_NODE {
840  MWCAP_AUDIO_MICROPHONE,
841  MWCAP_AUDIO_HEADPHONE,
842  MWCAP_AUDIO_LINE_IN,
843  MWCAP_AUDIO_LINE_OUT,
844  MWCAP_AUDIO_EMBEDDED_CAPTURE,
845  MWCAP_AUDIO_EMBEDDED_PLAYBACK,
846  MWCAP_AUDIO_USB_CAPTURE,
847  MWCAP_AUDIO_USB_PLAYBACK
848 } MWCAP_AUDIO_NODE;
849 
850 typedef void(*LPFN_VIDEO_CAPTURE_CALLBACK)(MWCAP_PTR pbFrame, DWORD cbFrame, DWORD cbStride, MWCAP_VIDEO_FRAME_INFO* pFrameInfo, void* pvContent);
851 typedef void(*LPFN_AUDIO_CAPTURE_CALLBACK)(MWCAP_AUDIO_CAPTURE_FRAME* pAudioCaptureFrame, void* pvContent);
852 typedef void(*LPFN_TIMER_CALLBACK)(HTIMER pTimer, void* pvContent);
853 typedef void(*LPFN_NOTIFY_CALLBACK)(MWCAP_PTR pNotify, DWORD dwEnableBits, void* pvContent);
854 
855 typedef void (*VIDEO_CAPTURE_CALLBACK)(BYTE *pBuffer, long iBufferLen, void* pParam);
856 typedef void (*AUDIO_CAPTURE_CALLBACK)(const BYTE * pbFrame, int cbFrame, uint64_t u64TimeStamp, void* pParam);
857 
858 typedef struct _MWCAP_SDI_ANC_TYPE {
859  BYTE byId;
860  BOOLEAN bHANC;
861  BOOLEAN bVANC;
862  BYTE byDID;
863  BYTE bySDID;
865 
866 typedef struct _MWCAP_SDI_ANC_PACKET {
867  BYTE byDID;
868  BYTE bySDID;
869  BYTE byDC;
870  BYTE abyUDW[255];
871  BYTE abyReserved[2];
873 
874 
875 
877  MWCAP_PTR64 hEvent;
878 
879  DWORD dwFOURCC;
880  WORD cx;
881  WORD cy;
882  LONGLONG llFrameDuration; // -1 for input frame rate
884 
886  MWCAP_VIDEO_COLOR_FORMAT colorFormat;
887  MWCAP_VIDEO_QUANTIZATION_RANGE quantRange;
888  MWCAP_VIDEO_SATURATION_RANGE satRange;
889  SHORT sContrast; // [50, 200]
890  SHORT sBrightness; // [-100, 100]
891  SHORT sSaturation; // [0, 200]
892  SHORT sHue; // [-90, 90]
894 
896  MWCAP_PTR64 pvFrame;
897  DWORD cbFrame;
898  DWORD cbStride;
899 
900  BOOLEAN bBottomUp;
901  MWCAP_VIDEO_DEINTERLACE_MODE deinterlaceMode;
902 
903  MWCAP_PTR64 pvContext;
905 
907  MWCAP_PTR64 pvContext;
908  MWCAP_PTR64 pvFrame;
909  LONGLONG llTimestamp;
911 
912 #pragma pack(pop)
913 
Definition: MWCaptureExtension.h:360
Definition: MWCaptureExtension.h:663
Definition: MWCaptureExtension.h:536
Definition: MWCaptureExtension.h:402
Definition: MWCaptureExtension.h:763
Definition: MWCaptureExtension.h:232
Definition: MWCaptureExtension.h:563
Definition: MWCaptureExtension.h:421
Definition: MWCaptureExtension.h:389
Definition: MWCaptureExtension.h:769
Definition: MWCaptureExtension.h:803
Definition: MWCaptureExtension.h:324
Definition: MWCaptureExtension.h:426
Definition: MWCaptureExtension.h:369
Definition: MWCaptureExtension.h:242
Definition: MWCaptureExtension.h:297
Definition: MWCaptureExtension.h:808
Definition: WinTypes.h:62
Definition: MWCaptureExtension.h:748
Definition: MWCaptureExtension.h:344
Definition: MWCaptureExtension.h:275
Definition: MWCaptureExtension.h:819
Definition: MWCaptureExtension.h:730
Definition: MWCaptureExtension.h:595
Definition: MWCaptureExtension.h:866
Definition: MWCaptureExtension.h:858
Definition: MWCaptureExtension.h:814
Definition: MWCaptureExtension.h:530
Definition: MWCaptureExtension.h:774
Definition: MWCaptureExtension.h:549
Definition: MWCaptureExtension.h:541
Definition: MWCaptureExtension.h:473
Definition: MWCaptureExtension.h:444
Definition: MWCaptureExtension.h:337
Definition: MWCaptureExtension.h:576
Definition: MWCaptureExtension.h:906
Definition: MWCaptureExtension.h:259
Definition: MWCaptureExtension.h:876
Definition: MWCaptureExtension.h:895
Definition: MWCaptureExtension.h:612
Definition: MWCaptureExtension.h:478
Definition: MWCaptureExtension.h:312
Definition: MWCaptureExtension.h:686
Definition: MWCaptureExtension.h:463
Definition: MWIEC60958.h:13
Definition: MWCaptureExtension.h:270
Definition: MWCaptureExtension.h:84
Definition: MWCaptureExtension.h:291
Definition: MWCaptureExtension.h:282
Definition: MWCaptureExtension.h:885
Definition: MWCaptureExtension.h:725
Definition: MWCaptureExtension.h:332