Răsfoiți Sursa

decklink: Add Windows DeckLink SDK

Some changes were made to the stock DeckLink SDK: removed all references
to legacy API headers in DeckLinkAPI.idl; removed all instances of
`importlib("stdole2.tlb");`.
Skyler Lipthay 10 ani în urmă
părinte
comite
b959f56291

+ 813 - 0
plugins/decklink/win/decklink-sdk/DeckLinkAPI.idl

@@ -0,0 +1,813 @@
+/* -LICENSE-START-
+** Copyright (c) 2014 Blackmagic Design
+**
+** Permission is hereby granted, free of charge, to any person or organization
+** obtaining a copy of the software and accompanying documentation covered by
+** this license (the "Software") to use, reproduce, display, distribute,
+** execute, and transmit the Software, and to prepare derivative works of the
+** Software, and to permit third-parties to whom the Software is furnished to
+** do so, all subject to the following:
+**
+** The copyright notices in the Software and this entire statement, including
+** the above license grant, this restriction and the following disclaimer,
+** must be included in all copies of the Software, in whole or in part, and
+** all derivative works of the Software, unless such copies or derivative
+** works are solely in the form of machine-executable object code generated by
+** a source language processor.
+**
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+** DEALINGS IN THE SOFTWARE.
+** -LICENSE-END-
+*/
+
+
+#ifndef BMD_CONST
+    #if defined(_MSC_VER)
+        #define BMD_CONST __declspec(selectany) static const
+    #else
+        #define BMD_CONST static const
+    #endif
+#endif
+
+/* DeckLink API */
+
+import "unknwn.idl";
+
+[uuid(D864517A-EDD5-466D-867D-C819F1C052BB),
+version(1.0), helpstring("DeckLink API Library")]
+library DeckLinkAPI
+{
+
+#include "DeckLinkAPITypes.idl"
+#include "DeckLinkAPIModes.idl"
+#include "DeckLinkAPIDiscovery.idl"
+#include "DeckLinkAPIConfiguration.idl"
+#include "DeckLinkAPIDeckControl.idl"
+#include "DeckLinkAPIStreaming.idl"
+
+// Type Declarations
+
+
+// Enumeration Mapping
+
+cpp_quote("typedef unsigned long BMDFrameFlags;")
+cpp_quote("typedef unsigned long BMDVideoInputFlags;")
+cpp_quote("typedef unsigned long BMDVideoInputFormatChangedEvents;")
+cpp_quote("typedef unsigned long BMDDetectedVideoInputFormatFlags;")
+cpp_quote("typedef unsigned long BMDDeckLinkCapturePassthroughMode;")
+cpp_quote("typedef unsigned long BMDAnalogVideoFlags;")
+cpp_quote("typedef unsigned long BMDDeviceBusyState;")
+cpp_quote("#if 0")
+typedef enum _BMDFrameFlags BMDFrameFlags;
+typedef enum _BMDVideoInputFlags BMDVideoInputFlags;
+typedef enum _BMDVideoInputFormatChangedEvents BMDVideoInputFormatChangedEvents;
+typedef enum _BMDDetectedVideoInputFormatFlags BMDDetectedVideoInputFormatFlags;
+typedef enum _BMDDeckLinkCapturePassthroughMode BMDDeckLinkCapturePassthroughMode;
+typedef enum _BMDAnalogVideoFlags BMDAnalogVideoFlags;
+typedef enum _BMDDeviceBusyState BMDDeviceBusyState;
+cpp_quote("#endif")
+
+/* Enum BMDVideoOutputFlags - Flags to control the output of ancillary data along with video. */
+
+typedef [v1_enum] enum	_BMDVideoOutputFlags {
+    bmdVideoOutputFlagDefault                                    = 0,
+    bmdVideoOutputVANC                                           = 1 << 0,
+    bmdVideoOutputVITC                                           = 1 << 1,
+    bmdVideoOutputRP188                                          = 1 << 2,
+    bmdVideoOutputDualStream3D                                   = 1 << 4
+} BMDVideoOutputFlags;
+
+/* Enum BMDFrameFlags - Frame flags */
+
+[v1_enum] enum	_BMDFrameFlags {
+    bmdFrameFlagDefault                                          = 0,
+    bmdFrameFlagFlipVertical                                     = 1 << 0,
+
+    /* Flags that are applicable only to instances of IDeckLinkVideoInputFrame */
+
+    bmdFrameHasNoInputSource                                     = 1 << 31
+};
+
+/* Enum BMDVideoInputFlags - Flags applicable to video input */
+
+[v1_enum] enum	_BMDVideoInputFlags {
+    bmdVideoInputFlagDefault                                     = 0,
+    bmdVideoInputEnableFormatDetection                           = 1 << 0,
+    bmdVideoInputDualStream3D                                    = 1 << 1
+};
+
+/* Enum BMDVideoInputFormatChangedEvents - Bitmask passed to the VideoInputFormatChanged notification to identify the properties of the input signal that have changed */
+
+[v1_enum] enum	_BMDVideoInputFormatChangedEvents {
+    bmdVideoInputDisplayModeChanged                              = 1 << 0,
+    bmdVideoInputFieldDominanceChanged                           = 1 << 1,
+    bmdVideoInputColorspaceChanged                               = 1 << 2
+};
+
+/* Enum BMDDetectedVideoInputFormatFlags - Flags passed to the VideoInputFormatChanged notification to describe the detected video input signal */
+
+[v1_enum] enum	_BMDDetectedVideoInputFormatFlags {
+    bmdDetectedVideoInputYCbCr422                                = 1 << 0,
+    bmdDetectedVideoInputRGB444                                  = 1 << 1,
+    bmdDetectedVideoInputDualStream3D                            = 1 << 2
+};
+
+/* Enum BMDDeckLinkCapturePassthroughMode - Enumerates whether the video output is electrically connected to the video input or if the clean switching mode is enabled */
+
+[v1_enum] enum	_BMDDeckLinkCapturePassthroughMode {
+    bmdDeckLinkCapturePassthroughModeDirect                      = /* 'pdir' */ 0x70646972,
+    bmdDeckLinkCapturePassthroughModeCleanSwitch                 = /* 'pcln' */ 0x70636C6E
+};
+
+/* Enum BMDOutputFrameCompletionResult - Frame Completion Callback */
+
+typedef [v1_enum] enum	_BMDOutputFrameCompletionResult {
+    bmdOutputFrameCompleted,
+    bmdOutputFrameDisplayedLate,
+    bmdOutputFrameDropped,
+    bmdOutputFrameFlushed
+} BMDOutputFrameCompletionResult;
+
+/* Enum BMDReferenceStatus - GenLock input status */
+
+typedef [v1_enum] enum	_BMDReferenceStatus {
+    bmdReferenceNotSupportedByHardware                           = 1 << 0,
+    bmdReferenceLocked                                           = 1 << 1
+} BMDReferenceStatus;
+
+/* Enum BMDAudioSampleRate - Audio sample rates supported for output/input */
+
+typedef [v1_enum] enum	_BMDAudioSampleRate {
+    bmdAudioSampleRate48kHz                                      = 48000
+} BMDAudioSampleRate;
+
+/* Enum BMDAudioSampleType - Audio sample sizes supported for output/input */
+
+typedef [v1_enum] enum	_BMDAudioSampleType {
+    bmdAudioSampleType16bitInteger                               = 16,
+    bmdAudioSampleType32bitInteger                               = 32
+} BMDAudioSampleType;
+
+/* Enum BMDAudioOutputStreamType - Audio output stream type */
+
+typedef [v1_enum] enum	_BMDAudioOutputStreamType {
+    bmdAudioOutputStreamContinuous,
+    bmdAudioOutputStreamContinuousDontResample,
+    bmdAudioOutputStreamTimestamped
+} BMDAudioOutputStreamType;
+
+/* Enum BMDDisplayModeSupport - Output mode supported flags */
+
+typedef [v1_enum] enum	_BMDDisplayModeSupport {
+    bmdDisplayModeNotSupported                                   = 0,
+    bmdDisplayModeSupported,
+    bmdDisplayModeSupportedWithConversion
+} BMDDisplayModeSupport;
+
+/* Enum BMDTimecodeFormat - Timecode formats for frame metadata */
+
+typedef [v1_enum] enum	_BMDTimecodeFormat {
+    bmdTimecodeRP188VITC1                                        = /* 'rpv1' */ 0x72707631,	// RP188 timecode where DBB1 equals VITC1 (line 9)
+    bmdTimecodeRP188VITC2                                        = /* 'rp12' */ 0x72703132,	// RP188 timecode where DBB1 equals VITC2 (line 9 for progressive or line 571 for interlaced/PsF)
+    bmdTimecodeRP188LTC                                          = /* 'rplt' */ 0x72706C74,	// RP188 timecode where DBB1 equals LTC (line 10)
+    bmdTimecodeRP188Any                                          = /* 'rp18' */ 0x72703138,	// For capture: return the first valid timecode in {VITC1, LTC ,VITC2} - For playback: set the timecode as VITC1
+    bmdTimecodeVITC                                              = /* 'vitc' */ 0x76697463,
+    bmdTimecodeVITCField2                                        = /* 'vit2' */ 0x76697432,
+    bmdTimecodeSerial                                            = /* 'seri' */ 0x73657269
+} BMDTimecodeFormat;
+
+/* Enum BMDAnalogVideoFlags - Analog video display flags */
+
+[v1_enum] enum	_BMDAnalogVideoFlags {
+    bmdAnalogVideoFlagCompositeSetup75                           = 1 << 0,
+    bmdAnalogVideoFlagComponentBetacamLevels                     = 1 << 1
+};
+
+/* Enum BMDAudioOutputAnalogAESSwitch - Audio output Analog/AESEBU switch */
+
+typedef [v1_enum] enum	_BMDAudioOutputAnalogAESSwitch {
+    bmdAudioOutputSwitchAESEBU                                   = /* 'aes ' */ 0x61657320,
+    bmdAudioOutputSwitchAnalog                                   = /* 'anlg' */ 0x616E6C67
+} BMDAudioOutputAnalogAESSwitch;
+
+/* Enum BMDVideoOutputConversionMode - Video/audio conversion mode */
+
+typedef [v1_enum] enum	_BMDVideoOutputConversionMode {
+    bmdNoVideoOutputConversion                                   = /* 'none' */ 0x6E6F6E65,
+    bmdVideoOutputLetterboxDownconversion                        = /* 'ltbx' */ 0x6C746278,
+    bmdVideoOutputAnamorphicDownconversion                       = /* 'amph' */ 0x616D7068,
+    bmdVideoOutputHD720toHD1080Conversion                        = /* '720c' */ 0x37323063,
+    bmdVideoOutputHardwareLetterboxDownconversion                = /* 'HWlb' */ 0x48576C62,
+    bmdVideoOutputHardwareAnamorphicDownconversion               = /* 'HWam' */ 0x4857616D,
+    bmdVideoOutputHardwareCenterCutDownconversion                = /* 'HWcc' */ 0x48576363,
+    bmdVideoOutputHardware720p1080pCrossconversion               = /* 'xcap' */ 0x78636170,
+    bmdVideoOutputHardwareAnamorphic720pUpconversion             = /* 'ua7p' */ 0x75613770,
+    bmdVideoOutputHardwareAnamorphic1080iUpconversion            = /* 'ua1i' */ 0x75613169,
+    bmdVideoOutputHardwareAnamorphic149To720pUpconversion        = /* 'u47p' */ 0x75343770,
+    bmdVideoOutputHardwareAnamorphic149To1080iUpconversion       = /* 'u41i' */ 0x75343169,
+    bmdVideoOutputHardwarePillarbox720pUpconversion              = /* 'up7p' */ 0x75703770,
+    bmdVideoOutputHardwarePillarbox1080iUpconversion             = /* 'up1i' */ 0x75703169
+} BMDVideoOutputConversionMode;
+
+/* Enum BMDVideoInputConversionMode - Video input conversion mode */
+
+typedef [v1_enum] enum	_BMDVideoInputConversionMode {
+    bmdNoVideoInputConversion                                    = /* 'none' */ 0x6E6F6E65,
+    bmdVideoInputLetterboxDownconversionFromHD1080               = /* '10lb' */ 0x31306C62,
+    bmdVideoInputAnamorphicDownconversionFromHD1080              = /* '10am' */ 0x3130616D,
+    bmdVideoInputLetterboxDownconversionFromHD720                = /* '72lb' */ 0x37326C62,
+    bmdVideoInputAnamorphicDownconversionFromHD720               = /* '72am' */ 0x3732616D,
+    bmdVideoInputLetterboxUpconversion                           = /* 'lbup' */ 0x6C627570,
+    bmdVideoInputAnamorphicUpconversion                          = /* 'amup' */ 0x616D7570
+} BMDVideoInputConversionMode;
+
+/* Enum BMDVideo3DPackingFormat - Video 3D packing format */
+
+typedef [v1_enum] enum	_BMDVideo3DPackingFormat {
+    bmdVideo3DPackingSidebySideHalf                              = /* 'sbsh' */ 0x73627368,
+    bmdVideo3DPackingLinebyLine                                  = /* 'lbyl' */ 0x6C62796C,
+    bmdVideo3DPackingTopAndBottom                                = /* 'tabo' */ 0x7461626F,
+    bmdVideo3DPackingFramePacking                                = /* 'frpk' */ 0x6672706B,
+    bmdVideo3DPackingLeftOnly                                    = /* 'left' */ 0x6C656674,
+    bmdVideo3DPackingRightOnly                                   = /* 'righ' */ 0x72696768
+} BMDVideo3DPackingFormat;
+
+/* Enum BMDIdleVideoOutputOperation - Video output operation when not playing video */
+
+typedef [v1_enum] enum	_BMDIdleVideoOutputOperation {
+    bmdIdleVideoOutputBlack                                      = /* 'blac' */ 0x626C6163,
+    bmdIdleVideoOutputLastFrame                                  = /* 'lafa' */ 0x6C616661,
+    bmdIdleVideoOutputDesktop                                    = /* 'desk' */ 0x6465736B
+} BMDIdleVideoOutputOperation;
+
+/* Enum BMDDeckLinkAttributeID - DeckLink Attribute ID */
+
+typedef [v1_enum] enum	_BMDDeckLinkAttributeID {
+
+    /* Flags */
+
+    BMDDeckLinkSupportsInternalKeying                            = /* 'keyi' */ 0x6B657969,
+    BMDDeckLinkSupportsExternalKeying                            = /* 'keye' */ 0x6B657965,
+    BMDDeckLinkSupportsHDKeying                                  = /* 'keyh' */ 0x6B657968,
+    BMDDeckLinkSupportsInputFormatDetection                      = /* 'infd' */ 0x696E6664,
+    BMDDeckLinkHasReferenceInput                                 = /* 'hrin' */ 0x6872696E,
+    BMDDeckLinkHasSerialPort                                     = /* 'hspt' */ 0x68737074,
+    BMDDeckLinkHasAnalogVideoOutputGain                          = /* 'avog' */ 0x61766F67,
+    BMDDeckLinkCanOnlyAdjustOverallVideoOutputGain               = /* 'ovog' */ 0x6F766F67,
+    BMDDeckLinkHasVideoInputAntiAliasingFilter                   = /* 'aafl' */ 0x6161666C,
+    BMDDeckLinkHasBypass                                         = /* 'byps' */ 0x62797073,
+    BMDDeckLinkSupportsDesktopDisplay                            = /* 'extd' */ 0x65787464,
+    BMDDeckLinkSupportsClockTimingAdjustment                     = /* 'ctad' */ 0x63746164,
+    BMDDeckLinkSupportsFullDuplex                                = /* 'fdup' */ 0x66647570,
+    BMDDeckLinkSupportsFullFrameReferenceInputTimingOffset       = /* 'frin' */ 0x6672696E,
+
+    /* Integers */
+
+    BMDDeckLinkMaximumAudioChannels                              = /* 'mach' */ 0x6D616368,
+    BMDDeckLinkMaximumAnalogAudioChannels                        = /* 'aach' */ 0x61616368,
+    BMDDeckLinkNumberOfSubDevices                                = /* 'nsbd' */ 0x6E736264,
+    BMDDeckLinkSubDeviceIndex                                    = /* 'subi' */ 0x73756269,
+    BMDDeckLinkPersistentID                                      = /* 'peid' */ 0x70656964,
+    BMDDeckLinkTopologicalID                                     = /* 'toid' */ 0x746F6964,
+    BMDDeckLinkVideoOutputConnections                            = /* 'vocn' */ 0x766F636E,
+    BMDDeckLinkVideoInputConnections                             = /* 'vicn' */ 0x7669636E,
+    BMDDeckLinkAudioOutputConnections                            = /* 'aocn' */ 0x616F636E,
+    BMDDeckLinkAudioInputConnections                             = /* 'aicn' */ 0x6169636E,
+    BMDDeckLinkDeviceBusyState                                   = /* 'dbst' */ 0x64627374,
+    BMDDeckLinkVideoIOSupport                                    = /* 'vios' */ 0x76696F73,	// Returns a BMDVideoIOSupport bit field
+
+    /* Floats */
+
+    BMDDeckLinkVideoInputGainMinimum                             = /* 'vigm' */ 0x7669676D,
+    BMDDeckLinkVideoInputGainMaximum                             = /* 'vigx' */ 0x76696778,
+    BMDDeckLinkVideoOutputGainMinimum                            = /* 'vogm' */ 0x766F676D,
+    BMDDeckLinkVideoOutputGainMaximum                            = /* 'vogx' */ 0x766F6778,
+
+    /* Strings */
+
+    BMDDeckLinkSerialPortDeviceName                              = /* 'slpn' */ 0x736C706E
+} BMDDeckLinkAttributeID;
+
+/* Enum BMDDeckLinkAPIInformationID - DeckLinkAPI information ID */
+
+typedef [v1_enum] enum	_BMDDeckLinkAPIInformationID {
+    BMDDeckLinkAPIVersion                                        = /* 'vers' */ 0x76657273
+} BMDDeckLinkAPIInformationID;
+
+/* Enum BMDDeviceBusyState - Current device busy state */
+
+[v1_enum] enum	_BMDDeviceBusyState {
+    bmdDeviceCaptureBusy                                         = 1 << 0,
+    bmdDevicePlaybackBusy                                        = 1 << 1,
+    bmdDeviceSerialPortBusy                                      = 1 << 2
+};
+
+/* Enum BMDVideoIOSupport - Device video input/output support */
+
+typedef [v1_enum] enum	_BMDVideoIOSupport {
+    bmdDeviceSupportsCapture                                     = 1 << 0,
+    bmdDeviceSupportsPlayback                                    = 1 << 1
+} BMDVideoIOSupport;
+
+/* Enum BMD3DPreviewFormat - Linked Frame preview format */
+
+typedef [v1_enum] enum	_BMD3DPreviewFormat {
+    bmd3DPreviewFormatDefault                                    = /* 'defa' */ 0x64656661,
+    bmd3DPreviewFormatLeftOnly                                   = /* 'left' */ 0x6C656674,
+    bmd3DPreviewFormatRightOnly                                  = /* 'righ' */ 0x72696768,
+    bmd3DPreviewFormatSideBySide                                 = /* 'side' */ 0x73696465,
+    bmd3DPreviewFormatTopBottom                                  = /* 'topb' */ 0x746F7062
+} BMD3DPreviewFormat;
+
+/* Enum BMDNotifications - Events that can be subscribed through IDeckLinkNotification */
+
+typedef [v1_enum] enum	_BMDNotifications {
+    bmdPreferencesChanged                                        = /* 'pref' */ 0x70726566
+} BMDNotifications;
+
+// Forward Declarations
+
+interface IDeckLinkVideoOutputCallback;
+interface IDeckLinkInputCallback;
+interface IDeckLinkMemoryAllocator;
+interface IDeckLinkAudioOutputCallback;
+interface IDeckLinkIterator;
+interface IDeckLinkAPIInformation;
+interface IDeckLinkOutput;
+interface IDeckLinkInput;
+interface IDeckLinkVideoFrame;
+interface IDeckLinkMutableVideoFrame;
+interface IDeckLinkVideoFrame3DExtensions;
+interface IDeckLinkVideoInputFrame;
+interface IDeckLinkVideoFrameAncillary;
+interface IDeckLinkAudioInputPacket;
+interface IDeckLinkScreenPreviewCallback;
+interface IDeckLinkGLScreenPreviewHelper;
+interface IDeckLinkDX9ScreenPreviewHelper;
+interface IDeckLinkNotificationCallback;
+interface IDeckLinkNotification;
+interface IDeckLinkAttributes;
+interface IDeckLinkKeyer;
+interface IDeckLinkVideoConversion;
+interface IDeckLinkDeviceNotificationCallback;
+interface IDeckLinkDiscovery;
+
+/* Interface IDeckLinkVideoOutputCallback - Frame completion callback. */
+
+[
+    object,
+    uuid(20AA5225-1958-47CB-820B-80A8D521A6EE),
+    helpstring("Frame completion callback.")
+] interface IDeckLinkVideoOutputCallback : IUnknown
+{
+    HRESULT ScheduledFrameCompleted([in] IDeckLinkVideoFrame *completedFrame, [in] BMDOutputFrameCompletionResult result);
+    HRESULT ScheduledPlaybackHasStopped(void);
+};
+
+/* Interface IDeckLinkInputCallback - Frame arrival callback. */
+
+[
+    object,
+    uuid(DD04E5EC-7415-42AB-AE4A-E80C4DFC044A),
+    helpstring("Frame arrival callback.")
+] interface IDeckLinkInputCallback : IUnknown
+{
+    HRESULT VideoInputFormatChanged([in] BMDVideoInputFormatChangedEvents notificationEvents, [in] IDeckLinkDisplayMode *newDisplayMode, [in] BMDDetectedVideoInputFormatFlags detectedSignalFlags);
+    HRESULT VideoInputFrameArrived([in] IDeckLinkVideoInputFrame* videoFrame, [in] IDeckLinkAudioInputPacket* audioPacket);
+};
+
+/* Interface IDeckLinkMemoryAllocator - Memory allocator for video frames. */
+
+[
+    object,
+    uuid(B36EB6E7-9D29-4AA8-92EF-843B87A289E8),
+    local,
+    helpstring("Memory allocator for video frames.")
+] interface IDeckLinkMemoryAllocator : IUnknown
+{
+    HRESULT AllocateBuffer([in] unsigned long bufferSize, [out] void **allocatedBuffer);
+    HRESULT ReleaseBuffer([in] void *buffer);
+
+    HRESULT Commit(void);
+    HRESULT Decommit(void);
+};
+
+/* Interface IDeckLinkAudioOutputCallback - Optional callback to allow audio samples to be pulled as required. */
+
+[
+    object,
+    uuid(403C681B-7F46-4A12-B993-2BB127084EE6),
+    local,
+    helpstring("Optional callback to allow audio samples to be pulled as required.")
+] interface IDeckLinkAudioOutputCallback : IUnknown
+{
+    HRESULT RenderAudioSamples([in] BOOL preroll);
+};
+
+/* Interface IDeckLinkIterator - enumerates installed DeckLink hardware */
+
+[
+    object,
+    uuid(50FB36CD-3063-4B73-BDBB-958087F2D8BA),
+    helpstring("enumerates installed DeckLink hardware")
+] interface IDeckLinkIterator : IUnknown
+{
+    HRESULT Next([out] IDeckLink **deckLinkInstance);
+};
+
+/* Interface IDeckLinkAPIInformation - DeckLinkAPI attribute interface */
+
+[
+    object,
+    uuid(7BEA3C68-730D-4322-AF34-8A7152B532A4),
+    helpstring("DeckLinkAPI attribute interface")
+] interface IDeckLinkAPIInformation : IUnknown
+{
+    HRESULT GetFlag([in] BMDDeckLinkAPIInformationID cfgID, [out] BOOL *value);
+    HRESULT GetInt([in] BMDDeckLinkAPIInformationID cfgID, [out] LONGLONG *value);
+    HRESULT GetFloat([in] BMDDeckLinkAPIInformationID cfgID, [out] double *value);
+    HRESULT GetString([in] BMDDeckLinkAPIInformationID cfgID, [out] BSTR *value);
+};
+
+/* Interface IDeckLinkOutput - Created by QueryInterface from IDeckLink. */
+
+[
+    object,
+    uuid(CC5C8A6E-3F2F-4B3A-87EA-FD78AF300564),
+    local,
+    helpstring("Created by QueryInterface from IDeckLink.")
+] interface IDeckLinkOutput : IUnknown
+{
+    HRESULT DoesSupportVideoMode([in] BMDDisplayMode displayMode, [in] BMDPixelFormat pixelFormat, [in] BMDVideoOutputFlags flags, [out] BMDDisplayModeSupport *result, [out] IDeckLinkDisplayMode **resultDisplayMode);
+    HRESULT GetDisplayModeIterator([out] IDeckLinkDisplayModeIterator **iterator);
+
+    HRESULT SetScreenPreviewCallback([in] IDeckLinkScreenPreviewCallback *previewCallback);
+
+    /* Video Output */
+
+    HRESULT EnableVideoOutput([in] BMDDisplayMode displayMode, [in] BMDVideoOutputFlags flags);
+    HRESULT DisableVideoOutput(void);
+
+    HRESULT SetVideoOutputFrameMemoryAllocator([in] IDeckLinkMemoryAllocator *theAllocator);
+    HRESULT CreateVideoFrame([in] long width, [in] long height, [in] long rowBytes, [in] BMDPixelFormat pixelFormat, [in] BMDFrameFlags flags, [out] IDeckLinkMutableVideoFrame **outFrame);
+    HRESULT CreateAncillaryData([in] BMDPixelFormat pixelFormat, [out] IDeckLinkVideoFrameAncillary **outBuffer);
+
+    HRESULT DisplayVideoFrameSync([in] IDeckLinkVideoFrame *theFrame);
+    HRESULT ScheduleVideoFrame([in] IDeckLinkVideoFrame *theFrame, [in] BMDTimeValue displayTime, [in] BMDTimeValue displayDuration, [in] BMDTimeScale timeScale);
+    HRESULT SetScheduledFrameCompletionCallback([in] IDeckLinkVideoOutputCallback *theCallback);
+    HRESULT GetBufferedVideoFrameCount([out] unsigned long *bufferedFrameCount);
+
+    /* Audio Output */
+
+    HRESULT EnableAudioOutput([in] BMDAudioSampleRate sampleRate, [in] BMDAudioSampleType sampleType, [in] unsigned long channelCount, [in] BMDAudioOutputStreamType streamType);
+    HRESULT DisableAudioOutput(void);
+
+    HRESULT WriteAudioSamplesSync([in] void *buffer, [in] unsigned long sampleFrameCount, [out] unsigned long *sampleFramesWritten);
+
+    HRESULT BeginAudioPreroll(void);
+    HRESULT EndAudioPreroll(void);
+    HRESULT ScheduleAudioSamples([in] void *buffer, [in] unsigned long sampleFrameCount, [in] BMDTimeValue streamTime, [in] BMDTimeScale timeScale, [out] unsigned long *sampleFramesWritten);
+
+    HRESULT GetBufferedAudioSampleFrameCount([out] unsigned long *bufferedSampleFrameCount);
+    HRESULT FlushBufferedAudioSamples(void);
+
+    HRESULT SetAudioCallback([in] IDeckLinkAudioOutputCallback *theCallback);
+
+    /* Output Control */
+
+    HRESULT StartScheduledPlayback([in] BMDTimeValue playbackStartTime, [in] BMDTimeScale timeScale, [in] double playbackSpeed);
+    HRESULT StopScheduledPlayback([in] BMDTimeValue stopPlaybackAtTime, [out] BMDTimeValue *actualStopTime, [in] BMDTimeScale timeScale);
+    HRESULT IsScheduledPlaybackRunning([out] BOOL *active);
+    HRESULT GetScheduledStreamTime([in] BMDTimeScale desiredTimeScale, [out] BMDTimeValue *streamTime, [out] double *playbackSpeed);
+    HRESULT GetReferenceStatus([out] BMDReferenceStatus *referenceStatus);
+
+    /* Hardware Timing */
+
+    HRESULT GetHardwareReferenceClock([in] BMDTimeScale desiredTimeScale, [out] BMDTimeValue *hardwareTime, [out] BMDTimeValue *timeInFrame, [out] BMDTimeValue *ticksPerFrame);
+    HRESULT GetFrameCompletionReferenceTimestamp([in] IDeckLinkVideoFrame *theFrame, [in] BMDTimeScale desiredTimeScale, [out] BMDTimeValue *frameCompletionTimestamp);
+};
+
+/* Interface IDeckLinkInput - Created by QueryInterface from IDeckLink. */
+
+[
+    object,
+    uuid(AF22762B-DFAC-4846-AA79-FA8883560995),
+    helpstring("Created by QueryInterface from IDeckLink.")
+] interface IDeckLinkInput : IUnknown
+{
+    HRESULT DoesSupportVideoMode([in] BMDDisplayMode displayMode, [in] BMDPixelFormat pixelFormat, [in] BMDVideoInputFlags flags, [out] BMDDisplayModeSupport *result, [out] IDeckLinkDisplayMode **resultDisplayMode);
+    HRESULT GetDisplayModeIterator([out] IDeckLinkDisplayModeIterator **iterator);
+
+    HRESULT SetScreenPreviewCallback([in] IDeckLinkScreenPreviewCallback *previewCallback);
+
+    /* Video Input */
+
+    HRESULT EnableVideoInput([in] BMDDisplayMode displayMode, [in] BMDPixelFormat pixelFormat, [in] BMDVideoInputFlags flags);
+    HRESULT DisableVideoInput(void);
+    HRESULT GetAvailableVideoFrameCount([out] unsigned long *availableFrameCount);
+    HRESULT SetVideoInputFrameMemoryAllocator([in] IDeckLinkMemoryAllocator *theAllocator);
+
+    /* Audio Input */
+
+    HRESULT EnableAudioInput([in] BMDAudioSampleRate sampleRate, [in] BMDAudioSampleType sampleType, [in] unsigned long channelCount);
+    HRESULT DisableAudioInput(void);
+    HRESULT GetAvailableAudioSampleFrameCount([out] unsigned long *availableSampleFrameCount);
+
+    /* Input Control */
+
+    HRESULT StartStreams(void);
+    HRESULT StopStreams(void);
+    HRESULT PauseStreams(void);
+    HRESULT FlushStreams(void);
+    HRESULT SetCallback([in] IDeckLinkInputCallback *theCallback);
+
+    /* Hardware Timing */
+
+    HRESULT GetHardwareReferenceClock([in] BMDTimeScale desiredTimeScale, [out] BMDTimeValue *hardwareTime, [out] BMDTimeValue *timeInFrame, [out] BMDTimeValue *ticksPerFrame);
+};
+
+/* Interface IDeckLinkVideoFrame - Interface to encapsulate a video frame; can be caller-implemented. */
+
+[
+    object,
+    uuid(3F716FE0-F023-4111-BE5D-EF4414C05B17),
+    local,
+    helpstring("Interface to encapsulate a video frame; can be caller-implemented.")
+] interface IDeckLinkVideoFrame : IUnknown
+{
+    long GetWidth(void);
+    long GetHeight(void);
+    long GetRowBytes(void);
+    BMDPixelFormat GetPixelFormat(void);
+    BMDFrameFlags GetFlags(void);
+    HRESULT GetBytes([out] void **buffer);
+
+    HRESULT GetTimecode([in] BMDTimecodeFormat format, [out] IDeckLinkTimecode **timecode);
+    HRESULT GetAncillaryData([out] IDeckLinkVideoFrameAncillary **ancillary);
+};
+
+/* Interface IDeckLinkMutableVideoFrame - Created by IDeckLinkOutput::CreateVideoFrame. */
+
+[
+    object,
+    uuid(69E2639F-40DA-4E19-B6F2-20ACE815C390),
+    local,
+    helpstring("Created by IDeckLinkOutput::CreateVideoFrame.")
+] interface IDeckLinkMutableVideoFrame : IDeckLinkVideoFrame
+{
+    HRESULT SetFlags([in] BMDFrameFlags newFlags);
+
+    HRESULT SetTimecode([in] BMDTimecodeFormat format, [in] IDeckLinkTimecode *timecode);
+    HRESULT SetTimecodeFromComponents([in] BMDTimecodeFormat format, [in] unsigned char hours, [in] unsigned char minutes, [in] unsigned char seconds, [in] unsigned char frames, [in] BMDTimecodeFlags flags);
+    HRESULT SetAncillaryData([in] IDeckLinkVideoFrameAncillary *ancillary);
+    HRESULT SetTimecodeUserBits([in] BMDTimecodeFormat format, [in] BMDTimecodeUserBits userBits);
+};
+
+/* Interface IDeckLinkVideoFrame3DExtensions - Optional interface implemented on IDeckLinkVideoFrame to support 3D frames */
+
+[
+    object,
+    uuid(DA0F7E4A-EDC7-48A8-9CDD-2DB51C729CD7),
+    local,
+    helpstring("Optional interface implemented on IDeckLinkVideoFrame to support 3D frames")
+] interface IDeckLinkVideoFrame3DExtensions : IUnknown
+{
+    BMDVideo3DPackingFormat Get3DPackingFormat(void);
+    HRESULT GetFrameForRightEye([out] IDeckLinkVideoFrame* *rightEyeFrame);
+};
+
+/* Interface IDeckLinkVideoInputFrame - Provided by the IDeckLinkVideoInput frame arrival callback. */
+
+[
+    object,
+    uuid(05CFE374-537C-4094-9A57-680525118F44),
+    local,
+    helpstring("Provided by the IDeckLinkVideoInput frame arrival callback.")
+] interface IDeckLinkVideoInputFrame : IDeckLinkVideoFrame
+{
+    HRESULT GetStreamTime([out] BMDTimeValue *frameTime, [out] BMDTimeValue *frameDuration, [in] BMDTimeScale timeScale);
+    HRESULT GetHardwareReferenceTimestamp([in] BMDTimeScale timeScale, [out] BMDTimeValue *frameTime, [out] BMDTimeValue *frameDuration);
+};
+
+/* Interface IDeckLinkVideoFrameAncillary - Obtained through QueryInterface() on an IDeckLinkVideoFrame object. */
+
+[
+    object,
+    uuid(732E723C-D1A4-4E29-9E8E-4A88797A0004),
+    local,
+    helpstring("Obtained through QueryInterface() on an IDeckLinkVideoFrame object.")
+] interface IDeckLinkVideoFrameAncillary : IUnknown
+{
+
+    HRESULT GetBufferForVerticalBlankingLine([in] unsigned long lineNumber, [out] void **buffer);
+    BMDPixelFormat GetPixelFormat(void);
+    BMDDisplayMode GetDisplayMode(void);
+};
+
+/* Interface IDeckLinkAudioInputPacket - Provided by the IDeckLinkInput callback. */
+
+[
+    object,
+    uuid(E43D5870-2894-11DE-8C30-0800200C9A66),
+    local,
+    helpstring("Provided by the IDeckLinkInput callback.")
+] interface IDeckLinkAudioInputPacket : IUnknown
+{
+    long GetSampleFrameCount(void);
+    HRESULT GetBytes([out] void **buffer);
+    HRESULT GetPacketTime([out] BMDTimeValue *packetTime, [in] BMDTimeScale timeScale);
+};
+
+/* Interface IDeckLinkScreenPreviewCallback - Screen preview callback */
+
+[
+    object,
+    uuid(B1D3F49A-85FE-4C5D-95C8-0B5D5DCCD438),
+    local,
+    helpstring("Screen preview callback")
+] interface IDeckLinkScreenPreviewCallback : IUnknown
+{
+    HRESULT DrawFrame([in] IDeckLinkVideoFrame *theFrame);
+};
+
+/* Interface IDeckLinkGLScreenPreviewHelper - Created with CoCreateInstance(). */
+
+[
+    object,
+    uuid(504E2209-CAC7-4C1A-9FB4-C5BB6274D22F),
+    local,
+    helpstring("Created with CoCreateInstance().")
+] interface IDeckLinkGLScreenPreviewHelper : IUnknown
+{
+
+    /* Methods must be called with OpenGL context set */
+
+    HRESULT InitializeGL(void);
+    HRESULT PaintGL(void);
+    HRESULT SetFrame([in] IDeckLinkVideoFrame *theFrame);
+    HRESULT Set3DPreviewFormat([in] BMD3DPreviewFormat previewFormat);
+};
+
+/* Interface IDeckLinkDX9ScreenPreviewHelper - Created with CoCreateInstance(). */
+
+[
+    object,
+    uuid(2094B522-D1A1-40C0-9AC7-1C012218EF02),
+    local,
+    helpstring("Created with CoCreateInstance().")
+] interface IDeckLinkDX9ScreenPreviewHelper : IUnknown
+{
+    HRESULT Initialize([in] void *device);
+    HRESULT Render([in] RECT *rc);
+    HRESULT SetFrame([in] IDeckLinkVideoFrame *theFrame);
+    HRESULT Set3DPreviewFormat([in] BMD3DPreviewFormat previewFormat);
+};
+
+/* Interface IDeckLinkNotificationCallback - DeckLink Notification Callback Interface */
+
+[
+    object,
+    uuid(b002a1ec-070d-4288-8289-bd5d36e5ff0d),
+    local,
+    helpstring("DeckLink Notification Callback Interface")
+] interface IDeckLinkNotificationCallback : IUnknown
+{
+    HRESULT Notify([in] BMDNotifications topic, [in] ULONGLONG param1, [in] ULONGLONG param2);
+};
+
+/* Interface IDeckLinkNotification - DeckLink Notification interface */
+
+[
+    object,
+    uuid(0a1fb207-e215-441b-9b19-6fa1575946c5),
+    local,
+    helpstring("DeckLink Notification interface")
+] interface IDeckLinkNotification : IUnknown
+{
+    HRESULT Subscribe([in] BMDNotifications topic, [in] IDeckLinkNotificationCallback *theCallback);
+    HRESULT Unsubscribe([in] BMDNotifications topic, [in] IDeckLinkNotificationCallback *theCallback);
+};
+
+/* Interface IDeckLinkAttributes - DeckLink Attribute interface */
+
+[
+    object,
+    uuid(ABC11843-D966-44CB-96E2-A1CB5D3135C4),
+    local,
+    helpstring("DeckLink Attribute interface")
+] interface IDeckLinkAttributes : IUnknown
+{
+    HRESULT GetFlag([in] BMDDeckLinkAttributeID cfgID, [out] BOOL *value);
+    HRESULT GetInt([in] BMDDeckLinkAttributeID cfgID, [out] LONGLONG *value);
+    HRESULT GetFloat([in] BMDDeckLinkAttributeID cfgID, [out] double *value);
+    HRESULT GetString([in] BMDDeckLinkAttributeID cfgID, [out] BSTR *value);
+};
+
+/* Interface IDeckLinkKeyer - DeckLink Keyer interface */
+
+[
+    object,
+    uuid(89AFCAF5-65F8-421E-98F7-96FE5F5BFBA3),
+    local,
+    helpstring("DeckLink Keyer interface")
+] interface IDeckLinkKeyer : IUnknown
+{
+    HRESULT Enable([in] BOOL isExternal);
+    HRESULT SetLevel([in] unsigned char level);
+    HRESULT RampUp([in] unsigned long numberOfFrames);
+    HRESULT RampDown([in] unsigned long numberOfFrames);
+    HRESULT Disable(void);
+};
+
+/* Interface IDeckLinkVideoConversion - Created with CoCreateInstance(). */
+
+[
+    object,
+    uuid(3BBCB8A2-DA2C-42D9-B5D8-88083644E99A),
+    local,
+    helpstring("Created with CoCreateInstance().")
+] interface IDeckLinkVideoConversion : IUnknown
+{
+    HRESULT ConvertFrame([in] IDeckLinkVideoFrame* srcFrame, [in] IDeckLinkVideoFrame* dstFrame);
+};
+
+/* Interface IDeckLinkDeviceNotificationCallback - DeckLink device arrival/removal notification callbacks */
+
+[
+    object,
+    uuid(4997053B-0ADF-4CC8-AC70-7A50C4BE728F),
+    helpstring("DeckLink device arrival/removal notification callbacks")
+] interface IDeckLinkDeviceNotificationCallback : IUnknown
+{
+    HRESULT DeckLinkDeviceArrived([in] IDeckLink* deckLinkDevice);
+    HRESULT DeckLinkDeviceRemoved([in] IDeckLink* deckLinkDevice);
+};
+
+/* Interface IDeckLinkDiscovery - DeckLink device discovery */
+
+[
+    object,
+    uuid(CDBF631C-BC76-45FA-B44D-C55059BC6101),
+    helpstring("DeckLink device discovery")
+] interface IDeckLinkDiscovery : IUnknown
+{
+    HRESULT InstallDeviceNotifications([in] IDeckLinkDeviceNotificationCallback* deviceNotificationCallback);
+    HRESULT UninstallDeviceNotifications(void);
+};
+
+/* Coclasses */
+
+[
+    uuid(1F2E109A-8F4F-49E4-9203-135595CB6FA5),
+    helpstring("CDeckLinkIterator Class")
+] coclass CDeckLinkIterator
+{
+    [default] interface IDeckLinkIterator;
+};
+
+[
+    uuid(263CA19F-ED09-482E-9F9D-84005783A237),
+    helpstring("CDeckLinkAPIInformation Class")
+] coclass CDeckLinkAPIInformation
+{
+    [default] interface IDeckLinkAPIInformation;
+};
+
+[
+    uuid(F63E77C7-B655-4A4A-9AD0-3CA85D394343),
+    helpstring("CDeckLinkGLScreenPreviewHelper Class")
+] coclass CDeckLinkGLScreenPreviewHelper
+{
+    [default] interface IDeckLinkGLScreenPreviewHelper;
+};
+
+[
+    uuid(CC010023-E01D-4525-9D59-80C8AB3DC7A0),
+    helpstring("CDeckLinkDX9ScreenPreviewHelper Class")
+] coclass CDeckLinkDX9ScreenPreviewHelper
+{
+    [default] interface IDeckLinkDX9ScreenPreviewHelper;
+};
+
+[
+    uuid(7DBBBB11-5B7B-467D-AEA4-CEA468FD368C),
+    helpstring("CDeckLinkVideoConversion Class")
+] coclass CDeckLinkVideoConversion
+{
+    [default] interface IDeckLinkVideoConversion;
+};
+
+[
+    uuid(1073A05C-D885-47E9-B3C6-129B3F9F648B),
+    helpstring("CDeckLinkDiscovery Class")
+] coclass CDeckLinkDiscovery
+{
+    [default] interface IDeckLinkDiscovery;
+};
+
+};

