]> git.sesse.net Git - nageru/blobdiff - nageru/decklink/DeckLinkAPI.h
Upgrade DeckLink SDK to 10.11.4.
[nageru] / nageru / decklink / DeckLinkAPI.h
old mode 100755 (executable)
new mode 100644 (file)
index 2a0f90a..e113fc3
@@ -1,5 +1,5 @@
 /* -LICENSE-START-
-** Copyright (c) 2015 Blackmagic Design
+** Copyright (c) 2018 Blackmagic Design
 **
 ** Permission is hereby granted, free of charge, to any person or organization
 ** obtaining a copy of the software and accompanying documentation covered by
     #endif
 #endif
 
+#ifndef BMD_PUBLIC
+       #define BMD_PUBLIC
+#endif
+
 /* DeckLink API */
 
 #include <stdint.h>
@@ -64,11 +68,16 @@ BMD_CONST REFIID IID_IDeckLinkIterator                            = /* 50FB36CD-
 BMD_CONST REFIID IID_IDeckLinkAPIInformation                      = /* 7BEA3C68-730D-4322-AF34-8A7152B532A4 */ {0x7B,0xEA,0x3C,0x68,0x73,0x0D,0x43,0x22,0xAF,0x34,0x8A,0x71,0x52,0xB5,0x32,0xA4};
 BMD_CONST REFIID IID_IDeckLinkOutput                              = /* CC5C8A6E-3F2F-4B3A-87EA-FD78AF300564 */ {0xCC,0x5C,0x8A,0x6E,0x3F,0x2F,0x4B,0x3A,0x87,0xEA,0xFD,0x78,0xAF,0x30,0x05,0x64};
 BMD_CONST REFIID IID_IDeckLinkInput                               = /* AF22762B-DFAC-4846-AA79-FA8883560995 */ {0xAF,0x22,0x76,0x2B,0xDF,0xAC,0x48,0x46,0xAA,0x79,0xFA,0x88,0x83,0x56,0x09,0x95};
+BMD_CONST REFIID IID_IDeckLinkHDMIInputEDID                       = /* ABBBACBC-45BC-4665-9D92-ACE6E5A97902 */ {0xAB,0xBB,0xAC,0xBC,0x45,0xBC,0x46,0x65,0x9D,0x92,0xAC,0xE6,0xE5,0xA9,0x79,0x02};
 BMD_CONST REFIID IID_IDeckLinkEncoderInput                        = /* 270587DA-6B7D-42E7-A1F0-6D853F581185 */ {0x27,0x05,0x87,0xDA,0x6B,0x7D,0x42,0xE7,0xA1,0xF0,0x6D,0x85,0x3F,0x58,0x11,0x85};
 BMD_CONST REFIID IID_IDeckLinkVideoFrame                          = /* 3F716FE0-F023-4111-BE5D-EF4414C05B17 */ {0x3F,0x71,0x6F,0xE0,0xF0,0x23,0x41,0x11,0xBE,0x5D,0xEF,0x44,0x14,0xC0,0x5B,0x17};
 BMD_CONST REFIID IID_IDeckLinkMutableVideoFrame                   = /* 69E2639F-40DA-4E19-B6F2-20ACE815C390 */ {0x69,0xE2,0x63,0x9F,0x40,0xDA,0x4E,0x19,0xB6,0xF2,0x20,0xAC,0xE8,0x15,0xC3,0x90};
 BMD_CONST REFIID IID_IDeckLinkVideoFrame3DExtensions              = /* DA0F7E4A-EDC7-48A8-9CDD-2DB51C729CD7 */ {0xDA,0x0F,0x7E,0x4A,0xED,0xC7,0x48,0xA8,0x9C,0xDD,0x2D,0xB5,0x1C,0x72,0x9C,0xD7};
+BMD_CONST REFIID IID_IDeckLinkVideoFrameMetadataExtensions        = /* D5973DC9-6432-46D0-8F0B-2496F8A1238F */ {0xD5,0x97,0x3D,0xC9,0x64,0x32,0x46,0xD0,0x8F,0x0B,0x24,0x96,0xF8,0xA1,0x23,0x8F};
 BMD_CONST REFIID IID_IDeckLinkVideoInputFrame                     = /* 05CFE374-537C-4094-9A57-680525118F44 */ {0x05,0xCF,0xE3,0x74,0x53,0x7C,0x40,0x94,0x9A,0x57,0x68,0x05,0x25,0x11,0x8F,0x44};
+BMD_CONST REFIID IID_IDeckLinkAncillaryPacket                     = /* CC5BBF7E-029C-4D3B-9158-6000EF5E3670 */ {0xCC,0x5B,0xBF,0x7E,0x02,0x9C,0x4D,0x3B,0x91,0x58,0x60,0x00,0xEF,0x5E,0x36,0x70};
+BMD_CONST REFIID IID_IDeckLinkAncillaryPacketIterator             = /* 3FC8994B-88FB-4C17-968F-9AAB69D964A7 */ {0x3F,0xC8,0x99,0x4B,0x88,0xFB,0x4C,0x17,0x96,0x8F,0x9A,0xAB,0x69,0xD9,0x64,0xA7};
+BMD_CONST REFIID IID_IDeckLinkVideoFrameAncillaryPackets          = /* 6C186C0F-459E-41D8-AEE2-4812D81AEE68 */ {0x6C,0x18,0x6C,0x0F,0x45,0x9E,0x41,0xD8,0xAE,0xE2,0x48,0x12,0xD8,0x1A,0xEE,0x68};
 BMD_CONST REFIID IID_IDeckLinkVideoFrameAncillary                 = /* 732E723C-D1A4-4E29-9E8E-4A88797A0004 */ {0x73,0x2E,0x72,0x3C,0xD1,0xA4,0x4E,0x29,0x9E,0x8E,0x4A,0x88,0x79,0x7A,0x00,0x04};
 BMD_CONST REFIID IID_IDeckLinkEncoderPacket                       = /* B693F36C-316E-4AF1-B6C2-F389A4BCA620 */ {0xB6,0x93,0xF3,0x6C,0x31,0x6E,0x4A,0xF1,0xB6,0xC2,0xF3,0x89,0xA4,0xBC,0xA6,0x20};
 BMD_CONST REFIID IID_IDeckLinkEncoderVideoPacket                  = /* 4E7FD944-E8C7-4EAC-B8C0-7B77F80F5AE0 */ {0x4E,0x7F,0xD9,0x44,0xE8,0xC7,0x4E,0xAC,0xB8,0xC0,0x7B,0x77,0xF8,0x0F,0x5A,0xE0};
@@ -80,6 +89,7 @@ BMD_CONST REFIID IID_IDeckLinkGLScreenPreviewHelper               = /* 504E2209-
 BMD_CONST REFIID IID_IDeckLinkNotificationCallback                = /* B002A1EC-070D-4288-8289-BD5D36E5FF0D */ {0xB0,0x02,0xA1,0xEC,0x07,0x0D,0x42,0x88,0x82,0x89,0xBD,0x5D,0x36,0xE5,0xFF,0x0D};
 BMD_CONST REFIID IID_IDeckLinkNotification                        = /* 0A1FB207-E215-441B-9B19-6FA1575946C5 */ {0x0A,0x1F,0xB2,0x07,0xE2,0x15,0x44,0x1B,0x9B,0x19,0x6F,0xA1,0x57,0x59,0x46,0xC5};
 BMD_CONST REFIID IID_IDeckLinkAttributes                          = /* ABC11843-D966-44CB-96E2-A1CB5D3135C4 */ {0xAB,0xC1,0x18,0x43,0xD9,0x66,0x44,0xCB,0x96,0xE2,0xA1,0xCB,0x5D,0x31,0x35,0xC4};
