/* -LICENSE-START- ** Copyright (c) 2020 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 ** this license (the "Software") to use, reproduce, display, distribute, ** execute, and transmit the Software, and to prepare derivative works of the ** Software, and to permit third-parties to whom the Software is furnished to ** do so, all subject to the following: ** ** The copyright notices in the Software and this entire statement, including ** the above license grant, this restriction and the following disclaimer, ** must be included in all copies of the Software, in whole or in part, and ** all derivative works of the Software, unless such copies or derivative ** works are solely in the form of machine-executable object code generated by ** a source language processor. ** ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT ** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE ** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, ** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER ** DEALINGS IN THE SOFTWARE. ** -LICENSE-END- */ #ifndef BMD_CONST #if defined(_MSC_VER) #define BMD_CONST __declspec(selectany) static const #else #define BMD_CONST static const #endif #endif /* DeckLink API */ import "unknwn.idl"; [uuid(D864517A-EDD5-466D-867D-C819F1C052BB), version(1.0), helpstring("DeckLink API Library")] library DeckLinkAPI { #include "DeckLinkAPITypes.idl" #include "DeckLinkAPIModes.idl" #include "DeckLinkAPIDiscovery.idl" #include "DeckLinkAPIConfiguration.idl" #include "DeckLinkAPIDeckControl.idl" #include "DeckLinkAPIStreaming.idl" // Type Declarations // Enumeration Mapping cpp_quote("typedef unsigned int BMDFrameFlags;") cpp_quote("typedef unsigned int BMDVideoInputFlags;") cpp_quote("typedef unsigned int BMDVideoInputFormatChangedEvents;") cpp_quote("typedef unsigned int BMDDetectedVideoInputFormatFlags;") cpp_quote("typedef unsigned int BMDDeckLinkCapturePassthroughMode;") cpp_quote("typedef unsigned int BMDAnalogVideoFlags;") cpp_quote("typedef unsigned int BMDDeviceBusyState;") cpp_quote("#if 0") typedef enum _BMDFrameFlags BMDFrameFlags; typedef enum _BMDVideoInputFlags BMDVideoInputFlags; typedef enum _BMDVideoInputFormatChangedEvents BMDVideoInputFormatChangedEvents; typedef enum _BMDDetectedVideoInputFormatFlags BMDDetectedVideoInputFormatFlags; typedef enum _BMDDeckLinkCapturePassthroughMode BMDDeckLinkCapturePassthroughMode; typedef enum _BMDAnalogVideoFlags BMDAnalogVideoFlags; typedef enum _BMDDeviceBusyState BMDDeviceBusyState; cpp_quote("#endif") /* Enum BMDVideoOutputFlags - Flags to control the output of ancillary data along with video. */ typedef [v1_enum] enum _BMDVideoOutputFlags { bmdVideoOutputFlagDefault = 0, bmdVideoOutputVANC = 1 << 0, bmdVideoOutputVITC = 1 << 1, bmdVideoOutputRP188 = 1 << 2, bmdVideoOutputDualStream3D = 1 << 4, bmdVideoOutputSynchronizeToPlaybackGroup = 1 << 6 } BMDVideoOutputFlags; /* Enum BMDSupportedVideoModeFlags - Flags to describe supported video modes */ typedef [v1_enum] enum _BMDSupportedVideoModeFlags { bmdSupportedVideoModeDefault = 0, bmdSupportedVideoModeKeying = 1 << 0, bmdSupportedVideoModeDualStream3D = 1 << 1, bmdSupportedVideoModeSDISingleLink = 1 << 2, bmdSupportedVideoModeSDIDualLink = 1 << 3, bmdSupportedVideoModeSDIQuadLink = 1 << 4, bmdSupportedVideoModeInAnyProfile = 1 << 5 } BMDSupportedVideoModeFlags; /* Enum BMDPacketType - Type of packet */ typedef [v1_enum] enum _BMDPacketType { bmdPacketTypeStreamInterruptedMarker = /* 'sint' */ 0x73696E74, // A packet of this type marks the time when a video stream was interrupted, for example by a disconnected cable bmdPacketTypeStreamData = /* 'sdat' */ 0x73646174 // Regular stream data } BMDPacketType; /* Enum BMDFrameFlags - Frame flags */ [v1_enum] enum _BMDFrameFlags { bmdFrameFlagDefault = 0, bmdFrameFlagFlipVertical = 1 << 0, bmdFrameContainsHDRMetadata = 1 << 1, /* Flags that are applicable only to instances of IDeckLinkVideoInputFrame */ bmdFrameCapturedAsPsF = 1 << 30, bmdFrameHasNoInputSource = 1 << 31 }; /* Enum BMDVideoInputFlags - Flags applicable to video input */ [v1_enum] enum _BMDVideoInputFlags { bmdVideoInputFlagDefault = 0, bmdVideoInputEnableFormatDetection = 1 << 0, bmdVideoInputDualStream3D = 1 << 1, bmdVideoInputSynchronizeToCaptureGroup = 1 << 2 }; /* Enum BMDVideoInputFormatChangedEvents - Bitmask passed to the VideoInputFormatChanged notification to identify the properties of the input signal that have changed */ [v1_enum] enum _BMDVideoInputFormatChangedEvents { bmdVideoInputDisplayModeChanged = 1 << 0, bmdVideoInputFieldDominanceChanged = 1 << 1, bmdVideoInputColorspaceChanged = 1 << 2 }; /* Enum BMDDetectedVideoInputFormatFlags - Flags passed to the VideoInputFormatChanged notification to describe the detected video input signal */ [v1_enum] enum _BMDDetectedVideoInputFormatFlags { bmdDetectedVideoInputYCbCr422 = 1 << 0, bmdDetectedVideoInputRGB444 = 1 << 1, bmdDetectedVideoInputDualStream3D = 1 << 2, bmdDetectedVideoInput12BitDepth = 1 << 3, bmdDetectedVideoInput10BitDepth = 1 << 4, bmdDetectedVideoInput8BitDepth = 1 << 5 }; /* Enum BMDDeckLinkCapturePassthroughMode - Enumerates whether the video output is electrically connected to the video input or if the clean switching mode is enabled */ [v1_enum] enum _BMDDeckLinkCapturePassthroughMode { bmdDeckLinkCapturePassthroughModeDisabled = /* 'pdis' */ 0x70646973, bmdDeckLinkCapturePassthroughModeDirect = /* 'pdir' */ 0x70646972, bmdDeckLinkCapturePassthroughModeCleanSwitch = /* 'pcln' */ 0x70636C6E }; /* Enum BMDOutputFrameCompletionResult - Frame Completion Callback */ typedef [v1_enum] enum _BMDOutputFrameCompletionResult { bmdOutputFrameCompleted, bmdOutputFrameDisplayedLate, bmdOutputFrameDropped, bmdOutputFrameFlushed } BMDOutputFrameCompletionResult; /* Enum BMDReferenceStatus - GenLock input status */ typedef [v1_enum] enum _BMDReferenceStatus { bmdReferenceNotSupportedByHardware = 1 << 0, bmdReferenceLocked = 1 << 1 } BMDReferenceStatus; /* Enum BMDAudioFormat - Audio Format */ typedef [v1_enum] enum _BMDAudioFormat { bmdAudioFormatPCM = /* 'lpcm' */ 0x6C70636D // Linear signed PCM samples } BMDAudioFormat; /* Enum BMDAudioSampleRate - Audio sample rates supported for output/input */ typedef [v1_enum] enum _BMDAudioSampleRate { bmdAudioSampleRate48kHz = 48000 } BMDAudioSampleRate; /* Enum BMDAudioSampleType - Audio sample sizes supported for output/input */ typedef [v1_enum] enum _BMDAudioSampleType { bmdAudioSampleType16bitInteger = 16, bmdAudioSampleType32bitInteger = 32 } BMDAudioSampleType; /* Enum BMDAudioOutputStreamType - Audio output stream type */ typedef [v1_enum] enum _BMDAudioOutputStreamType { bmdAudioOutputStreamContinuous, bmdAudioOutputStreamContinuousDontResample, bmdAudioOutputStreamTimestamped } BMDAudioOutputStreamType; /* Enum BMDAncillaryPacketFormat - Ancillary packet format */ typedef [v1_enum] enum _BMDAncillaryPacketFormat { bmdAncillaryPacketFormatUInt8 = /* 'ui08' */ 0x75693038, bmdAncillaryPacketFormatUInt16 = /* 'ui16' */ 0x75693136, bmdAncillaryPacketFormatYCbCr10 = /* 'v210' */ 0x76323130 } BMDAncillaryPacketFormat; /* Enum BMDTimecodeFormat - Timecode formats for frame metadata */ typedef [v1_enum] enum _BMDTimecodeFormat { bmdTimecodeRP188VITC1 = /* 'rpv1' */ 0x72707631, // RP188 timecode where DBB1 equals VITC1 (line 9) bmdTimecodeRP188VITC2 = /* 'rp12' */ 0x72703132, // RP188 timecode where DBB1 equals VITC2 (line 9 for progressive or line 571 for interlaced/PsF) bmdTimecodeRP188LTC = /* 'rplt' */ 0x72706C74, // RP188 timecode where DBB1 equals LTC (line 10) bmdTimecodeRP188HighFrameRate = /* 'rphr' */ 0x72706872, // RP188 timecode where DBB1 is an HFRTC (SMPTE ST 12-3), the only timecode allowing the frame value to go above 30 bmdTimecodeRP188Any = /* 'rp18' */ 0x72703138, // Convenience for capture, returning the first valid timecode in {HFRTC (if supported), VITC1, LTC, VITC2} bmdTimecodeVITC = /* 'vitc' */ 0x76697463, bmdTimecodeVITCField2 = /* 'vit2' */ 0x76697432, bmdTimecodeSerial = /* 'seri' */ 0x73657269 } BMDTimecodeFormat; /* Enum BMDAnalogVideoFlags - Analog video display flags */ [v1_enum] enum _BMDAnalogVideoFlags { bmdAnalogVideoFlagCompositeSetup75 = 1 << 0, bmdAnalogVideoFlagComponentBetacamLevels = 1 << 1 }; /* Enum BMDAudioOutputAnalogAESSwitch - Audio output Analog/AESEBU switch */ typedef [v1_enum] enum _BMDAudioOutputAnalogAESSwitch { bmdAudioOutputSwitchAESEBU = /* 'aes ' */ 0x61657320, bmdAudioOutputSwitchAnalog = /* 'anlg' */ 0x616E6C67 } BMDAudioOutputAnalogAESSwitch; /* Enum BMDVideoOutputConversionMode - Video/audio conversion mode */ typedef [v1_enum] enum _BMDVideoOutputConversionMode { bmdNoVideoOutputConversion = /* 'none' */ 0x6E6F6E65, bmdVideoOutputLetterboxDownconversion = /* 'ltbx' */ 0x6C746278, bmdVideoOutputAnamorphicDownconversion = /* 'amph' */ 0x616D7068, bmdVideoOutputHD720toHD1080Conversion = /* '720c' */ 0x37323063, bmdVideoOutputHardwareLetterboxDownconversion = /* 'HWlb' */ 0x48576C62, bmdVideoOutputHardwareAnamorphicDownconversion = /* 'HWam' */ 0x4857616D, bmdVideoOutputHardwareCenterCutDownconversion = /* 'HWcc' */ 0x48576363, bmdVideoOutputHardware720p1080pCrossconversion = /* 'xcap' */ 0x78636170, bmdVideoOutputHardwareAnamorphic720pUpconversion = /* 'ua7p' */ 0x75613770, bmdVideoOutputHardwareAnamorphic1080iUpconversion = /* 'ua1i' */ 0x75613169, bmdVideoOutputHardwareAnamorphic149To720pUpconversion = /* 'u47p' */ 0x75343770, bmdVideoOutputHardwareAnamorphic149To1080iUpconversion = /* 'u41i' */ 0x75343169, bmdVideoOutputHardwarePillarbox720pUpconversion = /* 'up7p' */ 0x75703770, bmdVideoOutputHardwarePillarbox1080iUpconversion = /* 'up1i' */ 0x75703169 } BMDVideoOutputConversionMode; /* Enum BMDVideoInputConversionMode - Video input conversion mode */ typedef [v1_enum] enum _BMDVideoInputConversionMode { bmdNoVideoInputConversion = /* 'none' */ 0x6E6F6E65, bmdVideoInputLetterboxDownconversionFromHD1080 = /* '10lb' */ 0x31306C62, bmdVideoInputAnamorphicDownconversionFromHD1080 = /* '10am' */ 0x3130616D, bmdVideoInputLetterboxDownconversionFromHD720 = /* '72lb' */ 0x37326C62, bmdVideoInputAnamorphicDownconversionFromHD720 = /* '72am' */ 0x3732616D, bmdVideoInputLetterboxUpconversion = /* 'lbup' */ 0x6C627570, bmdVideoInputAnamorphicUpconversion = /* 'amup' */ 0x616D7570 } BMDVideoInputConversionMode; /* Enum BMDVideo3DPackingFormat - Video 3D packing format */ typedef [v1_enum] enum _BMDVideo3DPackingFormat { bmdVideo3DPackingSidebySideHalf = /* 'sbsh' */ 0x73627368, bmdVideo3DPackingLinebyLine = /* 'lbyl' */ 0x6C62796C, bmdVideo3DPackingTopAndBottom = /* 'tabo' */ 0x7461626F, bmdVideo3DPackingFramePacking = /* 'frpk' */ 0x6672706B, bmdVideo3DPackingLeftOnly = /* 'left' */ 0x6C656674, bmdVideo3DPackingRightOnly = /* 'righ' */ 0x72696768 } BMDVideo3DPackingFormat; /* Enum BMDIdleVideoOutputOperation - Video output operation when not playing video */ typedef [v1_enum] enum _BMDIdleVideoOutputOperation { bmdIdleVideoOutputBlack = /* 'blac' */ 0x626C6163, bmdIdleVideoOutputLastFrame = /* 'lafa' */ 0x6C616661 } BMDIdleVideoOutputOperation; /* Enum BMDVideoEncoderFrameCodingMode - Video frame coding mode */ typedef [v1_enum] enum _BMDVideoEncoderFrameCodingMode { bmdVideoEncoderFrameCodingModeInter = /* 'inte' */ 0x696E7465, bmdVideoEncoderFrameCodingModeIntra = /* 'intr' */ 0x696E7472 } BMDVideoEncoderFrameCodingMode; /* Enum BMDDNxHRLevel - DNxHR Levels */ typedef [v1_enum] enum _BMDDNxHRLevel { bmdDNxHRLevelSQ = /* 'dnsq' */ 0x646E7371, bmdDNxHRLevelLB = /* 'dnlb' */ 0x646E6C62, bmdDNxHRLevelHQ = /* 'dnhq' */ 0x646E6871, bmdDNxHRLevelHQX = /* 'dhqx' */ 0x64687178, bmdDNxHRLevel444 = /* 'd444' */ 0x64343434 } BMDDNxHRLevel; /* Enum BMDLinkConfiguration - Video link configuration */ typedef [v1_enum] enum _BMDLinkConfiguration { bmdLinkConfigurationSingleLink = /* 'lcsl' */ 0x6C63736C, bmdLinkConfigurationDualLink = /* 'lcdl' */ 0x6C63646C, bmdLinkConfigurationQuadLink = /* 'lcql' */ 0x6C63716C } BMDLinkConfiguration; /* Enum BMDDeviceInterface - Device interface type */ typedef [v1_enum] enum _BMDDeviceInterface { bmdDeviceInterfacePCI = /* 'pci ' */ 0x70636920, bmdDeviceInterfaceUSB = /* 'usb ' */ 0x75736220, bmdDeviceInterfaceThunderbolt = /* 'thun' */ 0x7468756E } BMDDeviceInterface; /* Enum BMDColorspace - Colorspace */ typedef [v1_enum] enum _BMDColorspace { bmdColorspaceRec601 = /* 'r601' */ 0x72363031, bmdColorspaceRec709 = /* 'r709' */ 0x72373039, bmdColorspaceRec2020 = /* '2020' */ 0x32303230 } BMDColorspace; /* Enum BMDDynamicRange - SDR or HDR */ typedef [v1_enum] enum _BMDDynamicRange { bmdDynamicRangeSDR = 0, // Standard Dynamic Range in accordance with SMPTE ST 2036-1 bmdDynamicRangeHDRStaticPQ = 1 << 29, // High Dynamic Range PQ in accordance with SMPTE ST 2084 bmdDynamicRangeHDRStaticHLG = 1 << 30 // High Dynamic Range HLG in accordance with ITU-R BT.2100-0 } BMDDynamicRange; /* Enum BMDDeckLinkHDMIInputEDIDID - DeckLink HDMI Input EDID ID */ typedef [v1_enum] enum _BMDDeckLinkHDMIInputEDIDID { /* Integers */ bmdDeckLinkHDMIInputEDIDDynamicRange = /* 'HIDy' */ 0x48494479 // Parameter is of type BMDDynamicRange. Default is (bmdDynamicRangeSDR|bmdDynamicRangeHDRStaticPQ) } BMDDeckLinkHDMIInputEDIDID; /* Enum BMDDeckLinkFrameMetadataID - DeckLink Frame Metadata ID */ typedef [v1_enum] enum _BMDDeckLinkFrameMetadataID { /* Colorspace Metadata - Integers */ bmdDeckLinkFrameMetadataColorspace = /* 'cspc' */ 0x63737063, // Colorspace of video frame (see BMDColorspace) /* HDR Metadata - Integers */ bmdDeckLinkFrameMetadataHDRElectroOpticalTransferFunc = /* 'eotf' */ 0x656F7466, // EOTF in range 0-7 as per CEA 861.3 /* HDR Metadata - Floats */ 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 } BMDDeckLinkFrameMetadataID; /* Enum BMDProfileID - Identifies a profile */ typedef [v1_enum] enum _BMDProfileID { bmdProfileOneSubDeviceFullDuplex = /* '1dfd' */ 0x31646664, bmdProfileOneSubDeviceHalfDuplex = /* '1dhd' */ 0x31646864, bmdProfileTwoSubDevicesFullDuplex = /* '2dfd' */ 0x32646664, bmdProfileTwoSubDevicesHalfDuplex = /* '2dhd' */ 0x32646864, bmdProfileFourSubDevicesHalfDuplex = /* '4dhd' */ 0x34646864 } BMDProfileID; /* Enum BMDHDMITimecodePacking - Packing form of timecode on HDMI */ typedef [v1_enum] enum _BMDHDMITimecodePacking { bmdHDMITimecodePackingIEEEOUI000085 = 0x00008500, bmdHDMITimecodePackingIEEEOUI080046 = 0x08004601, bmdHDMITimecodePackingIEEEOUI5CF9F0 = 0x5CF9F003 } BMDHDMITimecodePacking; /* Enum BMDInternalKeyingAncillaryDataSource - Source for VANC and timecode data when performing internal keying */ typedef [v1_enum] enum _BMDInternalKeyingAncillaryDataSource { bmdInternalKeyingUsesAncillaryDataFromInputSignal = /* 'ikai' */ 0x696B6169, bmdInternalKeyingUsesAncillaryDataFromKeyFrame = /* 'ikak' */ 0x696B616B } BMDInternalKeyingAncillaryDataSource; /* Enum BMDDeckLinkAttributeID - DeckLink Attribute ID */ typedef [v1_enum] enum _BMDDeckLinkAttributeID { /* Flags */ BMDDeckLinkSupportsInternalKeying = /* 'keyi' */ 0x6B657969, BMDDeckLinkSupportsExternalKeying = /* 'keye' */ 0x6B657965, BMDDeckLinkSupportsInputFormatDetection = /* 'infd' */ 0x696E6664, BMDDeckLinkHasReferenceInput = /* 'hrin' */ 0x6872696E, BMDDeckLinkHasSerialPort = /* 'hspt' */ 0x68737074, BMDDeckLinkHasAnalogVideoOutputGain = /* 'avog' */ 0x61766F67, BMDDeckLinkCanOnlyAdjustOverallVideoOutputGain = /* 'ovog' */ 0x6F766F67, BMDDeckLinkHasVideoInputAntiAliasingFilter = /* 'aafl' */ 0x6161666C, BMDDeckLinkHasBypass = /* 'byps' */ 0x62797073, BMDDeckLinkSupportsClockTimingAdjustment = /* 'ctad' */ 0x63746164, BMDDeckLinkSupportsFullFrameReferenceInputTimingOffset = /* 'frin' */ 0x6672696E, BMDDeckLinkSupportsSMPTELevelAOutput = /* 'lvla' */ 0x6C766C61, BMDDeckLinkSupportsAutoSwitchingPPsFOnInput = /* 'apsf' */ 0x61707366, BMDDeckLinkSupportsDualLinkSDI = /* 'sdls' */ 0x73646C73, BMDDeckLinkSupportsQuadLinkSDI = /* 'sqls' */ 0x73716C73, BMDDeckLinkSupportsIdleOutput = /* 'idou' */ 0x69646F75, BMDDeckLinkVANCRequires10BitYUVVideoFrames = /* 'vioY' */ 0x76696F59, // Legacy product requires v210 active picture for IDeckLinkVideoFrameAncillaryPackets or 10-bit VANC BMDDeckLinkHasLTCTimecodeInput = /* 'hltc' */ 0x686C7463, BMDDeckLinkSupportsHDRMetadata = /* 'hdrm' */ 0x6864726D, BMDDeckLinkSupportsColorspaceMetadata = /* 'cmet' */ 0x636D6574, BMDDeckLinkSupportsHDMITimecode = /* 'htim' */ 0x6874696D, BMDDeckLinkSupportsHighFrameRateTimecode = /* 'HFRT' */ 0x48465254, BMDDeckLinkSupportsSynchronizeToCaptureGroup = /* 'stcg' */ 0x73746367, BMDDeckLinkSupportsSynchronizeToPlaybackGroup = /* 'stpg' */ 0x73747067, /* Integers */ BMDDeckLinkMaximumAudioChannels = /* 'mach' */ 0x6D616368, BMDDeckLinkMaximumAnalogAudioInputChannels = /* 'iach' */ 0x69616368, BMDDeckLinkMaximumAnalogAudioOutputChannels = /* 'aach' */ 0x61616368, BMDDeckLinkNumberOfSubDevices = /* 'nsbd' */ 0x6E736264, BMDDeckLinkSubDeviceIndex = /* 'subi' */ 0x73756269, BMDDeckLinkPersistentID = /* 'peid' */ 0x70656964, BMDDeckLinkDeviceGroupID = /* 'dgid' */ 0x64676964, BMDDeckLinkTopologicalID = /* 'toid' */ 0x746F6964, 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, // Returns a BMDDeckControlConnection bit field BMDDeckLinkDeviceInterface = /* 'dbus' */ 0x64627573, // Returns a BMDDeviceInterface BMDDeckLinkAudioInputRCAChannelCount = /* 'airc' */ 0x61697263, BMDDeckLinkAudioInputXLRChannelCount = /* 'aixc' */ 0x61697863, BMDDeckLinkAudioOutputRCAChannelCount = /* 'aorc' */ 0x616F7263, BMDDeckLinkAudioOutputXLRChannelCount = /* 'aoxc' */ 0x616F7863, BMDDeckLinkProfileID = /* 'prid' */ 0x70726964, // Returns a BMDProfileID BMDDeckLinkDuplex = /* 'dupx' */ 0x64757078, BMDDeckLinkMinimumPrerollFrames = /* 'mprf' */ 0x6D707266, BMDDeckLinkSupportedDynamicRange = /* 'sudr' */ 0x73756472, /* Floats */ BMDDeckLinkVideoInputGainMinimum = /* 'vigm' */ 0x7669676D, BMDDeckLinkVideoInputGainMaximum = /* 'vigx' */ 0x76696778, BMDDeckLinkVideoOutputGainMinimum = /* 'vogm' */ 0x766F676D, BMDDeckLinkVideoOutputGainMaximum = /* 'vogx' */ 0x766F6778, BMDDeckLinkMicrophoneInputGainMinimum = /* 'migm' */ 0x6D69676D, BMDDeckLinkMicrophoneInputGainMaximum = /* 'migx' */ 0x6D696778, /* Strings */ BMDDeckLinkSerialPortDeviceName = /* 'slpn' */ 0x736C706E, BMDDeckLinkVendorName = /* 'vndr' */ 0x766E6472, BMDDeckLinkDisplayName = /* 'dspn' */ 0x6473706E, BMDDeckLinkModelName = /* 'mdln' */ 0x6D646C6E, BMDDeckLinkDeviceHandle = /* 'devh' */ 0x64657668 } BMDDeckLinkAttributeID; /* Enum BMDDeckLinkAPIInformationID - DeckLinkAPI information ID */ typedef [v1_enum] enum _BMDDeckLinkAPIInformationID { /* Integer or String */ BMDDeckLinkAPIVersion = /* 'vers' */ 0x76657273 } BMDDeckLinkAPIInformationID; /* Enum BMDDeckLinkStatusID - DeckLink Status ID */ typedef [v1_enum] enum _BMDDeckLinkStatusID { /* Integers */ bmdDeckLinkStatusDetectedVideoInputMode = /* 'dvim' */ 0x6476696D, bmdDeckLinkStatusDetectedVideoInputFormatFlags = /* 'dvff' */ 0x64766666, bmdDeckLinkStatusDetectedVideoInputFieldDominance = /* 'dvfd' */ 0x64766664, bmdDeckLinkStatusDetectedVideoInputColorspace = /* 'dscl' */ 0x6473636C, bmdDeckLinkStatusDetectedVideoInputDynamicRange = /* 'dsdr' */ 0x64736472, bmdDeckLinkStatusDetectedSDILinkConfiguration = /* 'dslc' */ 0x64736C63, 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, bmdDeckLinkStatusBusy = /* 'busy' */ 0x62757379, bmdDeckLinkStatusInterchangeablePanelType = /* 'icpt' */ 0x69637074, bmdDeckLinkStatusDeviceTemperature = /* 'dtmp' */ 0x64746D70, /* Flags */ bmdDeckLinkStatusVideoInputSignalLocked = /* 'visl' */ 0x7669736C, bmdDeckLinkStatusReferenceSignalLocked = /* 'refl' */ 0x7265666C, /* Bytes */ bmdDeckLinkStatusReceivedEDID = /* 'edid' */ 0x65646964 } BMDDeckLinkStatusID; /* Enum BMDDeckLinkVideoStatusFlags - */ typedef [v1_enum] enum _BMDDeckLinkVideoStatusFlags { bmdDeckLinkVideoStatusPsF = 1 << 0, bmdDeckLinkVideoStatusDualStream3D = 1 << 1 } BMDDeckLinkVideoStatusFlags; /* Enum BMDDuplexMode - Duplex of the device */ typedef [v1_enum] enum _BMDDuplexMode { bmdDuplexFull = /* 'dxfu' */ 0x64786675, bmdDuplexHalf = /* 'dxha' */ 0x64786861, bmdDuplexSimplex = /* 'dxsp' */ 0x64787370, bmdDuplexInactive = /* 'dxin' */ 0x6478696E } BMDDuplexMode; /* Enum BMDPanelType - The type of interchangeable panel */ typedef [v1_enum] enum _BMDPanelType { bmdPanelNotDetected = /* 'npnl' */ 0x6E706E6C, bmdPanelTeranexMiniSmartPanel = /* 'tmsm' */ 0x746D736D } BMDPanelType; /* Enum BMDDeviceBusyState - Current device busy state */ [v1_enum] enum _BMDDeviceBusyState { bmdDeviceCaptureBusy = 1 << 0, bmdDevicePlaybackBusy = 1 << 1, bmdDeviceSerialPortBusy = 1 << 2 }; /* Enum BMDVideoIOSupport - Device video input/output support */ typedef [v1_enum] enum _BMDVideoIOSupport { bmdDeviceSupportsCapture = 1 << 0, bmdDeviceSupportsPlayback = 1 << 1 } BMDVideoIOSupport; /* Enum BMD3DPreviewFormat - Linked Frame preview format */ typedef [v1_enum] enum _BMD3DPreviewFormat { bmd3DPreviewFormatDefault = /* 'defa' */ 0x64656661, bmd3DPreviewFormatLeftOnly = /* 'left' */ 0x6C656674, bmd3DPreviewFormatRightOnly = /* 'righ' */ 0x72696768, bmd3DPreviewFormatSideBySide = /* 'side' */ 0x73696465, bmd3DPreviewFormatTopBottom = /* 'topb' */ 0x746F7062 } BMD3DPreviewFormat; /* Enum BMDNotifications - Events that can be subscribed through IDeckLinkNotification */ typedef [v1_enum] enum _BMDNotifications { bmdPreferencesChanged = /* 'pref' */ 0x70726566, bmdStatusChanged = /* 'stat' */ 0x73746174 } BMDNotifications; // Forward Declarations interface IDeckLinkVideoOutputCallback; interface IDeckLinkInputCallback; interface IDeckLinkEncoderInputCallback; interface IDeckLinkMemoryAllocator; interface IDeckLinkAudioOutputCallback; interface IDeckLinkIterator; interface IDeckLinkAPIInformation; interface IDeckLinkOutput; interface IDeckLinkInput; interface IDeckLinkHDMIInputEDID; interface IDeckLinkEncoderInput; interface IDeckLinkVideoFrame; interface IDeckLinkMutableVideoFrame; interface IDeckLinkVideoFrame3DExtensions; interface IDeckLinkVideoFrameMetadataExtensions; interface IDeckLinkVideoInputFrame; interface IDeckLinkAncillaryPacket; interface IDeckLinkAncillaryPacketIterator; interface IDeckLinkVideoFrameAncillaryPackets; interface IDeckLinkVideoFrameAncillary; interface IDeckLinkEncoderPacket; interface IDeckLinkEncoderVideoPacket; interface IDeckLinkEncoderAudioPacket; interface IDeckLinkH265NALPacket; interface IDeckLinkAudioInputPacket; interface IDeckLinkScreenPreviewCallback; interface IDeckLinkGLScreenPreviewHelper; interface IDeckLinkDX9ScreenPreviewHelper; interface IDeckLinkNotificationCallback; interface IDeckLinkNotification; interface IDeckLinkProfileAttributes; interface IDeckLinkProfileIterator; interface IDeckLinkProfile; interface IDeckLinkProfileCallback; interface IDeckLinkProfileManager; interface IDeckLinkStatus; interface IDeckLinkKeyer; interface IDeckLinkVideoConversion; interface IDeckLinkDeviceNotificationCallback; interface IDeckLinkDiscovery; /* Interface IDeckLinkVideoOutputCallback - Frame completion callback. */ [ object, uuid(20AA5225-1958-47CB-820B-80A8D521A6EE), helpstring("Frame completion callback.") ] interface IDeckLinkVideoOutputCallback : IUnknown { HRESULT ScheduledFrameCompleted ([in] IDeckLinkVideoFrame* completedFrame, [in] BMDOutputFrameCompletionResult result); HRESULT ScheduledPlaybackHasStopped (void); }; /* Interface IDeckLinkInputCallback - Frame arrival callback. */ [ object, uuid(C6FCE4C9-C4E4-4047-82FB-5D238232A902), helpstring("Frame arrival callback.") ] interface IDeckLinkInputCallback : IUnknown { HRESULT VideoInputFormatChanged ([in] BMDVideoInputFormatChangedEvents notificationEvents, [in] IDeckLinkDisplayMode* newDisplayMode, [in] BMDDetectedVideoInputFormatFlags detectedSignalFlags); HRESULT VideoInputFrameArrived ([in] IDeckLinkVideoInputFrame* videoFrame, [in] IDeckLinkAudioInputPacket* audioPacket); }; /* Interface IDeckLinkEncoderInputCallback - Frame arrival callback. */ [ object, uuid(ACF13E61-F4A0-4974-A6A7-59AFF6268B31), helpstring("Frame arrival callback.") ] interface IDeckLinkEncoderInputCallback : IUnknown { HRESULT VideoInputSignalChanged ([in] BMDVideoInputFormatChangedEvents notificationEvents, [in] IDeckLinkDisplayMode* newDisplayMode, [in] BMDDetectedVideoInputFormatFlags detectedSignalFlags); HRESULT VideoPacketArrived ([in] IDeckLinkEncoderVideoPacket* videoPacket); HRESULT AudioPacketArrived ([in] IDeckLinkEncoderAudioPacket* audioPacket); }; /* Interface IDeckLinkMemoryAllocator - Memory allocator for video frames. */ [ object, uuid(B36EB6E7-9D29-4AA8-92EF-843B87A289E8), local, helpstring("Memory allocator for video frames.") ] interface IDeckLinkMemoryAllocator : IUnknown { HRESULT AllocateBuffer ([in] unsigned int bufferSize, [out] void** allocatedBuffer); HRESULT ReleaseBuffer ([in] void* buffer); HRESULT Commit (void); HRESULT Decommit (void); }; /* Interface IDeckLinkAudioOutputCallback - Optional callback to allow audio samples to be pulled as required. */ [ object, uuid(403C681B-7F46-4A12-B993-2BB127084EE6), local, helpstring("Optional callback to allow audio samples to be pulled as required.") ] interface IDeckLinkAudioOutputCallback : IUnknown { HRESULT RenderAudioSamples ([in] BOOL preroll); }; /* Interface IDeckLinkIterator - Enumerates installed DeckLink hardware */ [ object, uuid(50FB36CD-3063-4B73-BDBB-958087F2D8BA), helpstring("Enumerates installed DeckLink hardware") ] interface IDeckLinkIterator : IUnknown { HRESULT Next ([out] IDeckLink** deckLinkInstance); }; /* Interface IDeckLinkAPIInformation - DeckLinkAPI attribute interface */ [ object, uuid(7BEA3C68-730D-4322-AF34-8A7152B532A4), helpstring("DeckLinkAPI attribute interface") ] interface IDeckLinkAPIInformation : IUnknown { HRESULT GetFlag ([in] BMDDeckLinkAPIInformationID cfgID, [out] BOOL* value); HRESULT GetInt ([in] BMDDeckLinkAPIInformationID cfgID, [out] LONGLONG* value); HRESULT GetFloat ([in] BMDDeckLinkAPIInformationID cfgID, [out] double* value); HRESULT GetString ([in] BMDDeckLinkAPIInformationID cfgID, [out] BSTR* value); }; /* Interface IDeckLinkOutput - Created by QueryInterface from IDeckLink. */ [ object, uuid(BE2D9020-461E-442F-84B7-E949CB953B9D), local, helpstring("Created by QueryInterface from IDeckLink.") ] interface IDeckLinkOutput : IUnknown { HRESULT DoesSupportVideoMode ([in] BMDVideoConnection connection /* If a value of bmdVideoConnectionUnspecified is specified, the caller does not care about the connection */, [in] BMDDisplayMode requestedMode, [in] BMDPixelFormat requestedPixelFormat, [in] BMDVideoOutputConversionMode conversionMode, [in] BMDSupportedVideoModeFlags flags, [out] BMDDisplayMode* actualMode, [out] BOOL* supported); HRESULT GetDisplayMode ([in] BMDDisplayMode displayMode, [out] IDeckLinkDisplayMode** resultDisplayMode); HRESULT GetDisplayModeIterator ([out] IDeckLinkDisplayModeIterator** iterator); HRESULT SetScreenPreviewCallback ([in] IDeckLinkScreenPreviewCallback* previewCallback); /* Video Output */ HRESULT EnableVideoOutput ([in] BMDDisplayMode displayMode, [in] BMDVideoOutputFlags flags); HRESULT DisableVideoOutput (void); HRESULT SetVideoOutputFrameMemoryAllocator ([in] IDeckLinkMemoryAllocator* theAllocator); HRESULT CreateVideoFrame ([in] int width, [in] int height, [in] int rowBytes, [in] BMDPixelFormat pixelFormat, [in] BMDFrameFlags flags, [out] IDeckLinkMutableVideoFrame** outFrame); HRESULT CreateAncillaryData ([in] BMDPixelFormat pixelFormat, [out] IDeckLinkVideoFrameAncillary** outBuffer); // Use of IDeckLinkVideoFrameAncillaryPackets is preferred HRESULT DisplayVideoFrameSync ([in] IDeckLinkVideoFrame* theFrame); HRESULT ScheduleVideoFrame ([in] IDeckLinkVideoFrame* theFrame, [in] BMDTimeValue displayTime, [in] BMDTimeValue displayDuration, [in] BMDTimeScale timeScale); HRESULT SetScheduledFrameCompletionCallback ([in] IDeckLinkVideoOutputCallback* theCallback); HRESULT GetBufferedVideoFrameCount ([out] unsigned int* bufferedFrameCount); /* Audio Output */ HRESULT EnableAudioOutput ([in] BMDAudioSampleRate sampleRate, [in] BMDAudioSampleType sampleType, [in] unsigned int channelCount, [in] BMDAudioOutputStreamType streamType); HRESULT DisableAudioOutput (void); HRESULT WriteAudioSamplesSync ([in] void* buffer, [in] unsigned int sampleFrameCount, [out] unsigned int* sampleFramesWritten); HRESULT BeginAudioPreroll (void); HRESULT EndAudioPreroll (void); HRESULT ScheduleAudioSamples ([in] void* buffer, [in] unsigned int sampleFrameCount, [in] BMDTimeValue streamTime, [in] BMDTimeScale timeScale, [out] unsigned int* sampleFramesWritten); HRESULT GetBufferedAudioSampleFrameCount ([out] unsigned int* bufferedSampleFrameCount); HRESULT FlushBufferedAudioSamples (void); HRESULT SetAudioCallback ([in] IDeckLinkAudioOutputCallback* theCallback); /* Output Control */ HRESULT StartScheduledPlayback ([in] BMDTimeValue playbackStartTime, [in] BMDTimeScale timeScale, [in] double playbackSpeed); HRESULT StopScheduledPlayback ([in] BMDTimeValue stopPlaybackAtTime, [out] BMDTimeValue* actualStopTime, [in] BMDTimeScale timeScale); HRESULT IsScheduledPlaybackRunning ([out] BOOL* active); HRESULT GetScheduledStreamTime ([in] BMDTimeScale desiredTimeScale, [out] BMDTimeValue* streamTime, [out] double* playbackSpeed); HRESULT GetReferenceStatus ([out] BMDReferenceStatus* referenceStatus); /* Hardware Timing */ HRESULT GetHardwareReferenceClock ([in] BMDTimeScale desiredTimeScale, [out] BMDTimeValue* hardwareTime, [out] BMDTimeValue* timeInFrame, [out] BMDTimeValue* ticksPerFrame); HRESULT GetFrameCompletionReferenceTimestamp ([in] IDeckLinkVideoFrame* theFrame, [in] BMDTimeScale desiredTimeScale, [out] BMDTimeValue* frameCompletionTimestamp); }; /* Interface IDeckLinkInput - Created by QueryInterface from IDeckLink. */ [ object, uuid(C21CDB6E-F414-46E4-A636-80A566E0ED37), helpstring("Created by QueryInterface from IDeckLink.") ] interface IDeckLinkInput : IUnknown { HRESULT DoesSupportVideoMode ([in] BMDVideoConnection connection /* If a value of bmdVideoConnectionUnspecified is specified, the caller does not care about the connection */, [in] BMDDisplayMode requestedMode, [in] BMDPixelFormat requestedPixelFormat, [in] BMDVideoInputConversionMode conversionMode, [in] BMDSupportedVideoModeFlags flags, [out] BMDDisplayMode* actualMode, [out] BOOL* supported); HRESULT GetDisplayMode ([in] BMDDisplayMode displayMode, [out] IDeckLinkDisplayMode** resultDisplayMode); HRESULT GetDisplayModeIterator ([out] IDeckLinkDisplayModeIterator** iterator); HRESULT SetScreenPreviewCallback ([in] IDeckLinkScreenPreviewCallback* previewCallback); /* Video Input */ HRESULT EnableVideoInput ([in] BMDDisplayMode displayMode, [in] BMDPixelFormat pixelFormat, [in] BMDVideoInputFlags flags); HRESULT DisableVideoInput (void); HRESULT GetAvailableVideoFrameCount ([out] unsigned int* availableFrameCount); HRESULT SetVideoInputFrameMemoryAllocator ([in] IDeckLinkMemoryAllocator* theAllocator); /* Audio Input */ HRESULT EnableAudioInput ([in] BMDAudioSampleRate sampleRate, [in] BMDAudioSampleType sampleType, [in] unsigned int channelCount); HRESULT DisableAudioInput (void); HRESULT GetAvailableAudioSampleFrameCount ([out] unsigned int* availableSampleFrameCount); /* Input Control */ HRESULT StartStreams (void); HRESULT StopStreams (void); HRESULT PauseStreams (void); HRESULT FlushStreams (void); HRESULT SetCallback ([in] IDeckLinkInputCallback* theCallback); /* Hardware Timing */ HRESULT GetHardwareReferenceClock ([in] BMDTimeScale desiredTimeScale, [out] BMDTimeValue* hardwareTime, [out] BMDTimeValue* timeInFrame, [out] BMDTimeValue* ticksPerFrame); }; /* Interface IDeckLinkHDMIInputEDID - Created by QueryInterface from IDeckLink. Releasing all references will restore EDID to default */ [ object, uuid(ABBBACBC-45BC-4665-9D92-ACE6E5A97902), helpstring("Created by QueryInterface from IDeckLink. Releasing all references will restore EDID to default") ] interface IDeckLinkHDMIInputEDID : IUnknown { HRESULT SetInt ([in] BMDDeckLinkHDMIInputEDIDID cfgID, [in] LONGLONG value); HRESULT GetInt ([in] BMDDeckLinkHDMIInputEDIDID cfgID, [out] LONGLONG* value); HRESULT WriteToEDID (void); }; /* Interface IDeckLinkEncoderInput - Created by QueryInterface from IDeckLink. */ [ object, uuid(F222551D-13DF-4FD8-B587-9D4F19EC12C9), helpstring("Created by QueryInterface from IDeckLink.") ] interface IDeckLinkEncoderInput : IUnknown { HRESULT DoesSupportVideoMode ([in] BMDVideoConnection connection /* If a value of bmdVideoConnectionUnspecified is specified, the caller does not care about the connection */, [in] BMDDisplayMode requestedMode, [in] BMDPixelFormat requestedCodec, [in] unsigned int requestedCodecProfile, [in] BMDSupportedVideoModeFlags flags, [out] BOOL* supported); HRESULT GetDisplayMode ([in] BMDDisplayMode displayMode, [out] IDeckLinkDisplayMode** resultDisplayMode); HRESULT GetDisplayModeIterator ([out] IDeckLinkDisplayModeIterator** iterator); /* Video Input */ HRESULT EnableVideoInput ([in] BMDDisplayMode displayMode, [in] BMDPixelFormat pixelFormat, [in] BMDVideoInputFlags flags); HRESULT DisableVideoInput (void); HRESULT GetAvailablePacketsCount ([out] unsigned int* availablePacketsCount); HRESULT SetMemoryAllocator ([in] IDeckLinkMemoryAllocator* theAllocator); /* Audio Input */ HRESULT EnableAudioInput ([in] BMDAudioFormat audioFormat, [in] BMDAudioSampleRate sampleRate, [in] BMDAudioSampleType sampleType, [in] unsigned int channelCount); HRESULT DisableAudioInput (void); HRESULT GetAvailableAudioSampleFrameCount ([out] unsigned int* availableSampleFrameCount); /* Input Control */ HRESULT StartStreams (void); HRESULT StopStreams (void); HRESULT PauseStreams (void); HRESULT FlushStreams (void); HRESULT SetCallback ([in] IDeckLinkEncoderInputCallback* theCallback); /* Hardware Timing */ HRESULT GetHardwareReferenceClock ([in] BMDTimeScale desiredTimeScale, [out] BMDTimeValue* hardwareTime, [out] BMDTimeValue* timeInFrame, [out] BMDTimeValue* ticksPerFrame); }; /* Interface IDeckLinkVideoFrame - Interface to encapsulate a video frame; can be caller-implemented. */ [ object, uuid(3F716FE0-F023-4111-BE5D-EF4414C05B17), local, helpstring("Interface to encapsulate a video frame; can be caller-implemented.") ] interface IDeckLinkVideoFrame : IUnknown { long GetWidth (void); long GetHeight (void); long GetRowBytes (void); BMDPixelFormat GetPixelFormat (void); BMDFrameFlags GetFlags (void); HRESULT GetBytes ([out] void** buffer); HRESULT GetTimecode ([in] BMDTimecodeFormat format, [out] IDeckLinkTimecode** timecode); HRESULT GetAncillaryData ([out] IDeckLinkVideoFrameAncillary** ancillary); // Use of IDeckLinkVideoFrameAncillaryPackets is preferred }; /* Interface IDeckLinkMutableVideoFrame - Created by IDeckLinkOutput::CreateVideoFrame. */ [ object, uuid(69E2639F-40DA-4E19-B6F2-20ACE815C390), local, helpstring("Created by IDeckLinkOutput::CreateVideoFrame.") ] interface IDeckLinkMutableVideoFrame : IDeckLinkVideoFrame { HRESULT SetFlags ([in] BMDFrameFlags newFlags); HRESULT SetTimecode ([in] BMDTimecodeFormat format, [in] IDeckLinkTimecode* timecode); HRESULT SetTimecodeFromComponents ([in] BMDTimecodeFormat format, [in] unsigned char hours, [in] unsigned char minutes, [in] unsigned char seconds, [in] unsigned char frames, [in] BMDTimecodeFlags flags); HRESULT SetAncillaryData ([in] IDeckLinkVideoFrameAncillary* ancillary); HRESULT SetTimecodeUserBits ([in] BMDTimecodeFormat format, [in] BMDTimecodeUserBits userBits); }; /* Interface IDeckLinkVideoFrame3DExtensions - Optional interface implemented on IDeckLinkVideoFrame to support 3D frames */ [ object, uuid(DA0F7E4A-EDC7-48A8-9CDD-2DB51C729CD7), local, helpstring("Optional interface implemented on IDeckLinkVideoFrame to support 3D frames") ] interface IDeckLinkVideoFrame3DExtensions : IUnknown { BMDVideo3DPackingFormat Get3DPackingFormat (void); HRESULT GetFrameForRightEye ([out] IDeckLinkVideoFrame** rightEyeFrame); }; /* Interface IDeckLinkVideoFrameMetadataExtensions - Optional interface implemented on IDeckLinkVideoFrame to support frame metadata such as HDR information */ [ object, uuid(E232A5B7-4DB4-44C9-9152-F47C12E5F051), local, helpstring("Optional interface implemented on IDeckLinkVideoFrame to support frame metadata such as HDR information") ] interface IDeckLinkVideoFrameMetadataExtensions : IUnknown { HRESULT GetInt ([in] BMDDeckLinkFrameMetadataID metadataID, [out] LONGLONG* value); HRESULT GetFloat ([in] BMDDeckLinkFrameMetadataID metadataID, [out] double* value); HRESULT GetFlag ([in] BMDDeckLinkFrameMetadataID metadataID, [out] BOOL* value); HRESULT GetString ([in] BMDDeckLinkFrameMetadataID metadataID, [out] BSTR* value); HRESULT GetBytes ([in] BMDDeckLinkFrameMetadataID metadataID, [out] void* buffer /* optional */, [in, out] unsigned int* bufferSize); }; /* Interface IDeckLinkVideoInputFrame - Provided by the IDeckLinkVideoInput frame arrival callback. */ [ object, uuid(05CFE374-537C-4094-9A57-680525118F44), local, helpstring("Provided by the IDeckLinkVideoInput frame arrival callback.") ] interface IDeckLinkVideoInputFrame : IDeckLinkVideoFrame { HRESULT GetStreamTime ([out] BMDTimeValue* frameTime, [out] BMDTimeValue* frameDuration, [in] BMDTimeScale timeScale); HRESULT GetHardwareReferenceTimestamp ([in] BMDTimeScale timeScale, [out] BMDTimeValue* frameTime, [out] BMDTimeValue* frameDuration); }; /* Interface IDeckLinkAncillaryPacket - On output, user needs to implement this interface */ [ object, uuid(CC5BBF7E-029C-4D3B-9158-6000EF5E3670), helpstring("On output, user needs to implement this interface") ] interface IDeckLinkAncillaryPacket : IUnknown { HRESULT GetBytes ([in] BMDAncillaryPacketFormat format /* For output, only one format need be offered */, [out] const void** data /* Optional */, [out] unsigned int* size /* Optional */); unsigned char GetDID (void); unsigned char GetSDID (void); unsigned int GetLineNumber (void); // On output, zero is auto unsigned char GetDataStreamIndex (void); // Usually zero. Can only be 1 if non-SD and the first data stream is completely full }; /* Interface IDeckLinkAncillaryPacketIterator - Enumerates ancillary packets */ [ object, uuid(3FC8994B-88FB-4C17-968F-9AAB69D964A7), helpstring("Enumerates ancillary packets") ] interface IDeckLinkAncillaryPacketIterator : IUnknown { HRESULT Next ([out] IDeckLinkAncillaryPacket** packet); }; /* Interface IDeckLinkVideoFrameAncillaryPackets - Obtained through QueryInterface on an IDeckLinkVideoFrame object. */ [ object, uuid(6C186C0F-459E-41D8-AEE2-4812D81AEE68), local, helpstring("Obtained through QueryInterface on an IDeckLinkVideoFrame object.") ] interface IDeckLinkVideoFrameAncillaryPackets : IUnknown { HRESULT GetPacketIterator ([out] IDeckLinkAncillaryPacketIterator** iterator); HRESULT GetFirstPacketByID ([in] unsigned char DID, [in] unsigned char SDID, [out] IDeckLinkAncillaryPacket** packet); HRESULT AttachPacket ([in] IDeckLinkAncillaryPacket* packet); // Implement IDeckLinkAncillaryPacket to output your own HRESULT DetachPacket ([in] IDeckLinkAncillaryPacket* packet); HRESULT DetachAllPackets (void); }; /* Interface IDeckLinkVideoFrameAncillary - Use of IDeckLinkVideoFrameAncillaryPackets is preferred. Obtained through QueryInterface on an IDeckLinkVideoFrame object. */ [ object, uuid(732E723C-D1A4-4E29-9E8E-4A88797A0004), local, helpstring("Use of IDeckLinkVideoFrameAncillaryPackets is preferred. Obtained through QueryInterface on an IDeckLinkVideoFrame object.") ] interface IDeckLinkVideoFrameAncillary : IUnknown { HRESULT GetBufferForVerticalBlankingLine ([in] unsigned int lineNumber, [out] void** buffer); // 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 BMDPixelFormat GetPixelFormat (void); BMDDisplayMode GetDisplayMode (void); }; /* Interface IDeckLinkEncoderPacket - Interface to encapsulate an encoded packet. */ [ object, uuid(B693F36C-316E-4AF1-B6C2-F389A4BCA620), local, helpstring("Interface to encapsulate an encoded packet.") ] interface IDeckLinkEncoderPacket : IUnknown { HRESULT GetBytes ([out] void** buffer); long GetSize (void); HRESULT GetStreamTime ([out] BMDTimeValue* frameTime, [in] BMDTimeScale timeScale); BMDPacketType GetPacketType (void); }; /* Interface IDeckLinkEncoderVideoPacket - Provided by the IDeckLinkEncoderInput video packet arrival callback. */ [ object, uuid(4E7FD944-E8C7-4EAC-B8C0-7B77F80F5AE0), local, helpstring("Provided by the IDeckLinkEncoderInput video packet arrival callback.") ] interface IDeckLinkEncoderVideoPacket : IDeckLinkEncoderPacket { BMDPixelFormat GetPixelFormat (void); HRESULT GetHardwareReferenceTimestamp ([in] BMDTimeScale timeScale, [out] BMDTimeValue* frameTime, [out] BMDTimeValue* frameDuration); HRESULT GetTimecode ([in] BMDTimecodeFormat format, [out] IDeckLinkTimecode** timecode); }; /* Interface IDeckLinkEncoderAudioPacket - Provided by the IDeckLinkEncoderInput audio packet arrival callback. */ [ object, uuid(49E8EDC8-693B-4E14-8EF6-12C658F5A07A), local, helpstring("Provided by the IDeckLinkEncoderInput audio packet arrival callback.") ] interface IDeckLinkEncoderAudioPacket : IDeckLinkEncoderPacket { BMDAudioFormat GetAudioFormat (void); }; /* Interface IDeckLinkH265NALPacket - Obtained through QueryInterface on an IDeckLinkEncoderVideoPacket object */ [ object, uuid(639C8E0B-68D5-4BDE-A6D4-95F3AEAFF2E7), local, helpstring("Obtained through QueryInterface on an IDeckLinkEncoderVideoPacket object") ] interface IDeckLinkH265NALPacket : IDeckLinkEncoderVideoPacket { HRESULT GetUnitType ([out] unsigned char* unitType); HRESULT GetBytesNoPrefix ([out] void** buffer); long GetSizeNoPrefix (void); }; /* Interface IDeckLinkAudioInputPacket - Provided by the IDeckLinkInput callback. */ [ object, uuid(E43D5870-2894-11DE-8C30-0800200C9A66), local, helpstring("Provided by the IDeckLinkInput callback.") ] interface IDeckLinkAudioInputPacket : IUnknown { long GetSampleFrameCount (void); HRESULT GetBytes ([out] void** buffer); HRESULT GetPacketTime ([out] BMDTimeValue* packetTime, [in] BMDTimeScale timeScale); }; /* Interface IDeckLinkScreenPreviewCallback - Screen preview callback */ [ object, uuid(B1D3F49A-85FE-4C5D-95C8-0B5D5DCCD438), local, helpstring("Screen preview callback") ] interface IDeckLinkScreenPreviewCallback : IUnknown { HRESULT DrawFrame ([in] IDeckLinkVideoFrame* theFrame); }; /* Interface IDeckLinkGLScreenPreviewHelper - Created with CoCreateInstance on platforms with native COM support or from CreateOpenGLScreenPreviewHelper on other platforms. */ [ object, uuid(504E2209-CAC7-4C1A-9FB4-C5BB6274D22F), local, helpstring("Created with CoCreateInstance on platforms with native COM support or from CreateOpenGLScreenPreviewHelper on other platforms.") ] interface IDeckLinkGLScreenPreviewHelper : IUnknown { /* Methods must be called with OpenGL context set */ HRESULT InitializeGL (void); HRESULT PaintGL (void); HRESULT SetFrame ([in] IDeckLinkVideoFrame* theFrame); HRESULT Set3DPreviewFormat ([in] BMD3DPreviewFormat previewFormat); }; /* Interface IDeckLinkDX9ScreenPreviewHelper - Created with CoCreateInstance. */ [ object, uuid(2094B522-D1A1-40C0-9AC7-1C012218EF02), local, helpstring("Created with CoCreateInstance.") ] interface IDeckLinkDX9ScreenPreviewHelper : IUnknown { HRESULT Initialize ([in] void* device); HRESULT Render ([in] RECT* rc); HRESULT SetFrame ([in] IDeckLinkVideoFrame* theFrame); HRESULT Set3DPreviewFormat ([in] BMD3DPreviewFormat previewFormat); }; /* Interface IDeckLinkNotificationCallback - DeckLink Notification Callback Interface */ [ object, uuid(b002a1ec-070d-4288-8289-bd5d36e5ff0d), local, helpstring("DeckLink Notification Callback Interface") ] interface IDeckLinkNotificationCallback : IUnknown { HRESULT Notify ([in] BMDNotifications topic, [in] ULONGLONG param1, [in] ULONGLONG param2); }; /* Interface IDeckLinkNotification - DeckLink Notification interface */ [ object, uuid(b85df4c8-bdf5-47c1-8064-28162ebdd4eb), local, helpstring("DeckLink Notification interface") ] interface IDeckLinkNotification : IUnknown { HRESULT Subscribe ([in] BMDNotifications topic, [in] IDeckLinkNotificationCallback* theCallback); HRESULT Unsubscribe ([in] BMDNotifications topic, [in] IDeckLinkNotificationCallback* theCallback); }; /* Interface IDeckLinkProfileAttributes - Created by QueryInterface from an IDeckLinkProfile, or from IDeckLink. When queried from IDeckLink, interrogates the active profile */ [ object, uuid(17D4BF8E-4911-473A-80A0-731CF6FF345B), local, helpstring("Created by QueryInterface from an IDeckLinkProfile, or from IDeckLink. When queried from IDeckLink, interrogates the active profile") ] interface IDeckLinkProfileAttributes : IUnknown { HRESULT GetFlag ([in] BMDDeckLinkAttributeID cfgID, [out] BOOL* value); HRESULT GetInt ([in] BMDDeckLinkAttributeID cfgID, [out] LONGLONG* value); HRESULT GetFloat ([in] BMDDeckLinkAttributeID cfgID, [out] double* value); HRESULT GetString ([in] BMDDeckLinkAttributeID cfgID, [out] BSTR* value); }; /* Interface IDeckLinkProfileIterator - Enumerates IDeckLinkProfile interfaces */ [ object, uuid(29E5A8C0-8BE4-46EB-93AC-31DAAB5B7BF2), helpstring("Enumerates IDeckLinkProfile interfaces") ] interface IDeckLinkProfileIterator : IUnknown { HRESULT Next ([out] IDeckLinkProfile** profile); }; /* Interface IDeckLinkProfile - Represents the active profile when queried from IDeckLink */ [ object, uuid(16093466-674A-432B-9DA0-1AC2C5A8241C), local, helpstring("Represents the active profile when queried from IDeckLink") ] interface IDeckLinkProfile : IUnknown { HRESULT GetDevice ([out] IDeckLink** device); // Device affected when this profile becomes active HRESULT IsActive ([out] BOOL* isActive); HRESULT SetActive (void); // Activating a profile will also change the profile on all devices enumerated by GetPeers. Activation is not complete until IDeckLinkProfileCallback::ProfileActivated is called HRESULT GetPeers ([out] IDeckLinkProfileIterator** profileIterator); // Profiles of other devices activated with this profile }; /* Interface IDeckLinkProfileCallback - Receive notifications about profiles related to this device */ [ object, uuid(A4F9341E-97AA-4E04-8935-15F809898CEA), helpstring("Receive notifications about profiles related to this device") ] interface IDeckLinkProfileCallback : IUnknown { HRESULT ProfileChanging ([in] IDeckLinkProfile* profileToBeActivated, [in] BOOL streamsWillBeForcedToStop); // Called before this device changes profile. User has an opportunity for teardown if streamsWillBeForcedToStop HRESULT ProfileActivated ([in] IDeckLinkProfile* activatedProfile); // Called after this device has been activated with a new profile }; /* Interface IDeckLinkProfileManager - Created by QueryInterface from IDeckLink when a device has multiple optional profiles */ [ object, uuid(30D41429-3998-4B6D-84F8-78C94A797C6E), helpstring("Created by QueryInterface from IDeckLink when a device has multiple optional profiles") ] interface IDeckLinkProfileManager : IUnknown { HRESULT GetProfiles ([out] IDeckLinkProfileIterator** profileIterator); // All available profiles for this device HRESULT GetProfile ([in] BMDProfileID profileID, [out] IDeckLinkProfile** profile); HRESULT SetCallback ([in] IDeckLinkProfileCallback* callback); }; /* Interface IDeckLinkStatus - DeckLink Status interface */ [ object, uuid(5F558200-4028-49BC-BEAC-DB3FA4A96E46), local, helpstring("DeckLink Status interface") ] interface IDeckLinkStatus : IUnknown { HRESULT GetFlag ([in] BMDDeckLinkStatusID statusID, [out] BOOL* value); HRESULT GetInt ([in] BMDDeckLinkStatusID statusID, [out] LONGLONG* value); HRESULT GetFloat ([in] BMDDeckLinkStatusID statusID, [out] double* value); HRESULT GetString ([in] BMDDeckLinkStatusID statusID, [out] BSTR* value); HRESULT GetBytes ([in] BMDDeckLinkStatusID statusID, [out] void* buffer, [in, out] unsigned int* bufferSize); }; /* Interface IDeckLinkKeyer - DeckLink Keyer interface */ [ object, uuid(89AFCAF5-65F8-421E-98F7-96FE5F5BFBA3), local, helpstring("DeckLink Keyer interface") ] interface IDeckLinkKeyer : IUnknown { HRESULT Enable ([in] BOOL isExternal); HRESULT SetLevel ([in] unsigned char level); HRESULT RampUp ([in] unsigned int numberOfFrames); HRESULT RampDown ([in] unsigned int numberOfFrames); HRESULT Disable (void); }; /* Interface IDeckLinkVideoConversion - Created with CoCreateInstance. */ [ object, uuid(3BBCB8A2-DA2C-42D9-B5D8-88083644E99A), local, helpstring("Created with CoCreateInstance.") ] interface IDeckLinkVideoConversion : IUnknown { HRESULT ConvertFrame ([in] IDeckLinkVideoFrame* srcFrame, [in] IDeckLinkVideoFrame* dstFrame); }; /* Interface IDeckLinkDeviceNotificationCallback - DeckLink device arrival/removal notification callbacks */ [ object, uuid(4997053B-0ADF-4CC8-AC70-7A50C4BE728F), helpstring("DeckLink device arrival/removal notification callbacks") ] interface IDeckLinkDeviceNotificationCallback : IUnknown { HRESULT DeckLinkDeviceArrived ([in] IDeckLink* deckLinkDevice); HRESULT DeckLinkDeviceRemoved ([in] IDeckLink* deckLinkDevice); }; /* Interface IDeckLinkDiscovery - DeckLink device discovery */ [ object, uuid(CDBF631C-BC76-45FA-B44D-C55059BC6101), helpstring("DeckLink device discovery") ] interface IDeckLinkDiscovery : IUnknown { HRESULT InstallDeviceNotifications ([in] IDeckLinkDeviceNotificationCallback* deviceNotificationCallback); HRESULT UninstallDeviceNotifications (void); }; /* Coclasses */ importlib("stdole2.tlb"); [ uuid(BA6C6F44-6DA5-4DCE-94AA-EE2D1372A676), helpstring("CDeckLinkIterator Class") ] coclass CDeckLinkIterator { [default] interface IDeckLinkIterator; }; [ uuid(263CA19F-ED09-482E-9F9D-84005783A237), helpstring("CDeckLinkAPIInformation Class") ] coclass CDeckLinkAPIInformation { [default] interface IDeckLinkAPIInformation; }; [ uuid(F63E77C7-B655-4A4A-9AD0-3CA85D394343), helpstring("CDeckLinkGLScreenPreviewHelper Class") ] coclass CDeckLinkGLScreenPreviewHelper { [default] interface IDeckLinkGLScreenPreviewHelper; }; [ uuid(CC010023-E01D-4525-9D59-80C8AB3DC7A0), helpstring("CDeckLinkDX9ScreenPreviewHelper Class") ] coclass CDeckLinkDX9ScreenPreviewHelper { [default] interface IDeckLinkDX9ScreenPreviewHelper; }; [ uuid(7DBBBB11-5B7B-467D-AEA4-CEA468FD368C), helpstring("CDeckLinkVideoConversion Class") ] coclass CDeckLinkVideoConversion { [default] interface IDeckLinkVideoConversion; }; [ uuid(22FBFC33-8D07-495C-A5BF-DAB5EA9B82DB), helpstring("CDeckLinkDiscovery Class") ] coclass CDeckLinkDiscovery { [default] interface IDeckLinkDiscovery; }; [ uuid(F891AD29-D0C2-46E9-A926-4E2D0DD8CFAD), helpstring("CDeckLinkVideoFrameAncillaryPackets Class") ] coclass CDeckLinkVideoFrameAncillaryPackets { [default] interface IDeckLinkVideoFrameAncillaryPackets; }; // import deprecated interfaces #include "DeckLinkAPI_v11_4.idl" #include "DeckLinkAPI_v10_11.idl" #include "DeckLinkAPI_v11_5_1.idl" #include "DeckLinkAPI_v11_5.idl" #include "DeckLinkAPI_v10_9.idl" #include "DeckLinkAPIStreaming_v10_8.idl" #include "DeckLinkAPI_v10_8.idl" #include "DeckLinkAPI_v10_6.idl" #include "DeckLinkAPI_v10_5.idl" #include "DeckLinkAPI_v10_4.idl" #include "DeckLinkAPI_v10_2.idl" #include "DeckLinkAPI_v9_9.idl" #include "DeckLinkAPI_v9_2.idl" #include "DeckLinkAPI_v8_1.idl" #include "DeckLinkAPI_v8_0.idl" #include "DeckLinkAPI_v7_9.idl" #include "DeckLinkAPI_v7_6.idl" #include "DeckLinkAPI_v7_3.idl" #include "DeckLinkAPI_v7_1.idl" };