+ 171 - 0
plugins/decklink/win/decklink-sdk/DeckLinkAPIConfiguration.idl

@@ -0,0 +1,171 @@
+/* -LICENSE-START-
+** Copyright (c) 2014 Blackmagic Design
+**
+** Permission is hereby granted, free of charge, to any person or organization
+** obtaining a copy of the software and accompanying documentation covered by
+** this license (the "Software") to use, reproduce, display, distribute,
+** execute, and transmit the Software, and to prepare derivative works of the
+** Software, and to permit third-parties to whom the Software is furnished to
+** do so, all subject to the following:
+**
+** The copyright notices in the Software and this entire statement, including
+** the above license grant, this restriction and the following disclaimer,
+** must be included in all copies of the Software, in whole or in part, and
+** all derivative works of the Software, unless such copies or derivative
+** works are solely in the form of machine-executable object code generated by
+** a source language processor.
+**
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+** DEALINGS IN THE SOFTWARE.
+** -LICENSE-END-
+*/
+
+
+#ifndef BMD_CONST
+    #if defined(_MSC_VER)
+        #define BMD_CONST __declspec(selectany) static const
+    #else
+        #define BMD_CONST static const
+    #endif
+#endif
+
+// Type Declarations
+
+
+// Enumeration Mapping
+
+cpp_quote("#if 0")
+cpp_quote("#endif")
+
+/* Enum BMDDeckLinkConfigurationID - DeckLink Configuration ID */
+
+typedef [v1_enum] enum	_BMDDeckLinkConfigurationID {
+
+    /* Serial port Flags */
+
+    bmdDeckLinkConfigSwapSerialRxTx                              = /* 'ssrt' */ 0x73737274,
+
+    /* Video Input/Output Flags */
+
+    bmdDeckLinkConfigUse1080pNotPsF                              = /* 'fpro' */ 0x6670726F,
+
+    /* Video Input/Output Integers */
+
+    bmdDeckLinkConfigHDMI3DPackingFormat                         = /* '3dpf' */ 0x33647066,
+    bmdDeckLinkConfigBypass                                      = /* 'byps' */ 0x62797073,
+    bmdDeckLinkConfigClockTimingAdjustment                       = /* 'ctad' */ 0x63746164,
+
+    /* Audio Input/Output Flags */
+
+    bmdDeckLinkConfigAnalogAudioConsumerLevels                   = /* 'aacl' */ 0x6161636C,
+
+    /* Video output flags */
+
+    bmdDeckLinkConfigFieldFlickerRemoval                         = /* 'fdfr' */ 0x66646672,
+    bmdDeckLinkConfigHD1080p24ToHD1080i5994Conversion            = /* 'to59' */ 0x746F3539,
+    bmdDeckLinkConfig444SDIVideoOutput                           = /* '444o' */ 0x3434346F,
+    bmdDeckLinkConfigSingleLinkVideoOutput                       = /* 'sglo' */ 0x73676C6F,
+    bmdDeckLinkConfigBlackVideoOutputDuringCapture               = /* 'bvoc' */ 0x62766F63,
+    bmdDeckLinkConfigLowLatencyVideoOutput                       = /* 'llvo' */ 0x6C6C766F,
+
+    /* Video Output Integers */
+
+    bmdDeckLinkConfigVideoOutputConnection                       = /* 'vocn' */ 0x766F636E,
+    bmdDeckLinkConfigVideoOutputConversionMode                   = /* 'vocm' */ 0x766F636D,
+    bmdDeckLinkConfigAnalogVideoOutputFlags                      = /* 'avof' */ 0x61766F66,
+    bmdDeckLinkConfigReferenceInputTimingOffset                  = /* 'glot' */ 0x676C6F74,
+    bmdDeckLinkConfigVideoOutputIdleOperation                    = /* 'voio' */ 0x766F696F,
+    bmdDeckLinkConfigDefaultVideoOutputMode                      = /* 'dvom' */ 0x64766F6D,
+    bmdDeckLinkConfigDefaultVideoOutputModeFlags                 = /* 'dvof' */ 0x64766F66,
+
+    /* Video Output Floats */
+
+    bmdDeckLinkConfigVideoOutputComponentLumaGain                = /* 'oclg' */ 0x6F636C67,
+    bmdDeckLinkConfigVideoOutputComponentChromaBlueGain          = /* 'occb' */ 0x6F636362,
+    bmdDeckLinkConfigVideoOutputComponentChromaRedGain           = /* 'occr' */ 0x6F636372,
+    bmdDeckLinkConfigVideoOutputCompositeLumaGain                = /* 'oilg' */ 0x6F696C67,
+    bmdDeckLinkConfigVideoOutputCompositeChromaGain              = /* 'oicg' */ 0x6F696367,
+    bmdDeckLinkConfigVideoOutputSVideoLumaGain                   = /* 'oslg' */ 0x6F736C67,
+    bmdDeckLinkConfigVideoOutputSVideoChromaGain                 = /* 'oscg' */ 0x6F736367,
+
+    /* Video Input Flags */
+
+    bmdDeckLinkConfigVideoInputScanning                          = /* 'visc' */ 0x76697363,	// Applicable to H264 Pro Recorder only
+    bmdDeckLinkConfigUseDedicatedLTCInput                        = /* 'dltc' */ 0x646C7463,	// Use timecode from LTC input instead of SDI stream
+
+    /* Video Input Integers */
+
+    bmdDeckLinkConfigVideoInputConnection                        = /* 'vicn' */ 0x7669636E,
+    bmdDeckLinkConfigAnalogVideoInputFlags                       = /* 'avif' */ 0x61766966,
+    bmdDeckLinkConfigVideoInputConversionMode                    = /* 'vicm' */ 0x7669636D,
+    bmdDeckLinkConfig32PulldownSequenceInitialTimecodeFrame      = /* 'pdif' */ 0x70646966,
+    bmdDeckLinkConfigVANCSourceLine1Mapping                      = /* 'vsl1' */ 0x76736C31,
+    bmdDeckLinkConfigVANCSourceLine2Mapping                      = /* 'vsl2' */ 0x76736C32,
+    bmdDeckLinkConfigVANCSourceLine3Mapping                      = /* 'vsl3' */ 0x76736C33,
+    bmdDeckLinkConfigCapturePassThroughMode                      = /* 'cptm' */ 0x6370746D,
+
+    /* Video Input Floats */
+
+    bmdDeckLinkConfigVideoInputComponentLumaGain                 = /* 'iclg' */ 0x69636C67,
+    bmdDeckLinkConfigVideoInputComponentChromaBlueGain           = /* 'iccb' */ 0x69636362,
+    bmdDeckLinkConfigVideoInputComponentChromaRedGain            = /* 'iccr' */ 0x69636372,
+    bmdDeckLinkConfigVideoInputCompositeLumaGain                 = /* 'iilg' */ 0x69696C67,
+    bmdDeckLinkConfigVideoInputCompositeChromaGain               = /* 'iicg' */ 0x69696367,
+    bmdDeckLinkConfigVideoInputSVideoLumaGain                    = /* 'islg' */ 0x69736C67,
+    bmdDeckLinkConfigVideoInputSVideoChromaGain                  = /* 'iscg' */ 0x69736367,
+
+    /* Audio Input Integers */
+
+    bmdDeckLinkConfigAudioInputConnection                        = /* 'aicn' */ 0x6169636E,
+
+    /* Audio Input Floats */
+
+    bmdDeckLinkConfigAnalogAudioInputScaleChannel1               = /* 'ais1' */ 0x61697331,
+    bmdDeckLinkConfigAnalogAudioInputScaleChannel2               = /* 'ais2' */ 0x61697332,
+    bmdDeckLinkConfigAnalogAudioInputScaleChannel3               = /* 'ais3' */ 0x61697333,
+    bmdDeckLinkConfigAnalogAudioInputScaleChannel4               = /* 'ais4' */ 0x61697334,
+    bmdDeckLinkConfigDigitalAudioInputScale                      = /* 'dais' */ 0x64616973,
+
+    /* Audio Output Integers */
+
+    bmdDeckLinkConfigAudioOutputAESAnalogSwitch                  = /* 'aoaa' */ 0x616F6161,
+
+    /* Audio Output Floats */
+
+    bmdDeckLinkConfigAnalogAudioOutputScaleChannel1              = /* 'aos1' */ 0x616F7331,
+    bmdDeckLinkConfigAnalogAudioOutputScaleChannel2              = /* 'aos2' */ 0x616F7332,
+    bmdDeckLinkConfigAnalogAudioOutputScaleChannel3              = /* 'aos3' */ 0x616F7333,
+    bmdDeckLinkConfigAnalogAudioOutputScaleChannel4              = /* 'aos4' */ 0x616F7334,
+    bmdDeckLinkConfigDigitalAudioOutputScale                     = /* 'daos' */ 0x64616F73
+} BMDDeckLinkConfigurationID;
+
+// Forward Declarations
+
+interface IDeckLinkConfiguration;
+
+/* Interface IDeckLinkConfiguration - DeckLink Configuration interface */
+
+[
+    object,
+    uuid(1E69FCF6-4203-4936-8076-2A9F4CFD50CB),
+    local,
+    helpstring("DeckLink Configuration interface")
+] interface IDeckLinkConfiguration : IUnknown
+{
+    HRESULT SetFlag([in] BMDDeckLinkConfigurationID cfgID, [in] BOOL value);
+    HRESULT GetFlag([in] BMDDeckLinkConfigurationID cfgID, [out] BOOL *value);
+    HRESULT SetInt([in] BMDDeckLinkConfigurationID cfgID, [in] LONGLONG value);
+    HRESULT GetInt([in] BMDDeckLinkConfigurationID cfgID, [out] LONGLONG *value);
+    HRESULT SetFloat([in] BMDDeckLinkConfigurationID cfgID, [in] double value);
+    HRESULT GetFloat([in] BMDDeckLinkConfigurationID cfgID, [out] double *value);
+    HRESULT SetString([in] BMDDeckLinkConfigurationID cfgID, [in] BSTR value);
+    HRESULT GetString([in] BMDDeckLinkConfigurationID cfgID, [out] BSTR *value);
+    HRESULT WriteConfigurationToPreferences(void);
+};
+
+/* Coclasses */