+BMD_CONST REFIID IID_IDeckLinkStatus                              = /* 5F558200-4028-49BC-BEAC-DB3FA4A96E46 */ {0x5F,0x55,0x82,0x00,0x40,0x28,0x49,0xBC,0xBE,0xAC,0xDB,0x3F,0xA4,0xA9,0x6E,0x46};
 BMD_CONST REFIID IID_IDeckLinkKeyer                               = /* 89AFCAF5-65F8-421E-98F7-96FE5F5BFBA3 */ {0x89,0xAF,0xCA,0xF5,0x65,0xF8,0x42,0x1E,0x98,0xF7,0x96,0xFE,0x5F,0x5B,0xFB,0xA3};
 BMD_CONST REFIID IID_IDeckLinkVideoConversion                     = /* 3BBCB8A2-DA2C-42D9-B5D8-88083644E99A */ {0x3B,0xBC,0xB8,0xA2,0xDA,0x2C,0x42,0xD9,0xB5,0xD8,0x88,0x08,0x36,0x44,0xE9,0x9A};
 BMD_CONST REFIID IID_IDeckLinkDeviceNotificationCallback          = /* 4997053B-0ADF-4CC8-AC70-7A50C4BE728F */ {0x49,0x97,0x05,0x3B,0x0A,0xDF,0x4C,0xC8,0xAC,0x70,0x7A,0x50,0xC4,0xBE,0x72,0x8F};
@@ -110,9 +120,12 @@ typedef uint32_t BMDFrameFlags;
 enum _BMDFrameFlags {
     bmdFrameFlagDefault                                          = 0,
     bmdFrameFlagFlipVertical                                     = 1 << 0,
+    bmdFrameContainsHDRMetadata                                  = 1 << 1,
+    bmdFrameContainsCintelMetadata                               = 1 << 2,
 
     /* Flags that are applicable only to instances of IDeckLinkVideoInputFrame */
 
+    bmdFrameCapturedAsPsF                                        = 1 << 30,
     bmdFrameHasNoInputSource                                     = 1 << 31
 };
 
