From 796fffa441cfee6282b41ca50285f7f9a4828d5e Mon Sep 17 00:00:00 2001 From: Heinrich Kruger Date: Thu, 27 Feb 2020 11:32:17 +0000 Subject: [PATCH] decklink: Update Decklink SDK to 10.11.4 This change is needed to support 2K DCI video modes. Version 10.8 of the Decklink SDK supported DCI video modes for output only. This updated version drops that restriction. The current latest version of the Decklink SDK is 11.5, however the gstreamer decklink plugin is not compatible with API changes introduced in version 11 of the SDK. Therefore I have opted to upgrade to the latest 10.x version instead. --- sys/decklink/linux/DeckLinkAPI.h | 256 ++++++-- sys/decklink/linux/DeckLinkAPIConfiguration.h | 26 +- sys/decklink/linux/DeckLinkAPIDeckControl.h | 10 +- sys/decklink/linux/DeckLinkAPIDiscovery.h | 8 +- sys/decklink/linux/DeckLinkAPIDispatch.cpp | 18 +- sys/decklink/linux/DeckLinkAPIModes.h | 71 ++- sys/decklink/linux/DeckLinkAPITypes.h | 11 +- sys/decklink/linux/DeckLinkAPIVersion.h | 4 +- sys/decklink/linux/LinuxCOM.h | 6 +- sys/decklink/osx/DeckLinkAPI.h | 260 ++++++-- sys/decklink/osx/DeckLinkAPIConfiguration.h | 26 +- sys/decklink/osx/DeckLinkAPIDeckControl.h | 10 +- sys/decklink/osx/DeckLinkAPIDiscovery.h | 8 +- sys/decklink/osx/DeckLinkAPIDispatch.cpp | 21 +- sys/decklink/osx/DeckLinkAPIModes.h | 71 ++- sys/decklink/osx/DeckLinkAPIStreaming.h | 32 +- sys/decklink/osx/DeckLinkAPITypes.h | 11 +- sys/decklink/osx/DeckLinkAPIVersion.h | 4 +- sys/decklink/win/DeckLinkAPI.h | 874 +++++++++++++++++++++++++- sys/decklink/win/DeckLinkAPI_i.c | 43 +- 20 files changed, 1563 insertions(+), 207 deletions(-) diff --git a/sys/decklink/linux/DeckLinkAPI.h b/sys/decklink/linux/DeckLinkAPI.h index 6b0ac18..e113fc3 100644 --- a/sys/decklink/linux/DeckLinkAPI.h +++ b/sys/decklink/linux/DeckLinkAPI.h @@ -1,5 +1,5 @@ /* -LICENSE-START- -** Copyright (c) 2016 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 @@ -37,6 +37,10 @@ #endif #endif +#ifndef BMD_PUBLIC + #define BMD_PUBLIC +#endif + /* DeckLink API */ #include @@ -64,12 +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}; @@ -113,9 +121,11 @@ 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 }; @@ -213,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; @@ -332,11 +351,68 @@ 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 @@ -348,7 +424,15 @@ enum _BMDDeckLinkFrameMetadataID { 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 + 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 */ @@ -386,22 +470,24 @@ enum _BMDDeckLinkAttributeID { 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, + 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, @@ -455,11 +541,14 @@ enum _BMDDeckLinkStatusID { bmdDeckLinkStatusReferenceSignalFlags = /* 'reff' */ 0x72656666, bmdDeckLinkStatusDuplexMode = /* 'dupx' */ 0x64757078, bmdDeckLinkStatusBusy = /* 'busy' */ 0x62757379, + bmdDeckLinkStatusInterchangeablePanelType = /* 'icpt' */ 0x69637074, + bmdDeckLinkStatusDeviceTemperature = /* 'dtmp' */ 0x64746D70, /* Flags */ bmdDeckLinkStatusVideoInputSignalLocked = /* 'visl' */ 0x7669736C, - bmdDeckLinkStatusReferenceSignalLocked = /* 'refl' */ 0x7265666C + bmdDeckLinkStatusReferenceSignalLocked = /* 'refl' */ 0x7265666C, + bmdDeckLinkStatusReceivedEDID = /* 'edid' */ 0x65646964 }; /* Enum BMDDeckLinkVideoStatusFlags - */ @@ -480,6 +569,14 @@ enum _BMDDuplexStatus { 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; @@ -529,12 +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; @@ -554,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; @@ -566,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; @@ -578,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; @@ -591,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; @@ -603,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; @@ -611,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; @@ -619,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; @@ -633,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; @@ -648,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; @@ -690,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; @@ -727,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; @@ -766,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; @@ -777,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 @@ -785,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; @@ -801,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; @@ -813,7 +927,7 @@ protected: /* Interface IDeckLinkVideoFrameMetadataExtensions - Optional interface implemented on IDeckLinkVideoFrame to support frame metadata such as HDMI HDR information */ -class IDeckLinkVideoFrameMetadataExtensions : public IUnknown +class BMD_PUBLIC IDeckLinkVideoFrameMetadataExtensions : public IUnknown { public: virtual HRESULT GetInt (/* in */ BMDDeckLinkFrameMetadataID metadataID, /* out */ int64_t *value) = 0; @@ -827,7 +941,7 @@ protected: /* 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; @@ -837,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; @@ -853,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; @@ -867,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; @@ -881,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; @@ -892,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; @@ -905,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; @@ -918,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; @@ -929,7 +1086,7 @@ protected: /* Interface IDeckLinkGLScreenPreviewHelper - Created with CoCreateInstance(). */ -class IDeckLinkGLScreenPreviewHelper : public IUnknown +class BMD_PUBLIC IDeckLinkGLScreenPreviewHelper : public IUnknown { public: @@ -946,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; @@ -954,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; @@ -963,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; @@ -977,7 +1134,7 @@ protected: /* Interface IDeckLinkStatus - DeckLink Status interface */ -class IDeckLinkStatus : public IUnknown +class BMD_PUBLIC IDeckLinkStatus : public IUnknown { public: virtual HRESULT GetFlag (/* in */ BMDDeckLinkStatusID statusID, /* out */ bool *value) = 0; @@ -992,7 +1149,7 @@ protected: /* Interface IDeckLinkKeyer - DeckLink Keyer interface */ -class IDeckLinkKeyer : public IUnknown +class BMD_PUBLIC IDeckLinkKeyer : public IUnknown { public: virtual HRESULT Enable (/* in */ bool isExternal) = 0; @@ -1007,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; @@ -1018,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; @@ -1030,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; @@ -1044,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 } diff --git a/sys/decklink/linux/DeckLinkAPIConfiguration.h b/sys/decklink/linux/DeckLinkAPIConfiguration.h index 3a6ab69..430f871 100644 --- a/sys/decklink/linux/DeckLinkAPIConfiguration.h +++ b/sys/decklink/linux/DeckLinkAPIConfiguration.h @@ -1,5 +1,5 @@ /* -LICENSE-START- -** Copyright (c) 2016 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 @@ -37,12 +37,16 @@ #endif #endif +#ifndef BMD_PUBLIC + #define BMD_PUBLIC +#endif + // Type Declarations // Interface ID Declarations -BMD_CONST REFIID IID_IDeckLinkConfiguration = /* CB71734A-FE37-4E8D-8E13-802133A1C3F2 */ {0xCB,0x71,0x73,0x4A,0xFE,0x37,0x4E,0x8D,0x8E,0x13,0x80,0x21,0x33,0xA1,0xC3,0xF2}; +BMD_CONST REFIID IID_IDeckLinkConfiguration = /* EF90380B-4AE5-4346-9077-E288E149F129 */ {0xEF,0x90,0x38,0x0B,0x4A,0xE5,0x43,0x46,0x90,0x77,0xE2,0x88,0xE1,0x49,0xF1,0x29}; BMD_CONST REFIID IID_IDeckLinkEncoderConfiguration = /* 138050E5-C60A-4552-BF3F-0F358049327E */ {0x13,0x80,0x50,0xE5,0xC6,0x0A,0x45,0x52,0xBF,0x3F,0x0F,0x35,0x80,0x49,0x32,0x7E}; /* Enum BMDDeckLinkConfigurationID - DeckLink Configuration ID */ @@ -54,10 +58,6 @@ enum _BMDDeckLinkConfigurationID { bmdDeckLinkConfigSwapSerialRxTx = /* 'ssrt' */ 0x73737274, - /* Video Input/Output Flags */ - - bmdDeckLinkConfigUse1080pNotPsF = /* 'fpro' */ 0x6670726F, - /* Video Input/Output Integers */ bmdDeckLinkConfigHDMI3DPackingFormat = /* '3dpf' */ 0x33647066, @@ -78,6 +78,12 @@ enum _BMDDeckLinkConfigurationID { bmdDeckLinkConfigLowLatencyVideoOutput = /* 'llvo' */ 0x6C6C766F, bmdDeckLinkConfigDownConversionOnAllAnalogOutput = /* 'caao' */ 0x6361616F, bmdDeckLinkConfigSMPTELevelAOutput = /* 'smta' */ 0x736D7461, + bmdDeckLinkConfigRec2020Output = /* 'rec2' */ 0x72656332, // Ensure output is Rec.2020 colorspace + bmdDeckLinkConfigQuadLinkSDIVideoOutputSquareDivisionSplit = /* 'SDQS' */ 0x53445153, + + /* Video Output Flags */ + + bmdDeckLinkConfigOutput1080pAsPsF = /* 'pfpr' */ 0x70667072, /* Video Output Integers */ @@ -106,6 +112,10 @@ enum _BMDDeckLinkConfigurationID { bmdDeckLinkConfigUseDedicatedLTCInput = /* 'dltc' */ 0x646C7463, // Use timecode from LTC input instead of SDI stream bmdDeckLinkConfigSDIInput3DPayloadOverride = /* '3dds' */ 0x33646473, + /* Video Input Flags */ + + bmdDeckLinkConfigCapture1080pAsPsF = /* 'cfpr' */ 0x63667072, + /* Video Input Integers */ bmdDeckLinkConfigVideoInputConnection = /* 'vicn' */ 0x7669636E, @@ -206,7 +216,7 @@ class IDeckLinkEncoderConfiguration; /* Interface IDeckLinkConfiguration - DeckLink Configuration interface */ -class IDeckLinkConfiguration : public IUnknown +class BMD_PUBLIC IDeckLinkConfiguration : public IUnknown { public: virtual HRESULT SetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ bool value) = 0; @@ -225,7 +235,7 @@ protected: /* Interface IDeckLinkEncoderConfiguration - DeckLink Encoder Configuration interface. Obtained from IDeckLinkEncoderInput */ -class IDeckLinkEncoderConfiguration : public IUnknown +class BMD_PUBLIC IDeckLinkEncoderConfiguration : public IUnknown { public: virtual HRESULT SetFlag (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* in */ bool value) = 0; diff --git a/sys/decklink/linux/DeckLinkAPIDeckControl.h b/sys/decklink/linux/DeckLinkAPIDeckControl.h index 24f72d2..e0522a2 100644 --- a/sys/decklink/linux/DeckLinkAPIDeckControl.h +++ b/sys/decklink/linux/DeckLinkAPIDeckControl.h @@ -1,5 +1,5 @@ /* -LICENSE-START- -** Copyright (c) 2016 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 @@ -37,6 +37,10 @@ #endif #endif +#ifndef BMD_PUBLIC + #define BMD_PUBLIC +#endif + // Type Declarations @@ -149,7 +153,7 @@ class IDeckLinkDeckControl; /* Interface IDeckLinkDeckControlStatusCallback - Deck control state change callback. */ -class IDeckLinkDeckControlStatusCallback : public IUnknown +class BMD_PUBLIC IDeckLinkDeckControlStatusCallback : public IUnknown { public: virtual HRESULT TimecodeUpdate (/* in */ BMDTimecodeBCD currentTimecode) = 0; @@ -163,7 +167,7 @@ protected: /* Interface IDeckLinkDeckControl - Deck Control main interface */ -class IDeckLinkDeckControl : public IUnknown +class BMD_PUBLIC IDeckLinkDeckControl : public IUnknown { public: virtual HRESULT Open (/* in */ BMDTimeScale timeScale, /* in */ BMDTimeValue timeValue, /* in */ bool timecodeIsDropFrame, /* out */ BMDDeckControlError *error) = 0; diff --git a/sys/decklink/linux/DeckLinkAPIDiscovery.h b/sys/decklink/linux/DeckLinkAPIDiscovery.h index fac3099..d6619ca 100644 --- a/sys/decklink/linux/DeckLinkAPIDiscovery.h +++ b/sys/decklink/linux/DeckLinkAPIDiscovery.h @@ -1,5 +1,5 @@ /* -LICENSE-START- -** Copyright (c) 2016 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 @@ -37,6 +37,10 @@ #endif #endif +#ifndef BMD_PUBLIC + #define BMD_PUBLIC +#endif + // Type Declarations @@ -50,7 +54,7 @@ class IDeckLink; /* Interface IDeckLink - represents a DeckLink device */ -class IDeckLink : public IUnknown +class BMD_PUBLIC IDeckLink : public IUnknown { public: virtual HRESULT GetModelName (/* out */ const char **modelName) = 0; diff --git a/sys/decklink/linux/DeckLinkAPIDispatch.cpp b/sys/decklink/linux/DeckLinkAPIDispatch.cpp index d9a47e3..67cf418 100644 --- a/sys/decklink/linux/DeckLinkAPIDispatch.cpp +++ b/sys/decklink/linux/DeckLinkAPIDispatch.cpp @@ -39,6 +39,7 @@ typedef IDeckLinkAPIInformation* (*CreateAPIInformationFunc)(void); typedef IDeckLinkGLScreenPreviewHelper* (*CreateOpenGLScreenPreviewHelperFunc)(void); typedef IDeckLinkVideoConversion* (*CreateVideoConversionInstanceFunc)(void); typedef IDeckLinkDiscovery* (*CreateDeckLinkDiscoveryInstanceFunc)(void); +typedef IDeckLinkVideoFrameAncillaryPackets* (*CreateVideoFrameAncillaryPacketsInstanceFunc)(void); static pthread_once_t gDeckLinkOnceControl = PTHREAD_ONCE_INIT; static pthread_once_t gPreviewOnceControl = PTHREAD_ONCE_INIT; @@ -50,6 +51,7 @@ static CreateAPIInformationFunc gCreateAPIInformationFunc = NULL; static CreateOpenGLScreenPreviewHelperFunc gCreateOpenGLPreviewFunc = NULL; static CreateVideoConversionInstanceFunc gCreateVideoConversionFunc = NULL; static CreateDeckLinkDiscoveryInstanceFunc gCreateDeckLinkDiscoveryFunc = NULL; +static CreateVideoFrameAncillaryPacketsInstanceFunc gCreateVideoFrameAncillaryPacketsFunc = NULL; static void InitDeckLinkAPI (void) { @@ -67,7 +69,7 @@ static void InitDeckLinkAPI (void) gLoadedDeckLinkAPI = true; - gCreateIteratorFunc = (CreateIteratorFunc)dlsym(libraryHandle, "CreateDeckLinkIteratorInstance_0002"); + gCreateIteratorFunc = (CreateIteratorFunc)dlsym(libraryHandle, "CreateDeckLinkIteratorInstance_0003"); if (!gCreateIteratorFunc) fprintf(stderr, "%s\n", dlerror()); gCreateAPIInformationFunc = (CreateAPIInformationFunc)dlsym(libraryHandle, "CreateDeckLinkAPIInformationInstance_0001"); @@ -76,9 +78,12 @@ static void InitDeckLinkAPI (void) gCreateVideoConversionFunc = (CreateVideoConversionInstanceFunc)dlsym(libraryHandle, "CreateVideoConversionInstance_0001"); if (!gCreateVideoConversionFunc) fprintf(stderr, "%s\n", dlerror()); - gCreateDeckLinkDiscoveryFunc = (CreateDeckLinkDiscoveryInstanceFunc)dlsym(libraryHandle, "CreateDeckLinkDiscoveryInstance_0001"); + gCreateDeckLinkDiscoveryFunc = (CreateDeckLinkDiscoveryInstanceFunc)dlsym(libraryHandle, "CreateDeckLinkDiscoveryInstance_0002"); if (!gCreateDeckLinkDiscoveryFunc) fprintf(stderr, "%s\n", dlerror()); + gCreateVideoFrameAncillaryPacketsFunc = (CreateVideoFrameAncillaryPacketsInstanceFunc)dlsym(libraryHandle, "CreateVideoFrameAncillaryPacketsInstance_0001"); + if (!gCreateVideoFrameAncillaryPacketsFunc) + fprintf(stderr, "%s\n", dlerror()); } static void InitDeckLinkPreviewAPI (void) @@ -149,3 +154,12 @@ IDeckLinkDiscovery* CreateDeckLinkDiscoveryInstance (void) return NULL; return gCreateDeckLinkDiscoveryFunc(); } + +IDeckLinkVideoFrameAncillaryPackets* CreateVideoFrameAncillaryPacketsInstance (void) +{ + pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI); + + if (gCreateVideoFrameAncillaryPacketsFunc == NULL) + return NULL; + return gCreateVideoFrameAncillaryPacketsFunc(); +} diff --git a/sys/decklink/linux/DeckLinkAPIModes.h b/sys/decklink/linux/DeckLinkAPIModes.h index 2788e7a..543aaa1 100644 --- a/sys/decklink/linux/DeckLinkAPIModes.h +++ b/sys/decklink/linux/DeckLinkAPIModes.h @@ -1,5 +1,5 @@ /* -LICENSE-START- -** Copyright (c) 2016 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 @@ -37,6 +37,10 @@ #endif #endif +#ifndef BMD_PUBLIC + #define BMD_PUBLIC +#endif + // Type Declarations @@ -65,12 +69,12 @@ enum _BMDDisplayMode { bmdModeHD1080p25 = /* 'Hp25' */ 0x48703235, bmdModeHD1080p2997 = /* 'Hp29' */ 0x48703239, bmdModeHD1080p30 = /* 'Hp30' */ 0x48703330, - bmdModeHD1080i50 = /* 'Hi50' */ 0x48693530, - bmdModeHD1080i5994 = /* 'Hi59' */ 0x48693539, - bmdModeHD1080i6000 = /* 'Hi60' */ 0x48693630, // N.B. This _really_ is 60.00 Hz. bmdModeHD1080p50 = /* 'Hp50' */ 0x48703530, bmdModeHD1080p5994 = /* 'Hp59' */ 0x48703539, bmdModeHD1080p6000 = /* 'Hp60' */ 0x48703630, // N.B. This _really_ is 60.00 Hz. + bmdModeHD1080i50 = /* 'Hi50' */ 0x48693530, + bmdModeHD1080i5994 = /* 'Hi59' */ 0x48693539, + bmdModeHD1080i6000 = /* 'Hi60' */ 0x48693630, // N.B. This _really_ is 60.00 Hz. /* HD 720 Modes */ @@ -78,19 +82,24 @@ enum _BMDDisplayMode { bmdModeHD720p5994 = /* 'hp59' */ 0x68703539, bmdModeHD720p60 = /* 'hp60' */ 0x68703630, - /* 2k Modes */ + /* 2K Modes */ bmdMode2k2398 = /* '2k23' */ 0x326B3233, bmdMode2k24 = /* '2k24' */ 0x326B3234, bmdMode2k25 = /* '2k25' */ 0x326B3235, - /* DCI Modes (output only) */ + /* 2K DCI Modes */ bmdMode2kDCI2398 = /* '2d23' */ 0x32643233, bmdMode2kDCI24 = /* '2d24' */ 0x32643234, bmdMode2kDCI25 = /* '2d25' */ 0x32643235, + bmdMode2kDCI2997 = /* '2d29' */ 0x32643239, + bmdMode2kDCI30 = /* '2d30' */ 0x32643330, + bmdMode2kDCI50 = /* '2d50' */ 0x32643530, + bmdMode2kDCI5994 = /* '2d59' */ 0x32643539, + bmdMode2kDCI60 = /* '2d60' */ 0x32643630, - /* 4k Modes */ + /* 4K UHD Modes */ bmdMode4K2160p2398 = /* '4k23' */ 0x346B3233, bmdMode4K2160p24 = /* '4k24' */ 0x346B3234, @@ -101,11 +110,43 @@ enum _BMDDisplayMode { bmdMode4K2160p5994 = /* '4k59' */ 0x346B3539, bmdMode4K2160p60 = /* '4k60' */ 0x346B3630, - /* DCI Modes (output only) */ + /* 4K DCI Modes */ bmdMode4kDCI2398 = /* '4d23' */ 0x34643233, bmdMode4kDCI24 = /* '4d24' */ 0x34643234, bmdMode4kDCI25 = /* '4d25' */ 0x34643235, + bmdMode4kDCI2997 = /* '4d29' */ 0x34643239, + bmdMode4kDCI30 = /* '4d30' */ 0x34643330, + bmdMode4kDCI50 = /* '4d50' */ 0x34643530, + bmdMode4kDCI5994 = /* '4d59' */ 0x34643539, + bmdMode4kDCI60 = /* '4d60' */ 0x34643630, + + /* 8K UHD Modes */ + + bmdMode8K4320p2398 = /* '8k23' */ 0x386B3233, + bmdMode8K4320p24 = /* '8k24' */ 0x386B3234, + bmdMode8K4320p25 = /* '8k25' */ 0x386B3235, + bmdMode8K4320p2997 = /* '8k29' */ 0x386B3239, + bmdMode8K4320p30 = /* '8k30' */ 0x386B3330, + bmdMode8K4320p50 = /* '8k50' */ 0x386B3530, + bmdMode8K4320p5994 = /* '8k59' */ 0x386B3539, + bmdMode8K4320p60 = /* '8k60' */ 0x386B3630, + + /* 8K DCI Modes */ + + bmdMode8kDCI2398 = /* '8d23' */ 0x38643233, + bmdMode8kDCI24 = /* '8d24' */ 0x38643234, + bmdMode8kDCI25 = /* '8d25' */ 0x38643235, + bmdMode8kDCI2997 = /* '8d29' */ 0x38643239, + bmdMode8kDCI30 = /* '8d30' */ 0x38643330, + bmdMode8kDCI50 = /* '8d50' */ 0x38643530, + bmdMode8kDCI5994 = /* '8d59' */ 0x38643539, + bmdMode8kDCI60 = /* '8d60' */ 0x38643630, + + /* RAW Modes for Cintel (input only) */ + + bmdModeCintelRAW = /* 'rwci' */ 0x72776369, // Frame size up to 4096x3072, variable frame rate + bmdModeCintelCompressedRAW = /* 'rwcc' */ 0x72776363, // Frame size up to 4096x3072, variable frame rate /* Special Modes */ @@ -140,7 +181,12 @@ enum _BMDPixelFormat { /* AVID DNxHR */ - bmdFormatDNxHR = /* 'AVdh' */ 0x41566468 + bmdFormatDNxHR = /* 'AVdh' */ 0x41566468, + + /* Cintel formats */ + + bmdFormat12BitRAWGRBG = /* 'r12p' */ 0x72313270, // 12-bit RAW data for bayer pattern GRBG + bmdFormat12BitRAWJPEG = /* 'r16p' */ 0x72313670 // 12-bit RAW data arranged in tiles and JPEG compressed }; /* Enum BMDDisplayModeFlags - Flags to describe the characteristics of an IDeckLinkDisplayMode. */ @@ -149,7 +195,8 @@ typedef uint32_t BMDDisplayModeFlags; enum _BMDDisplayModeFlags { bmdDisplayModeSupports3D = 1 << 0, bmdDisplayModeColorspaceRec601 = 1 << 1, - bmdDisplayModeColorspaceRec709 = 1 << 2 + bmdDisplayModeColorspaceRec709 = 1 << 2, + bmdDisplayModeColorspaceRec2020 = 1 << 3 }; // Forward Declarations @@ -159,7 +206,7 @@ class IDeckLinkDisplayMode; /* Interface IDeckLinkDisplayModeIterator - enumerates over supported input/output display modes. */ -class IDeckLinkDisplayModeIterator : public IUnknown +class BMD_PUBLIC IDeckLinkDisplayModeIterator : public IUnknown { public: virtual HRESULT Next (/* out */ IDeckLinkDisplayMode **deckLinkDisplayMode) = 0; @@ -170,7 +217,7 @@ protected: /* Interface IDeckLinkDisplayMode - represents a display mode */ -class IDeckLinkDisplayMode : public IUnknown +class BMD_PUBLIC IDeckLinkDisplayMode : public IUnknown { public: virtual HRESULT GetName (/* out */ const char **name) = 0; diff --git a/sys/decklink/linux/DeckLinkAPITypes.h b/sys/decklink/linux/DeckLinkAPITypes.h index e3379e3..5591262 100644 --- a/sys/decklink/linux/DeckLinkAPITypes.h +++ b/sys/decklink/linux/DeckLinkAPITypes.h @@ -1,5 +1,5 @@ /* -LICENSE-START- -** Copyright (c) 2016 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 @@ -37,6 +37,10 @@ #endif #endif +#ifndef BMD_PUBLIC + #define BMD_PUBLIC +#endif + // Type Declarations typedef int64_t BMDTimeValue; @@ -54,7 +58,8 @@ typedef uint32_t BMDTimecodeFlags; enum _BMDTimecodeFlags { bmdTimecodeFlagDefault = 0, bmdTimecodeIsDropFrame = 1 << 0, - bmdTimecodeFieldMark = 1 << 1 + bmdTimecodeFieldMark = 1 << 1, + bmdTimecodeColorFrame = 1 << 2 }; /* Enum BMDVideoConnection - Video connection types */ @@ -96,7 +101,7 @@ class IDeckLinkTimecode; /* Interface IDeckLinkTimecode - Used for video frame timecode representation. */ -class IDeckLinkTimecode : public IUnknown +class BMD_PUBLIC IDeckLinkTimecode : public IUnknown { public: virtual BMDTimecodeBCD GetBCD (void) = 0; diff --git a/sys/decklink/linux/DeckLinkAPIVersion.h b/sys/decklink/linux/DeckLinkAPIVersion.h index e19fa11..f9db7ff 100644 --- a/sys/decklink/linux/DeckLinkAPIVersion.h +++ b/sys/decklink/linux/DeckLinkAPIVersion.h @@ -30,8 +30,8 @@ #ifndef __DeckLink_API_Version_h__ #define __DeckLink_API_Version_h__ -#define BLACKMAGIC_DECKLINK_API_VERSION 0x0a080000 -#define BLACKMAGIC_DECKLINK_API_VERSION_STRING "10.8" +#define BLACKMAGIC_DECKLINK_API_VERSION 0x0a0b0400 +#define BLACKMAGIC_DECKLINK_API_VERSION_STRING "10.11.4" #endif // __DeckLink_API_Version_h__ diff --git a/sys/decklink/linux/LinuxCOM.h b/sys/decklink/linux/LinuxCOM.h index 2b13697..663602b 100644 --- a/sys/decklink/linux/LinuxCOM.h +++ b/sys/decklink/linux/LinuxCOM.h @@ -85,8 +85,12 @@ typedef void *LPVOID; #define IID_IUnknown (REFIID){0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46} #define IUnknownUUID IID_IUnknown +#ifndef BMD_PUBLIC + #define BMD_PUBLIC +#endif + #ifdef __cplusplus -class IUnknown +class BMD_PUBLIC IUnknown { public: virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid, LPVOID *ppv) = 0; diff --git a/sys/decklink/osx/DeckLinkAPI.h b/sys/decklink/osx/DeckLinkAPI.h index fe8e03b..368a72b 100644 --- a/sys/decklink/osx/DeckLinkAPI.h +++ b/sys/decklink/osx/DeckLinkAPI.h @@ -1,5 +1,5 @@ /* -LICENSE-START- -** Copyright (c) 2016 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 @@ -37,6 +37,10 @@ #endif #endif +#ifndef BMD_PUBLIC + #define BMD_PUBLIC +#endif + /* DeckLink API */ #include @@ -67,12 +71,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}; @@ -117,9 +125,11 @@ 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 }; @@ -217,6 +227,15 @@ enum _BMDDisplayModeSupport { bmdDisplayModeSupportedWithConversion }; +/* Enum BMDAncillaryPacketFormat - Ancillary packet format */ + +typedef uint32_t BMDAncillaryPacketFormat; +enum _BMDAncillaryPacketFormat { + bmdAncillaryPacketFormatUInt8 = 'ui08', + bmdAncillaryPacketFormatUInt16 = 'ui16', + bmdAncillaryPacketFormatYCbCr10 = 'v210' +}; + /* Enum BMDTimecodeFormat - Timecode formats for frame metadata */ typedef uint32_t BMDTimecodeFormat; @@ -336,11 +355,68 @@ enum _BMDDeviceInterface { bmdDeviceInterfaceThunderbolt = 'thun' }; +/* Enum BMDColorspace - Colorspace */ + +typedef uint32_t BMDColorspace; +enum _BMDColorspace { + bmdColorspaceRec601 = 'r601', + bmdColorspaceRec709 = 'r709', + bmdColorspaceRec2020 = '2020' +}; + +/* 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' // Parameter is of type BMDDynamicRange. Default is (bmdDynamicRangeSDR|bmdDynamicRangeHDRStaticPQ) +}; + /* Enum BMDDeckLinkFrameMetadataID - DeckLink Frame Metadata ID */ typedef uint32_t BMDDeckLinkFrameMetadataID; enum _BMDDeckLinkFrameMetadataID { + bmdDeckLinkFrameMetadataColorspace = 'cspc', // Colorspace of video frame (see BMDColorspace) bmdDeckLinkFrameMetadataHDRElectroOpticalTransferFunc = 'eotf', // EOTF in range 0-7 as per CEA 861.3 + bmdDeckLinkFrameMetadataCintelFilmType = 'cfty', // Current film type + bmdDeckLinkFrameMetadataCintelFilmGauge = 'cfga', // Current film gauge + bmdDeckLinkFrameMetadataCintelOffsetDetectedHorizontal = 'odfh', // Horizontal offset (pixels) detected in image + bmdDeckLinkFrameMetadataCintelOffsetDetectedVertical = 'odfv', // Vertical offset (pixels) detected in image + bmdDeckLinkFrameMetadataCintelKeykodeLow = 'ckkl', // Raw keykode value - low 64 bits + bmdDeckLinkFrameMetadataCintelKeykodeHigh = 'ckkh', // Raw keykode value - high 64 bits + bmdDeckLinkFrameMetadataCintelTile1Size = 'ct1s', // Size in bytes of compressed raw tile 1 + bmdDeckLinkFrameMetadataCintelTile2Size = 'ct2s', // Size in bytes of compressed raw tile 2 + bmdDeckLinkFrameMetadataCintelTile3Size = 'ct3s', // Size in bytes of compressed raw tile 3 + bmdDeckLinkFrameMetadataCintelTile4Size = 'ct4s', // Size in bytes of compressed raw tile 4 + bmdDeckLinkFrameMetadataCintelImageWidth = 'IWPx', // Width in pixels of image + bmdDeckLinkFrameMetadataCintelImageHeight = 'IHPx', // Height in pixels of image + bmdDeckLinkFrameMetadataCintelLinearMaskingRedInRed = 'mrir', // Red in red linear masking parameter + bmdDeckLinkFrameMetadataCintelLinearMaskingGreenInRed = 'mgir', // Green in red linear masking parameter + bmdDeckLinkFrameMetadataCintelLinearMaskingBlueInRed = 'mbir', // Blue in red linear masking parameter + bmdDeckLinkFrameMetadataCintelLinearMaskingRedInGreen = 'mrig', // Red in green linear masking parameter + bmdDeckLinkFrameMetadataCintelLinearMaskingGreenInGreen = 'mgig', // Green in green linear masking parameter + bmdDeckLinkFrameMetadataCintelLinearMaskingBlueInGreen = 'mbig', // Blue in green linear masking parameter + bmdDeckLinkFrameMetadataCintelLinearMaskingRedInBlue = 'mrib', // Red in blue linear masking parameter + bmdDeckLinkFrameMetadataCintelLinearMaskingGreenInBlue = 'mgib', // Green in blue linear masking parameter + bmdDeckLinkFrameMetadataCintelLinearMaskingBlueInBlue = 'mbib', // Blue in blue linear masking parameter + bmdDeckLinkFrameMetadataCintelLogMaskingRedInRed = 'mlrr', // Red in red log masking parameter + bmdDeckLinkFrameMetadataCintelLogMaskingGreenInRed = 'mlgr', // Green in red log masking parameter + bmdDeckLinkFrameMetadataCintelLogMaskingBlueInRed = 'mlbr', // Blue in red log masking parameter + bmdDeckLinkFrameMetadataCintelLogMaskingRedInGreen = 'mlrg', // Red in green log masking parameter + bmdDeckLinkFrameMetadataCintelLogMaskingGreenInGreen = 'mlgg', // Green in green log masking parameter + bmdDeckLinkFrameMetadataCintelLogMaskingBlueInGreen = 'mlbg', // Blue in green log masking parameter + bmdDeckLinkFrameMetadataCintelLogMaskingRedInBlue = 'mlrb', // Red in blue log masking parameter + bmdDeckLinkFrameMetadataCintelLogMaskingGreenInBlue = 'mlgb', // Green in blue log masking parameter + bmdDeckLinkFrameMetadataCintelLogMaskingBlueInBlue = 'mlbb', // Blue in blue log masking parameter + bmdDeckLinkFrameMetadataCintelFilmFrameRate = 'cffr', // Film frame rate bmdDeckLinkFrameMetadataHDRDisplayPrimariesRedX = 'hdrx', // Red display primaries in range 0.0 - 1.0 bmdDeckLinkFrameMetadataHDRDisplayPrimariesRedY = 'hdry', // Red display primaries in range 0.0 - 1.0 bmdDeckLinkFrameMetadataHDRDisplayPrimariesGreenX = 'hdgx', // Green display primaries in range 0.0 - 1.0 @@ -352,7 +428,15 @@ enum _BMDDeckLinkFrameMetadataID { bmdDeckLinkFrameMetadataHDRMaxDisplayMasteringLuminance = 'hdml', // Max display mastering luminance in range 1 cd/m2 - 65535 cd/m2 bmdDeckLinkFrameMetadataHDRMinDisplayMasteringLuminance = 'hmil', // Min display mastering luminance in range 0.0001 cd/m2 - 6.5535 cd/m2 bmdDeckLinkFrameMetadataHDRMaximumContentLightLevel = 'mcll', // Maximum Content Light Level in range 1 cd/m2 - 65535 cd/m2 - bmdDeckLinkFrameMetadataHDRMaximumFrameAverageLightLevel = 'fall' // Maximum Frame Average Light Level in range 1 cd/m2 - 65535 cd/m2 + bmdDeckLinkFrameMetadataHDRMaximumFrameAverageLightLevel = 'fall', // Maximum Frame Average Light Level in range 1 cd/m2 - 65535 cd/m2 + bmdDeckLinkFrameMetadataCintelOffsetToApplyHorizontal = 'otah', // Horizontal offset (pixels) to be applied to image + bmdDeckLinkFrameMetadataCintelOffsetToApplyVertical = 'otav', // Vertical offset (pixels) to be applied to image + bmdDeckLinkFrameMetadataCintelGainRed = 'LfRd', // Red gain parameter to apply after log + bmdDeckLinkFrameMetadataCintelGainGreen = 'LfGr', // Green gain parameter to apply after log + bmdDeckLinkFrameMetadataCintelGainBlue = 'LfBl', // Blue gain parameter to apply after log + bmdDeckLinkFrameMetadataCintelLiftRed = 'GnRd', // Red lift parameter to apply after log and gain + bmdDeckLinkFrameMetadataCintelLiftGreen = 'GnGr', // Green lift parameter to apply after log and gain + bmdDeckLinkFrameMetadataCintelLiftBlue = 'GnBl' // Blue lift parameter to apply after log and gain }; /* Enum BMDDuplexMode - Duplex for configurable ports */ @@ -390,22 +474,24 @@ enum _BMDDeckLinkAttributeID { BMDDeckLinkHasLTCTimecodeInput = 'hltc', BMDDeckLinkSupportsDuplexModeConfiguration = 'dupx', BMDDeckLinkSupportsHDRMetadata = 'hdrm', + BMDDeckLinkSupportsColorspaceMetadata = 'cmet', /* Integers */ BMDDeckLinkMaximumAudioChannels = 'mach', - BMDDeckLinkMaximumAnalogAudioChannels = 'aach', + BMDDeckLinkMaximumAnalogAudioInputChannels = 'iach', + BMDDeckLinkMaximumAnalogAudioOutputChannels = 'aach', BMDDeckLinkNumberOfSubDevices = 'nsbd', BMDDeckLinkSubDeviceIndex = 'subi', BMDDeckLinkPersistentID = 'peid', BMDDeckLinkDeviceGroupID = 'dgid', BMDDeckLinkTopologicalID = 'toid', - BMDDeckLinkVideoOutputConnections = 'vocn', - BMDDeckLinkVideoInputConnections = 'vicn', - BMDDeckLinkAudioOutputConnections = 'aocn', - BMDDeckLinkAudioInputConnections = 'aicn', + BMDDeckLinkVideoOutputConnections = 'vocn', // Returns a BMDVideoConnection bit field + BMDDeckLinkVideoInputConnections = 'vicn', // Returns a BMDVideoConnection bit field + BMDDeckLinkAudioOutputConnections = 'aocn', // Returns a BMDAudioConnection bit field + BMDDeckLinkAudioInputConnections = 'aicn', // Returns a BMDAudioConnection bit field BMDDeckLinkVideoIOSupport = 'vios', // Returns a BMDVideoIOSupport bit field - BMDDeckLinkDeckControlConnections = 'dccn', + BMDDeckLinkDeckControlConnections = 'dccn', // Returns a BMDDeckControlConnection bit field BMDDeckLinkDeviceInterface = 'dbus', // Returns a BMDDeviceInterface BMDDeckLinkAudioInputRCAChannelCount = 'airc', BMDDeckLinkAudioInputXLRChannelCount = 'aixc', @@ -459,11 +545,14 @@ enum _BMDDeckLinkStatusID { bmdDeckLinkStatusReferenceSignalFlags = 'reff', bmdDeckLinkStatusDuplexMode = 'dupx', bmdDeckLinkStatusBusy = 'busy', + bmdDeckLinkStatusInterchangeablePanelType = 'icpt', + bmdDeckLinkStatusDeviceTemperature = 'dtmp', /* Flags */ bmdDeckLinkStatusVideoInputSignalLocked = 'visl', - bmdDeckLinkStatusReferenceSignalLocked = 'refl' + bmdDeckLinkStatusReferenceSignalLocked = 'refl', + bmdDeckLinkStatusReceivedEDID = 'edid' }; /* Enum BMDDeckLinkVideoStatusFlags - */ @@ -484,6 +573,14 @@ enum _BMDDuplexStatus { bmdDuplexStatusInactive = 'inac' }; +/* Enum BMDPanelType - The type of interchangeable panel */ + +typedef uint32_t BMDPanelType; +enum _BMDPanelType { + bmdPanelNotDetected = 'npnl', + bmdPanelTeranexMiniSmartPanel = 'tmsm' +}; + /* Enum BMDDeviceBusyState - Current device busy state */ typedef uint32_t BMDDeviceBusyState; @@ -533,12 +630,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; @@ -559,7 +660,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; @@ -571,7 +672,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; @@ -583,7 +684,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; @@ -596,7 +697,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; @@ -608,7 +709,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; @@ -616,7 +717,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; @@ -624,7 +725,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; @@ -638,7 +739,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; @@ -653,7 +754,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; @@ -695,7 +796,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; @@ -732,9 +833,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; @@ -771,7 +885,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; @@ -782,7 +896,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 @@ -790,7 +904,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; @@ -806,7 +920,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; @@ -818,7 +932,7 @@ protected: /* Interface IDeckLinkVideoFrameMetadataExtensions - Optional interface implemented on IDeckLinkVideoFrame to support frame metadata such as HDMI HDR information */ -class IDeckLinkVideoFrameMetadataExtensions : public IUnknown +class BMD_PUBLIC IDeckLinkVideoFrameMetadataExtensions : public IUnknown { public: virtual HRESULT GetInt (/* in */ BMDDeckLinkFrameMetadataID metadataID, /* out */ int64_t *value) = 0; @@ -832,7 +946,7 @@ protected: /* 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; @@ -842,13 +956,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; @@ -858,7 +1015,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; @@ -872,7 +1029,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; @@ -886,7 +1043,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; @@ -897,7 +1054,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; @@ -910,7 +1067,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; @@ -923,7 +1080,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; @@ -934,7 +1091,7 @@ protected: /* Interface IDeckLinkCocoaScreenPreviewCallback - Screen preview callback for Cocoa-based applications */ -class IDeckLinkCocoaScreenPreviewCallback : public IDeckLinkScreenPreviewCallback +class BMD_PUBLIC IDeckLinkCocoaScreenPreviewCallback : public IDeckLinkScreenPreviewCallback { public: @@ -944,7 +1101,7 @@ protected: /* Interface IDeckLinkGLScreenPreviewHelper - Created with CoCreateInstance(). */ -class IDeckLinkGLScreenPreviewHelper : public IUnknown +class BMD_PUBLIC IDeckLinkGLScreenPreviewHelper : public IUnknown { public: @@ -961,7 +1118,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; @@ -969,7 +1126,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; @@ -978,7 +1135,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; @@ -992,7 +1149,7 @@ protected: /* Interface IDeckLinkStatus - DeckLink Status interface */ -class IDeckLinkStatus : public IUnknown +class BMD_PUBLIC IDeckLinkStatus : public IUnknown { public: virtual HRESULT GetFlag (/* in */ BMDDeckLinkStatusID statusID, /* out */ bool *value) = 0; @@ -1007,7 +1164,7 @@ protected: /* Interface IDeckLinkKeyer - DeckLink Keyer interface */ -class IDeckLinkKeyer : public IUnknown +class BMD_PUBLIC IDeckLinkKeyer : public IUnknown { public: virtual HRESULT Enable (/* in */ bool isExternal) = 0; @@ -1022,7 +1179,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; @@ -1033,7 +1190,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; @@ -1045,7 +1202,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; @@ -1059,12 +1216,13 @@ protected: extern "C" { - IDeckLinkIterator* CreateDeckLinkIteratorInstance (void); - IDeckLinkDiscovery* CreateDeckLinkDiscoveryInstance (void); - IDeckLinkAPIInformation* CreateDeckLinkAPIInformationInstance (void); - IDeckLinkGLScreenPreviewHelper* CreateOpenGLScreenPreviewHelper (void); - IDeckLinkCocoaScreenPreviewCallback* CreateCocoaScreenPreview (void* /* (NSView*) */ parentView); - IDeckLinkVideoConversion* CreateVideoConversionInstance (void); + IDeckLinkIterator* BMD_PUBLIC CreateDeckLinkIteratorInstance (void); + IDeckLinkDiscovery* BMD_PUBLIC CreateDeckLinkDiscoveryInstance (void); + IDeckLinkAPIInformation* BMD_PUBLIC CreateDeckLinkAPIInformationInstance (void); + IDeckLinkGLScreenPreviewHelper* BMD_PUBLIC CreateOpenGLScreenPreviewHelper (void); + IDeckLinkCocoaScreenPreviewCallback* BMD_PUBLIC CreateCocoaScreenPreview (void* /* (NSView*) */ parentView); + IDeckLinkVideoConversion* BMD_PUBLIC CreateVideoConversionInstance (void); + IDeckLinkVideoFrameAncillaryPackets* BMD_PUBLIC CreateVideoFrameAncillaryPacketsInstance (void); // For use when creating a custom IDeckLinkVideoFrame without wrapping IDeckLinkOutput::CreateVideoFrame } diff --git a/sys/decklink/osx/DeckLinkAPIConfiguration.h b/sys/decklink/osx/DeckLinkAPIConfiguration.h index 717d17d..a76d33a 100644 --- a/sys/decklink/osx/DeckLinkAPIConfiguration.h +++ b/sys/decklink/osx/DeckLinkAPIConfiguration.h @@ -1,5 +1,5 @@ /* -LICENSE-START- -** Copyright (c) 2016 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 @@ -37,12 +37,16 @@ #endif #endif +#ifndef BMD_PUBLIC + #define BMD_PUBLIC +#endif + // Type Declarations // Interface ID Declarations -BMD_CONST REFIID IID_IDeckLinkConfiguration = /* CB71734A-FE37-4E8D-8E13-802133A1C3F2 */ {0xCB,0x71,0x73,0x4A,0xFE,0x37,0x4E,0x8D,0x8E,0x13,0x80,0x21,0x33,0xA1,0xC3,0xF2}; +BMD_CONST REFIID IID_IDeckLinkConfiguration = /* EF90380B-4AE5-4346-9077-E288E149F129 */ {0xEF,0x90,0x38,0x0B,0x4A,0xE5,0x43,0x46,0x90,0x77,0xE2,0x88,0xE1,0x49,0xF1,0x29}; BMD_CONST REFIID IID_IDeckLinkEncoderConfiguration = /* 138050E5-C60A-4552-BF3F-0F358049327E */ {0x13,0x80,0x50,0xE5,0xC6,0x0A,0x45,0x52,0xBF,0x3F,0x0F,0x35,0x80,0x49,0x32,0x7E}; /* Enum BMDDeckLinkConfigurationID - DeckLink Configuration ID */ @@ -54,10 +58,6 @@ enum _BMDDeckLinkConfigurationID { bmdDeckLinkConfigSwapSerialRxTx = 'ssrt', - /* Video Input/Output Flags */ - - bmdDeckLinkConfigUse1080pNotPsF = 'fpro', - /* Video Input/Output Integers */ bmdDeckLinkConfigHDMI3DPackingFormat = '3dpf', @@ -78,6 +78,12 @@ enum _BMDDeckLinkConfigurationID { bmdDeckLinkConfigLowLatencyVideoOutput = 'llvo', bmdDeckLinkConfigDownConversionOnAllAnalogOutput = 'caao', bmdDeckLinkConfigSMPTELevelAOutput = 'smta', + bmdDeckLinkConfigRec2020Output = 'rec2', // Ensure output is Rec.2020 colorspace + bmdDeckLinkConfigQuadLinkSDIVideoOutputSquareDivisionSplit = 'SDQS', + + /* Video Output Flags */ + + bmdDeckLinkConfigOutput1080pAsPsF = 'pfpr', /* Video Output Integers */ @@ -106,6 +112,10 @@ enum _BMDDeckLinkConfigurationID { bmdDeckLinkConfigUseDedicatedLTCInput = 'dltc', // Use timecode from LTC input instead of SDI stream bmdDeckLinkConfigSDIInput3DPayloadOverride = '3dds', + /* Video Input Flags */ + + bmdDeckLinkConfigCapture1080pAsPsF = 'cfpr', + /* Video Input Integers */ bmdDeckLinkConfigVideoInputConnection = 'vicn', @@ -206,7 +216,7 @@ class IDeckLinkEncoderConfiguration; /* Interface IDeckLinkConfiguration - DeckLink Configuration interface */ -class IDeckLinkConfiguration : public IUnknown +class BMD_PUBLIC IDeckLinkConfiguration : public IUnknown { public: virtual HRESULT SetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ bool value) = 0; @@ -225,7 +235,7 @@ protected: /* Interface IDeckLinkEncoderConfiguration - DeckLink Encoder Configuration interface. Obtained from IDeckLinkEncoderInput */ -class IDeckLinkEncoderConfiguration : public IUnknown +class BMD_PUBLIC IDeckLinkEncoderConfiguration : public IUnknown { public: virtual HRESULT SetFlag (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* in */ bool value) = 0; diff --git a/sys/decklink/osx/DeckLinkAPIDeckControl.h b/sys/decklink/osx/DeckLinkAPIDeckControl.h index 0fd4e96..b1b7797 100644 --- a/sys/decklink/osx/DeckLinkAPIDeckControl.h +++ b/sys/decklink/osx/DeckLinkAPIDeckControl.h @@ -1,5 +1,5 @@ /* -LICENSE-START- -** Copyright (c) 2016 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 @@ -37,6 +37,10 @@ #endif #endif +#ifndef BMD_PUBLIC + #define BMD_PUBLIC +#endif + // Type Declarations @@ -149,7 +153,7 @@ class IDeckLinkDeckControl; /* Interface IDeckLinkDeckControlStatusCallback - Deck control state change callback. */ -class IDeckLinkDeckControlStatusCallback : public IUnknown +class BMD_PUBLIC IDeckLinkDeckControlStatusCallback : public IUnknown { public: virtual HRESULT TimecodeUpdate (/* in */ BMDTimecodeBCD currentTimecode) = 0; @@ -163,7 +167,7 @@ protected: /* Interface IDeckLinkDeckControl - Deck Control main interface */ -class IDeckLinkDeckControl : public IUnknown +class BMD_PUBLIC IDeckLinkDeckControl : public IUnknown { public: virtual HRESULT Open (/* in */ BMDTimeScale timeScale, /* in */ BMDTimeValue timeValue, /* in */ bool timecodeIsDropFrame, /* out */ BMDDeckControlError *error) = 0; diff --git a/sys/decklink/osx/DeckLinkAPIDiscovery.h b/sys/decklink/osx/DeckLinkAPIDiscovery.h index ac17a1ef..c8331ad 100644 --- a/sys/decklink/osx/DeckLinkAPIDiscovery.h +++ b/sys/decklink/osx/DeckLinkAPIDiscovery.h @@ -1,5 +1,5 @@ /* -LICENSE-START- -** Copyright (c) 2016 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 @@ -37,6 +37,10 @@ #endif #endif +#ifndef BMD_PUBLIC + #define BMD_PUBLIC +#endif + // Type Declarations @@ -50,7 +54,7 @@ class IDeckLink; /* Interface IDeckLink - represents a DeckLink device */ -class IDeckLink : public IUnknown +class BMD_PUBLIC IDeckLink : public IUnknown { public: virtual HRESULT GetModelName (/* out */ CFStringRef *modelName) = 0; diff --git a/sys/decklink/osx/DeckLinkAPIDispatch.cpp b/sys/decklink/osx/DeckLinkAPIDispatch.cpp index cde0634..7a2a426 100644 --- a/sys/decklink/osx/DeckLinkAPIDispatch.cpp +++ b/sys/decklink/osx/DeckLinkAPIDispatch.cpp @@ -42,6 +42,7 @@ typedef IDeckLinkGLScreenPreviewHelper* (*CreateOpenGLScreenPreviewHelperFunc)(v typedef IDeckLinkCocoaScreenPreviewCallback* (*CreateCocoaScreenPreviewFunc)(void*); typedef IDeckLinkVideoConversion* (*CreateVideoConversionInstanceFunc)(void); typedef IDeckLinkDiscovery* (*CreateDeckLinkDiscoveryInstanceFunc)(void); +typedef IDeckLinkVideoFrameAncillaryPackets* (*CreateVideoFrameAncillaryPacketsInstanceFunc)(void); static pthread_once_t gDeckLinkOnceControl = PTHREAD_ONCE_INIT; static CFBundleRef gDeckLinkAPIBundleRef = NULL; @@ -51,6 +52,7 @@ static CreateOpenGLScreenPreviewHelperFunc gCreateOpenGLPreviewFunc = NULL; static CreateCocoaScreenPreviewFunc gCreateCocoaPreviewFunc = NULL; static CreateVideoConversionInstanceFunc gCreateVideoConversionFunc = NULL; static CreateDeckLinkDiscoveryInstanceFunc gCreateDeckLinkDiscoveryFunc= NULL; +static CreateVideoFrameAncillaryPacketsInstanceFunc gCreateVideoFrameAncillaryPacketsFunc = NULL; static void InitDeckLinkAPI (void) @@ -63,12 +65,13 @@ static void InitDeckLinkAPI (void) gDeckLinkAPIBundleRef = CFBundleCreate(kCFAllocatorDefault, bundleURL); if (gDeckLinkAPIBundleRef != NULL) { - gCreateIteratorFunc = (CreateIteratorFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateDeckLinkIteratorInstance_0002")); + gCreateIteratorFunc = (CreateIteratorFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateDeckLinkIteratorInstance_0003")); gCreateAPIInformationFunc = (CreateAPIInformationFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateDeckLinkAPIInformationInstance_0001")); gCreateOpenGLPreviewFunc = (CreateOpenGLScreenPreviewHelperFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateOpenGLScreenPreviewHelper_0001")); gCreateCocoaPreviewFunc = (CreateCocoaScreenPreviewFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateCocoaScreenPreview_0001")); gCreateVideoConversionFunc = (CreateVideoConversionInstanceFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateVideoConversionInstance_0001")); - gCreateDeckLinkDiscoveryFunc = (CreateDeckLinkDiscoveryInstanceFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateDeckLinkDiscoveryInstance_0001")); + gCreateDeckLinkDiscoveryFunc = (CreateDeckLinkDiscoveryInstanceFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateDeckLinkDiscoveryInstance_0002")); + gCreateVideoFrameAncillaryPacketsFunc = (CreateVideoFrameAncillaryPacketsInstanceFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateVideoFrameAncillaryPacketsInstance_0001")); } CFRelease(bundleURL); } @@ -145,6 +148,16 @@ IDeckLinkDiscovery* CreateDeckLinkDiscoveryInstance (void) return gCreateDeckLinkDiscoveryFunc(); } +IDeckLinkVideoFrameAncillaryPackets* CreateVideoFrameAncillaryPacketsInstance (void) +{ + pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI); + + if (gCreateVideoFrameAncillaryPacketsFunc == NULL) + return NULL; + + return gCreateVideoFrameAncillaryPacketsFunc(); +} + #define kBMDStreamingAPI_BundlePath "/Library/Application Support/Blackmagic Design/Streaming/BMDStreamingAPI.bundle" @@ -156,7 +169,7 @@ static CFBundleRef gBMDStreamingAPIBundleRef = NULL; static CreateDiscoveryFunc gCreateDiscoveryFunc = NULL; static CreateNALParserFunc gCreateNALParserFunc = NULL; -void InitBMDStreamingAPI(void) +static void InitBMDStreamingAPI(void) { CFURLRef bundleURL; @@ -166,7 +179,7 @@ void InitBMDStreamingAPI(void) gBMDStreamingAPIBundleRef = CFBundleCreate(kCFAllocatorDefault, bundleURL); if (gBMDStreamingAPIBundleRef != NULL) { - gCreateDiscoveryFunc = (CreateDiscoveryFunc)CFBundleGetFunctionPointerForName(gBMDStreamingAPIBundleRef, CFSTR("CreateBMDStreamingDiscoveryInstance_0001")); + gCreateDiscoveryFunc = (CreateDiscoveryFunc)CFBundleGetFunctionPointerForName(gBMDStreamingAPIBundleRef, CFSTR("CreateBMDStreamingDiscoveryInstance_0002")); gCreateNALParserFunc = (CreateNALParserFunc)CFBundleGetFunctionPointerForName(gBMDStreamingAPIBundleRef, CFSTR("CreateBMDStreamingH264NALParser_0001")); } diff --git a/sys/decklink/osx/DeckLinkAPIModes.h b/sys/decklink/osx/DeckLinkAPIModes.h index 7bd6852..9a242e0 100644 --- a/sys/decklink/osx/DeckLinkAPIModes.h +++ b/sys/decklink/osx/DeckLinkAPIModes.h @@ -1,5 +1,5 @@ /* -LICENSE-START- -** Copyright (c) 2016 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 @@ -37,6 +37,10 @@ #endif #endif +#ifndef BMD_PUBLIC + #define BMD_PUBLIC +#endif + // Type Declarations @@ -65,12 +69,12 @@ enum _BMDDisplayMode { bmdModeHD1080p25 = 'Hp25', bmdModeHD1080p2997 = 'Hp29', bmdModeHD1080p30 = 'Hp30', - bmdModeHD1080i50 = 'Hi50', - bmdModeHD1080i5994 = 'Hi59', - bmdModeHD1080i6000 = 'Hi60', // N.B. This _really_ is 60.00 Hz. bmdModeHD1080p50 = 'Hp50', bmdModeHD1080p5994 = 'Hp59', bmdModeHD1080p6000 = 'Hp60', // N.B. This _really_ is 60.00 Hz. + bmdModeHD1080i50 = 'Hi50', + bmdModeHD1080i5994 = 'Hi59', + bmdModeHD1080i6000 = 'Hi60', // N.B. This _really_ is 60.00 Hz. /* HD 720 Modes */ @@ -78,19 +82,24 @@ enum _BMDDisplayMode { bmdModeHD720p5994 = 'hp59', bmdModeHD720p60 = 'hp60', - /* 2k Modes */ + /* 2K Modes */ bmdMode2k2398 = '2k23', bmdMode2k24 = '2k24', bmdMode2k25 = '2k25', - /* DCI Modes (output only) */ + /* 2K DCI Modes */ bmdMode2kDCI2398 = '2d23', bmdMode2kDCI24 = '2d24', bmdMode2kDCI25 = '2d25', + bmdMode2kDCI2997 = '2d29', + bmdMode2kDCI30 = '2d30', + bmdMode2kDCI50 = '2d50', + bmdMode2kDCI5994 = '2d59', + bmdMode2kDCI60 = '2d60', - /* 4k Modes */ + /* 4K UHD Modes */ bmdMode4K2160p2398 = '4k23', bmdMode4K2160p24 = '4k24', @@ -101,11 +110,43 @@ enum _BMDDisplayMode { bmdMode4K2160p5994 = '4k59', bmdMode4K2160p60 = '4k60', - /* DCI Modes (output only) */ + /* 4K DCI Modes */ bmdMode4kDCI2398 = '4d23', bmdMode4kDCI24 = '4d24', bmdMode4kDCI25 = '4d25', + bmdMode4kDCI2997 = '4d29', + bmdMode4kDCI30 = '4d30', + bmdMode4kDCI50 = '4d50', + bmdMode4kDCI5994 = '4d59', + bmdMode4kDCI60 = '4d60', + + /* 8K UHD Modes */ + + bmdMode8K4320p2398 = '8k23', + bmdMode8K4320p24 = '8k24', + bmdMode8K4320p25 = '8k25', + bmdMode8K4320p2997 = '8k29', + bmdMode8K4320p30 = '8k30', + bmdMode8K4320p50 = '8k50', + bmdMode8K4320p5994 = '8k59', + bmdMode8K4320p60 = '8k60', + + /* 8K DCI Modes */ + + bmdMode8kDCI2398 = '8d23', + bmdMode8kDCI24 = '8d24', + bmdMode8kDCI25 = '8d25', + bmdMode8kDCI2997 = '8d29', + bmdMode8kDCI30 = '8d30', + bmdMode8kDCI50 = '8d50', + bmdMode8kDCI5994 = '8d59', + bmdMode8kDCI60 = '8d60', + + /* RAW Modes for Cintel (input only) */ + + bmdModeCintelRAW = 'rwci', // Frame size up to 4096x3072, variable frame rate + bmdModeCintelCompressedRAW = 'rwcc', // Frame size up to 4096x3072, variable frame rate /* Special Modes */ @@ -140,7 +181,12 @@ enum _BMDPixelFormat { /* AVID DNxHR */ - bmdFormatDNxHR = 'AVdh' + bmdFormatDNxHR = 'AVdh', + + /* Cintel formats */ + + bmdFormat12BitRAWGRBG = 'r12p', // 12-bit RAW data for bayer pattern GRBG + bmdFormat12BitRAWJPEG = 'r16p' // 12-bit RAW data arranged in tiles and JPEG compressed }; /* Enum BMDDisplayModeFlags - Flags to describe the characteristics of an IDeckLinkDisplayMode. */ @@ -149,7 +195,8 @@ typedef uint32_t BMDDisplayModeFlags; enum _BMDDisplayModeFlags { bmdDisplayModeSupports3D = 1 << 0, bmdDisplayModeColorspaceRec601 = 1 << 1, - bmdDisplayModeColorspaceRec709 = 1 << 2 + bmdDisplayModeColorspaceRec709 = 1 << 2, + bmdDisplayModeColorspaceRec2020 = 1 << 3 }; // Forward Declarations @@ -159,7 +206,7 @@ class IDeckLinkDisplayMode; /* Interface IDeckLinkDisplayModeIterator - enumerates over supported input/output display modes. */ -class IDeckLinkDisplayModeIterator : public IUnknown +class BMD_PUBLIC IDeckLinkDisplayModeIterator : public IUnknown { public: virtual HRESULT Next (/* out */ IDeckLinkDisplayMode **deckLinkDisplayMode) = 0; @@ -170,7 +217,7 @@ protected: /* Interface IDeckLinkDisplayMode - represents a display mode */ -class IDeckLinkDisplayMode : public IUnknown +class BMD_PUBLIC IDeckLinkDisplayMode : public IUnknown { public: virtual HRESULT GetName (/* out */ CFStringRef *name) = 0; diff --git a/sys/decklink/osx/DeckLinkAPIStreaming.h b/sys/decklink/osx/DeckLinkAPIStreaming.h index 625ae55..c2d357c 100644 --- a/sys/decklink/osx/DeckLinkAPIStreaming.h +++ b/sys/decklink/osx/DeckLinkAPIStreaming.h @@ -1,5 +1,5 @@ /* -LICENSE-START- -** Copyright (c) 2016 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 @@ -37,6 +37,10 @@ #endif #endif +#ifndef BMD_PUBLIC + #define BMD_PUBLIC +#endif + // Type Declarations @@ -188,7 +192,7 @@ class IBMDStreamingH264NALParser; /* Interface IBMDStreamingDeviceNotificationCallback - Device notification callbacks. */ -class IBMDStreamingDeviceNotificationCallback : public IUnknown +class BMD_PUBLIC IBMDStreamingDeviceNotificationCallback : public IUnknown { public: virtual HRESULT StreamingDeviceArrived (/* in */ IDeckLink* device) = 0; @@ -201,7 +205,7 @@ protected: /* Interface IBMDStreamingH264InputCallback - H264 input callbacks. */ -class IBMDStreamingH264InputCallback : public IUnknown +class BMD_PUBLIC IBMDStreamingH264InputCallback : public IUnknown { public: virtual HRESULT H264NALPacketArrived (/* in */ IBMDStreamingH264NALPacket* nalPacket) = 0; @@ -217,7 +221,7 @@ protected: /* Interface IBMDStreamingDiscovery - Installs device notifications */ -class IBMDStreamingDiscovery : public IUnknown +class BMD_PUBLIC IBMDStreamingDiscovery : public IUnknown { public: virtual HRESULT InstallDeviceNotifications (/* in */ IBMDStreamingDeviceNotificationCallback* theCallback) = 0; @@ -229,7 +233,7 @@ protected: /* Interface IBMDStreamingVideoEncodingMode - Represents an encoded video mode. */ -class IBMDStreamingVideoEncodingMode : public IUnknown +class BMD_PUBLIC IBMDStreamingVideoEncodingMode : public IUnknown { public: virtual HRESULT GetName (/* out */ CFStringRef *name) = 0; @@ -252,7 +256,7 @@ protected: /* Interface IBMDStreamingMutableVideoEncodingMode - Represents a mutable encoded video mode. */ -class IBMDStreamingMutableVideoEncodingMode : public IBMDStreamingVideoEncodingMode +class BMD_PUBLIC IBMDStreamingMutableVideoEncodingMode : public IBMDStreamingVideoEncodingMode { public: virtual HRESULT SetSourceRect (/* in */ uint32_t posX, /* in */ uint32_t posY, /* in */ uint32_t width, /* in */ uint32_t height) = 0; @@ -268,7 +272,7 @@ protected: /* Interface IBMDStreamingVideoEncodingModePresetIterator - Enumerates encoding mode presets */ -class IBMDStreamingVideoEncodingModePresetIterator : public IUnknown +class BMD_PUBLIC IBMDStreamingVideoEncodingModePresetIterator : public IUnknown { public: virtual HRESULT Next (/* out */ IBMDStreamingVideoEncodingMode** videoEncodingMode) = 0; @@ -279,7 +283,7 @@ protected: /* Interface IBMDStreamingDeviceInput - Created by QueryInterface from IDeckLink */ -class IBMDStreamingDeviceInput : public IUnknown +class BMD_PUBLIC IBMDStreamingDeviceInput : public IUnknown { public: @@ -309,7 +313,7 @@ protected: /* Interface IBMDStreamingH264NALPacket - Represent an H.264 NAL packet */ -class IBMDStreamingH264NALPacket : public IUnknown +class BMD_PUBLIC IBMDStreamingH264NALPacket : public IUnknown { public: virtual long GetPayloadSize (void) = 0; @@ -324,7 +328,7 @@ protected: /* Interface IBMDStreamingAudioPacket - Represents a chunk of audio data */ -class IBMDStreamingAudioPacket : public IUnknown +class BMD_PUBLIC IBMDStreamingAudioPacket : public IUnknown { public: virtual BMDStreamingAudioCodec GetCodec (void) = 0; @@ -339,7 +343,7 @@ protected: /* Interface IBMDStreamingMPEG2TSPacket - Represent an MPEG2 Transport Stream packet */ -class IBMDStreamingMPEG2TSPacket : public IUnknown +class BMD_PUBLIC IBMDStreamingMPEG2TSPacket : public IUnknown { public: virtual long GetPayloadSize (void) = 0; @@ -351,7 +355,7 @@ protected: /* Interface IBMDStreamingH264NALParser - For basic NAL parsing */ -class IBMDStreamingH264NALParser : public IUnknown +class BMD_PUBLIC IBMDStreamingH264NALParser : public IUnknown { public: virtual HRESULT IsNALSequenceParameterSet (/* in */ IBMDStreamingH264NALPacket* nal) = 0; @@ -366,8 +370,8 @@ protected: extern "C" { - IBMDStreamingDiscovery* CreateBMDStreamingDiscoveryInstance (void); - IBMDStreamingH264NALParser* CreateBMDStreamingH264NALParser (void); + IBMDStreamingDiscovery* BMD_PUBLIC CreateBMDStreamingDiscoveryInstance (void); + IBMDStreamingH264NALParser* BMD_PUBLIC CreateBMDStreamingH264NALParser (void); } diff --git a/sys/decklink/osx/DeckLinkAPITypes.h b/sys/decklink/osx/DeckLinkAPITypes.h index 65866d9..1564c6e 100644 --- a/sys/decklink/osx/DeckLinkAPITypes.h +++ b/sys/decklink/osx/DeckLinkAPITypes.h @@ -1,5 +1,5 @@ /* -LICENSE-START- -** Copyright (c) 2016 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 @@ -37,6 +37,10 @@ #endif #endif +#ifndef BMD_PUBLIC + #define BMD_PUBLIC +#endif + // Type Declarations typedef int64_t BMDTimeValue; @@ -54,7 +58,8 @@ typedef uint32_t BMDTimecodeFlags; enum _BMDTimecodeFlags { bmdTimecodeFlagDefault = 0, bmdTimecodeIsDropFrame = 1 << 0, - bmdTimecodeFieldMark = 1 << 1 + bmdTimecodeFieldMark = 1 << 1, + bmdTimecodeColorFrame = 1 << 2 }; /* Enum BMDVideoConnection - Video connection types */ @@ -96,7 +101,7 @@ class IDeckLinkTimecode; /* Interface IDeckLinkTimecode - Used for video frame timecode representation. */ -class IDeckLinkTimecode : public IUnknown +class BMD_PUBLIC IDeckLinkTimecode : public IUnknown { public: virtual BMDTimecodeBCD GetBCD (void) = 0; diff --git a/sys/decklink/osx/DeckLinkAPIVersion.h b/sys/decklink/osx/DeckLinkAPIVersion.h index e19fa11..f9db7ff 100644 --- a/sys/decklink/osx/DeckLinkAPIVersion.h +++ b/sys/decklink/osx/DeckLinkAPIVersion.h @@ -30,8 +30,8 @@ #ifndef __DeckLink_API_Version_h__ #define __DeckLink_API_Version_h__ -#define BLACKMAGIC_DECKLINK_API_VERSION 0x0a080000 -#define BLACKMAGIC_DECKLINK_API_VERSION_STRING "10.8" +#define BLACKMAGIC_DECKLINK_API_VERSION 0x0a0b0400 +#define BLACKMAGIC_DECKLINK_API_VERSION_STRING "10.11.4" #endif // __DeckLink_API_Version_h__ diff --git a/sys/decklink/win/DeckLinkAPI.h b/sys/decklink/win/DeckLinkAPI.h index 279946f..4ce7028 100644 --- a/sys/decklink/win/DeckLinkAPI.h +++ b/sys/decklink/win/DeckLinkAPI.h @@ -3,11 +3,11 @@ /* this ALWAYS GENERATED file contains the definitions for the interfaces */ - /* File created by MIDL compiler version 8.00.0603 */ -/* at Wed Jan 25 17:42:19 2017 + /* File created by MIDL compiler version 8.01.0622 */ +/* at Fri Feb 28 12:18:07 2020 */ -/* Compiler settings for ..\..\..\..\..\..\blackmagic\SDK\Win\include\DeckLinkAPI.idl: - Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 8.00.0603 +/* Compiler settings for ..\..\Blackmagic\DeckLink_SDK_10.11.4\Win\include\DeckLinkAPI.idl: + Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 8.01.0622 protocol : dce , ms_ext, c_ext, robust error checks: allocation ref bounds_check enum stub_data VC __declspec() decoration level: @@ -31,7 +31,7 @@ #ifndef __RPCNDR_H_VERSION__ #error this stub requires an updated version of -#endif // __RPCNDR_H_VERSION__ +#endif /* __RPCNDR_H_VERSION__ */ #ifndef __DeckLinkAPI_h_h__ @@ -263,6 +263,13 @@ typedef interface IDeckLinkInput IDeckLinkInput; #endif /* __IDeckLinkInput_FWD_DEFINED__ */ +#ifndef __IDeckLinkHDMIInputEDID_FWD_DEFINED__ +#define __IDeckLinkHDMIInputEDID_FWD_DEFINED__ +typedef interface IDeckLinkHDMIInputEDID IDeckLinkHDMIInputEDID; + +#endif /* __IDeckLinkHDMIInputEDID_FWD_DEFINED__ */ + + #ifndef __IDeckLinkEncoderInput_FWD_DEFINED__ #define __IDeckLinkEncoderInput_FWD_DEFINED__ typedef interface IDeckLinkEncoderInput IDeckLinkEncoderInput; @@ -305,6 +312,27 @@ typedef interface IDeckLinkVideoInputFrame IDeckLinkVideoInputFrame; #endif /* __IDeckLinkVideoInputFrame_FWD_DEFINED__ */ +#ifndef __IDeckLinkAncillaryPacket_FWD_DEFINED__ +#define __IDeckLinkAncillaryPacket_FWD_DEFINED__ +typedef interface IDeckLinkAncillaryPacket IDeckLinkAncillaryPacket; + +#endif /* __IDeckLinkAncillaryPacket_FWD_DEFINED__ */ + + +#ifndef __IDeckLinkAncillaryPacketIterator_FWD_DEFINED__ +#define __IDeckLinkAncillaryPacketIterator_FWD_DEFINED__ +typedef interface IDeckLinkAncillaryPacketIterator IDeckLinkAncillaryPacketIterator; + +#endif /* __IDeckLinkAncillaryPacketIterator_FWD_DEFINED__ */ + + +#ifndef __IDeckLinkVideoFrameAncillaryPackets_FWD_DEFINED__ +#define __IDeckLinkVideoFrameAncillaryPackets_FWD_DEFINED__ +typedef interface IDeckLinkVideoFrameAncillaryPackets IDeckLinkVideoFrameAncillaryPackets; + +#endif /* __IDeckLinkVideoFrameAncillaryPackets_FWD_DEFINED__ */ + + #ifndef __IDeckLinkVideoFrameAncillary_FWD_DEFINED__ #define __IDeckLinkVideoFrameAncillary_FWD_DEFINED__ typedef interface IDeckLinkVideoFrameAncillary IDeckLinkVideoFrameAncillary; @@ -496,6 +524,61 @@ typedef struct CDeckLinkDiscovery CDeckLinkDiscovery; #endif /* __CDeckLinkDiscovery_FWD_DEFINED__ */ +#ifndef __CDeckLinkVideoFrameAncillaryPackets_FWD_DEFINED__ +#define __CDeckLinkVideoFrameAncillaryPackets_FWD_DEFINED__ + +#ifdef __cplusplus +typedef class CDeckLinkVideoFrameAncillaryPackets CDeckLinkVideoFrameAncillaryPackets; +#else +typedef struct CDeckLinkVideoFrameAncillaryPackets CDeckLinkVideoFrameAncillaryPackets; +#endif /* __cplusplus */ + +#endif /* __CDeckLinkVideoFrameAncillaryPackets_FWD_DEFINED__ */ + + +#ifndef __IDeckLinkConfiguration_v10_9_FWD_DEFINED__ +#define __IDeckLinkConfiguration_v10_9_FWD_DEFINED__ +typedef interface IDeckLinkConfiguration_v10_9 IDeckLinkConfiguration_v10_9; + +#endif /* __IDeckLinkConfiguration_v10_9_FWD_DEFINED__ */ + + +#ifndef __CBMDStreamingDiscovery_v10_8_FWD_DEFINED__ +#define __CBMDStreamingDiscovery_v10_8_FWD_DEFINED__ + +#ifdef __cplusplus +typedef class CBMDStreamingDiscovery_v10_8 CBMDStreamingDiscovery_v10_8; +#else +typedef struct CBMDStreamingDiscovery_v10_8 CBMDStreamingDiscovery_v10_8; +#endif /* __cplusplus */ + +#endif /* __CBMDStreamingDiscovery_v10_8_FWD_DEFINED__ */ + + +#ifndef __CDeckLinkIterator_v10_8_FWD_DEFINED__ +#define __CDeckLinkIterator_v10_8_FWD_DEFINED__ + +#ifdef __cplusplus +typedef class CDeckLinkIterator_v10_8 CDeckLinkIterator_v10_8; +#else +typedef struct CDeckLinkIterator_v10_8 CDeckLinkIterator_v10_8; +#endif /* __cplusplus */ + +#endif /* __CDeckLinkIterator_v10_8_FWD_DEFINED__ */ + + +#ifndef __CDeckLinkDiscovery_v10_8_FWD_DEFINED__ +#define __CDeckLinkDiscovery_v10_8_FWD_DEFINED__ + +#ifdef __cplusplus +typedef class CDeckLinkDiscovery_v10_8 CDeckLinkDiscovery_v10_8; +#else +typedef struct CDeckLinkDiscovery_v10_8 CDeckLinkDiscovery_v10_8; +#endif /* __cplusplus */ + +#endif /* __CDeckLinkDiscovery_v10_8_FWD_DEFINED__ */ + + #ifndef __IDeckLinkEncoderConfiguration_v10_5_FWD_DEFINED__ #define __IDeckLinkEncoderConfiguration_v10_5_FWD_DEFINED__ typedef interface IDeckLinkEncoderConfiguration_v10_5 IDeckLinkEncoderConfiguration_v10_5; @@ -876,12 +959,12 @@ enum _BMDDisplayMode bmdModeHD1080p25 = 0x48703235, bmdModeHD1080p2997 = 0x48703239, bmdModeHD1080p30 = 0x48703330, - bmdModeHD1080i50 = 0x48693530, - bmdModeHD1080i5994 = 0x48693539, - bmdModeHD1080i6000 = 0x48693630, bmdModeHD1080p50 = 0x48703530, bmdModeHD1080p5994 = 0x48703539, bmdModeHD1080p6000 = 0x48703630, + bmdModeHD1080i50 = 0x48693530, + bmdModeHD1080i5994 = 0x48693539, + bmdModeHD1080i6000 = 0x48693630, bmdModeHD720p50 = 0x68703530, bmdModeHD720p5994 = 0x68703539, bmdModeHD720p60 = 0x68703630, @@ -891,6 +974,11 @@ enum _BMDDisplayMode bmdMode2kDCI2398 = 0x32643233, bmdMode2kDCI24 = 0x32643234, bmdMode2kDCI25 = 0x32643235, + bmdMode2kDCI2997 = 0x32643239, + bmdMode2kDCI30 = 0x32643330, + bmdMode2kDCI50 = 0x32643530, + bmdMode2kDCI5994 = 0x32643539, + bmdMode2kDCI60 = 0x32643630, bmdMode4K2160p2398 = 0x346b3233, bmdMode4K2160p24 = 0x346b3234, bmdMode4K2160p25 = 0x346b3235, @@ -902,6 +990,29 @@ enum _BMDDisplayMode bmdMode4kDCI2398 = 0x34643233, bmdMode4kDCI24 = 0x34643234, bmdMode4kDCI25 = 0x34643235, + bmdMode4kDCI2997 = 0x34643239, + bmdMode4kDCI30 = 0x34643330, + bmdMode4kDCI50 = 0x34643530, + bmdMode4kDCI5994 = 0x34643539, + bmdMode4kDCI60 = 0x34643630, + bmdMode8K4320p2398 = 0x386b3233, + bmdMode8K4320p24 = 0x386b3234, + bmdMode8K4320p25 = 0x386b3235, + bmdMode8K4320p2997 = 0x386b3239, + bmdMode8K4320p30 = 0x386b3330, + bmdMode8K4320p50 = 0x386b3530, + bmdMode8K4320p5994 = 0x386b3539, + bmdMode8K4320p60 = 0x386b3630, + bmdMode8kDCI2398 = 0x38643233, + bmdMode8kDCI24 = 0x38643234, + bmdMode8kDCI25 = 0x38643235, + bmdMode8kDCI2997 = 0x38643239, + bmdMode8kDCI30 = 0x38643330, + bmdMode8kDCI50 = 0x38643530, + bmdMode8kDCI5994 = 0x38643539, + bmdMode8kDCI60 = 0x38643630, + bmdModeCintelRAW = 0x72776369, + bmdModeCintelCompressedRAW = 0x72776363, bmdModeUnknown = 0x69756e6b } BMDDisplayMode; @@ -928,7 +1039,9 @@ enum _BMDPixelFormat bmdFormat10BitRGBXLE = 0x5231306c, bmdFormat10BitRGBX = 0x52313062, bmdFormatH265 = 0x68657631, - bmdFormatDNxHR = 0x41566468 + bmdFormatDNxHR = 0x41566468, + bmdFormat12BitRAWGRBG = 0x72313270, + bmdFormat12BitRAWJPEG = 0x72313670 } BMDPixelFormat; /* [v1_enum] */ @@ -936,7 +1049,8 @@ enum _BMDDisplayModeFlags { bmdDisplayModeSupports3D = ( 1 << 0 ) , bmdDisplayModeColorspaceRec601 = ( 1 << 1 ) , - bmdDisplayModeColorspaceRec709 = ( 1 << 2 ) + bmdDisplayModeColorspaceRec709 = ( 1 << 2 ) , + bmdDisplayModeColorspaceRec2020 = ( 1 << 3 ) } ; @@ -949,7 +1063,6 @@ typedef /* [v1_enum] */ enum _BMDDeckLinkConfigurationID { bmdDeckLinkConfigSwapSerialRxTx = 0x73737274, - bmdDeckLinkConfigUse1080pNotPsF = 0x6670726f, bmdDeckLinkConfigHDMI3DPackingFormat = 0x33647066, bmdDeckLinkConfigBypass = 0x62797073, bmdDeckLinkConfigClockTimingAdjustment = 0x63746164, @@ -962,6 +1075,9 @@ enum _BMDDeckLinkConfigurationID bmdDeckLinkConfigLowLatencyVideoOutput = 0x6c6c766f, bmdDeckLinkConfigDownConversionOnAllAnalogOutput = 0x6361616f, bmdDeckLinkConfigSMPTELevelAOutput = 0x736d7461, + bmdDeckLinkConfigRec2020Output = 0x72656332, + bmdDeckLinkConfigQuadLinkSDIVideoOutputSquareDivisionSplit = 0x53445153, + bmdDeckLinkConfigOutput1080pAsPsF = 0x70667072, bmdDeckLinkConfigVideoOutputConnection = 0x766f636e, bmdDeckLinkConfigVideoOutputConversionMode = 0x766f636d, bmdDeckLinkConfigAnalogVideoOutputFlags = 0x61766f66, @@ -980,6 +1096,7 @@ enum _BMDDeckLinkConfigurationID bmdDeckLinkConfigVideoInputScanning = 0x76697363, bmdDeckLinkConfigUseDedicatedLTCInput = 0x646c7463, bmdDeckLinkConfigSDIInput3DPayloadOverride = 0x33646473, + bmdDeckLinkConfigCapture1080pAsPsF = 0x63667072, bmdDeckLinkConfigVideoInputConnection = 0x7669636e, bmdDeckLinkConfigAnalogVideoInputFlags = 0x61766966, bmdDeckLinkConfigVideoInputConversionMode = 0x7669636d, @@ -1276,6 +1393,8 @@ enum _BMDFrameFlags bmdFrameFlagDefault = 0, bmdFrameFlagFlipVertical = ( 1 << 0 ) , bmdFrameContainsHDRMetadata = ( 1 << 1 ) , + bmdFrameContainsCintelMetadata = ( 1 << 2 ) , + bmdFrameCapturedAsPsF = ( 1 << 30 ) , bmdFrameHasNoInputSource = ( 1 << 31 ) } ; /* [v1_enum] */ @@ -1358,6 +1477,14 @@ enum _BMDDisplayModeSupport } BMDDisplayModeSupport; typedef /* [v1_enum] */ +enum _BMDAncillaryPacketFormat + { + bmdAncillaryPacketFormatUInt8 = 0x75693038, + bmdAncillaryPacketFormatUInt16 = 0x75693136, + bmdAncillaryPacketFormatYCbCr10 = 0x76323130 + } BMDAncillaryPacketFormat; + +typedef /* [v1_enum] */ enum _BMDTimecodeFormat { bmdTimecodeRP188VITC1 = 0x72707631, @@ -1465,9 +1592,63 @@ enum _BMDDeviceInterface } BMDDeviceInterface; typedef /* [v1_enum] */ +enum _BMDColorspace + { + bmdColorspaceRec601 = 0x72363031, + bmdColorspaceRec709 = 0x72373039, + bmdColorspaceRec2020 = 0x32303230 + } BMDColorspace; + +typedef /* [v1_enum] */ +enum _BMDDynamicRange + { + bmdDynamicRangeSDR = 0, + bmdDynamicRangeHDRStaticPQ = ( 1 << 29 ) , + bmdDynamicRangeHDRStaticHLG = ( 1 << 30 ) + } BMDDynamicRange; + +typedef /* [v1_enum] */ +enum _BMDDeckLinkHDMIInputEDIDID + { + bmdDeckLinkHDMIInputEDIDDynamicRange = 0x48494479 + } BMDDeckLinkHDMIInputEDIDID; + +typedef /* [v1_enum] */ enum _BMDDeckLinkFrameMetadataID { + bmdDeckLinkFrameMetadataColorspace = 0x63737063, bmdDeckLinkFrameMetadataHDRElectroOpticalTransferFunc = 0x656f7466, + bmdDeckLinkFrameMetadataCintelFilmType = 0x63667479, + bmdDeckLinkFrameMetadataCintelFilmGauge = 0x63666761, + bmdDeckLinkFrameMetadataCintelOffsetDetectedHorizontal = 0x6f646668, + bmdDeckLinkFrameMetadataCintelOffsetDetectedVertical = 0x6f646676, + bmdDeckLinkFrameMetadataCintelKeykodeLow = 0x636b6b6c, + bmdDeckLinkFrameMetadataCintelKeykodeHigh = 0x636b6b68, + bmdDeckLinkFrameMetadataCintelTile1Size = 0x63743173, + bmdDeckLinkFrameMetadataCintelTile2Size = 0x63743273, + bmdDeckLinkFrameMetadataCintelTile3Size = 0x63743373, + bmdDeckLinkFrameMetadataCintelTile4Size = 0x63743473, + bmdDeckLinkFrameMetadataCintelImageWidth = 0x49575078, + bmdDeckLinkFrameMetadataCintelImageHeight = 0x49485078, + bmdDeckLinkFrameMetadataCintelLinearMaskingRedInRed = 0x6d726972, + bmdDeckLinkFrameMetadataCintelLinearMaskingGreenInRed = 0x6d676972, + bmdDeckLinkFrameMetadataCintelLinearMaskingBlueInRed = 0x6d626972, + bmdDeckLinkFrameMetadataCintelLinearMaskingRedInGreen = 0x6d726967, + bmdDeckLinkFrameMetadataCintelLinearMaskingGreenInGreen = 0x6d676967, + bmdDeckLinkFrameMetadataCintelLinearMaskingBlueInGreen = 0x6d626967, + bmdDeckLinkFrameMetadataCintelLinearMaskingRedInBlue = 0x6d726962, + bmdDeckLinkFrameMetadataCintelLinearMaskingGreenInBlue = 0x6d676962, + bmdDeckLinkFrameMetadataCintelLinearMaskingBlueInBlue = 0x6d626962, + bmdDeckLinkFrameMetadataCintelLogMaskingRedInRed = 0x6d6c7272, + bmdDeckLinkFrameMetadataCintelLogMaskingGreenInRed = 0x6d6c6772, + bmdDeckLinkFrameMetadataCintelLogMaskingBlueInRed = 0x6d6c6272, + bmdDeckLinkFrameMetadataCintelLogMaskingRedInGreen = 0x6d6c7267, + bmdDeckLinkFrameMetadataCintelLogMaskingGreenInGreen = 0x6d6c6767, + bmdDeckLinkFrameMetadataCintelLogMaskingBlueInGreen = 0x6d6c6267, + bmdDeckLinkFrameMetadataCintelLogMaskingRedInBlue = 0x6d6c7262, + bmdDeckLinkFrameMetadataCintelLogMaskingGreenInBlue = 0x6d6c6762, + bmdDeckLinkFrameMetadataCintelLogMaskingBlueInBlue = 0x6d6c6262, + bmdDeckLinkFrameMetadataCintelFilmFrameRate = 0x63666672, bmdDeckLinkFrameMetadataHDRDisplayPrimariesRedX = 0x68647278, bmdDeckLinkFrameMetadataHDRDisplayPrimariesRedY = 0x68647279, bmdDeckLinkFrameMetadataHDRDisplayPrimariesGreenX = 0x68646778, @@ -1479,7 +1660,15 @@ enum _BMDDeckLinkFrameMetadataID bmdDeckLinkFrameMetadataHDRMaxDisplayMasteringLuminance = 0x68646d6c, bmdDeckLinkFrameMetadataHDRMinDisplayMasteringLuminance = 0x686d696c, bmdDeckLinkFrameMetadataHDRMaximumContentLightLevel = 0x6d636c6c, - bmdDeckLinkFrameMetadataHDRMaximumFrameAverageLightLevel = 0x66616c6c + bmdDeckLinkFrameMetadataHDRMaximumFrameAverageLightLevel = 0x66616c6c, + bmdDeckLinkFrameMetadataCintelOffsetToApplyHorizontal = 0x6f746168, + bmdDeckLinkFrameMetadataCintelOffsetToApplyVertical = 0x6f746176, + bmdDeckLinkFrameMetadataCintelGainRed = 0x4c665264, + bmdDeckLinkFrameMetadataCintelGainGreen = 0x4c664772, + bmdDeckLinkFrameMetadataCintelGainBlue = 0x4c66426c, + bmdDeckLinkFrameMetadataCintelLiftRed = 0x476e5264, + bmdDeckLinkFrameMetadataCintelLiftGreen = 0x476e4772, + bmdDeckLinkFrameMetadataCintelLiftBlue = 0x476e426c } BMDDeckLinkFrameMetadataID; typedef /* [v1_enum] */ @@ -1512,8 +1701,10 @@ enum _BMDDeckLinkAttributeID BMDDeckLinkHasLTCTimecodeInput = 0x686c7463, BMDDeckLinkSupportsDuplexModeConfiguration = 0x64757078, BMDDeckLinkSupportsHDRMetadata = 0x6864726d, + BMDDeckLinkSupportsColorspaceMetadata = 0x636d6574, BMDDeckLinkMaximumAudioChannels = 0x6d616368, - BMDDeckLinkMaximumAnalogAudioChannels = 0x61616368, + BMDDeckLinkMaximumAnalogAudioInputChannels = 0x69616368, + BMDDeckLinkMaximumAnalogAudioOutputChannels = 0x61616368, BMDDeckLinkNumberOfSubDevices = 0x6e736264, BMDDeckLinkSubDeviceIndex = 0x73756269, BMDDeckLinkPersistentID = 0x70656964, @@ -1567,8 +1758,11 @@ enum _BMDDeckLinkStatusID bmdDeckLinkStatusReferenceSignalFlags = 0x72656666, bmdDeckLinkStatusDuplexMode = 0x64757078, bmdDeckLinkStatusBusy = 0x62757379, + bmdDeckLinkStatusInterchangeablePanelType = 0x69637074, + bmdDeckLinkStatusDeviceTemperature = 0x64746d70, bmdDeckLinkStatusVideoInputSignalLocked = 0x7669736c, - bmdDeckLinkStatusReferenceSignalLocked = 0x7265666c + bmdDeckLinkStatusReferenceSignalLocked = 0x7265666c, + bmdDeckLinkStatusReceivedEDID = 0x65646964 } BMDDeckLinkStatusID; typedef /* [v1_enum] */ @@ -1587,6 +1781,13 @@ enum _BMDDuplexStatus bmdDuplexStatusInactive = 0x696e6163 } BMDDuplexStatus; +typedef /* [v1_enum] */ +enum _BMDPanelType + { + bmdPanelNotDetected = 0x6e706e6c, + bmdPanelTeranexMiniSmartPanel = 0x746d736d + } BMDPanelType; + /* [v1_enum] */ enum _BMDDeviceBusyState { @@ -1650,6 +1851,17 @@ enum _BMDNotifications + + + + +typedef /* [v1_enum] */ +enum _BMDDeckLinkConfigurationID_v10_9 + { + bmdDeckLinkConfig1080pNotPsF_v10_9 = 0x6670726f + } BMDDeckLinkConfigurationID_v10_9; + + typedef /* [v1_enum] */ enum _BMDDeckLinkAttributeID_v10_6 { @@ -2176,7 +2388,7 @@ EXTERN_C const IID IID_IDeckLinkConfiguration; #if defined(__cplusplus) && !defined(CINTERFACE) - MIDL_INTERFACE("CB71734A-FE37-4E8D-8E13-802133A1C3F2") + MIDL_INTERFACE("EF90380B-4AE5-4346-9077-E288E149F129") IDeckLinkConfiguration : public IUnknown { public: @@ -4528,7 +4740,7 @@ EXTERN_C const CLSID CLSID_CBMDStreamingDiscovery; #ifdef __cplusplus -class DECLSPEC_UUID("0CAA31F6-8A26-40B0-86A4-BF58DCCA710C") +class DECLSPEC_UUID("23A4EDF5-A0E5-432C-94EF-3BABB5F81C82") CBMDStreamingDiscovery; #endif @@ -5864,6 +6076,108 @@ EXTERN_C const IID IID_IDeckLinkInput; #endif /* __IDeckLinkInput_INTERFACE_DEFINED__ */ +#ifndef __IDeckLinkHDMIInputEDID_INTERFACE_DEFINED__ +#define __IDeckLinkHDMIInputEDID_INTERFACE_DEFINED__ + +/* interface IDeckLinkHDMIInputEDID */ +/* [helpstring][uuid][object] */ + + +EXTERN_C const IID IID_IDeckLinkHDMIInputEDID; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("ABBBACBC-45BC-4665-9D92-ACE6E5A97902") + IDeckLinkHDMIInputEDID : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE SetInt( + /* [in] */ BMDDeckLinkHDMIInputEDIDID cfgID, + /* [in] */ LONGLONG value) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetInt( + /* [in] */ BMDDeckLinkHDMIInputEDIDID cfgID, + /* [out] */ LONGLONG *value) = 0; + + virtual HRESULT STDMETHODCALLTYPE WriteToEDID( void) = 0; + + }; + + +#else /* C style interface */ + + typedef struct IDeckLinkHDMIInputEDIDVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IDeckLinkHDMIInputEDID * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IDeckLinkHDMIInputEDID * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IDeckLinkHDMIInputEDID * This); + + HRESULT ( STDMETHODCALLTYPE *SetInt )( + IDeckLinkHDMIInputEDID * This, + /* [in] */ BMDDeckLinkHDMIInputEDIDID cfgID, + /* [in] */ LONGLONG value); + + HRESULT ( STDMETHODCALLTYPE *GetInt )( + IDeckLinkHDMIInputEDID * This, + /* [in] */ BMDDeckLinkHDMIInputEDIDID cfgID, + /* [out] */ LONGLONG *value); + + HRESULT ( STDMETHODCALLTYPE *WriteToEDID )( + IDeckLinkHDMIInputEDID * This); + + END_INTERFACE + } IDeckLinkHDMIInputEDIDVtbl; + + interface IDeckLinkHDMIInputEDID + { + CONST_VTBL struct IDeckLinkHDMIInputEDIDVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IDeckLinkHDMIInputEDID_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IDeckLinkHDMIInputEDID_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IDeckLinkHDMIInputEDID_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IDeckLinkHDMIInputEDID_SetInt(This,cfgID,value) \ + ( (This)->lpVtbl -> SetInt(This,cfgID,value) ) + +#define IDeckLinkHDMIInputEDID_GetInt(This,cfgID,value) \ + ( (This)->lpVtbl -> GetInt(This,cfgID,value) ) + +#define IDeckLinkHDMIInputEDID_WriteToEDID(This) \ + ( (This)->lpVtbl -> WriteToEDID(This) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IDeckLinkHDMIInputEDID_INTERFACE_DEFINED__ */ + + #ifndef __IDeckLinkEncoderInput_INTERFACE_DEFINED__ #define __IDeckLinkEncoderInput_INTERFACE_DEFINED__ @@ -6782,6 +7096,324 @@ EXTERN_C const IID IID_IDeckLinkVideoInputFrame; #endif /* __IDeckLinkVideoInputFrame_INTERFACE_DEFINED__ */ +#ifndef __IDeckLinkAncillaryPacket_INTERFACE_DEFINED__ +#define __IDeckLinkAncillaryPacket_INTERFACE_DEFINED__ + +/* interface IDeckLinkAncillaryPacket */ +/* [helpstring][uuid][object] */ + + +EXTERN_C const IID IID_IDeckLinkAncillaryPacket; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("CC5BBF7E-029C-4D3B-9158-6000EF5E3670") + IDeckLinkAncillaryPacket : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE GetBytes( + /* [in] */ BMDAncillaryPacketFormat format, + /* [out] */ const void **data, + /* [out] */ unsigned int *size) = 0; + + virtual unsigned char STDMETHODCALLTYPE GetDID( void) = 0; + + virtual unsigned char STDMETHODCALLTYPE GetSDID( void) = 0; + + virtual unsigned int STDMETHODCALLTYPE GetLineNumber( void) = 0; + + virtual unsigned char STDMETHODCALLTYPE GetDataStreamIndex( void) = 0; + + }; + + +#else /* C style interface */ + + typedef struct IDeckLinkAncillaryPacketVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IDeckLinkAncillaryPacket * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IDeckLinkAncillaryPacket * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IDeckLinkAncillaryPacket * This); + + HRESULT ( STDMETHODCALLTYPE *GetBytes )( + IDeckLinkAncillaryPacket * This, + /* [in] */ BMDAncillaryPacketFormat format, + /* [out] */ const void **data, + /* [out] */ unsigned int *size); + + unsigned char ( STDMETHODCALLTYPE *GetDID )( + IDeckLinkAncillaryPacket * This); + + unsigned char ( STDMETHODCALLTYPE *GetSDID )( + IDeckLinkAncillaryPacket * This); + + unsigned int ( STDMETHODCALLTYPE *GetLineNumber )( + IDeckLinkAncillaryPacket * This); + + unsigned char ( STDMETHODCALLTYPE *GetDataStreamIndex )( + IDeckLinkAncillaryPacket * This); + + END_INTERFACE + } IDeckLinkAncillaryPacketVtbl; + + interface IDeckLinkAncillaryPacket + { + CONST_VTBL struct IDeckLinkAncillaryPacketVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IDeckLinkAncillaryPacket_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IDeckLinkAncillaryPacket_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IDeckLinkAncillaryPacket_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IDeckLinkAncillaryPacket_GetBytes(This,format,data,size) \ + ( (This)->lpVtbl -> GetBytes(This,format,data,size) ) + +#define IDeckLinkAncillaryPacket_GetDID(This) \ + ( (This)->lpVtbl -> GetDID(This) ) + +#define IDeckLinkAncillaryPacket_GetSDID(This) \ + ( (This)->lpVtbl -> GetSDID(This) ) + +#define IDeckLinkAncillaryPacket_GetLineNumber(This) \ + ( (This)->lpVtbl -> GetLineNumber(This) ) + +#define IDeckLinkAncillaryPacket_GetDataStreamIndex(This) \ + ( (This)->lpVtbl -> GetDataStreamIndex(This) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IDeckLinkAncillaryPacket_INTERFACE_DEFINED__ */ + + +#ifndef __IDeckLinkAncillaryPacketIterator_INTERFACE_DEFINED__ +#define __IDeckLinkAncillaryPacketIterator_INTERFACE_DEFINED__ + +/* interface IDeckLinkAncillaryPacketIterator */ +/* [helpstring][uuid][object] */ + + +EXTERN_C const IID IID_IDeckLinkAncillaryPacketIterator; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("3FC8994B-88FB-4C17-968F-9AAB69D964A7") + IDeckLinkAncillaryPacketIterator : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Next( + /* [out] */ IDeckLinkAncillaryPacket **packet) = 0; + + }; + + +#else /* C style interface */ + + typedef struct IDeckLinkAncillaryPacketIteratorVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IDeckLinkAncillaryPacketIterator * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IDeckLinkAncillaryPacketIterator * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IDeckLinkAncillaryPacketIterator * This); + + HRESULT ( STDMETHODCALLTYPE *Next )( + IDeckLinkAncillaryPacketIterator * This, + /* [out] */ IDeckLinkAncillaryPacket **packet); + + END_INTERFACE + } IDeckLinkAncillaryPacketIteratorVtbl; + + interface IDeckLinkAncillaryPacketIterator + { + CONST_VTBL struct IDeckLinkAncillaryPacketIteratorVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IDeckLinkAncillaryPacketIterator_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IDeckLinkAncillaryPacketIterator_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IDeckLinkAncillaryPacketIterator_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IDeckLinkAncillaryPacketIterator_Next(This,packet) \ + ( (This)->lpVtbl -> Next(This,packet) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IDeckLinkAncillaryPacketIterator_INTERFACE_DEFINED__ */ + + +#ifndef __IDeckLinkVideoFrameAncillaryPackets_INTERFACE_DEFINED__ +#define __IDeckLinkVideoFrameAncillaryPackets_INTERFACE_DEFINED__ + +/* interface IDeckLinkVideoFrameAncillaryPackets */ +/* [helpstring][local][uuid][object] */ + + +EXTERN_C const IID IID_IDeckLinkVideoFrameAncillaryPackets; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("6C186C0F-459E-41D8-AEE2-4812D81AEE68") + IDeckLinkVideoFrameAncillaryPackets : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE GetPacketIterator( + /* [out] */ IDeckLinkAncillaryPacketIterator **iterator) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetFirstPacketByID( + /* [in] */ unsigned char DID, + /* [in] */ unsigned char SDID, + /* [out] */ IDeckLinkAncillaryPacket **packet) = 0; + + virtual HRESULT STDMETHODCALLTYPE AttachPacket( + /* [in] */ IDeckLinkAncillaryPacket *packet) = 0; + + virtual HRESULT STDMETHODCALLTYPE DetachPacket( + /* [in] */ IDeckLinkAncillaryPacket *packet) = 0; + + virtual HRESULT STDMETHODCALLTYPE DetachAllPackets( void) = 0; + + }; + + +#else /* C style interface */ + + typedef struct IDeckLinkVideoFrameAncillaryPacketsVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IDeckLinkVideoFrameAncillaryPackets * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IDeckLinkVideoFrameAncillaryPackets * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IDeckLinkVideoFrameAncillaryPackets * This); + + HRESULT ( STDMETHODCALLTYPE *GetPacketIterator )( + IDeckLinkVideoFrameAncillaryPackets * This, + /* [out] */ IDeckLinkAncillaryPacketIterator **iterator); + + HRESULT ( STDMETHODCALLTYPE *GetFirstPacketByID )( + IDeckLinkVideoFrameAncillaryPackets * This, + /* [in] */ unsigned char DID, + /* [in] */ unsigned char SDID, + /* [out] */ IDeckLinkAncillaryPacket **packet); + + HRESULT ( STDMETHODCALLTYPE *AttachPacket )( + IDeckLinkVideoFrameAncillaryPackets * This, + /* [in] */ IDeckLinkAncillaryPacket *packet); + + HRESULT ( STDMETHODCALLTYPE *DetachPacket )( + IDeckLinkVideoFrameAncillaryPackets * This, + /* [in] */ IDeckLinkAncillaryPacket *packet); + + HRESULT ( STDMETHODCALLTYPE *DetachAllPackets )( + IDeckLinkVideoFrameAncillaryPackets * This); + + END_INTERFACE + } IDeckLinkVideoFrameAncillaryPacketsVtbl; + + interface IDeckLinkVideoFrameAncillaryPackets + { + CONST_VTBL struct IDeckLinkVideoFrameAncillaryPacketsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IDeckLinkVideoFrameAncillaryPackets_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IDeckLinkVideoFrameAncillaryPackets_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IDeckLinkVideoFrameAncillaryPackets_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IDeckLinkVideoFrameAncillaryPackets_GetPacketIterator(This,iterator) \ + ( (This)->lpVtbl -> GetPacketIterator(This,iterator) ) + +#define IDeckLinkVideoFrameAncillaryPackets_GetFirstPacketByID(This,DID,SDID,packet) \ + ( (This)->lpVtbl -> GetFirstPacketByID(This,DID,SDID,packet) ) + +#define IDeckLinkVideoFrameAncillaryPackets_AttachPacket(This,packet) \ + ( (This)->lpVtbl -> AttachPacket(This,packet) ) + +#define IDeckLinkVideoFrameAncillaryPackets_DetachPacket(This,packet) \ + ( (This)->lpVtbl -> DetachPacket(This,packet) ) + +#define IDeckLinkVideoFrameAncillaryPackets_DetachAllPackets(This) \ + ( (This)->lpVtbl -> DetachAllPackets(This) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IDeckLinkVideoFrameAncillaryPackets_INTERFACE_DEFINED__ */ + + #ifndef __IDeckLinkVideoFrameAncillary_INTERFACE_DEFINED__ #define __IDeckLinkVideoFrameAncillary_INTERFACE_DEFINED__ @@ -8582,7 +9214,7 @@ EXTERN_C const CLSID CLSID_CDeckLinkIterator; #ifdef __cplusplus -class DECLSPEC_UUID("1F2E109A-8F4F-49E4-9203-135595CB6FA5") +class DECLSPEC_UUID("87D2693F-8D4A-45C7-B43F-10ACBA25E68F") CDeckLinkIterator; #endif @@ -8622,10 +9254,216 @@ EXTERN_C const CLSID CLSID_CDeckLinkDiscovery; #ifdef __cplusplus -class DECLSPEC_UUID("1073A05C-D885-47E9-B3C6-129B3F9F648B") +class DECLSPEC_UUID("652615D4-26CD-4514-B161-2FD5072ED008") CDeckLinkDiscovery; #endif +EXTERN_C const CLSID CLSID_CDeckLinkVideoFrameAncillaryPackets; + +#ifdef __cplusplus + +class DECLSPEC_UUID("F891AD29-D0C2-46E9-A926-4E2D0DD8CFAD") +CDeckLinkVideoFrameAncillaryPackets; +#endif + +#ifndef __IDeckLinkConfiguration_v10_9_INTERFACE_DEFINED__ +#define __IDeckLinkConfiguration_v10_9_INTERFACE_DEFINED__ + +/* interface IDeckLinkConfiguration_v10_9 */ +/* [helpstring][local][uuid][object] */ + + +EXTERN_C const IID IID_IDeckLinkConfiguration_v10_9; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("CB71734A-FE37-4E8D-8E13-802133A1C3F2") + IDeckLinkConfiguration_v10_9 : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE SetFlag( + /* [in] */ BMDDeckLinkConfigurationID cfgID, + /* [in] */ BOOL value) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetFlag( + /* [in] */ BMDDeckLinkConfigurationID cfgID, + /* [out] */ BOOL *value) = 0; + + virtual HRESULT STDMETHODCALLTYPE SetInt( + /* [in] */ BMDDeckLinkConfigurationID cfgID, + /* [in] */ LONGLONG value) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetInt( + /* [in] */ BMDDeckLinkConfigurationID cfgID, + /* [out] */ LONGLONG *value) = 0; + + virtual HRESULT STDMETHODCALLTYPE SetFloat( + /* [in] */ BMDDeckLinkConfigurationID cfgID, + /* [in] */ double value) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetFloat( + /* [in] */ BMDDeckLinkConfigurationID cfgID, + /* [out] */ double *value) = 0; + + virtual HRESULT STDMETHODCALLTYPE SetString( + /* [in] */ BMDDeckLinkConfigurationID cfgID, + /* [in] */ BSTR value) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetString( + /* [in] */ BMDDeckLinkConfigurationID cfgID, + /* [out] */ BSTR *value) = 0; + + virtual HRESULT STDMETHODCALLTYPE WriteConfigurationToPreferences( void) = 0; + + }; + + +#else /* C style interface */ + + typedef struct IDeckLinkConfiguration_v10_9Vtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IDeckLinkConfiguration_v10_9 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IDeckLinkConfiguration_v10_9 * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IDeckLinkConfiguration_v10_9 * This); + + HRESULT ( STDMETHODCALLTYPE *SetFlag )( + IDeckLinkConfiguration_v10_9 * This, + /* [in] */ BMDDeckLinkConfigurationID cfgID, + /* [in] */ BOOL value); + + HRESULT ( STDMETHODCALLTYPE *GetFlag )( + IDeckLinkConfiguration_v10_9 * This, + /* [in] */ BMDDeckLinkConfigurationID cfgID, + /* [out] */ BOOL *value); + + HRESULT ( STDMETHODCALLTYPE *SetInt )( + IDeckLinkConfiguration_v10_9 * This, + /* [in] */ BMDDeckLinkConfigurationID cfgID, + /* [in] */ LONGLONG value); + + HRESULT ( STDMETHODCALLTYPE *GetInt )( + IDeckLinkConfiguration_v10_9 * This, + /* [in] */ BMDDeckLinkConfigurationID cfgID, + /* [out] */ LONGLONG *value); + + HRESULT ( STDMETHODCALLTYPE *SetFloat )( + IDeckLinkConfiguration_v10_9 * This, + /* [in] */ BMDDeckLinkConfigurationID cfgID, + /* [in] */ double value); + + HRESULT ( STDMETHODCALLTYPE *GetFloat )( + IDeckLinkConfiguration_v10_9 * This, + /* [in] */ BMDDeckLinkConfigurationID cfgID, + /* [out] */ double *value); + + HRESULT ( STDMETHODCALLTYPE *SetString )( + IDeckLinkConfiguration_v10_9 * This, + /* [in] */ BMDDeckLinkConfigurationID cfgID, + /* [in] */ BSTR value); + + HRESULT ( STDMETHODCALLTYPE *GetString )( + IDeckLinkConfiguration_v10_9 * This, + /* [in] */ BMDDeckLinkConfigurationID cfgID, + /* [out] */ BSTR *value); + + HRESULT ( STDMETHODCALLTYPE *WriteConfigurationToPreferences )( + IDeckLinkConfiguration_v10_9 * This); + + END_INTERFACE + } IDeckLinkConfiguration_v10_9Vtbl; + + interface IDeckLinkConfiguration_v10_9 + { + CONST_VTBL struct IDeckLinkConfiguration_v10_9Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IDeckLinkConfiguration_v10_9_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IDeckLinkConfiguration_v10_9_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IDeckLinkConfiguration_v10_9_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IDeckLinkConfiguration_v10_9_SetFlag(This,cfgID,value) \ + ( (This)->lpVtbl -> SetFlag(This,cfgID,value) ) + +#define IDeckLinkConfiguration_v10_9_GetFlag(This,cfgID,value) \ + ( (This)->lpVtbl -> GetFlag(This,cfgID,value) ) + +#define IDeckLinkConfiguration_v10_9_SetInt(This,cfgID,value) \ + ( (This)->lpVtbl -> SetInt(This,cfgID,value) ) + +#define IDeckLinkConfiguration_v10_9_GetInt(This,cfgID,value) \ + ( (This)->lpVtbl -> GetInt(This,cfgID,value) ) + +#define IDeckLinkConfiguration_v10_9_SetFloat(This,cfgID,value) \ + ( (This)->lpVtbl -> SetFloat(This,cfgID,value) ) + +#define IDeckLinkConfiguration_v10_9_GetFloat(This,cfgID,value) \ + ( (This)->lpVtbl -> GetFloat(This,cfgID,value) ) + +#define IDeckLinkConfiguration_v10_9_SetString(This,cfgID,value) \ + ( (This)->lpVtbl -> SetString(This,cfgID,value) ) + +#define IDeckLinkConfiguration_v10_9_GetString(This,cfgID,value) \ + ( (This)->lpVtbl -> GetString(This,cfgID,value) ) + +#define IDeckLinkConfiguration_v10_9_WriteConfigurationToPreferences(This) \ + ( (This)->lpVtbl -> WriteConfigurationToPreferences(This) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IDeckLinkConfiguration_v10_9_INTERFACE_DEFINED__ */ + + +EXTERN_C const CLSID CLSID_CBMDStreamingDiscovery_v10_8; + +#ifdef __cplusplus + +class DECLSPEC_UUID("0CAA31F6-8A26-40B0-86A4-BF58DCCA710C") +CBMDStreamingDiscovery_v10_8; +#endif + +EXTERN_C const CLSID CLSID_CDeckLinkIterator_v10_8; + +#ifdef __cplusplus + +class DECLSPEC_UUID("1F2E109A-8F4F-49E4-9203-135595CB6FA5") +CDeckLinkIterator_v10_8; +#endif + +EXTERN_C const CLSID CLSID_CDeckLinkDiscovery_v10_8; + +#ifdef __cplusplus + +class DECLSPEC_UUID("1073A05C-D885-47E9-B3C6-129B3F9F648B") +CDeckLinkDiscovery_v10_8; +#endif + #ifndef __IDeckLinkEncoderConfiguration_v10_5_INTERFACE_DEFINED__ #define __IDeckLinkEncoderConfiguration_v10_5_INTERFACE_DEFINED__ diff --git a/sys/decklink/win/DeckLinkAPI_i.c b/sys/decklink/win/DeckLinkAPI_i.c index dadf799..65da7aa 100644 --- a/sys/decklink/win/DeckLinkAPI_i.c +++ b/sys/decklink/win/DeckLinkAPI_i.c @@ -7,11 +7,11 @@ /* link this file in with the server and any clients */ - /* File created by MIDL compiler version 8.00.0603 */ -/* at Fri Jan 27 17:12:54 2017 + /* File created by MIDL compiler version 8.01.0622 */ +/* at Fri Feb 28 12:18:07 2020 */ -/* Compiler settings for ..\..\..\..\..\..\blackmagic\SDK\Win\include\DeckLinkAPI.idl: - Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 8.00.0603 +/* Compiler settings for ..\..\Blackmagic\DeckLink_SDK_10.11.4\Win\include\DeckLinkAPI.idl: + Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 8.01.0622 protocol : dce , ms_ext, c_ext, robust error checks: allocation ref bounds_check enum stub_data VC __declspec() decoration level: @@ -86,7 +86,7 @@ MIDL_DEFINE_GUID(IID, IID_IDeckLinkDisplayMode,0x3EB2C1AB,0x0A3D,0x4523,0xA3,0xA MIDL_DEFINE_GUID(IID, IID_IDeckLink,0xC418FBDD,0x0587,0x48ED,0x8F,0xE5,0x64,0x0F,0x0A,0x14,0xAF,0x91); -MIDL_DEFINE_GUID(IID, IID_IDeckLinkConfiguration,0xCB71734A,0xFE37,0x4E8D,0x8E,0x13,0x80,0x21,0x33,0xA1,0xC3,0xF2); +MIDL_DEFINE_GUID(IID, IID_IDeckLinkConfiguration,0xEF90380B,0x4AE5,0x4346,0x90,0x77,0xE2,0x88,0xE1,0x49,0xF1,0x29); MIDL_DEFINE_GUID(IID, IID_IDeckLinkEncoderConfiguration,0x138050E5,0xC60A,0x4552,0xBF,0x3F,0x0F,0x35,0x80,0x49,0x32,0x7E); @@ -131,7 +131,7 @@ MIDL_DEFINE_GUID(IID, IID_IBMDStreamingMPEG2TSPacket,0x91810D1C,0x4FB3,0x4AAA,0x MIDL_DEFINE_GUID(IID, IID_IBMDStreamingH264NALParser,0x5867F18C,0x5BFA,0x4CCC,0xB2,0xA7,0x9D,0xFD,0x14,0x04,0x17,0xD2); -MIDL_DEFINE_GUID(CLSID, CLSID_CBMDStreamingDiscovery,0x0CAA31F6,0x8A26,0x40B0,0x86,0xA4,0xBF,0x58,0xDC,0xCA,0x71,0x0C); +MIDL_DEFINE_GUID(CLSID, CLSID_CBMDStreamingDiscovery,0x23A4EDF5,0xA0E5,0x432C,0x94,0xEF,0x3B,0xAB,0xB5,0xF8,0x1C,0x82); MIDL_DEFINE_GUID(CLSID, CLSID_CBMDStreamingH264NALParser,0x7753EFBD,0x951C,0x407C,0x97,0xA5,0x23,0xC7,0x37,0xB7,0x3B,0x52); @@ -164,6 +164,9 @@ MIDL_DEFINE_GUID(IID, IID_IDeckLinkOutput,0xCC5C8A6E,0x3F2F,0x4B3A,0x87,0xEA,0xF MIDL_DEFINE_GUID(IID, IID_IDeckLinkInput,0xAF22762B,0xDFAC,0x4846,0xAA,0x79,0xFA,0x88,0x83,0x56,0x09,0x95); +MIDL_DEFINE_GUID(IID, IID_IDeckLinkHDMIInputEDID,0xABBBACBC,0x45BC,0x4665,0x9D,0x92,0xAC,0xE6,0xE5,0xA9,0x79,0x02); + + MIDL_DEFINE_GUID(IID, IID_IDeckLinkEncoderInput,0x270587DA,0x6B7D,0x42E7,0xA1,0xF0,0x6D,0x85,0x3F,0x58,0x11,0x85); @@ -182,6 +185,15 @@ MIDL_DEFINE_GUID(IID, IID_IDeckLinkVideoFrameMetadataExtensions,0xD5973DC9,0x643 MIDL_DEFINE_GUID(IID, IID_IDeckLinkVideoInputFrame,0x05CFE374,0x537C,0x4094,0x9A,0x57,0x68,0x05,0x25,0x11,0x8F,0x44); +MIDL_DEFINE_GUID(IID, IID_IDeckLinkAncillaryPacket,0xCC5BBF7E,0x029C,0x4D3B,0x91,0x58,0x60,0x00,0xEF,0x5E,0x36,0x70); + + +MIDL_DEFINE_GUID(IID, IID_IDeckLinkAncillaryPacketIterator,0x3FC8994B,0x88FB,0x4C17,0x96,0x8F,0x9A,0xAB,0x69,0xD9,0x64,0xA7); + + +MIDL_DEFINE_GUID(IID, IID_IDeckLinkVideoFrameAncillaryPackets,0x6C186C0F,0x459E,0x41D8,0xAE,0xE2,0x48,0x12,0xD8,0x1A,0xEE,0x68); + + MIDL_DEFINE_GUID(IID, IID_IDeckLinkVideoFrameAncillary,0x732E723C,0xD1A4,0x4E29,0x9E,0x8E,0x4A,0x88,0x79,0x7A,0x00,0x04); @@ -233,7 +245,7 @@ MIDL_DEFINE_GUID(IID, IID_IDeckLinkDeviceNotificationCallback,0x4997053B,0x0ADF, MIDL_DEFINE_GUID(IID, IID_IDeckLinkDiscovery,0xCDBF631C,0xBC76,0x45FA,0xB4,0x4D,0xC5,0x50,0x59,0xBC,0x61,0x01); -MIDL_DEFINE_GUID(CLSID, CLSID_CDeckLinkIterator,0x1F2E109A,0x8F4F,0x49E4,0x92,0x03,0x13,0x55,0x95,0xCB,0x6F,0xA5); +MIDL_DEFINE_GUID(CLSID, CLSID_CDeckLinkIterator,0x87D2693F,0x8D4A,0x45C7,0xB4,0x3F,0x10,0xAC,0xBA,0x25,0xE6,0x8F); MIDL_DEFINE_GUID(CLSID, CLSID_CDeckLinkAPIInformation,0x263CA19F,0xED09,0x482E,0x9F,0x9D,0x84,0x00,0x57,0x83,0xA2,0x37); @@ -248,7 +260,22 @@ MIDL_DEFINE_GUID(CLSID, CLSID_CDeckLinkDX9ScreenPreviewHelper,0xCC010023,0xE01D, MIDL_DEFINE_GUID(CLSID, CLSID_CDeckLinkVideoConversion,0x7DBBBB11,0x5B7B,0x467D,0xAE,0xA4,0xCE,0xA4,0x68,0xFD,0x36,0x8C); -MIDL_DEFINE_GUID(CLSID, CLSID_CDeckLinkDiscovery,0x1073A05C,0xD885,0x47E9,0xB3,0xC6,0x12,0x9B,0x3F,0x9F,0x64,0x8B); +MIDL_DEFINE_GUID(CLSID, CLSID_CDeckLinkDiscovery,0x652615D4,0x26CD,0x4514,0xB1,0x61,0x2F,0xD5,0x07,0x2E,0xD0,0x08); + + +MIDL_DEFINE_GUID(CLSID, CLSID_CDeckLinkVideoFrameAncillaryPackets,0xF891AD29,0xD0C2,0x46E9,0xA9,0x26,0x4E,0x2D,0x0D,0xD8,0xCF,0xAD); + + +MIDL_DEFINE_GUID(IID, IID_IDeckLinkConfiguration_v10_9,0xCB71734A,0xFE37,0x4E8D,0x8E,0x13,0x80,0x21,0x33,0xA1,0xC3,0xF2); + + +MIDL_DEFINE_GUID(CLSID, CLSID_CBMDStreamingDiscovery_v10_8,0x0CAA31F6,0x8A26,0x40B0,0x86,0xA4,0xBF,0x58,0xDC,0xCA,0x71,0x0C); + + +MIDL_DEFINE_GUID(CLSID, CLSID_CDeckLinkIterator_v10_8,0x1F2E109A,0x8F4F,0x49E4,0x92,0x03,0x13,0x55,0x95,0xCB,0x6F,0xA5); + + +MIDL_DEFINE_GUID(CLSID, CLSID_CDeckLinkDiscovery_v10_8,0x1073A05C,0xD885,0x47E9,0xB3,0xC6,0x12,0x9B,0x3F,0x9F,0x64,0x8B); MIDL_DEFINE_GUID(IID, IID_IDeckLinkEncoderConfiguration_v10_5,0x67455668,0x0848,0x45DF,0x8D,0x8E,0x35,0x0A,0x77,0xC9,0xA0,0x28); -- 2.7.4