+ 202 - 0
plugins/decklink/win/decklink-sdk/DeckLinkAPIDeckControl.idl

@@ -0,0 +1,202 @@
+/* -LICENSE-START-
+** Copyright (c) 2014 Blackmagic Design
+**
+** Permission is hereby granted, free of charge, to any person or organization
+** obtaining a copy of the software and accompanying documentation covered by
+** this license (the "Software") to use, reproduce, display, distribute,
+** execute, and transmit the Software, and to prepare derivative works of the
+** Software, and to permit third-parties to whom the Software is furnished to
+** do so, all subject to the following:
+**
+** The copyright notices in the Software and this entire statement, including
+** the above license grant, this restriction and the following disclaimer,
+** must be included in all copies of the Software, in whole or in part, and
+** all derivative works of the Software, unless such copies or derivative
+** works are solely in the form of machine-executable object code generated by
+** a source language processor.
+**
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+** DEALINGS IN THE SOFTWARE.
+** -LICENSE-END-
+*/
+
+
+#ifndef BMD_CONST
+    #if defined(_MSC_VER)
+        #define BMD_CONST __declspec(selectany) static const
+    #else
+        #define BMD_CONST static const
+    #endif
+#endif
+
+// Type Declarations
+
+
+// Enumeration Mapping
+
+cpp_quote("typedef unsigned long BMDDeckControlStatusFlags;")
+cpp_quote("typedef unsigned long BMDDeckControlExportModeOpsFlags;")
+cpp_quote("#if 0")
+typedef enum _BMDDeckControlStatusFlags BMDDeckControlStatusFlags;
+typedef enum _BMDDeckControlExportModeOpsFlags BMDDeckControlExportModeOpsFlags;
+cpp_quote("#endif")
+
+/* Enum BMDDeckControlMode - DeckControl mode */
+
+typedef [v1_enum] enum	_BMDDeckControlMode {
+    bmdDeckControlNotOpened                                      = /* 'ntop' */ 0x6E746F70,
+    bmdDeckControlVTRControlMode                                 = /* 'vtrc' */ 0x76747263,
+    bmdDeckControlExportMode                                     = /* 'expm' */ 0x6578706D,
+    bmdDeckControlCaptureMode                                    = /* 'capm' */ 0x6361706D
+} BMDDeckControlMode;
+
+/* Enum BMDDeckControlEvent - DeckControl event */
+
+typedef [v1_enum] enum	_BMDDeckControlEvent {
+    bmdDeckControlAbortedEvent                                   = /* 'abte' */ 0x61627465,	// This event is triggered when a capture or edit-to-tape operation is aborted.
+
+    /* Export-To-Tape events */
+
+    bmdDeckControlPrepareForExportEvent                          = /* 'pfee' */ 0x70666565,	// This event is triggered a few frames before reaching the in-point. IDeckLinkInput::StartScheduledPlayback() should be called at this point.
+    bmdDeckControlExportCompleteEvent                            = /* 'exce' */ 0x65786365,	// This event is triggered a few frames after reaching the out-point. At this point, it is safe to stop playback.
+
+    /* Capture events */
+
+    bmdDeckControlPrepareForCaptureEvent                         = /* 'pfce' */ 0x70666365,	// This event is triggered a few frames before reaching the in-point. The serial timecode attached to IDeckLinkVideoInputFrames is now valid.
+    bmdDeckControlCaptureCompleteEvent                           = /* 'ccev' */ 0x63636576	// This event is triggered a few frames after reaching the out-point.
+} BMDDeckControlEvent;
+
+/* Enum BMDDeckControlVTRControlState - VTR Control state */
+
+typedef [v1_enum] enum	_BMDDeckControlVTRControlState {
+    bmdDeckControlNotInVTRControlMode                            = /* 'nvcm' */ 0x6E76636D,
+    bmdDeckControlVTRControlPlaying                              = /* 'vtrp' */ 0x76747270,
+    bmdDeckControlVTRControlRecording                            = /* 'vtrr' */ 0x76747272,
+    bmdDeckControlVTRControlStill                                = /* 'vtra' */ 0x76747261,
+    bmdDeckControlVTRControlShuttleForward                       = /* 'vtsf' */ 0x76747366,
+    bmdDeckControlVTRControlShuttleReverse                       = /* 'vtsr' */ 0x76747372,
+    bmdDeckControlVTRControlJogForward                           = /* 'vtjf' */ 0x76746A66,
+    bmdDeckControlVTRControlJogReverse                           = /* 'vtjr' */ 0x76746A72,
+    bmdDeckControlVTRControlStopped                              = /* 'vtro' */ 0x7674726F
+} BMDDeckControlVTRControlState;
+
+/* Enum BMDDeckControlStatusFlags - Deck Control status flags */
+
+[v1_enum] enum	_BMDDeckControlStatusFlags {
+    bmdDeckControlStatusDeckConnected                            = 1 << 0,
+    bmdDeckControlStatusRemoteMode                               = 1 << 1,
+    bmdDeckControlStatusRecordInhibited                          = 1 << 2,
+    bmdDeckControlStatusCassetteOut                              = 1 << 3
+};
+
+/* Enum BMDDeckControlExportModeOpsFlags - Export mode flags */
+
+[v1_enum] enum	_BMDDeckControlExportModeOpsFlags {
+    bmdDeckControlExportModeInsertVideo                          = 1 << 0,
+    bmdDeckControlExportModeInsertAudio1                         = 1 << 1,
+    bmdDeckControlExportModeInsertAudio2                         = 1 << 2,
+    bmdDeckControlExportModeInsertAudio3                         = 1 << 3,
+    bmdDeckControlExportModeInsertAudio4                         = 1 << 4,
+    bmdDeckControlExportModeInsertAudio5                         = 1 << 5,
+    bmdDeckControlExportModeInsertAudio6                         = 1 << 6,
+    bmdDeckControlExportModeInsertAudio7                         = 1 << 7,
+    bmdDeckControlExportModeInsertAudio8                         = 1 << 8,
+    bmdDeckControlExportModeInsertAudio9                         = 1 << 9,
+    bmdDeckControlExportModeInsertAudio10                        = 1 << 10,
+    bmdDeckControlExportModeInsertAudio11                        = 1 << 11,
+    bmdDeckControlExportModeInsertAudio12                        = 1 << 12,
+    bmdDeckControlExportModeInsertTimeCode                       = 1 << 13,
+    bmdDeckControlExportModeInsertAssemble                       = 1 << 14,
+    bmdDeckControlExportModeInsertPreview                        = 1 << 15,
+    bmdDeckControlUseManualExport                                = 1 << 16
+};
+
+/* Enum BMDDeckControlError - Deck Control error */
+
+typedef [v1_enum] enum	_BMDDeckControlError {
+    bmdDeckControlNoError                                        = /* 'noer' */ 0x6E6F6572,
+    bmdDeckControlModeError                                      = /* 'moer' */ 0x6D6F6572,
+    bmdDeckControlMissedInPointError                             = /* 'mier' */ 0x6D696572,
+    bmdDeckControlDeckTimeoutError                               = /* 'dter' */ 0x64746572,
+    bmdDeckControlCommandFailedError                             = /* 'cfer' */ 0x63666572,
+    bmdDeckControlDeviceAlreadyOpenedError                       = /* 'dalo' */ 0x64616C6F,
+    bmdDeckControlFailedToOpenDeviceError                        = /* 'fder' */ 0x66646572,
+    bmdDeckControlInLocalModeError                               = /* 'lmer' */ 0x6C6D6572,
+    bmdDeckControlEndOfTapeError                                 = /* 'eter' */ 0x65746572,
+    bmdDeckControlUserAbortError                                 = /* 'uaer' */ 0x75616572,
+    bmdDeckControlNoTapeInDeckError                              = /* 'nter' */ 0x6E746572,
+    bmdDeckControlNoVideoFromCardError                           = /* 'nvfc' */ 0x6E766663,
+    bmdDeckControlNoCommunicationError                           = /* 'ncom' */ 0x6E636F6D,
+    bmdDeckControlBufferTooSmallError                            = /* 'btsm' */ 0x6274736D,
+    bmdDeckControlBadChecksumError                               = /* 'chks' */ 0x63686B73,
+    bmdDeckControlUnknownError                                   = /* 'uner' */ 0x756E6572
+} BMDDeckControlError;
+
+// Forward Declarations
+
+interface IDeckLinkDeckControlStatusCallback;
+interface IDeckLinkDeckControl;
+
+/* Interface IDeckLinkDeckControlStatusCallback - Deck control state change callback. */
+
+[
+    object,
+    uuid(53436FFB-B434-4906-BADC-AE3060FFE8EF),
+    helpstring("Deck control state change callback.")
+] interface IDeckLinkDeckControlStatusCallback : IUnknown
+{
+    HRESULT TimecodeUpdate([in] BMDTimecodeBCD currentTimecode);
+    HRESULT VTRControlStateChanged([in] BMDDeckControlVTRControlState newState, [in] BMDDeckControlError error);
+    HRESULT DeckControlEventReceived([in] BMDDeckControlEvent event, [in] BMDDeckControlError error);
+    HRESULT DeckControlStatusChanged([in] BMDDeckControlStatusFlags flags, [in] unsigned long mask);
+};
+
+/* Interface IDeckLinkDeckControl - Deck Control main interface */
+
+[
+    object,
+    uuid(8E1C3ACE-19C7-4E00-8B92-D80431D958BE),
+    helpstring("Deck Control main interface")
+] interface IDeckLinkDeckControl : IUnknown
+{
+    HRESULT Open([in] BMDTimeScale timeScale, [in] BMDTimeValue timeValue, [in] BOOL timecodeIsDropFrame, [out] BMDDeckControlError *error);
+    HRESULT Close([in] BOOL standbyOn);
+    HRESULT GetCurrentState([out] BMDDeckControlMode *mode, [out] BMDDeckControlVTRControlState *vtrControlState, [out] BMDDeckControlStatusFlags *flags);
+    HRESULT SetStandby([in] BOOL standbyOn);
+    HRESULT SendCommand([in] unsigned char *inBuffer, [in] unsigned long inBufferSize, [out] unsigned char *outBuffer, [out] unsigned long *outDataSize, [in] unsigned long outBufferSize, [out] BMDDeckControlError *error);
+    HRESULT Play([out] BMDDeckControlError *error);
+    HRESULT Stop([out] BMDDeckControlError *error);
+    HRESULT TogglePlayStop([out] BMDDeckControlError *error);
+    HRESULT Eject([out] BMDDeckControlError *error);
+    HRESULT GoToTimecode([in] BMDTimecodeBCD timecode, [out] BMDDeckControlError *error);
+    HRESULT FastForward([in] BOOL viewTape, [out] BMDDeckControlError *error);
+    HRESULT Rewind([in] BOOL viewTape, [out] BMDDeckControlError *error);
+    HRESULT StepForward([out] BMDDeckControlError *error);
+    HRESULT StepBack([out] BMDDeckControlError *error);
+    HRESULT Jog([in] double rate, [out] BMDDeckControlError *error);
+    HRESULT Shuttle([in] double rate, [out] BMDDeckControlError *error);
+    HRESULT GetTimecodeString([out] BSTR *currentTimeCode, [out] BMDDeckControlError *error);
+    HRESULT GetTimecode([out] IDeckLinkTimecode **currentTimecode, [out] BMDDeckControlError *error);
+    HRESULT GetTimecodeBCD([out] BMDTimecodeBCD *currentTimecode, [out] BMDDeckControlError *error);
+    HRESULT SetPreroll([in] unsigned long prerollSeconds);
+    HRESULT GetPreroll([out] unsigned long *prerollSeconds);
+    HRESULT SetExportOffset([in] long exportOffsetFields);
+    HRESULT GetExportOffset([out] long *exportOffsetFields);
+    HRESULT GetManualExportOffset([out] long *deckManualExportOffsetFields);
+    HRESULT SetCaptureOffset([in] long captureOffsetFields);
+    HRESULT GetCaptureOffset([out] long *captureOffsetFields);
+    HRESULT StartExport([in] BMDTimecodeBCD inTimecode, [in] BMDTimecodeBCD outTimecode, [in] BMDDeckControlExportModeOpsFlags exportModeOps, [out] BMDDeckControlError *error);
+    HRESULT StartCapture([in] BOOL useVITC, [in] BMDTimecodeBCD inTimecode, [in] BMDTimecodeBCD outTimecode, [out] BMDDeckControlError *error);
+    HRESULT GetDeviceID([out] unsigned short *deviceId, [out] BMDDeckControlError *error);
+    HRESULT Abort(void);
+    HRESULT CrashRecordStart([out] BMDDeckControlError *error);
+    HRESULT CrashRecordStop([out] BMDDeckControlError *error);
+    HRESULT SetCallback([in] IDeckLinkDeckControlStatusCallback *callback);
+};
+
+/* Coclasses */

