0
0
mirror of https://github.com/obsproject/obs-studio.git synced 2024-09-20 13:08:50 +02:00

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");`.
This commit is contained in:
Skyler Lipthay 2015-02-28 16:29:39 -08:00
parent 70f8369ae3
commit b959f56291
8 changed files with 1920 additions and 0 deletions

View File

@ -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;
};
};

View File

@ -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 */

View File

@ -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 */

View File

@ -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 */

View File

@ -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 */

View File

@ -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;
};

View File

@ -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 */

View File

@ -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__