@@ -147,6 +160,7 @@ enum _BMDDetectedVideoInputFormatFlags {
 
 typedef uint32_t BMDDeckLinkCapturePassthroughMode;
 enum _BMDDeckLinkCapturePassthroughMode {
+    bmdDeckLinkCapturePassthroughModeDisabled                    = /* 'pdis' */ 0x70646973,
     bmdDeckLinkCapturePassthroughModeDirect                      = /* 'pdir' */ 0x70646972,
     bmdDeckLinkCapturePassthroughModeCleanSwitch                 = /* 'pcln' */ 0x70636C6E
 };
@@ -209,6 +223,15 @@ enum _BMDDisplayModeSupport {
     bmdDisplayModeSupportedWithConversion                       
 };
 
+/* Enum BMDAncillaryPacketFormat - Ancillary packet format */
+
+typedef uint32_t BMDAncillaryPacketFormat;
+enum _BMDAncillaryPacketFormat {
+    bmdAncillaryPacketFormatUInt8                                = /* 'ui08' */ 0x75693038,
+    bmdAncillaryPacketFormatUInt16                               = /* 'ui16' */ 0x75693136,
+    bmdAncillaryPacketFormatYCbCr10                              = /* 'v210' */ 0x76323130
+};
+
 /* Enum BMDTimecodeFormat - Timecode formats for frame metadata */
 
 typedef uint32_t BMDTimecodeFormat;
@@ -288,8 +311,7 @@ enum _BMDVideo3DPackingFormat {
 typedef uint32_t BMDIdleVideoOutputOperation;
 enum _BMDIdleVideoOutputOperation {
     bmdIdleVideoOutputBlack                                      = /* 'blac' */ 0x626C6163,
-    bmdIdleVideoOutputLastFrame                                  = /* 'lafa' */ 0x6C616661,
-    bmdIdleVideoOutputDesktop                                    = /* 'desk' */ 0x6465736B
+    bmdIdleVideoOutputLastFrame                                  = /* 'lafa' */ 0x6C616661
 };
 
 /* Enum BMDVideoEncoderFrameCodingMode - Video frame coding mode */
@@ -329,6 +351,98 @@ enum _BMDDeviceInterface {
     bmdDeviceInterfaceThunderbolt                                = /* 'thun' */ 0x7468756E
 };
 
+/* Enum BMDColorspace - Colorspace */
+
+typedef uint32_t BMDColorspace;
+enum _BMDColorspace {
+    bmdColorspaceRec601                                          = /* 'r601' */ 0x72363031,
+    bmdColorspaceRec709                                          = /* 'r709' */ 0x72373039,
+    bmdColorspaceRec2020                                         = /* '2020' */ 0x32303230
+};
+
+/* Enum BMDDynamicRange - SDR or HDR */
+
+typedef uint32_t BMDDynamicRange;
+enum _BMDDynamicRange {
+    bmdDynamicRangeSDR                                           = 0,
+    bmdDynamicRangeHDRStaticPQ                                   = 1 << 29,    // SMPTE ST 2084
+    bmdDynamicRangeHDRStaticHLG                                  = 1 << 30     // ITU-R BT.2100-0
+};
+
+/* Enum BMDDeckLinkHDMIInputEDIDID - DeckLink HDMI Input EDID ID */
+
+typedef uint32_t BMDDeckLinkHDMIInputEDIDID;
+enum _BMDDeckLinkHDMIInputEDIDID {
+    bmdDeckLinkHDMIInputEDIDDynamicRange                         = /* 'HIDy' */ 0x48494479     // Parameter is of type BMDDynamicRange. Default is (bmdDynamicRangeSDR|bmdDynamicRangeHDRStaticPQ)
+};
+
+/* Enum BMDDeckLinkFrameMetadataID - DeckLink Frame Metadata ID */
+
+typedef uint32_t BMDDeckLinkFrameMetadataID;
+enum _BMDDeckLinkFrameMetadataID {
+    bmdDeckLinkFrameMetadataColorspace                           = /* 'cspc' */ 0x63737063,    // Colorspace of video frame (see BMDColorspace)
+    bmdDeckLinkFrameMetadataHDRElectroOpticalTransferFunc        = /* 'eotf' */ 0x656F7466,    // EOTF in range 0-7 as per CEA 861.3
+    bmdDeckLinkFrameMetadataCintelFilmType                       = /* 'cfty' */ 0x63667479,    // Current film type
+    bmdDeckLinkFrameMetadataCintelFilmGauge                      = /* 'cfga' */ 0x63666761,    // Current film gauge
+    bmdDeckLinkFrameMetadataCintelOffsetDetectedHorizontal       = /* 'odfh' */ 0x6F646668,    // Horizontal offset (pixels) detected in image
+    bmdDeckLinkFrameMetadataCintelOffsetDetectedVertical         = /* 'odfv' */ 0x6F646676,    // Vertical offset (pixels) detected in image
+    bmdDeckLinkFrameMetadataCintelKeykodeLow                     = /* 'ckkl' */ 0x636B6B6C,    // Raw keykode value - low 64 bits
+    bmdDeckLinkFrameMetadataCintelKeykodeHigh                    = /* 'ckkh' */ 0x636B6B68,    // Raw keykode value - high 64 bits
+    bmdDeckLinkFrameMetadataCintelTile1Size                      = /* 'ct1s' */ 0x63743173,    // Size in bytes of compressed raw tile 1
+    bmdDeckLinkFrameMetadataCintelTile2Size                      = /* 'ct2s' */ 0x63743273,    // Size in bytes of compressed raw tile 2
+    bmdDeckLinkFrameMetadataCintelTile3Size                      = /* 'ct3s' */ 0x63743373,    // Size in bytes of compressed raw tile 3
+    bmdDeckLinkFrameMetadataCintelTile4Size                      = /* 'ct4s' */ 0x63743473,    // Size in bytes of compressed raw tile 4
+    bmdDeckLinkFrameMetadataCintelImageWidth                     = /* 'IWPx' */ 0x49575078,    // Width in pixels of image
+    bmdDeckLinkFrameMetadataCintelImageHeight                    = /* 'IHPx' */ 0x49485078,    // Height in pixels of image
+    bmdDeckLinkFrameMetadataCintelLinearMaskingRedInRed          = /* 'mrir' */ 0x6D726972,    // Red in red linear masking parameter
+    bmdDeckLinkFrameMetadataCintelLinearMaskingGreenInRed        = /* 'mgir' */ 0x6D676972,    // Green in red linear masking parameter
+    bmdDeckLinkFrameMetadataCintelLinearMaskingBlueInRed         = /* 'mbir' */ 0x6D626972,    // Blue in red linear masking parameter
+    bmdDeckLinkFrameMetadataCintelLinearMaskingRedInGreen        = /* 'mrig' */ 0x6D726967,    // Red in green linear masking parameter
+    bmdDeckLinkFrameMetadataCintelLinearMaskingGreenInGreen      = /* 'mgig' */ 0x6D676967,    // Green in green linear masking parameter
+    bmdDeckLinkFrameMetadataCintelLinearMaskingBlueInGreen       = /* 'mbig' */ 0x6D626967,    // Blue in green linear masking parameter
+    bmdDeckLinkFrameMetadataCintelLinearMaskingRedInBlue         = /* 'mrib' */ 0x6D726962,    // Red in blue linear masking parameter
+    bmdDeckLinkFrameMetadataCintelLinearMaskingGreenInBlue       = /* 'mgib' */ 0x6D676962,    // Green in blue linear masking parameter
+    bmdDeckLinkFrameMetadataCintelLinearMaskingBlueInBlue        = /* 'mbib' */ 0x6D626962,    // Blue in blue linear masking parameter
+    bmdDeckLinkFrameMetadataCintelLogMaskingRedInRed             = /* 'mlrr' */ 0x6D6C7272,    // Red in red log masking parameter
+    bmdDeckLinkFrameMetadataCintelLogMaskingGreenInRed           = /* 'mlgr' */ 0x6D6C6772,    // Green in red log masking parameter
+    bmdDeckLinkFrameMetadataCintelLogMaskingBlueInRed            = /* 'mlbr' */ 0x6D6C6272,    // Blue in red log masking parameter
+    bmdDeckLinkFrameMetadataCintelLogMaskingRedInGreen           = /* 'mlrg' */ 0x6D6C7267,    // Red in green log masking parameter
+    bmdDeckLinkFrameMetadataCintelLogMaskingGreenInGreen         = /* 'mlgg' */ 0x6D6C6767,    // Green in green log masking parameter
+    bmdDeckLinkFrameMetadataCintelLogMaskingBlueInGreen          = /* 'mlbg' */ 0x6D6C6267,    // Blue in green log masking parameter
+    bmdDeckLinkFrameMetadataCintelLogMaskingRedInBlue            = /* 'mlrb' */ 0x6D6C7262,    // Red in blue log masking parameter
+    bmdDeckLinkFrameMetadataCintelLogMaskingGreenInBlue          = /* 'mlgb' */ 0x6D6C6762,    // Green in blue log masking parameter
+    bmdDeckLinkFrameMetadataCintelLogMaskingBlueInBlue           = /* 'mlbb' */ 0x6D6C6262,    // Blue in blue log masking parameter
+    bmdDeckLinkFrameMetadataCintelFilmFrameRate                  = /* 'cffr' */ 0x63666672,    // Film frame rate
+    bmdDeckLinkFrameMetadataHDRDisplayPrimariesRedX              = /* 'hdrx' */ 0x68647278,    // Red display primaries in range 0.0 - 1.0
+    bmdDeckLinkFrameMetadataHDRDisplayPrimariesRedY              = /* 'hdry' */ 0x68647279,    // Red display primaries in range 0.0 - 1.0
+    bmdDeckLinkFrameMetadataHDRDisplayPrimariesGreenX            = /* 'hdgx' */ 0x68646778,    // Green display primaries in range 0.0 - 1.0
+    bmdDeckLinkFrameMetadataHDRDisplayPrimariesGreenY            = /* 'hdgy' */ 0x68646779,    // Green display primaries in range 0.0 - 1.0
+    bmdDeckLinkFrameMetadataHDRDisplayPrimariesBlueX             = /* 'hdbx' */ 0x68646278,    // Blue display primaries in range 0.0 - 1.0
+    bmdDeckLinkFrameMetadataHDRDisplayPrimariesBlueY             = /* 'hdby' */ 0x68646279,    // Blue display primaries in range 0.0 - 1.0
+    bmdDeckLinkFrameMetadataHDRWhitePointX                       = /* 'hdwx' */ 0x68647778,    // White point in range 0.0 - 1.0
+    bmdDeckLinkFrameMetadataHDRWhitePointY                       = /* 'hdwy' */ 0x68647779,    // White point in range 0.0 - 1.0
+    bmdDeckLinkFrameMetadataHDRMaxDisplayMasteringLuminance      = /* 'hdml' */ 0x68646D6C,    // Max display mastering luminance in range 1 cd/m2 - 65535 cd/m2
+    bmdDeckLinkFrameMetadataHDRMinDisplayMasteringLuminance      = /* 'hmil' */ 0x686D696C,    // Min display mastering luminance in range 0.0001 cd/m2 - 6.5535 cd/m2
+    bmdDeckLinkFrameMetadataHDRMaximumContentLightLevel          = /* 'mcll' */ 0x6D636C6C,    // Maximum Content Light Level in range 1 cd/m2 - 65535 cd/m2
+    bmdDeckLinkFrameMetadataHDRMaximumFrameAverageLightLevel     = /* 'fall' */ 0x66616C6C,    // Maximum Frame Average Light Level in range 1 cd/m2 - 65535 cd/m2
+    bmdDeckLinkFrameMetadataCintelOffsetToApplyHorizontal        = /* 'otah' */ 0x6F746168,    // Horizontal offset (pixels) to be applied to image
+    bmdDeckLinkFrameMetadataCintelOffsetToApplyVertical          = /* 'otav' */ 0x6F746176,    // Vertical offset (pixels) to be applied to image
+    bmdDeckLinkFrameMetadataCintelGainRed                        = /* 'LfRd' */ 0x4C665264,    // Red gain parameter to apply after log
+    bmdDeckLinkFrameMetadataCintelGainGreen                      = /* 'LfGr' */ 0x4C664772,    // Green gain parameter to apply after log
+    bmdDeckLinkFrameMetadataCintelGainBlue                       = /* 'LfBl' */ 0x4C66426C,    // Blue gain parameter to apply after log
+    bmdDeckLinkFrameMetadataCintelLiftRed                        = /* 'GnRd' */ 0x476E5264,    // Red lift parameter to apply after log and gain
+    bmdDeckLinkFrameMetadataCintelLiftGreen                      = /* 'GnGr' */ 0x476E4772,    // Green lift parameter to apply after log and gain
+    bmdDeckLinkFrameMetadataCintelLiftBlue                       = /* 'GnBl' */ 0x476E426C     // Blue lift parameter to apply after log and gain
+};
+
+/* Enum BMDDuplexMode - Duplex for configurable ports */
+
+typedef uint32_t BMDDuplexMode;
+enum _BMDDuplexMode {
+    bmdDuplexModeFull                                            = /* 'fdup' */ 0x66647570,
+    bmdDuplexModeHalf                                            = /* 'hdup' */ 0x68647570
+};
+
 /* Enum BMDDeckLinkAttributeID - DeckLink Attribute ID */
 
 typedef uint32_t BMDDeckLinkAttributeID;
@@ -346,7 +460,6 @@ enum _BMDDeckLinkAttributeID {
     BMDDeckLinkCanOnlyAdjustOverallVideoOutputGain               = /* 'ovog' */ 0x6F766F67,
     BMDDeckLinkHasVideoInputAntiAliasingFilter                   = /* 'aafl' */ 0x6161666C,
     BMDDeckLinkHasBypass                                         = /* 'byps' */ 0x62797073,
-    BMDDeckLinkSupportsDesktopDisplay                            = /* 'extd' */ 0x65787464,
     BMDDeckLinkSupportsClockTimingAdjustment                     = /* 'ctad' */ 0x63746164,
     BMDDeckLinkSupportsFullDuplex                                = /* 'fdup' */ 0x66647570,
     BMDDeckLinkSupportsFullFrameReferenceInputTimingOffset       = /* 'frin' */ 0x6672696E,
@@ -355,27 +468,32 @@ enum _BMDDeckLinkAttributeID {
     BMDDeckLinkSupportsQuadLinkSDI                               = /* 'sqls' */ 0x73716C73,
     BMDDeckLinkSupportsIdleOutput                                = /* 'idou' */ 0x69646F75,
     BMDDeckLinkHasLTCTimecodeInput                               = /* 'hltc' */ 0x686C7463,
+    BMDDeckLinkSupportsDuplexModeConfiguration                   = /* 'dupx' */ 0x64757078,
+    BMDDeckLinkSupportsHDRMetadata                               = /* 'hdrm' */ 0x6864726D,
+    BMDDeckLinkSupportsColorspaceMetadata                        = /* 'cmet' */ 0x636D6574,
 
     /* Integers */
 
     BMDDeckLinkMaximumAudioChannels                              = /* 'mach' */ 0x6D616368,
-    BMDDeckLinkMaximumAnalogAudioChannels                        = /* 'aach' */ 0x61616368,
+    BMDDeckLinkMaximumAnalogAudioInputChannels                   = /* 'iach' */ 0x69616368,
+    BMDDeckLinkMaximumAnalogAudioOutputChannels                  = /* 'aach' */ 0x61616368,
     BMDDeckLinkNumberOfSubDevices                                = /* 'nsbd' */ 0x6E736264,
     BMDDeckLinkSubDeviceIndex                                    = /* 'subi' */ 0x73756269,
     BMDDeckLinkPersistentID                                      = /* 'peid' */ 0x70656964,
+    BMDDeckLinkDeviceGroupID                                     = /* 'dgid' */ 0x64676964,
     BMDDeckLinkTopologicalID                                     = /* 'toid' */ 0x746F6964,
-    BMDDeckLinkVideoOutputConnections                            = /* 'vocn' */ 0x766F636E,
-    BMDDeckLinkVideoInputConnections                             = /* 'vicn' */ 0x7669636E,
-    BMDDeckLinkAudioOutputConnections                            = /* 'aocn' */ 0x616F636E,
-    BMDDeckLinkAudioInputConnections                             = /* 'aicn' */ 0x6169636E,
-    BMDDeckLinkDeviceBusyState                                   = /* 'dbst' */ 0x64627374,
+    BMDDeckLinkVideoOutputConnections                            = /* 'vocn' */ 0x766F636E,    // Returns a BMDVideoConnection bit field
+    BMDDeckLinkVideoInputConnections                             = /* 'vicn' */ 0x7669636E,    // Returns a BMDVideoConnection bit field
+    BMDDeckLinkAudioOutputConnections                            = /* 'aocn' */ 0x616F636E,    // Returns a BMDAudioConnection bit field
+    BMDDeckLinkAudioInputConnections                             = /* 'aicn' */ 0x6169636E,    // Returns a BMDAudioConnection bit field
     BMDDeckLinkVideoIOSupport                                    = /* 'vios' */ 0x76696F73,    // Returns a BMDVideoIOSupport bit field
-    BMDDeckLinkDeckControlConnections                            = /* 'dccn' */ 0x6463636E,
+    BMDDeckLinkDeckControlConnections                            = /* 'dccn' */ 0x6463636E,    // Returns a BMDDeckControlConnection bit field
     BMDDeckLinkDeviceInterface                                   = /* 'dbus' */ 0x64627573,    // Returns a BMDDeviceInterface
     BMDDeckLinkAudioInputRCAChannelCount                         = /* 'airc' */ 0x61697263,
     BMDDeckLinkAudioInputXLRChannelCount                         = /* 'aixc' */ 0x61697863,
     BMDDeckLinkAudioOutputRCAChannelCount                        = /* 'aorc' */ 0x616F7263,
     BMDDeckLinkAudioOutputXLRChannelCount                        = /* 'aoxc' */ 0x616F7863,
+    BMDDeckLinkPairedDevicePersistentID                          = /* 'ppid' */ 0x70706964,
 
     /* Floats */
 
@@ -391,7 +509,8 @@ enum _BMDDeckLinkAttributeID {
     BMDDeckLinkSerialPortDeviceName                              = /* 'slpn' */ 0x736C706E,
     BMDDeckLinkVendorName                                        = /* 'vndr' */ 0x766E6472,
     BMDDeckLinkDisplayName                                       = /* 'dspn' */ 0x6473706E,
-    BMDDeckLinkModelName                                         = /* 'mdln' */ 0x6D646C6E
+    BMDDeckLinkModelName                                         = /* 'mdln' */ 0x6D646C6E,
+    BMDDeckLinkDeviceHandle                                      = /* 'devh' */ 0x64657668
 };
 
 /* Enum BMDDeckLinkAPIInformationID - DeckLinkAPI information ID */
@@ -401,6 +520,63 @@ enum _BMDDeckLinkAPIInformationID {
     BMDDeckLinkAPIVersion                                        = /* 'vers' */ 0x76657273
 };
 
+/* Enum BMDDeckLinkStatusID - DeckLink Status ID */
+
+typedef uint32_t BMDDeckLinkStatusID;
+enum _BMDDeckLinkStatusID {
+
+    /* Integers */
+
+    bmdDeckLinkStatusDetectedVideoInputMode                      = /* 'dvim' */ 0x6476696D,
+    bmdDeckLinkStatusDetectedVideoInputFlags                     = /* 'dvif' */ 0x64766966,
+    bmdDeckLinkStatusCurrentVideoInputMode                       = /* 'cvim' */ 0x6376696D,
+    bmdDeckLinkStatusCurrentVideoInputPixelFormat                = /* 'cvip' */ 0x63766970,
+    bmdDeckLinkStatusCurrentVideoInputFlags                      = /* 'cvif' */ 0x63766966,
+    bmdDeckLinkStatusCurrentVideoOutputMode                      = /* 'cvom' */ 0x63766F6D,
+    bmdDeckLinkStatusCurrentVideoOutputFlags                     = /* 'cvof' */ 0x63766F66,
+    bmdDeckLinkStatusPCIExpressLinkWidth                         = /* 'pwid' */ 0x70776964,
+    bmdDeckLinkStatusPCIExpressLinkSpeed                         = /* 'plnk' */ 0x706C6E6B,
+    bmdDeckLinkStatusLastVideoOutputPixelFormat                  = /* 'opix' */ 0x6F706978,
+    bmdDeckLinkStatusReferenceSignalMode                         = /* 'refm' */ 0x7265666D,
+    bmdDeckLinkStatusReferenceSignalFlags                        = /* 'reff' */ 0x72656666,
+    bmdDeckLinkStatusDuplexMode                                  = /* 'dupx' */ 0x64757078,
+    bmdDeckLinkStatusBusy                                        = /* 'busy' */ 0x62757379,
+    bmdDeckLinkStatusInterchangeablePanelType                    = /* 'icpt' */ 0x69637074,
+    bmdDeckLinkStatusDeviceTemperature                           = /* 'dtmp' */ 0x64746D70,
+
+    /* Flags */
+
+    bmdDeckLinkStatusVideoInputSignalLocked                      = /* 'visl' */ 0x7669736C,
+    bmdDeckLinkStatusReferenceSignalLocked                       = /* 'refl' */ 0x7265666C,
+    bmdDeckLinkStatusReceivedEDID                                = /* 'edid' */ 0x65646964
+};
+
+/* Enum BMDDeckLinkVideoStatusFlags -  */
+
+typedef uint32_t BMDDeckLinkVideoStatusFlags;
+enum _BMDDeckLinkVideoStatusFlags {
+    bmdDeckLinkVideoStatusPsF                                    = 1 << 0,
+    bmdDeckLinkVideoStatusDualStream3D                           = 1 << 1
+};
+
+/* Enum BMDDuplexStatus - Duplex status of the device */
+
+typedef uint32_t BMDDuplexStatus;
+enum _BMDDuplexStatus {
+    bmdDuplexStatusFullDuplex                                    = /* 'fdup' */ 0x66647570,
+    bmdDuplexStatusHalfDuplex                                    = /* 'hdup' */ 0x68647570,
+    bmdDuplexStatusSimplex                                       = /* 'splx' */ 0x73706C78,
+    bmdDuplexStatusInactive                                      = /* 'inac' */ 0x696E6163
+};
+
+/* Enum BMDPanelType - The type of interchangeable panel */
+
+typedef uint32_t BMDPanelType;
+enum _BMDPanelType {
+    bmdPanelNotDetected                                          = /* 'npnl' */ 0x6E706E6C,
+    bmdPanelTeranexMiniSmartPanel                                = /* 'tmsm' */ 0x746D736D
+};
+
 /* Enum BMDDeviceBusyState - Current device busy state */
 
 typedef uint32_t BMDDeviceBusyState;
@@ -433,7 +609,8 @@ enum _BMD3DPreviewFormat {
 
 typedef uint32_t BMDNotifications;
 enum _BMDNotifications {
-    bmdPreferencesChanged                                        = /* 'pref' */ 0x70726566
+    bmdPreferencesChanged                                        = /* 'pref' */ 0x70726566,
+    bmdStatusChanged                                             = /* 'stat' */ 0x73746174
 };
 
 #if defined(__cplusplus)
@@ -449,11 +626,16 @@ class IDeckLinkIterator;
 class IDeckLinkAPIInformation;
 class IDeckLinkOutput;
 class IDeckLinkInput;
+class IDeckLinkHDMIInputEDID;
 class IDeckLinkEncoderInput;
 class IDeckLinkVideoFrame;
 class IDeckLinkMutableVideoFrame;
 class IDeckLinkVideoFrame3DExtensions;
+class IDeckLinkVideoFrameMetadataExtensions;
 class IDeckLinkVideoInputFrame;
+class IDeckLinkAncillaryPacket;
+class IDeckLinkAncillaryPacketIterator;
+class IDeckLinkVideoFrameAncillaryPackets;
 class IDeckLinkVideoFrameAncillary;
 class IDeckLinkEncoderPacket;
 class IDeckLinkEncoderVideoPacket;
@@ -465,6 +647,7 @@ class IDeckLinkGLScreenPreviewHelper;
 class IDeckLinkNotificationCallback;
 class IDeckLinkNotification;
 class IDeckLinkAttributes;
+class IDeckLinkStatus;
 class IDeckLinkKeyer;
 class IDeckLinkVideoConversion;
 class IDeckLinkDeviceNotificationCallback;
@@ -472,7 +655,7 @@ class IDeckLinkDiscovery;
 
 /* Interface IDeckLinkVideoOutputCallback - Frame completion callback. */
 
-class IDeckLinkVideoOutputCallback : public IUnknown
+class BMD_PUBLIC IDeckLinkVideoOutputCallback : public IUnknown
 {
 public:
     virtual HRESULT ScheduledFrameCompleted (/* in */ IDeckLinkVideoFrame *completedFrame, /* in */ BMDOutputFrameCompletionResult result) = 0;
@@ -484,7 +667,7 @@ protected:
 
 /* Interface IDeckLinkInputCallback - Frame arrival callback. */
 
-class IDeckLinkInputCallback : public IUnknown
+class BMD_PUBLIC IDeckLinkInputCallback : public IUnknown
 {
 public:
     virtual HRESULT VideoInputFormatChanged (/* in */ BMDVideoInputFormatChangedEvents notificationEvents, /* in */ IDeckLinkDisplayMode *newDisplayMode, /* in */ BMDDetectedVideoInputFormatFlags detectedSignalFlags) = 0;
@@ -496,7 +679,7 @@ protected:
 
 /* Interface IDeckLinkEncoderInputCallback - Frame arrival callback. */
 
-class IDeckLinkEncoderInputCallback : public IUnknown
+class BMD_PUBLIC IDeckLinkEncoderInputCallback : public IUnknown
 {
 public:
     virtual HRESULT VideoInputSignalChanged (/* in */ BMDVideoInputFormatChangedEvents notificationEvents, /* in */ IDeckLinkDisplayMode *newDisplayMode, /* in */ BMDDetectedVideoInputFormatFlags detectedSignalFlags) = 0;
@@ -509,7 +692,7 @@ protected:
 
 /* Interface IDeckLinkMemoryAllocator - Memory allocator for video frames. */
 
-class IDeckLinkMemoryAllocator : public IUnknown
+class BMD_PUBLIC IDeckLinkMemoryAllocator : public IUnknown
 {
 public:
     virtual HRESULT AllocateBuffer (/* in */ uint32_t bufferSize, /* out */ void **allocatedBuffer) = 0;
@@ -521,7 +704,7 @@ public:
 
 /* Interface IDeckLinkAudioOutputCallback - Optional callback to allow audio samples to be pulled as required. */
 
-class IDeckLinkAudioOutputCallback : public IUnknown
+class BMD_PUBLIC IDeckLinkAudioOutputCallback : public IUnknown
 {
 public:
     virtual HRESULT RenderAudioSamples (/* in */ bool preroll) = 0;
@@ -529,7 +712,7 @@ public:
 
 /* Interface IDeckLinkIterator - enumerates installed DeckLink hardware */
 
-class IDeckLinkIterator : public IUnknown
+class BMD_PUBLIC IDeckLinkIterator : public IUnknown
 {
 public:
     virtual HRESULT Next (/* out */ IDeckLink **deckLinkInstance) = 0;
@@ -537,7 +720,7 @@ public:
 
 /* Interface IDeckLinkAPIInformation - DeckLinkAPI attribute interface */
 
-class IDeckLinkAPIInformation : public IUnknown
+class BMD_PUBLIC IDeckLinkAPIInformation : public IUnknown
 {
 public:
     virtual HRESULT GetFlag (/* in */ BMDDeckLinkAPIInformationID cfgID, /* out */ bool *value) = 0;
@@ -551,7 +734,7 @@ protected:
 
 /* Interface IDeckLinkOutput - Created by QueryInterface from IDeckLink. */
 
-class IDeckLinkOutput : public IUnknown
+class BMD_PUBLIC IDeckLinkOutput : public IUnknown
 {
 public:
     virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoOutputFlags flags, /* out */ BMDDisplayModeSupport *result, /* out */ IDeckLinkDisplayMode **resultDisplayMode) = 0;
@@ -566,7 +749,7 @@ public:
 
     virtual HRESULT SetVideoOutputFrameMemoryAllocator (/* in */ IDeckLinkMemoryAllocator *theAllocator) = 0;
     virtual HRESULT CreateVideoFrame (/* in */ int32_t width, /* in */ int32_t height, /* in */ int32_t rowBytes, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDFrameFlags flags, /* out */ IDeckLinkMutableVideoFrame **outFrame) = 0;
-    virtual HRESULT CreateAncillaryData (/* in */ BMDPixelFormat pixelFormat, /* out */ IDeckLinkVideoFrameAncillary **outBuffer) = 0;
+    virtual HRESULT CreateAncillaryData (/* in */ BMDPixelFormat pixelFormat, /* out */ IDeckLinkVideoFrameAncillary **outBuffer) = 0; // Use of IDeckLinkVideoFrameAncillaryPackets is preferred
 
     virtual HRESULT DisplayVideoFrameSync (/* in */ IDeckLinkVideoFrame *theFrame) = 0;
     virtual HRESULT ScheduleVideoFrame (/* in */ IDeckLinkVideoFrame *theFrame, /* in */ BMDTimeValue displayTime, /* in */ BMDTimeValue displayDuration, /* in */ BMDTimeScale timeScale) = 0;
@@ -608,7 +791,7 @@ protected:
 
 /* Interface IDeckLinkInput - Created by QueryInterface from IDeckLink. */
 
-class IDeckLinkInput : public IUnknown
+class BMD_PUBLIC IDeckLinkInput : public IUnknown
 {
 public:
     virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags, /* out */ BMDDisplayModeSupport *result, /* out */ IDeckLinkDisplayMode **resultDisplayMode) = 0;
@@ -645,9 +828,22 @@ protected:
     virtual ~IDeckLinkInput () {} // call Release method to drop reference count
 };
 
+/* Interface IDeckLinkHDMIInputEDID - Created by QueryInterface from IDeckLink. Releasing all references will restore EDID to default */
+
+class BMD_PUBLIC IDeckLinkHDMIInputEDID : public IUnknown
+{
+public:
+    virtual HRESULT SetInt (/* in */ BMDDeckLinkHDMIInputEDIDID cfgID, /* in */ int64_t value) = 0;
+    virtual HRESULT GetInt (/* in */ BMDDeckLinkHDMIInputEDIDID cfgID, /* out */ int64_t *value) = 0;
+    virtual HRESULT WriteToEDID (void) = 0;
+
+protected:
+    virtual ~IDeckLinkHDMIInputEDID () {} // call Release method to drop reference count
+};
+
 /* Interface IDeckLinkEncoderInput - Created by QueryInterface from IDeckLink. */
 
-class IDeckLinkEncoderInput : public IUnknown
+class BMD_PUBLIC IDeckLinkEncoderInput : public IUnknown
 {
 public:
     virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags, /* out */ BMDDisplayModeSupport *result, /* out */ IDeckLinkDisplayMode **resultDisplayMode) = 0;
@@ -684,7 +880,7 @@ protected:
 
 /* Interface IDeckLinkVideoFrame - Interface to encapsulate a video frame; can be caller-implemented. */
 
-class IDeckLinkVideoFrame : public IUnknown
+class BMD_PUBLIC IDeckLinkVideoFrame : public IUnknown
 {
 public:
     virtual long GetWidth (void) = 0;
@@ -695,7 +891,7 @@ public:
     virtual HRESULT GetBytes (/* out */ void **buffer) = 0;
 
     virtual HRESULT GetTimecode (/* in */ BMDTimecodeFormat format, /* out */ IDeckLinkTimecode **timecode) = 0;
-    virtual HRESULT GetAncillaryData (/* out */ IDeckLinkVideoFrameAncillary **ancillary) = 0;
+    virtual HRESULT GetAncillaryData (/* out */ IDeckLinkVideoFrameAncillary **ancillary) = 0; // Use of IDeckLinkVideoFrameAncillaryPackets is preferred
 
 protected:
     virtual ~IDeckLinkVideoFrame () {} // call Release method to drop reference count
@@ -703,7 +899,7 @@ protected:
 
 /* Interface IDeckLinkMutableVideoFrame - Created by IDeckLinkOutput::CreateVideoFrame. */
 
-class IDeckLinkMutableVideoFrame : public IDeckLinkVideoFrame
+class BMD_PUBLIC IDeckLinkMutableVideoFrame : public IDeckLinkVideoFrame
 {
 public:
     virtual HRESULT SetFlags (/* in */ BMDFrameFlags newFlags) = 0;
@@ -719,7 +915,7 @@ protected:
 
 /* Interface IDeckLinkVideoFrame3DExtensions - Optional interface implemented on IDeckLinkVideoFrame to support 3D frames */
 
-class IDeckLinkVideoFrame3DExtensions : public IUnknown
+class BMD_PUBLIC IDeckLinkVideoFrame3DExtensions : public IUnknown
 {
 public:
     virtual BMDVideo3DPackingFormat Get3DPackingFormat (void) = 0;
@@ -729,9 +925,23 @@ protected:
     virtual ~IDeckLinkVideoFrame3DExtensions () {} // call Release method to drop reference count
 };
 
+/* Interface IDeckLinkVideoFrameMetadataExtensions - Optional interface implemented on IDeckLinkVideoFrame to support frame metadata such as HDMI HDR information */
+
+class BMD_PUBLIC IDeckLinkVideoFrameMetadataExtensions : public IUnknown
+{
+public:
+    virtual HRESULT GetInt (/* in */ BMDDeckLinkFrameMetadataID metadataID, /* out */ int64_t *value) = 0;
+    virtual HRESULT GetFloat (/* in */ BMDDeckLinkFrameMetadataID metadataID, /* out */ double *value) = 0;
+    virtual HRESULT GetFlag (/* in */ BMDDeckLinkFrameMetadataID metadataID, /* out */ bool* value) = 0;
+    virtual HRESULT GetString (/* in */ BMDDeckLinkFrameMetadataID metadataID, /* out */ const char **value) = 0;
+
+protected:
+    virtual ~IDeckLinkVideoFrameMetadataExtensions () {} // call Release method to drop reference count
+};
+
 /* Interface IDeckLinkVideoInputFrame - Provided by the IDeckLinkVideoInput frame arrival callback. */
 
-class IDeckLinkVideoInputFrame : public IDeckLinkVideoFrame
+class BMD_PUBLIC IDeckLinkVideoInputFrame : public IDeckLinkVideoFrame
 {
 public:
     virtual HRESULT GetStreamTime (/* out */ BMDTimeValue *frameTime, /* out */ BMDTimeValue *frameDuration, /* in */ BMDTimeScale timeScale) = 0;
@@ -741,13 +951,56 @@ protected:
     virtual ~IDeckLinkVideoInputFrame () {} // call Release method to drop reference count
 };
 
-/* Interface IDeckLinkVideoFrameAncillary - Obtained through QueryInterface() on an IDeckLinkVideoFrame object. */
+/* Interface IDeckLinkAncillaryPacket - On output, user needs to implement this interface */
+
+class BMD_PUBLIC IDeckLinkAncillaryPacket : public IUnknown
+{
+public:
+
+    virtual HRESULT GetBytes (/* in */ BMDAncillaryPacketFormat format /* For output, only one format need be offered */, /* out */ const void **data /* Optional */, /* out */ uint32_t *size /* Optional */) = 0;
+    virtual uint8_t GetDID (void) = 0;
+    virtual uint8_t GetSDID (void) = 0;
+    virtual uint32_t GetLineNumber (void) = 0; // On output, zero is auto
+    virtual uint8_t GetDataStreamIndex (void) = 0; // Usually zero. Can only be 1 if non-SD and the first data stream is completely full
+
+protected:
+    virtual ~IDeckLinkAncillaryPacket () {} // call Release method to drop reference count
+};
+
+/* Interface IDeckLinkAncillaryPacketIterator - Enumerates ancillary packets */
+
+class BMD_PUBLIC IDeckLinkAncillaryPacketIterator : public IUnknown
+{
+public:
+    virtual HRESULT Next (/* out */ IDeckLinkAncillaryPacket **packet) = 0;
+
+protected:
+    virtual ~IDeckLinkAncillaryPacketIterator () {} // call Release method to drop reference count
+};
+
+/* Interface IDeckLinkVideoFrameAncillaryPackets - Obtained through QueryInterface() on an IDeckLinkVideoFrame object. */
+
+class BMD_PUBLIC IDeckLinkVideoFrameAncillaryPackets : public IUnknown
+{
+public:
+
+    virtual HRESULT GetPacketIterator (/* out */ IDeckLinkAncillaryPacketIterator **iterator) = 0;
+    virtual HRESULT GetFirstPacketByID (/* in */ uint8_t DID, /* in */ uint8_t SDID, /* out */ IDeckLinkAncillaryPacket **packet) = 0;
+    virtual HRESULT AttachPacket (/* in */ IDeckLinkAncillaryPacket *packet) = 0; // Implement IDeckLinkAncillaryPacket to output your own
+    virtual HRESULT DetachPacket (/* in */ IDeckLinkAncillaryPacket *packet) = 0;
+    virtual HRESULT DetachAllPackets (void) = 0;
+
+protected:
+    virtual ~IDeckLinkVideoFrameAncillaryPackets () {} // call Release method to drop reference count
+};
+
+/* Interface IDeckLinkVideoFrameAncillary - Use of IDeckLinkVideoFrameAncillaryPackets is preferred. Obtained through QueryInterface() on an IDeckLinkVideoFrame object. */
 
-class IDeckLinkVideoFrameAncillary : public IUnknown
+class BMD_PUBLIC IDeckLinkVideoFrameAncillary : public IUnknown
 {
 public:
 
-    virtual HRESULT GetBufferForVerticalBlankingLine (/* in */ uint32_t lineNumber, /* out */ void **buffer) = 0;
+    virtual HRESULT GetBufferForVerticalBlankingLine (/* in */ uint32_t lineNumber, /* out */ void **buffer) = 0; // Pixels/rowbytes is same as display mode, except for above HD where it's 1920 pixels for UHD modes and 2048 pixels for DCI modes
     virtual BMDPixelFormat GetPixelFormat (void) = 0;
     virtual BMDDisplayMode GetDisplayMode (void) = 0;
 
@@ -757,7 +1010,7 @@ protected:
 
 /* Interface IDeckLinkEncoderPacket - Interface to encapsulate an encoded packet. */
 
-class IDeckLinkEncoderPacket : public IUnknown
+class BMD_PUBLIC IDeckLinkEncoderPacket : public IUnknown
 {
 public:
     virtual HRESULT GetBytes (/* out */ void **buffer) = 0;
@@ -771,7 +1024,7 @@ protected:
 
 /* Interface IDeckLinkEncoderVideoPacket - Provided by the IDeckLinkEncoderInput video packet arrival callback. */
 
-class IDeckLinkEncoderVideoPacket : public IDeckLinkEncoderPacket
+class BMD_PUBLIC IDeckLinkEncoderVideoPacket : public IDeckLinkEncoderPacket
 {
 public:
     virtual BMDPixelFormat GetPixelFormat (void) = 0;
@@ -785,7 +1038,7 @@ protected:
 
 /* Interface IDeckLinkEncoderAudioPacket - Provided by the IDeckLinkEncoderInput audio packet arrival callback. */
 
-class IDeckLinkEncoderAudioPacket : public IDeckLinkEncoderPacket
+class BMD_PUBLIC IDeckLinkEncoderAudioPacket : public IDeckLinkEncoderPacket
 {
 public:
     virtual BMDAudioFormat GetAudioFormat (void) = 0;
@@ -796,7 +1049,7 @@ protected:
 
 /* Interface IDeckLinkH265NALPacket - Obtained through QueryInterface() on an IDeckLinkEncoderVideoPacket object */
 
-class IDeckLinkH265NALPacket : public IDeckLinkEncoderVideoPacket
+class BMD_PUBLIC IDeckLinkH265NALPacket : public IDeckLinkEncoderVideoPacket
 {
 public:
     virtual HRESULT GetUnitType (/* out */ uint8_t *unitType) = 0;
@@ -809,7 +1062,7 @@ protected:
 
 /* Interface IDeckLinkAudioInputPacket - Provided by the IDeckLinkInput callback. */
 
-class IDeckLinkAudioInputPacket : public IUnknown
+class BMD_PUBLIC IDeckLinkAudioInputPacket : public IUnknown
 {
 public:
     virtual long GetSampleFrameCount (void) = 0;
@@ -822,7 +1075,7 @@ protected:
 
 /* Interface IDeckLinkScreenPreviewCallback - Screen preview callback */
 
-class IDeckLinkScreenPreviewCallback : public IUnknown
+class BMD_PUBLIC IDeckLinkScreenPreviewCallback : public IUnknown
 {
 public:
     virtual HRESULT DrawFrame (/* in */ IDeckLinkVideoFrame *theFrame) = 0;
@@ -833,7 +1086,7 @@ protected:
 
 /* Interface IDeckLinkGLScreenPreviewHelper - Created with CoCreateInstance(). */
 
-class IDeckLinkGLScreenPreviewHelper : public IUnknown
+class BMD_PUBLIC IDeckLinkGLScreenPreviewHelper : public IUnknown
 {
 public:
 
@@ -850,7 +1103,7 @@ protected:
 
 /* Interface IDeckLinkNotificationCallback - DeckLink Notification Callback Interface */
 
-class IDeckLinkNotificationCallback : public IUnknown
+class BMD_PUBLIC IDeckLinkNotificationCallback : public IUnknown
 {
 public:
     virtual HRESULT Notify (/* in */ BMDNotifications topic, /* in */ uint64_t param1, /* in */ uint64_t param2) = 0;
@@ -858,7 +1111,7 @@ public:
 
 /* Interface IDeckLinkNotification - DeckLink Notification interface */
 
-class IDeckLinkNotification : public IUnknown
+class BMD_PUBLIC IDeckLinkNotification : public IUnknown
 {
 public:
     virtual HRESULT Subscribe (/* in */ BMDNotifications topic, /* in */ IDeckLinkNotificationCallback *theCallback) = 0;
@@ -867,7 +1120,7 @@ public:
 
 /* Interface IDeckLinkAttributes - DeckLink Attribute interface */
 
-class IDeckLinkAttributes : public IUnknown
+class BMD_PUBLIC IDeckLinkAttributes : public IUnknown
 {
 public:
     virtual HRESULT GetFlag (/* in */ BMDDeckLinkAttributeID cfgID, /* out */ bool *value) = 0;
@@ -879,9 +1132,24 @@ protected:
     virtual ~IDeckLinkAttributes () {} // call Release method to drop reference count
 };
 
+/* Interface IDeckLinkStatus - DeckLink Status interface */
+
+class BMD_PUBLIC IDeckLinkStatus : public IUnknown
+{
+public:
+    virtual HRESULT GetFlag (/* in */ BMDDeckLinkStatusID statusID, /* out */ bool *value) = 0;
+    virtual HRESULT GetInt (/* in */ BMDDeckLinkStatusID statusID, /* out */ int64_t *value) = 0;
+    virtual HRESULT GetFloat (/* in */ BMDDeckLinkStatusID statusID, /* out */ double *value) = 0;
+    virtual HRESULT GetString (/* in */ BMDDeckLinkStatusID statusID, /* out */ const char **value) = 0;
+    virtual HRESULT GetBytes (/* in */ BMDDeckLinkStatusID statusID, /* out */ void *buffer, /* in, out */ uint32_t *bufferSize) = 0;
+
+protected:
+    virtual ~IDeckLinkStatus () {} // call Release method to drop reference count
+};
+
 /* Interface IDeckLinkKeyer - DeckLink Keyer interface */
 
-class IDeckLinkKeyer : public IUnknown
+class BMD_PUBLIC IDeckLinkKeyer : public IUnknown
 {
 public:
     virtual HRESULT Enable (/* in */ bool isExternal) = 0;
@@ -896,7 +1164,7 @@ protected:
 
 /* Interface IDeckLinkVideoConversion - Created with CoCreateInstance(). */
 
-class IDeckLinkVideoConversion : public IUnknown
+class BMD_PUBLIC IDeckLinkVideoConversion : public IUnknown
 {
 public:
     virtual HRESULT ConvertFrame (/* in */ IDeckLinkVideoFrame* srcFrame, /* in */ IDeckLinkVideoFrame* dstFrame) = 0;
@@ -907,7 +1175,7 @@ protected:
 
 /* Interface IDeckLinkDeviceNotificationCallback - DeckLink device arrival/removal notification callbacks */
 
-class IDeckLinkDeviceNotificationCallback : public IUnknown
+class BMD_PUBLIC IDeckLinkDeviceNotificationCallback : public IUnknown
 {
 public:
     virtual HRESULT DeckLinkDeviceArrived (/* in */ IDeckLink* deckLinkDevice) = 0;
@@ -919,7 +1187,7 @@ protected:
 
 /* Interface IDeckLinkDiscovery - DeckLink device discovery */
 
-class IDeckLinkDiscovery : public IUnknown
+class BMD_PUBLIC IDeckLinkDiscovery : public IUnknown
 {
 public:
     virtual HRESULT InstallDeviceNotifications (/* in */ IDeckLinkDeviceNotificationCallback* deviceNotificationCallback) = 0;
@@ -933,11 +1201,12 @@ protected:
 
 extern "C" {
 
-    IDeckLinkIterator* CreateDeckLinkIteratorInstance (void);
-    IDeckLinkDiscovery* CreateDeckLinkDiscoveryInstance (void);
-    IDeckLinkAPIInformation* CreateDeckLinkAPIInformationInstance (void);
-    IDeckLinkGLScreenPreviewHelper* CreateOpenGLScreenPreviewHelper (void);
-    IDeckLinkVideoConversion* CreateVideoConversionInstance (void);
+    IDeckLinkIterator* BMD_PUBLIC CreateDeckLinkIteratorInstance (void);
+    IDeckLinkDiscovery* BMD_PUBLIC CreateDeckLinkDiscoveryInstance (void);
+    IDeckLinkAPIInformation* BMD_PUBLIC CreateDeckLinkAPIInformationInstance (void);
+    IDeckLinkGLScreenPreviewHelper* BMD_PUBLIC CreateOpenGLScreenPreviewHelper (void);
+    IDeckLinkVideoConversion* BMD_PUBLIC CreateVideoConversionInstance (void);
+    IDeckLinkVideoFrameAncillaryPackets* BMD_PUBLIC CreateVideoFrameAncillaryPacketsInstance (void); // For use when creating a custom IDeckLinkVideoFrame without wrapping IDeckLinkOutput::CreateVideoFrame
 
 }