+ 61 - 0
plugins/decklink/win/decklink-sdk/DeckLinkAPIDiscovery.idl

@@ -0,0 +1,61 @@
+/* -LICENSE-START-
+** Copyright (c) 2014 Blackmagic Design
+**
+** Permission is hereby granted, free of charge, to any person or organization
+** obtaining a copy of the software and accompanying documentation covered by
+** this license (the "Software") to use, reproduce, display, distribute,
+** execute, and transmit the Software, and to prepare derivative works of the
+** Software, and to permit third-parties to whom the Software is furnished to
+** do so, all subject to the following:
+**
+** The copyright notices in the Software and this entire statement, including
+** the above license grant, this restriction and the following disclaimer,
+** must be included in all copies of the Software, in whole or in part, and
+** all derivative works of the Software, unless such copies or derivative
+** works are solely in the form of machine-executable object code generated by
+** a source language processor.
+**
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+** DEALINGS IN THE SOFTWARE.
+** -LICENSE-END-
+*/
+
+
+#ifndef BMD_CONST
+    #if defined(_MSC_VER)
+        #define BMD_CONST __declspec(selectany) static const
+    #else
+        #define BMD_CONST static const
+    #endif
+#endif
+
+// Type Declarations
+
+
+// Enumeration Mapping
+
+cpp_quote("#if 0")
+cpp_quote("#endif")
+
+// Forward Declarations
+
+interface IDeckLink;
+
+/* Interface IDeckLink - represents a DeckLink device */
+
+[
+    object,
+    uuid(C418FBDD-0587-48ED-8FE5-640F0A14AF91),
+    helpstring("represents a DeckLink device")
+] interface IDeckLink : IUnknown
+{
+    HRESULT GetModelName([out] BSTR *modelName);
+    HRESULT GetDisplayName([out] BSTR *displayName);
+};
+
+/* Coclasses */

+ 178 - 0
plugins/decklink/win/decklink-sdk/DeckLinkAPIModes.idl

@@ -0,0 +1,178 @@
+/* -LICENSE-START-
+** Copyright (c) 2014 Blackmagic Design
+**
+** Permission is hereby granted, free of charge, to any person or organization
+** obtaining a copy of the software and accompanying documentation covered by
+** this license (the "Software") to use, reproduce, display, distribute,
+** execute, and transmit the Software, and to prepare derivative works of the
+** Software, and to permit third-parties to whom the Software is furnished to
+** do so, all subject to the following:
+**
+** The copyright notices in the Software and this entire statement, including
+** the above license grant, this restriction and the following disclaimer,
+** must be included in all copies of the Software, in whole or in part, and
+** all derivative works of the Software, unless such copies or derivative
+** works are solely in the form of machine-executable object code generated by
+** a source language processor.
+**
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+** DEALINGS IN THE SOFTWARE.
+** -LICENSE-END-
+*/
+
+
+#ifndef BMD_CONST
+    #if defined(_MSC_VER)
+        #define BMD_CONST __declspec(selectany) static const
+    #else
+        #define BMD_CONST static const
+    #endif
+#endif
+
+// Type Declarations
+
+
+// Enumeration Mapping
+
+cpp_quote("typedef unsigned long BMDDisplayModeFlags;")
+cpp_quote("#if 0")
+typedef enum _BMDDisplayModeFlags BMDDisplayModeFlags;
+cpp_quote("#endif")
+
+/* Enum BMDDisplayMode - Video display modes */
+
+typedef [v1_enum] enum	_BMDDisplayMode {
+
+    /* SD Modes */
+
+    bmdModeNTSC                                                  = /* 'ntsc' */ 0x6E747363,
+    bmdModeNTSC2398                                              = /* 'nt23' */ 0x6E743233,	// 3:2 pulldown
+    bmdModePAL                                                   = /* 'pal ' */ 0x70616C20,
+    bmdModeNTSCp                                                 = /* 'ntsp' */ 0x6E747370,
+    bmdModePALp                                                  = /* 'palp' */ 0x70616C70,
+
+    /* HD 1080 Modes */
+
+    bmdModeHD1080p2398                                           = /* '23ps' */ 0x32337073,
+    bmdModeHD1080p24                                             = /* '24ps' */ 0x32347073,
+    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.
+
+    /* HD 720 Modes */
+
+    bmdModeHD720p50                                              = /* 'hp50' */ 0x68703530,
+    bmdModeHD720p5994                                            = /* 'hp59' */ 0x68703539,
+    bmdModeHD720p60                                              = /* 'hp60' */ 0x68703630,
+
+    /* 2k Modes */
+
+    bmdMode2k2398                                                = /* '2k23' */ 0x326B3233,
+    bmdMode2k24                                                  = /* '2k24' */ 0x326B3234,
+    bmdMode2k25                                                  = /* '2k25' */ 0x326B3235,
+
+    /* DCI Modes (output only) */
+
+    bmdMode2kDCI2398                                             = /* '2d23' */ 0x32643233,
+    bmdMode2kDCI24                                               = /* '2d24' */ 0x32643234,
+    bmdMode2kDCI25                                               = /* '2d25' */ 0x32643235,
+
+    /* 4k Modes */
+
+    bmdMode4K2160p2398                                           = /* '4k23' */ 0x346B3233,
+    bmdMode4K2160p24                                             = /* '4k24' */ 0x346B3234,
+    bmdMode4K2160p25                                             = /* '4k25' */ 0x346B3235,
+    bmdMode4K2160p2997                                           = /* '4k29' */ 0x346B3239,
+    bmdMode4K2160p30                                             = /* '4k30' */ 0x346B3330,
+    bmdMode4K2160p50                                             = /* '4k50' */ 0x346B3530,
+    bmdMode4K2160p5994                                           = /* '4k59' */ 0x346B3539,
+    bmdMode4K2160p60                                             = /* '4k60' */ 0x346B3630,
+
+    /* DCI Modes (output only) */
+
+    bmdMode4kDCI2398                                             = /* '4d23' */ 0x34643233,
+    bmdMode4kDCI24                                               = /* '4d24' */ 0x34643234,
+    bmdMode4kDCI25                                               = /* '4d25' */ 0x34643235,
+
+    /* Special Modes */
+
+    bmdModeUnknown                                               = /* 'iunk' */ 0x69756E6B
+} BMDDisplayMode;
+
+/* Enum BMDFieldDominance - Video field dominance */
+
+typedef [v1_enum] enum	_BMDFieldDominance {
+    bmdUnknownFieldDominance                                     = 0,
+    bmdLowerFieldFirst                                           = /* 'lowr' */ 0x6C6F7772,
+    bmdUpperFieldFirst                                           = /* 'uppr' */ 0x75707072,
+    bmdProgressiveFrame                                          = /* 'prog' */ 0x70726F67,
+    bmdProgressiveSegmentedFrame                                 = /* 'psf ' */ 0x70736620
+} BMDFieldDominance;
+
+/* Enum BMDPixelFormat - Video pixel formats supported for output/input */
+
+typedef [v1_enum] enum	_BMDPixelFormat {
+    bmdFormat8BitYUV                                             = /* '2vuy' */ 0x32767579,
+    bmdFormat10BitYUV                                            = /* 'v210' */ 0x76323130,
+    bmdFormat8BitARGB                                            = 32,
+    bmdFormat8BitBGRA                                            = /* 'BGRA' */ 0x42475241,
+    bmdFormat10BitRGB                                            = /* 'r210' */ 0x72323130,	// Big-endian RGB 10-bit per component with SMPTE video levels (64-960). Packed as 2:10:10:10
+    bmdFormat12BitRGB                                            = /* 'R12B' */ 0x52313242,	// Big-endian RGB 12-bit per component with full range (0-4095). Packed as 12-bit per component
+    bmdFormat12BitRGBLE                                          = /* 'R12L' */ 0x5231324C,	// Little-endian RGB 12-bit per component with full range (0-4095). Packed as 12-bit per component
+    bmdFormat10BitRGBXLE                                         = /* 'R10l' */ 0x5231306C,	// Little-endian 10-bit RGB with SMPTE video levels (64-940)
+    bmdFormat10BitRGBX                                           = /* 'R10b' */ 0x52313062	// Big-endian 10-bit RGB with SMPTE video levels (64-940)
+} BMDPixelFormat;
+
+/* Enum BMDDisplayModeFlags - Flags to describe the characteristics of an IDeckLinkDisplayMode. */
+
+[v1_enum] enum	_BMDDisplayModeFlags {
+    bmdDisplayModeSupports3D                                     = 1 << 0,
+    bmdDisplayModeColorspaceRec601                               = 1 << 1,
+    bmdDisplayModeColorspaceRec709                               = 1 << 2
+};
+
+// Forward Declarations
+
+interface IDeckLinkDisplayModeIterator;
+interface IDeckLinkDisplayMode;
+
+/* Interface IDeckLinkDisplayModeIterator - enumerates over supported input/output display modes. */
+
+[
+    object,
+    uuid(9C88499F-F601-4021-B80B-032E4EB41C35),
+    helpstring("enumerates over supported input/output display modes.")
+] interface IDeckLinkDisplayModeIterator : IUnknown
+{
+    HRESULT Next([out] IDeckLinkDisplayMode **deckLinkDisplayMode);
+};
+
+/* Interface IDeckLinkDisplayMode - represents a display mode */
+
+[
+    object,
+    uuid(3EB2C1AB-0A3D-4523-A3AD-F40D7FB14E78),
+    helpstring("represents a display mode")
+] interface IDeckLinkDisplayMode : IUnknown
+{
+    HRESULT GetName([out] BSTR *name);
+    BMDDisplayMode GetDisplayMode(void);
+    long GetWidth(void);
+    long GetHeight(void);
+    HRESULT GetFrameRate([out] BMDTimeValue *frameDuration, [out] BMDTimeScale *timeScale);
+    BMDFieldDominance GetFieldDominance(void);
+    BMDDisplayModeFlags GetFlags(void);
+};
+
+/* Coclasses */

+ 360 - 0
plugins/decklink/win/decklink-sdk/DeckLinkAPIStreaming.idl

@@ -0,0 +1,360 @@
+/* -LICENSE-START-
+** Copyright (c) 2014 Blackmagic Design
+**
+** Permission is hereby granted, free of charge, to any person or organization
+** obtaining a copy of the software and accompanying documentation covered by
+** this license (the "Software") to use, reproduce, display, distribute,
+** execute, and transmit the Software, and to prepare derivative works of the
+** Software, and to permit third-parties to whom the Software is furnished to
+** do so, all subject to the following:
+**
+** The copyright notices in the Software and this entire statement, including
+** the above license grant, this restriction and the following disclaimer,
+** must be included in all copies of the Software, in whole or in part, and
+** all derivative works of the Software, unless such copies or derivative
+** works are solely in the form of machine-executable object code generated by
+** a source language processor.
+**
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+** DEALINGS IN THE SOFTWARE.
+** -LICENSE-END-
+*/
+
+
+#ifndef BMD_CONST
+    #if defined(_MSC_VER)
+        #define BMD_CONST __declspec(selectany) static const
+    #else
+        #define BMD_CONST static const
+    #endif
+#endif
+
+// Type Declarations
+
+
+// Enumeration Mapping
+
+cpp_quote("#if 0")
+cpp_quote("#endif")
+
+/* Enum BMDStreamingDeviceMode - Device modes */
+
+typedef [v1_enum] enum	_BMDStreamingDeviceMode {
+    bmdStreamingDeviceIdle                                       = /* 'idle' */ 0x69646C65,
+    bmdStreamingDeviceEncoding                                   = /* 'enco' */ 0x656E636F,
+    bmdStreamingDeviceStopping                                   = /* 'stop' */ 0x73746F70,
+    bmdStreamingDeviceUnknown                                    = /* 'munk' */ 0x6D756E6B
+} BMDStreamingDeviceMode;
+
+/* Enum BMDStreamingEncodingFrameRate - Encoded frame rates */
+
+typedef [v1_enum] enum	_BMDStreamingEncodingFrameRate {
+
+    /* Interlaced rates */
+
+    bmdStreamingEncodedFrameRate50i                              = /* 'e50i' */ 0x65353069,
+    bmdStreamingEncodedFrameRate5994i                            = /* 'e59i' */ 0x65353969,
+    bmdStreamingEncodedFrameRate60i                              = /* 'e60i' */ 0x65363069,
+
+    /* Progressive rates */
+
+    bmdStreamingEncodedFrameRate2398p                            = /* 'e23p' */ 0x65323370,
+    bmdStreamingEncodedFrameRate24p                              = /* 'e24p' */ 0x65323470,
+    bmdStreamingEncodedFrameRate25p                              = /* 'e25p' */ 0x65323570,
+    bmdStreamingEncodedFrameRate2997p                            = /* 'e29p' */ 0x65323970,
+    bmdStreamingEncodedFrameRate30p                              = /* 'e30p' */ 0x65333070,
+    bmdStreamingEncodedFrameRate50p                              = /* 'e50p' */ 0x65353070,
+    bmdStreamingEncodedFrameRate5994p                            = /* 'e59p' */ 0x65353970,
+    bmdStreamingEncodedFrameRate60p                              = /* 'e60p' */ 0x65363070
+} BMDStreamingEncodingFrameRate;
+
+/* Enum BMDStreamingEncodingSupport - Output encoding mode supported flag */
+
+typedef [v1_enum] enum	_BMDStreamingEncodingSupport {
+    bmdStreamingEncodingModeNotSupported                         = 0,
+    bmdStreamingEncodingModeSupported,
+    bmdStreamingEncodingModeSupportedWithChanges
+} BMDStreamingEncodingSupport;
+
+/* Enum BMDStreamingVideoCodec - Video codecs */
+
+typedef [v1_enum] enum	_BMDStreamingVideoCodec {
+    bmdStreamingVideoCodecH264                                   = /* 'H264' */ 0x48323634
+} BMDStreamingVideoCodec;
+
+/* Enum BMDStreamingH264Profile - H264 encoding profile */
+
+typedef [v1_enum] enum	_BMDStreamingH264Profile {
+    bmdStreamingH264ProfileHigh                                  = /* 'high' */ 0x68696768,
+    bmdStreamingH264ProfileMain                                  = /* 'main' */ 0x6D61696E,
+    bmdStreamingH264ProfileBaseline                              = /* 'base' */ 0x62617365
+} BMDStreamingH264Profile;
+
+/* Enum BMDStreamingH264Level - H264 encoding level */
+
+typedef [v1_enum] enum	_BMDStreamingH264Level {
+    bmdStreamingH264Level12                                      = /* 'lv12' */ 0x6C763132,
+    bmdStreamingH264Level13                                      = /* 'lv13' */ 0x6C763133,
+    bmdStreamingH264Level2                                       = /* 'lv2 ' */ 0x6C763220,
+    bmdStreamingH264Level21                                      = /* 'lv21' */ 0x6C763231,
+    bmdStreamingH264Level22                                      = /* 'lv22' */ 0x6C763232,
+    bmdStreamingH264Level3                                       = /* 'lv3 ' */ 0x6C763320,
+    bmdStreamingH264Level31                                      = /* 'lv31' */ 0x6C763331,
+    bmdStreamingH264Level32                                      = /* 'lv32' */ 0x6C763332,
+    bmdStreamingH264Level4                                       = /* 'lv4 ' */ 0x6C763420,
+    bmdStreamingH264Level41                                      = /* 'lv41' */ 0x6C763431,
+    bmdStreamingH264Level42                                      = /* 'lv42' */ 0x6C763432
+} BMDStreamingH264Level;
+
+/* Enum BMDStreamingH264EntropyCoding - H264 entropy coding */
+
+typedef [v1_enum] enum	_BMDStreamingH264EntropyCoding {
+    bmdStreamingH264EntropyCodingCAVLC                           = /* 'EVLC' */ 0x45564C43,
+    bmdStreamingH264EntropyCodingCABAC                           = /* 'EBAC' */ 0x45424143
+} BMDStreamingH264EntropyCoding;
+
+/* Enum BMDStreamingAudioCodec - Audio codecs */
+
+typedef [v1_enum] enum	_BMDStreamingAudioCodec {
+    bmdStreamingAudioCodecAAC                                    = /* 'AAC ' */ 0x41414320
+} BMDStreamingAudioCodec;
+
+/* Enum BMDStreamingEncodingModePropertyID - Encoding mode properties */
+
+typedef [v1_enum] enum	_BMDStreamingEncodingModePropertyID {
+
+    /* Integers, Video Properties */
+
+    bmdStreamingEncodingPropertyVideoFrameRate                   = /* 'vfrt' */ 0x76667274,	// Uses values of type BMDStreamingEncodingFrameRate
+    bmdStreamingEncodingPropertyVideoBitRateKbps                 = /* 'vbrt' */ 0x76627274,
+
+    /* Integers, H264 Properties */
+
+    bmdStreamingEncodingPropertyH264Profile                      = /* 'hprf' */ 0x68707266,
+    bmdStreamingEncodingPropertyH264Level                        = /* 'hlvl' */ 0x686C766C,
+    bmdStreamingEncodingPropertyH264EntropyCoding                = /* 'hent' */ 0x68656E74,
+
+    /* Flags, H264 Properties */
+
+    bmdStreamingEncodingPropertyH264HasBFrames                   = /* 'hBfr' */ 0x68426672,
+
+    /* Integers, Audio Properties */
+
+    bmdStreamingEncodingPropertyAudioCodec                       = /* 'acdc' */ 0x61636463,
+    bmdStreamingEncodingPropertyAudioSampleRate                  = /* 'asrt' */ 0x61737274,
+    bmdStreamingEncodingPropertyAudioChannelCount                = /* 'achc' */ 0x61636863,
+    bmdStreamingEncodingPropertyAudioBitRateKbps                 = /* 'abrt' */ 0x61627274
+} BMDStreamingEncodingModePropertyID;
+
+// Forward Declarations
+
+interface IBMDStreamingDeviceNotificationCallback;
+interface IBMDStreamingH264InputCallback;
+interface IBMDStreamingDiscovery;
+interface IBMDStreamingVideoEncodingMode;
+interface IBMDStreamingMutableVideoEncodingMode;
+interface IBMDStreamingVideoEncodingModePresetIterator;
+interface IBMDStreamingDeviceInput;
+interface IBMDStreamingH264NALPacket;
+interface IBMDStreamingAudioPacket;
+interface IBMDStreamingMPEG2TSPacket;
+interface IBMDStreamingH264NALParser;
+
+/* Interface IBMDStreamingDeviceNotificationCallback - Device notification callbacks. */
+
+[
+    object,
+    uuid(F9531D64-3305-4B29-A387-7F74BB0D0E84),
+    helpstring("Device notification callbacks.")
+] interface IBMDStreamingDeviceNotificationCallback : IUnknown
+{
+    HRESULT StreamingDeviceArrived([in] IDeckLink* device);
+    HRESULT StreamingDeviceRemoved([in] IDeckLink* device);
+    HRESULT StreamingDeviceModeChanged([in] IDeckLink* device, [in] BMDStreamingDeviceMode mode);
+};
+
+/* Interface IBMDStreamingH264InputCallback - H264 input callbacks. */
+
+[
+    object,
+    uuid(823C475F-55AE-46F9-890C-537CC5CEDCCA),
+    helpstring("H264 input callbacks.")
+] interface IBMDStreamingH264InputCallback : IUnknown
+{
+    HRESULT H264NALPacketArrived([in] IBMDStreamingH264NALPacket* nalPacket);
+    HRESULT H264AudioPacketArrived([in] IBMDStreamingAudioPacket* audioPacket);
+    HRESULT MPEG2TSPacketArrived([in] IBMDStreamingMPEG2TSPacket* tsPacket);
+    HRESULT H264VideoInputConnectorScanningChanged(void);
+    HRESULT H264VideoInputConnectorChanged(void);
+    HRESULT H264VideoInputModeChanged(void);
+};
+
+/* Interface IBMDStreamingDiscovery - Installs device notifications */
+
+[
+    object,
+    uuid(2C837444-F989-4D87-901A-47C8A36D096D),
+    helpstring("Installs device notifications")
+] interface IBMDStreamingDiscovery : IUnknown
+{
+    HRESULT InstallDeviceNotifications([in] IBMDStreamingDeviceNotificationCallback* theCallback);
+    HRESULT UninstallDeviceNotifications(void);
+};
+
+/* Interface IBMDStreamingVideoEncodingMode - Represents an encoded video mode. */
+
+[
+    object,
+    uuid(1AB8035B-CD13-458D-B6DF-5E8F7C2141D9),
+    helpstring("Represents an encoded video mode.")
+] interface IBMDStreamingVideoEncodingMode : IUnknown
+{
+    HRESULT GetName([out] BSTR *name);
+    unsigned int GetPresetID(void);
+    unsigned int GetSourcePositionX(void);
+    unsigned int GetSourcePositionY(void);
+    unsigned int GetSourceWidth(void);
+    unsigned int GetSourceHeight(void);
+    unsigned int GetDestWidth(void);
+    unsigned int GetDestHeight(void);
+    HRESULT GetFlag([in] BMDStreamingEncodingModePropertyID cfgID, [out] BOOL* value);
+    HRESULT GetInt([in] BMDStreamingEncodingModePropertyID cfgID, [out] LONGLONG* value);
+    HRESULT GetFloat([in] BMDStreamingEncodingModePropertyID cfgID, [out] double* value);
+    HRESULT GetString([in] BMDStreamingEncodingModePropertyID cfgID, [out] BSTR *value);
+    HRESULT CreateMutableVideoEncodingMode([out] IBMDStreamingMutableVideoEncodingMode** newEncodingMode); // Creates a mutable copy of the encoding mode
+};
+
+/* Interface IBMDStreamingMutableVideoEncodingMode - Represents a mutable encoded video mode. */
+
+[
+    object,
+    uuid(19BF7D90-1E0A-400D-B2C6-FFC4E78AD49D),
+    helpstring("Represents a mutable encoded video mode.")
+] interface IBMDStreamingMutableVideoEncodingMode : IBMDStreamingVideoEncodingMode
+{
+    HRESULT SetSourceRect([in] unsigned long posX, [in] unsigned long posY, [in] unsigned long width, [in] unsigned long height);
+    HRESULT SetDestSize([in] unsigned long width, [in] unsigned long height);
+    HRESULT SetFlag([in] BMDStreamingEncodingModePropertyID cfgID, [in] BOOL value);
+    HRESULT SetInt([in] BMDStreamingEncodingModePropertyID cfgID, [in] LONGLONG value);
+    HRESULT SetFloat([in] BMDStreamingEncodingModePropertyID cfgID, [in] double value);
+    HRESULT SetString([in] BMDStreamingEncodingModePropertyID cfgID, [in] BSTR value);
+};
+
+/* Interface IBMDStreamingVideoEncodingModePresetIterator - Enumerates encoding mode presets */
+
+[
+    object,
+    uuid(7AC731A3-C950-4AD0-804A-8377AA51C6C4),
+    helpstring("Enumerates encoding mode presets")
+] interface IBMDStreamingVideoEncodingModePresetIterator : IUnknown
+{
+    HRESULT Next([out] IBMDStreamingVideoEncodingMode** videoEncodingMode);
+};
+
+/* Interface IBMDStreamingDeviceInput - Created by QueryInterface from IDeckLink */
+
+[
+    object,
+    uuid(24B6B6EC-1727-44BB-9818-34FF086ACF98),
+    helpstring("Created by QueryInterface from IDeckLink")
+] interface IBMDStreamingDeviceInput : IUnknown
+{
+
+    /* Input modes */
+
+    HRESULT DoesSupportVideoInputMode([in] BMDDisplayMode inputMode, [out] BOOL* result);
+    HRESULT GetVideoInputModeIterator([out] IDeckLinkDisplayModeIterator** iterator);
+    HRESULT SetVideoInputMode([in] BMDDisplayMode inputMode);
+    HRESULT GetCurrentDetectedVideoInputMode([out] BMDDisplayMode* detectedMode);
+
+    /* Capture modes */
+
+    HRESULT GetVideoEncodingMode([out] IBMDStreamingVideoEncodingMode** encodingMode);
+    HRESULT GetVideoEncodingModePresetIterator([in] BMDDisplayMode inputMode, [out] IBMDStreamingVideoEncodingModePresetIterator** iterator);
+    HRESULT DoesSupportVideoEncodingMode([in] BMDDisplayMode inputMode, [in] IBMDStreamingVideoEncodingMode* encodingMode, [out] BMDStreamingEncodingSupport* result, [out] IBMDStreamingVideoEncodingMode** changedEncodingMode);
+    HRESULT SetVideoEncodingMode([in] IBMDStreamingVideoEncodingMode* encodingMode);
+
+    /* Input control */
+
+    HRESULT StartCapture(void);
+    HRESULT StopCapture(void);
+    HRESULT SetCallback([in] IUnknown* theCallback);
+};
+
+/* Interface IBMDStreamingH264NALPacket - Represent an H.264 NAL packet */
+
+[
+    object,
+    uuid(E260E955-14BE-4395-9775-9F02CC0A9D89),
+    helpstring("Represent an H.264 NAL packet")
+] interface IBMDStreamingH264NALPacket : IUnknown
+{
+    long GetPayloadSize(void);
+    HRESULT GetBytes([out] void** buffer);
+    HRESULT GetBytesWithSizePrefix([out] void** buffer); // Contains a 32-bit unsigned big endian size prefix
+    HRESULT GetDisplayTime([in] ULONGLONG requestedTimeScale, [out] ULONGLONG* displayTime);
+    HRESULT GetPacketIndex([out] unsigned long* packetIndex); // Deprecated
+};
+
+/* Interface IBMDStreamingAudioPacket - Represents a chunk of audio data */
+
+[
+    object,
+    uuid(D9EB5902-1AD2-43F4-9E2C-3CFA50B5EE19),
+    helpstring("Represents a chunk of audio data")
+] interface IBMDStreamingAudioPacket : IUnknown
+{
+    BMDStreamingAudioCodec GetCodec(void);
+    long GetPayloadSize(void);
+    HRESULT GetBytes([out] void** buffer);
+    HRESULT GetPlayTime([in] ULONGLONG requestedTimeScale, [out] ULONGLONG* playTime);
+    HRESULT GetPacketIndex([out] unsigned long* packetIndex); // Deprecated
+};
+
+/* Interface IBMDStreamingMPEG2TSPacket - Represent an MPEG2 Transport Stream packet */
+
+[
+    object,
+    uuid(91810D1C-4FB3-4AAA-AE56-FA301D3DFA4C),
+    helpstring("Represent an MPEG2 Transport Stream packet")
+] interface IBMDStreamingMPEG2TSPacket : IUnknown
+{
+    long GetPayloadSize(void);
+    HRESULT GetBytes([out] void** buffer);
+};
+
+/* Interface IBMDStreamingH264NALParser - For basic NAL parsing */
+
+[
+    object,
+    uuid(5867F18C-5BFA-4CCC-B2A7-9DFD140417D2),
+    helpstring("For basic NAL parsing")
+] interface IBMDStreamingH264NALParser : IUnknown
+{
+    HRESULT IsNALSequenceParameterSet([in] IBMDStreamingH264NALPacket* nal);
+    HRESULT IsNALPictureParameterSet([in] IBMDStreamingH264NALPacket* nal);
+    HRESULT GetProfileAndLevelFromSPS([in] IBMDStreamingH264NALPacket* nal, [out] unsigned long* profileIdc, [out] unsigned long* profileCompatability, [out] unsigned long* levelIdc);
+};
+
+/* Coclasses */
+
+[
+    uuid(0CAA31F6-8A26-40B0-86A4-BF58DCCA710C),
+    helpstring("CBMDStreamingDiscovery Class")
+] coclass CBMDStreamingDiscovery
+{
+    [default] interface IBMDStreamingDiscovery;
+};
+
+[
+    uuid(7753EFBD-951C-407C-97A5-23C737B73B52),
+    helpstring("CBMDStreamingH264NALParser Class")
+] coclass CBMDStreamingH264NALParser
+{
+    [default] interface IBMDStreamingH264NALParser;
+};

+ 99 - 0
plugins/decklink/win/decklink-sdk/DeckLinkAPITypes.idl

@@ -0,0 +1,99 @@
+/* -LICENSE-START-
+** Copyright (c) 2014 Blackmagic Design
+**
+** Permission is hereby granted, free of charge, to any person or organization
+** obtaining a copy of the software and accompanying documentation covered by
+** this license (the "Software") to use, reproduce, display, distribute,
+** execute, and transmit the Software, and to prepare derivative works of the
+** Software, and to permit third-parties to whom the Software is furnished to
+** do so, all subject to the following:
+**
+** The copyright notices in the Software and this entire statement, including
+** the above license grant, this restriction and the following disclaimer,
+** must be included in all copies of the Software, in whole or in part, and
+** all derivative works of the Software, unless such copies or derivative
+** works are solely in the form of machine-executable object code generated by
+** a source language processor.
+**
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+** DEALINGS IN THE SOFTWARE.
+** -LICENSE-END-
+*/
+
+
+#ifndef BMD_CONST
+    #if defined(_MSC_VER)
+        #define BMD_CONST __declspec(selectany) static const
+    #else
+        #define BMD_CONST static const
+    #endif
+#endif
+
+// Type Declarations
+
+typedef LONGLONG BMDTimeValue;
+typedef LONGLONG BMDTimeScale;
+typedef unsigned long BMDTimecodeBCD;
+typedef unsigned long BMDTimecodeUserBits;
+
+// Enumeration Mapping
+
+cpp_quote("typedef unsigned long BMDTimecodeFlags;")
+cpp_quote("#if 0")
+typedef enum _BMDTimecodeFlags BMDTimecodeFlags;
+cpp_quote("#endif")
+
+/* Enum BMDTimecodeFlags - Timecode flags */
+
+[v1_enum] enum	_BMDTimecodeFlags {
+    bmdTimecodeFlagDefault                                       = 0,
+    bmdTimecodeIsDropFrame                                       = 1 << 0,
+    bmdTimecodeFieldMark                                         = 1 << 1
+};
+
+/* Enum BMDVideoConnection - Video connection types */
+
+typedef [v1_enum] enum	_BMDVideoConnection {
+    bmdVideoConnectionSDI                                        = 1 << 0,
+    bmdVideoConnectionHDMI                                       = 1 << 1,
+    bmdVideoConnectionOpticalSDI                                 = 1 << 2,
+    bmdVideoConnectionComponent                                  = 1 << 3,
+    bmdVideoConnectionComposite                                  = 1 << 4,
+    bmdVideoConnectionSVideo                                     = 1 << 5
+} BMDVideoConnection;
+
+/* Enum BMDAudioConnection - Audio connection types */
+
+typedef [v1_enum] enum	_BMDAudioConnection {
+    bmdAudioConnectionEmbedded                                   = 1 << 0,
+    bmdAudioConnectionAESEBU                                     = 1 << 1,
+    bmdAudioConnectionAnalog                                     = 1 << 2,
+    bmdAudioConnectionAnalogXLR                                  = 1 << 3,
+    bmdAudioConnectionAnalogRCA                                  = 1 << 4
+} BMDAudioConnection;
+
+// Forward Declarations
+
+interface IDeckLinkTimecode;
+
+/* Interface IDeckLinkTimecode - Used for video frame timecode representation. */
+
+[
+    object,
+    uuid(BC6CFBD3-8317-4325-AC1C-1216391E9340),
+    helpstring("Used for video frame timecode representation.")
+] interface IDeckLinkTimecode : IUnknown
+{
+    BMDTimecodeBCD GetBCD(void);
+    HRESULT GetComponents([out] unsigned char *hours, [out] unsigned char *minutes, [out] unsigned char *seconds, [out] unsigned char *frames);
+    HRESULT GetString([out] BSTR *timecode);
+    BMDTimecodeFlags GetFlags(void);
+    HRESULT GetTimecodeUserBits([out] BMDTimecodeUserBits *userBits);
+};
+
+/* Coclasses */

+ 36 - 0
plugins/decklink/win/decklink-sdk/DeckLinkAPIVersion.h

@@ -0,0 +1,36 @@
+/* -LICENSE-START-
+ * ** Copyright (c) 2014 Blackmagic Design
+ * **
+ * ** Permission is hereby granted, free of charge, to any person or organization
+ * ** obtaining a copy of the software and accompanying documentation covered by
+ * ** this license (the "Software") to use, reproduce, display, distribute,
+ * ** execute, and transmit the Software, and to prepare derivative works of the
+ * ** Software, and to permit third-parties to whom the Software is furnished to
+ * ** do so, all subject to the following:
+ * **
+ * ** The copyright notices in the Software and this entire statement, including
+ * ** the above license grant, this restriction and the following disclaimer,
+ * ** must be included in all copies of the Software, in whole or in part, and
+ * ** all derivative works of the Software, unless such copies or derivative
+ * ** works are solely in the form of machine-executable object code generated by
+ * ** a source language processor.
+ * **
+ * ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * ** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * ** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+ * ** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+ * ** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+ * ** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * ** DEALINGS IN THE SOFTWARE.
+ * ** -LICENSE-END-
+ * */
+
+/* DeckLinkAPIVersion.h */
+
+#ifndef __DeckLink_API_Version_h__
+#define __DeckLink_API_Version_h__
+
+#define BLACKMAGIC_DECKLINK_API_VERSION					0x0a030100
+#define BLACKMAGIC_DECKLINK_API_VERSION_STRING			"10.3.1"
+
+#endif	// __DeckLink_API_Version_h__