source: trunk/src/testing/app/DecklinkCapture/include/DeckLinkAPI.h @ 4

Revision 4, 33.9 KB checked in by ajaworski, 13 years ago (diff)

Added modified SAGE sources

Line 
1/* -LICENSE-START-
2** Copyright (c) 2009 Blackmagic Design
3**
4** Permission is hereby granted, free of charge, to any person or organization
5** obtaining a copy of the software and accompanying documentation covered by
6** this license (the "Software") to use, reproduce, display, distribute,
7** execute, and transmit the Software, and to prepare derivative works of the
8** Software, and to permit third-parties to whom the Software is furnished to
9** do so, all subject to the following:
10**
11** The copyright notices in the Software and this entire statement, including
12** the above license grant, this restriction and the following disclaimer,
13** must be included in all copies of the Software, in whole or in part, and
14** all derivative works of the Software, unless such copies or derivative
15** works are solely in the form of machine-executable object code generated by
16** a source language processor.
17**
18** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
21** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
22** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
23** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
24** DEALINGS IN THE SOFTWARE.
25** -LICENSE-END-
26*/
27
28/* DeckLinkAPI.h */
29               
30#ifndef __DeckLink_API_h__
31#define __DeckLink_API_h__
32               
33#include <stdint.h>
34#include "LinuxCOM.h"
35
36/* Type Declarations */
37
38typedef int64_t BMDTimeValue;
39typedef int64_t BMDTimeScale;
40typedef uint32_t BMDTimecodeBCD;
41
42/* End Type Declarations */
43
44/* Interface ID Declarations */
45
46#define IID_IDeckLinkVideoOutputCallback                 /* E763A626-4A3C-49D1-BF13-E7AD3692AE52 */ (REFIID){0xE7,0x63,0xA6,0x26,0x4A,0x3C,0x49,0xD1,0xBF,0x13,0xE7,0xAD,0x36,0x92,0xAE,0x52}
47#define IID_IDeckLinkInputCallback                       /* FD6F311D-4D00-444B-9ED4-1F25B5730AD0 */ (REFIID){0xFD,0x6F,0x31,0x1D,0x4D,0x00,0x44,0x4B,0x9E,0xD4,0x1F,0x25,0xB5,0x73,0x0A,0xD0}
48#define IID_IDeckLinkMemoryAllocator                     /* B36EB6E7-9D29-4AA8-92EF-843B87A289E8 */ (REFIID){0xB3,0x6E,0xB6,0xE7,0x9D,0x29,0x4A,0xA8,0x92,0xEF,0x84,0x3B,0x87,0xA2,0x89,0xE8}
49#define IID_IDeckLinkAudioOutputCallback                 /* 403C681B-7F46-4A12-B993-2BB127084EE6 */ (REFIID){0x40,0x3C,0x68,0x1B,0x7F,0x46,0x4A,0x12,0xB9,0x93,0x2B,0xB1,0x27,0x08,0x4E,0xE6}
50#define IID_IDeckLinkIterator                            /* 74E936FC-CC28-4A67-81A0-1E94E52D4E69 */ (REFIID){0x74,0xE9,0x36,0xFC,0xCC,0x28,0x4A,0x67,0x81,0xA0,0x1E,0x94,0xE5,0x2D,0x4E,0x69}
51#define IID_IDeckLinkDisplayModeIterator                 /* 455D741F-1779-4800-86F5-0B5D13D79751 */ (REFIID){0x45,0x5D,0x74,0x1F,0x17,0x79,0x48,0x00,0x86,0xF5,0x0B,0x5D,0x13,0xD7,0x97,0x51}
52#define IID_IDeckLinkDisplayMode                         /* 87451E84-2B7E-439E-A629-4393EA4A8550 */ (REFIID){0x87,0x45,0x1E,0x84,0x2B,0x7E,0x43,0x9E,0xA6,0x29,0x43,0x93,0xEA,0x4A,0x85,0x50}
53#define IID_IDeckLink                                    /* 62BFF75D-6569-4E55-8D4D-66AA03829ABC */ (REFIID){0x62,0xBF,0xF7,0x5D,0x65,0x69,0x4E,0x55,0x8D,0x4D,0x66,0xAA,0x03,0x82,0x9A,0xBC}
54#define IID_IDeckLinkOutput                              /* 271C65E3-C323-4344-A30F-D908BCB20AA3 */ (REFIID){0x27,0x1C,0x65,0xE3,0xC3,0x23,0x43,0x44,0xA3,0x0F,0xD9,0x08,0xBC,0xB2,0x0A,0xA3}
55#define IID_IDeckLinkInput                               /* 4973F012-9925-458C-871C-18774CDBBECB */ (REFIID){0x49,0x73,0xF0,0x12,0x99,0x25,0x45,0x8C,0x87,0x1C,0x18,0x77,0x4C,0xDB,0xBE,0xCB}
56#define IID_IDeckLinkTimecode                            /* EFB9BCA6-A521-44F7-BD69-2332F24D9EE6 */ (REFIID){0xEF,0xB9,0xBC,0xA6,0xA5,0x21,0x44,0xF7,0xBD,0x69,0x23,0x32,0xF2,0x4D,0x9E,0xE6}
57#define IID_IDeckLinkVideoFrame                          /* A8D8238E-6B18-4196-99E1-5AF717B83D32 */ (REFIID){0xA8,0xD8,0x23,0x8E,0x6B,0x18,0x41,0x96,0x99,0xE1,0x5A,0xF7,0x17,0xB8,0x3D,0x32}
58#define IID_IDeckLinkMutableVideoFrame                   /* 46FCEE00-B4E6-43D0-91C0-023A7FCEB34F */ (REFIID){0x46,0xFC,0xEE,0x00,0xB4,0xE6,0x43,0xD0,0x91,0xC0,0x02,0x3A,0x7F,0xCE,0xB3,0x4F}
59#define IID_IDeckLinkVideoInputFrame                     /* CF317790-2894-11DE-8C30-0800200C9A66 */ (REFIID){0xCF,0x31,0x77,0x90,0x28,0x94,0x11,0xDE,0x8C,0x30,0x08,0x00,0x20,0x0C,0x9A,0x66}
60#define IID_IDeckLinkVideoFrameAncillary                 /* 732E723C-D1A4-4E29-9E8E-4A88797A0004 */ (REFIID){0x73,0x2E,0x72,0x3C,0xD1,0xA4,0x4E,0x29,0x9E,0x8E,0x4A,0x88,0x79,0x7A,0x00,0x04}
61#define IID_IDeckLinkAudioInputPacket                    /* E43D5870-2894-11DE-8C30-0800200C9A66 */ (REFIID){0xE4,0x3D,0x58,0x70,0x28,0x94,0x11,0xDE,0x8C,0x30,0x08,0x00,0x20,0x0C,0x9A,0x66}
62#define IID_IDeckLinkScreenPreviewCallback               /* 373F499D-4B4D-4518-AD22-6354E5A5825E */ (REFIID){0x37,0x3F,0x49,0x9D,0x4B,0x4D,0x45,0x18,0xAD,0x22,0x63,0x54,0xE5,0xA5,0x82,0x5E}
63#define IID_IDeckLinkGLScreenPreviewHelper               /* BA575CD9-A15E-497B-B2C2-F9AFE7BE4EBA */ (REFIID){0xBA,0x57,0x5C,0xD9,0xA1,0x5E,0x49,0x7B,0xB2,0xC2,0xF9,0xAF,0xE7,0xBE,0x4E,0xBA}
64#define IID_IDeckLinkConfiguration                       /* B8EAD569-B764-47F0-A73F-AE40DF6CBF10 */ (REFIID){0xB8,0xEA,0xD5,0x69,0xB7,0x64,0x47,0xF0,0xA7,0x3F,0xAE,0x40,0xDF,0x6C,0xBF,0x10}
65#define IID_IDeckLinkAttributes                          /* ABC11843-D966-44CB-96E2-A1CB5D3135C4 */ (REFIID){0xAB,0xC1,0x18,0x43,0xD9,0x66,0x44,0xCB,0x96,0xE2,0xA1,0xCB,0x5D,0x31,0x35,0xC4}
66#define IID_IDeckLinkKeyer                               /* 89AFCAF5-65F8-421E-98F7-96FE5F5BFBA3 */ (REFIID){0x89,0xAF,0xCA,0xF5,0x65,0xF8,0x42,0x1E,0x98,0xF7,0x96,0xFE,0x5F,0x5B,0xFB,0xA3}
67
68/* End Interface ID Declarations */
69
70/* Enum BMDDisplayMode - Video display modes */
71
72typedef uint32_t BMDDisplayMode;
73enum _BMDDisplayMode {
74    bmdModeNTSC                                        = /* 'ntsc' */ 0x6E747363,
75    bmdModeNTSC2398                                    = /* 'nt23' */ 0x6E743233, // 3:2 pulldown
76    bmdModePAL                                         = /* 'pal ' */ 0x70616C20,
77
78    /* HD 1080 Modes */
79
80    bmdModeHD1080p2398                                 = /* '23ps' */ 0x32337073,
81    bmdModeHD1080p24                                   = /* '24ps' */ 0x32347073,
82    bmdModeHD1080p25                                   = /* 'Hp25' */ 0x48703235,
83    bmdModeHD1080p2997                                 = /* 'Hp29' */ 0x48703239,
84    bmdModeHD1080p30                                   = /* 'Hp30' */ 0x48703330,
85    bmdModeHD1080i50                                   = /* 'Hi50' */ 0x48693530,
86    bmdModeHD1080i5994                                 = /* 'Hi59' */ 0x48693539,
87    bmdModeHD1080i6000                                 = /* 'Hi60' */ 0x48693630, // N.B. This _really_ is 60.00 Hz.
88    bmdModeHD1080p50                                   = /* 'Hp50' */ 0x48703530,
89    bmdModeHD1080p5994                                 = /* 'Hp59' */ 0x48703539,
90    bmdModeHD1080p6000                                 = /* 'Hp60' */ 0x48703630, // N.B. This _really_ is 60.00 Hz.
91
92    /* HD 720 Modes */
93
94    bmdModeHD720p50                                    = /* 'hp50' */ 0x68703530,
95    bmdModeHD720p5994                                  = /* 'hp59' */ 0x68703539,
96    bmdModeHD720p60                                    = /* 'hp60' */ 0x68703630,
97
98    /* 2k Modes */
99
100    bmdMode2k2398                                      = /* '2k23' */ 0x326B3233,
101    bmdMode2k24                                        = /* '2k24' */ 0x326B3234,
102    bmdMode2k25                                        = /* '2k25' */ 0x326B3235
103};
104
105/* End Enum BMDDisplayMode */
106
107/* Enum BMDFieldDominance - Video field dominance */
108
109typedef uint32_t BMDFieldDominance;
110enum _BMDFieldDominance {
111    bmdUnknownFieldDominance                           = 0,
112    bmdLowerFieldFirst                                 = /* 'lowr' */ 0x6C6F7772,
113    bmdUpperFieldFirst                                 = /* 'uppr' */ 0x75707072,
114    bmdProgressiveFrame                                = /* 'prog' */ 0x70726F67,
115    bmdProgressiveSegmentedFrame                       = /* 'psf ' */ 0x70736620
116};
117
118/* End Enum BMDFieldDominance */
119
120/* Enum BMDPixelFormat - Video pixel formats supported for output/input */
121
122typedef uint32_t BMDPixelFormat;
123enum _BMDPixelFormat {
124    bmdFormat8BitYUV                                   = /* '2vuy' */ 0x32767579,
125    bmdFormat10BitYUV                                  = /* 'v210' */ 0x76323130,
126    bmdFormat8BitARGB                                  = 0x20,
127    bmdFormat8BitBGRA                                  = /* 'BGRA' */ 0x42475241,
128    bmdFormat10BitRGB                                  = /* 'r210' */ 0x72323130
129};
130
131/* End Enum BMDPixelFormat */
132
133/* Enum BMDVideoOutputFlags - Flags to control the output of ancillary data along with video. */
134
135typedef uint32_t BMDVideoOutputFlags;
136enum _BMDVideoOutputFlags {
137    bmdVideoOutputFlagDefault                          = 0,
138    bmdVideoOutputRP188                                = 1 << 0,
139    bmdVideoOutputVANC                                 = 1 << 1
140};
141
142/* End Enum BMDVideoOutputFlags */
143
144/* Enum BMDFrameFlags - Frame flags */
145
146typedef uint32_t BMDFrameFlags;
147enum _BMDFrameFlags {
148    bmdFrameFlagDefault                                = 0,
149    bmdFrameFlagFlipVertical                           = 1 << 0,
150
151    /* Flags that are valid only for frames returned through IDeckLinkInput */
152
153    bmdFrameHasNoInputSource                           = 1 << 31
154};
155
156/* End Enum BMDFrameFlags */
157
158/* Enum BMDVideoInputFlags - Flags applicable to video input */
159
160typedef uint32_t BMDVideoInputFlags;
161enum _BMDVideoInputFlags {
162    bmdVideoInputFlagDefault                           = 0,
163    bmdVideoInputEnableFormatDetection                 = 1 << 0
164};
165
166/* End Enum BMDVideoInputFlags */
167
168/* Enum BMDVideoInputFormatChangedEvents - Bitmask passed to the VideoInputFormatChanged notification to identify the properties of the input signal that have changed */
169
170typedef uint32_t BMDVideoInputFormatChangedEvents;
171enum _BMDVideoInputFormatChangedEvents {
172    bmdVideoInputDisplayModeChanged                    = 1 << 0,
173    bmdVideoInputFieldDominanceChanged                 = 1 << 1,
174    bmdVideoInputColorspaceChanged                     = 1 << 2
175};
176
177/* End Enum BMDVideoInputFormatChangedEvents */
178
179/* Enum BMDDetectedVideoInputFormatFlags - Flags passed to the VideoInputFormatChanged notification to describe the detected video input signal */
180
181typedef uint32_t BMDDetectedVideoInputFormatFlags;
182enum _BMDDetectedVideoInputFormatFlags {
183    bmdDetectedVideoInputYCbCr422                      = 1 << 0,
184    bmdDetectedVideoInputRGB444                        = 1 << 1
185};
186
187/* End Enum BMDDetectedVideoInputFormatFlags */
188
189/* Enum BMDOutputFrameCompletionResult - Frame Completion Callback */
190
191typedef uint32_t BMDOutputFrameCompletionResult;
192enum _BMDOutputFrameCompletionResult {
193    bmdOutputFrameCompleted,                         
194    bmdOutputFrameDisplayedLate,                     
195    bmdOutputFrameDropped,                           
196    bmdOutputFrameFlushed                             
197};
198
199/* End Enum BMDOutputFrameCompletionResult */
200
201/* Enum BMDAudioSampleRate - Audio sample rates supported for output/input */
202
203typedef uint32_t BMDAudioSampleRate;
204enum _BMDAudioSampleRate {
205    bmdAudioSampleRate48kHz                            = 48000
206};
207
208/* End Enum BMDAudioSampleRate */
209
210/* Enum BMDAudioSampleType - Audio sample sizes supported for output/input */
211
212typedef uint32_t BMDAudioSampleType;
213enum _BMDAudioSampleType {
214    bmdAudioSampleType16bitInteger                     = 16,
215    bmdAudioSampleType32bitInteger                     = 32
216};
217
218/* End Enum BMDAudioSampleType */
219
220/* Enum BMDAudioOutputStreamType - Audio output stream type */
221
222typedef uint32_t BMDAudioOutputStreamType;
223enum _BMDAudioOutputStreamType {
224    bmdAudioOutputStreamContinuous,                   
225    bmdAudioOutputStreamContinuousDontResample,       
226    bmdAudioOutputStreamTimestamped                   
227};
228
229/* End Enum BMDAudioOutputStreamType */
230
231/* Enum BMDDisplayModeSupport - Output mode supported flags */
232
233typedef uint32_t BMDDisplayModeSupport;
234enum _BMDDisplayModeSupport {
235    bmdDisplayModeNotSupported                         = 0,
236    bmdDisplayModeSupported,                         
237    bmdDisplayModeSupportedWithConversion             
238};
239
240/* End Enum BMDDisplayModeSupport */
241
242/* Enum BMDTimecodeFormat - Timecode formats for frame metadata */
243
244typedef uint32_t BMDTimecodeFormat;
245enum _BMDTimecodeFormat {
246    bmdTimecodeRP188                                   = /* 'rp18' */ 0x72703138,
247    bmdTimecodeVITC                                    = /* 'vitc' */ 0x76697463,
248    bmdTimecodeSerial                                  = /* 'seri' */ 0x73657269
249};
250
251/* End Enum BMDTimecodeFormat */
252
253/* Enum BMDTimecodeFlags - Timecode flags */
254
255typedef uint32_t BMDTimecodeFlags;
256enum _BMDTimecodeFlags {
257    bmdTimecodeFlagDefault                             = 0,
258    bmdTimecodeIsDropFrame                             = 1 << 0
259};
260
261/* End Enum BMDTimecodeFlags */
262
263/* Enum BMDVideoConnection - Video connection types */
264
265typedef uint32_t BMDVideoConnection;
266enum _BMDVideoConnection {
267    bmdVideoConnectionSDI                              = /* 'sdi ' */ 0x73646920,
268    bmdVideoConnectionHDMI                             = /* 'hdmi' */ 0x68646D69,
269    bmdVideoConnectionOpticalSDI                       = /* 'opti' */ 0x6F707469,
270    bmdVideoConnectionComponent                        = /* 'cpnt' */ 0x63706E74,
271    bmdVideoConnectionComposite                        = /* 'cmst' */ 0x636D7374,
272    bmdVideoConnectionSVideo                           = /* 'svid' */ 0x73766964
273};
274
275/* End Enum BMDVideoConnection */
276
277/* Enum BMDAnalogVideoFlags - Analog video display flags */
278
279typedef uint32_t BMDAnalogVideoFlags;
280enum _BMDAnalogVideoFlags {
281    bmdAnalogVideoFlagCompositeSetup75                 = 1 << 0,
282    bmdAnalogVideoFlagComponentBetacamLevels           = 1 << 1
283};
284
285/* End Enum BMDAnalogVideoFlags */
286
287/* Enum BMDAudioConnection - Audio connection types */
288
289typedef uint32_t BMDAudioConnection;
290enum _BMDAudioConnection {
291    bmdAudioConnectionEmbedded                         = /* 'embd' */ 0x656D6264,
292    bmdAudioConnectionAESEBU                           = /* 'aes ' */ 0x61657320,
293    bmdAudioConnectionAnalog                           = /* 'anlg' */ 0x616E6C67
294};
295
296/* End Enum BMDAudioConnection */
297
298/* Enum BMDVideoOutputConversionMode - Video/audio conversion mode */
299
300typedef uint32_t BMDVideoOutputConversionMode;
301enum _BMDVideoOutputConversionMode {
302    bmdNoVideoOutputConversion                         = /* 'none' */ 0x6E6F6E65,
303    bmdVideoOutputLetterboxDownonversion               = /* 'ltbx' */ 0x6C746278,
304    bmdVideoOutputAnamorphicDownonversion              = /* 'amph' */ 0x616D7068,
305    bmdVideoOutputHD720toHD1080Conversion              = /* '720c' */ 0x37323063,
306    bmdVideoOutputHardwareLetterboxDownconversion      = /* 'HWlb' */ 0x48576C62,
307    bmdVideoOutputHardwareAnamorphicDownconversion     = /* 'HWam' */ 0x4857616D,
308    bmdVideoOutputHardwareCenterCutDownconversion      = /* 'HWcc' */ 0x48576363
309};
310
311/* End Enum BMDVideoOutputConversionMode */
312
313/* Enum BMDVideoInputConversionMode - Video input conversion mode */
314
315typedef uint32_t BMDVideoInputConversionMode;
316enum _BMDVideoInputConversionMode {
317    bmdNoVideoInputConversion                          = /* 'none' */ 0x6E6F6E65,
318    bmdVideoInputLetterboxDownconversionFromHD1080     = /* '10lb' */ 0x31306C62,
319    bmdVideoInputAnamorphicDownconversionFromHD1080    = /* '10am' */ 0x3130616D,
320    bmdVideoInputLetterboxDownconversionFromHD720      = /* '72lb' */ 0x37326C62,
321    bmdVideoInputAnamorphicDownconversionFromHD720     = /* '72am' */ 0x3732616D,
322    bmdVideoInputLetterboxUpconversion                 = /* 'lbup' */ 0x6C627570,
323    bmdVideoInputAnamorphicUpconversion                = /* 'amup' */ 0x616D7570
324};
325
326/* End Enum BMDVideoInputConversionMode */
327
328/* Enum BMDDeckLinkAttributeID - DeckLink Atribute ID */
329
330typedef uint32_t BMDDeckLinkAttributeID;
331enum _BMDDeckLinkAttributeID {
332
333    /* Flags */
334
335    BMDDeckLinkSupportsInternalKeying                  = /* 'keyi' */ 0x6B657969,
336    BMDDeckLinkSupportsExternalKeying                  = /* 'keye' */ 0x6B657965,
337    BMDDeckLinkSupportsHDKeying                        = /* 'keyh' */ 0x6B657968,
338    BMDDeckLinkSupportsInputFormatDetection            = /* 'infd' */ 0x696E6664,
339    BMDDeckLinkHasSerialPort                           = /* 'hspt' */ 0x68737074,
340
341    /* Integers */
342
343    BMDDeckLinkMaximumAudioChannels                    = /* 'mach' */ 0x6D616368,
344
345    /* Strings */
346
347    BMDDeckLinkSerialPortDeviceName                    = /* 'slpn' */ 0x736C706E
348};
349
350/* End Enum BMDDeckLinkAttributeID */
351
352#if defined(__cplusplus)
353
354/* Forward Declarations */
355
356class IDeckLinkVideoOutputCallback;
357class IDeckLinkInputCallback;
358class IDeckLinkMemoryAllocator;
359class IDeckLinkAudioOutputCallback;
360class IDeckLinkIterator;
361class IDeckLinkDisplayModeIterator;
362class IDeckLinkDisplayMode;
363class IDeckLink;
364class IDeckLinkOutput;
365class IDeckLinkInput;
366class IDeckLinkTimecode;
367class IDeckLinkVideoFrame;
368class IDeckLinkMutableVideoFrame;
369class IDeckLinkVideoInputFrame;
370class IDeckLinkVideoFrameAncillary;
371class IDeckLinkAudioInputPacket;
372class IDeckLinkScreenPreviewCallback;
373class IDeckLinkGLScreenPreviewHelper;
374class IDeckLinkConfiguration;
375class IDeckLinkAttributes;
376class IDeckLinkKeyer;
377
378/* End Forward Declarations */
379
380/* Interface IDeckLinkVideoOutputCallback - Frame completion callback. */
381
382class IDeckLinkVideoOutputCallback : public IUnknown
383{
384public:
385    virtual HRESULT ScheduledFrameCompleted (/* in */ IDeckLinkVideoFrame *completedFrame, /* in */ BMDOutputFrameCompletionResult result) = 0;
386    virtual HRESULT ScheduledPlaybackHasStopped (void) = 0;
387
388protected:
389    virtual ~IDeckLinkVideoOutputCallback () {}; // call Release method to drop reference count
390};
391
392/* End Interface IDeckLinkVideoOutputCallback */
393
394/* Interface IDeckLinkInputCallback - Frame arrival callback. */
395
396class IDeckLinkInputCallback : public IUnknown
397{
398public:
399    virtual HRESULT VideoInputFormatChanged (/* in */ BMDVideoInputFormatChangedEvents notificationEvents, /* in */ IDeckLinkDisplayMode *newDisplayMode, /* in */ BMDDetectedVideoInputFormatFlags detectedSignalFlags) = 0;
400    virtual HRESULT VideoInputFrameArrived (/* in */ IDeckLinkVideoInputFrame *videoFrame, /* in */ IDeckLinkAudioInputPacket *audioPacket) = 0;
401
402protected:
403    virtual ~IDeckLinkInputCallback () {}; // call Release method to drop reference count
404};
405
406/* End Interface IDeckLinkInputCallback */
407
408/* Interface IDeckLinkMemoryAllocator - Memory allocator for video frames. */
409
410class IDeckLinkMemoryAllocator : public IUnknown
411{
412public:
413    virtual HRESULT AllocateBuffer (uint32_t bufferSize, /* out */ void **allocatedBuffer) = 0;
414    virtual HRESULT ReleaseBuffer (/* in */ void *buffer) = 0;
415
416    virtual HRESULT Commit (void) = 0;
417    virtual HRESULT Decommit (void) = 0;
418};
419
420/* End Interface IDeckLinkMemoryAllocator */
421
422/* Interface IDeckLinkAudioOutputCallback - Optional callback to allow audio samples to be pulled as required. */
423
424class IDeckLinkAudioOutputCallback : public IUnknown
425{
426public:
427    virtual HRESULT RenderAudioSamples (bool preroll) = 0;
428};
429
430/* End Interface IDeckLinkAudioOutputCallback */
431
432/* Interface IDeckLinkIterator - enumerates installed DeckLink hardware */
433
434class IDeckLinkIterator : public IUnknown
435{
436public:
437    virtual HRESULT Next (/* out */ IDeckLink **deckLinkInstance) = 0;
438};
439
440/* End Interface IDeckLinkIterator */
441
442/* Interface IDeckLinkDisplayModeIterator - enumerates over supported input/output display modes. */
443
444class IDeckLinkDisplayModeIterator : public IUnknown
445{
446public:
447    virtual HRESULT Next (/* out */ IDeckLinkDisplayMode **deckLinkDisplayMode) = 0;
448
449protected:
450    virtual ~IDeckLinkDisplayModeIterator () {}; // call Release method to drop reference count
451};
452
453/* End Interface IDeckLinkDisplayModeIterator */
454
455/* Interface IDeckLinkDisplayMode - represents a display mode */
456
457class IDeckLinkDisplayMode : public IUnknown
458{
459public:
460    virtual HRESULT GetName (/* out */ const char **name) = 0;
461    virtual BMDDisplayMode GetDisplayMode (void) = 0;
462    virtual long GetWidth (void) = 0;
463    virtual long GetHeight (void) = 0;
464    virtual HRESULT GetFrameRate (/* out */ BMDTimeValue *frameDuration, /* out */ BMDTimeScale *timeScale) = 0;
465    virtual BMDFieldDominance GetFieldDominance (void) = 0;
466
467protected:
468    virtual ~IDeckLinkDisplayMode () {}; // call Release method to drop reference count
469};
470
471/* End Interface IDeckLinkDisplayMode */
472
473/* Interface IDeckLink - represents a DeckLink device */
474
475class IDeckLink : public IUnknown
476{
477public:
478    virtual HRESULT GetModelName (/* out */ const char **modelName) = 0;
479};
480
481/* End Interface IDeckLink */
482
483/* Interface IDeckLinkOutput - Created by QueryInterface from IDeckLink. */
484
485class IDeckLinkOutput : public IUnknown
486{
487public:
488    virtual HRESULT DoesSupportVideoMode (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, /* out */ BMDDisplayModeSupport *result) = 0;
489    virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator **iterator) = 0;
490
491    virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback *previewCallback) = 0;
492
493    /* Video Output */
494
495    virtual HRESULT EnableVideoOutput (BMDDisplayMode displayMode, BMDVideoOutputFlags flags) = 0;
496    virtual HRESULT DisableVideoOutput (void) = 0;
497
498    virtual HRESULT SetVideoOutputFrameMemoryAllocator (/* in */ IDeckLinkMemoryAllocator *theAllocator) = 0;
499    virtual HRESULT CreateVideoFrame (int32_t width, int32_t height, int32_t rowBytes, BMDPixelFormat pixelFormat, BMDFrameFlags flags, /* out */ IDeckLinkMutableVideoFrame **outFrame) = 0;
500    virtual HRESULT CreateAncillaryData (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, /* out */ IDeckLinkVideoFrameAncillary **outBuffer) = 0;
501
502    virtual HRESULT DisplayVideoFrameSync (/* in */ IDeckLinkVideoFrame *theFrame) = 0;
503    virtual HRESULT ScheduleVideoFrame (/* in */ IDeckLinkVideoFrame *theFrame, BMDTimeValue displayTime, BMDTimeValue displayDuration, BMDTimeScale timeScale) = 0;
504    virtual HRESULT SetScheduledFrameCompletionCallback (/* in */ IDeckLinkVideoOutputCallback *theCallback) = 0;
505    virtual HRESULT GetBufferedVideoFrameCount (/* out */ uint32_t *bufferedFrameCount) = 0;
506
507    /* Audio Output */
508
509    virtual HRESULT EnableAudioOutput (BMDAudioSampleRate sampleRate, BMDAudioSampleType sampleType, uint32_t channelCount, BMDAudioOutputStreamType streamType) = 0;
510    virtual HRESULT DisableAudioOutput (void) = 0;
511
512    virtual HRESULT WriteAudioSamplesSync (/* in */ void *buffer, uint32_t sampleFrameCount, /* out */ uint32_t *sampleFramesWritten) = 0;
513
514    virtual HRESULT BeginAudioPreroll (void) = 0;
515    virtual HRESULT EndAudioPreroll (void) = 0;
516    virtual HRESULT ScheduleAudioSamples (/* in */ void *buffer, uint32_t sampleFrameCount, BMDTimeValue streamTime, BMDTimeScale timeScale, /* out */ uint32_t *sampleFramesWritten) = 0;
517
518    virtual HRESULT GetBufferedAudioSampleFrameCount (/* out */ uint32_t *bufferedSampleFrameCount) = 0;
519    virtual HRESULT FlushBufferedAudioSamples (void) = 0;
520
521    virtual HRESULT SetAudioCallback (/* in */ IDeckLinkAudioOutputCallback *theCallback) = 0;
522
523    /* Output Control */
524
525    virtual HRESULT StartScheduledPlayback (BMDTimeValue playbackStartTime, BMDTimeScale timeScale, double playbackSpeed) = 0;
526    virtual HRESULT StopScheduledPlayback (BMDTimeValue stopPlaybackAtTime, /* out */ BMDTimeValue *actualStopTime, BMDTimeScale timeScale) = 0;
527    virtual HRESULT IsScheduledPlaybackRunning (/* out */ bool *active) = 0;
528    virtual HRESULT GetHardwareReferenceClock (BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *elapsedTimeSinceSchedulerBegan) = 0;
529
530protected:
531    virtual ~IDeckLinkOutput () {}; // call Release method to drop reference count
532};
533
534/* End Interface IDeckLinkOutput */
535
536/* Interface IDeckLinkInput - Created by QueryInterface from IDeckLink. */
537
538class IDeckLinkInput : public IUnknown
539{
540public:
541    virtual HRESULT DoesSupportVideoMode (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, /* out */ BMDDisplayModeSupport *result) = 0;
542    virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator **iterator) = 0;
543
544    virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback *previewCallback) = 0;
545
546    /* Video Input */
547
548    virtual HRESULT EnableVideoInput (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, BMDVideoInputFlags flags) = 0;
549    virtual HRESULT DisableVideoInput (void) = 0;
550    virtual HRESULT GetAvailableVideoFrameCount (/* out */ uint32_t *availableFrameCount) = 0;
551
552    /* Audio Input */
553
554    virtual HRESULT EnableAudioInput (BMDAudioSampleRate sampleRate, BMDAudioSampleType sampleType, uint32_t channelCount) = 0;
555    virtual HRESULT DisableAudioInput (void) = 0;
556    virtual HRESULT GetAvailableAudioSampleFrameCount (/* out */ uint32_t *availableSampleFrameCount) = 0;
557
558    /* Input Control */
559
560    virtual HRESULT StartStreams (void) = 0;
561    virtual HRESULT StopStreams (void) = 0;
562    virtual HRESULT PauseStreams (void) = 0;
563    virtual HRESULT FlushStreams (void) = 0;
564    virtual HRESULT SetCallback (/* in */ IDeckLinkInputCallback *theCallback) = 0;
565
566protected:
567    virtual ~IDeckLinkInput () {}; // call Release method to drop reference count
568};
569
570/* End Interface IDeckLinkInput */
571
572/* Interface IDeckLinkTimecode - Used for video frame timecode representation. */
573
574class IDeckLinkTimecode : public IUnknown
575{
576public:
577    virtual BMDTimecodeBCD GetBCD (void) = 0;
578    virtual HRESULT GetComponents (/* out */ uint8_t *hours, /* out */ uint8_t *minutes, /* out */ uint8_t *seconds, /* out */ uint8_t *frames) = 0;
579    virtual HRESULT GetString (/* out */ const char **timecode) = 0;
580    virtual BMDTimecodeFlags GetFlags (void) = 0;
581
582protected:
583    virtual ~IDeckLinkTimecode () {}; // call Release method to drop reference count
584};
585
586/* End Interface IDeckLinkTimecode */
587
588/* Interface IDeckLinkVideoFrame - Interface to encapsulate a video frame; can be caller-implemented. */
589
590class IDeckLinkVideoFrame : public IUnknown
591{
592public:
593    virtual long GetWidth (void) = 0;
594    virtual long GetHeight (void) = 0;
595    virtual long GetRowBytes (void) = 0;
596    virtual BMDPixelFormat GetPixelFormat (void) = 0;
597    virtual BMDFrameFlags GetFlags (void) = 0;
598    virtual HRESULT GetBytes (/* out */ void **buffer) = 0;
599
600    virtual HRESULT GetTimecode (BMDTimecodeFormat format, /* out */ IDeckLinkTimecode **timecode) = 0;
601    virtual HRESULT GetAncillaryData (/* out */ IDeckLinkVideoFrameAncillary **ancillary) = 0;
602
603protected:
604    virtual ~IDeckLinkVideoFrame () {}; // call Release method to drop reference count
605};
606
607/* End Interface IDeckLinkVideoFrame */
608
609/* Interface IDeckLinkMutableVideoFrame - Created by IDeckLinkOutput::CreateVideoFrame. */
610
611class IDeckLinkMutableVideoFrame : public IDeckLinkVideoFrame
612{
613public:
614    virtual HRESULT SetFlags (BMDFrameFlags newFlags) = 0;
615
616    virtual HRESULT SetTimecode (BMDTimecodeFormat format, /* in */ IDeckLinkTimecode *timecode) = 0;
617    virtual HRESULT SetTimecodeFromComponents (BMDTimecodeFormat format, uint8_t hours, uint8_t minutes, uint8_t seconds, uint8_t frames, BMDTimecodeFlags flags) = 0;
618    virtual HRESULT SetAncillaryData (/* in */ IDeckLinkVideoFrameAncillary *ancillary) = 0;
619
620protected:
621    virtual ~IDeckLinkMutableVideoFrame () {}; // call Release method to drop reference count
622};
623
624/* End Interface IDeckLinkMutableVideoFrame */
625
626/* Interface IDeckLinkVideoInputFrame - Provided by the IDeckLinkVideoInput frame arrival callback. */
627
628class IDeckLinkVideoInputFrame : public IDeckLinkVideoFrame
629{
630public:
631    virtual HRESULT GetStreamTime (/* out */ BMDTimeValue *frameTime, /* out */ BMDTimeValue *frameDuration, BMDTimeScale timeScale) = 0;
632
633protected:
634    virtual ~IDeckLinkVideoInputFrame () {}; // call Release method to drop reference count
635};
636
637/* End Interface IDeckLinkVideoInputFrame */
638
639/* Interface IDeckLinkVideoFrameAncillary - Obtained through QueryInterface() on an IDeckLinkVideoFrame object. */
640
641class IDeckLinkVideoFrameAncillary : public IUnknown
642{
643public:
644
645    virtual HRESULT GetBufferForVerticalBlankingLine (uint32_t lineNumber, /* out */ void **buffer) = 0;
646    virtual BMDPixelFormat GetPixelFormat (void) = 0;
647    virtual BMDDisplayMode GetDisplayMode (void) = 0;
648
649protected:
650    virtual ~IDeckLinkVideoFrameAncillary () {}; // call Release method to drop reference count
651};
652
653/* End Interface IDeckLinkVideoFrameAncillary */
654
655/* Interface IDeckLinkAudioInputPacket - Provided by the IDeckLinkInput callback. */
656
657class IDeckLinkAudioInputPacket : public IUnknown
658{
659public:
660    virtual long GetSampleFrameCount (void) = 0;
661    virtual HRESULT GetBytes (/* out */ void **buffer) = 0;
662    virtual HRESULT GetPacketTime (/* out */ BMDTimeValue *packetTime, BMDTimeScale timeScale) = 0;
663
664protected:
665    virtual ~IDeckLinkAudioInputPacket () {}; // call Release method to drop reference count
666};
667
668/* End Interface IDeckLinkAudioInputPacket */
669
670/* Interface IDeckLinkScreenPreviewCallback - Screen preview callback */
671
672class IDeckLinkScreenPreviewCallback : public IUnknown
673{
674public:
675    virtual HRESULT DrawFrame (/* in */ IDeckLinkVideoFrame *theFrame) = 0;
676
677protected:
678    virtual ~IDeckLinkScreenPreviewCallback () {}; // call Release method to drop reference count
679};
680
681/* End Interface IDeckLinkScreenPreviewCallback */
682
683/* Interface IDeckLinkGLScreenPreviewHelper - Created with CoCreateInstance(). */
684
685class IDeckLinkGLScreenPreviewHelper : public IUnknown
686{
687public:
688
689    /* Methods must be called with OpenGL context set */
690
691    virtual HRESULT InitializeGL (void) = 0;
692    virtual HRESULT PaintGL (void) = 0;
693    virtual HRESULT SetFrame (/* in */ IDeckLinkVideoFrame *theFrame) = 0;
694
695protected:
696    virtual ~IDeckLinkGLScreenPreviewHelper () {}; // call Release method to drop reference count
697};
698
699/* End Interface IDeckLinkGLScreenPreviewHelper */
700
701/* Interface IDeckLinkConfiguration - Created by QueryInterface from IDeckLink. */
702
703class IDeckLinkConfiguration : public IUnknown
704{
705public:
706    virtual HRESULT GetConfigurationValidator (/* out */ IDeckLinkConfiguration **configObject) = 0;
707    virtual HRESULT WriteConfigurationToPreferences (void) = 0;
708
709    /* Video Output Configuration */
710
711    virtual HRESULT SetVideoOutputFormat (BMDVideoConnection videoOutputConnection) = 0;
712    virtual HRESULT IsVideoOutputActive (BMDVideoConnection videoOutputConnection, /* out */ bool *active) = 0;
713
714    virtual HRESULT SetAnalogVideoOutputFlags (BMDAnalogVideoFlags analogVideoFlags) = 0;
715    virtual HRESULT GetAnalogVideoOutputFlags (/* out */ BMDAnalogVideoFlags *analogVideoFlags) = 0;
716
717    virtual HRESULT EnableFieldFlickerRemovalWhenPaused (bool enable) = 0;
718    virtual HRESULT IsEnabledFieldFlickerRemovalWhenPaused (/* out */ bool *enabled) = 0;
719
720    virtual HRESULT Set444And3GBpsVideoOutput (bool enable444VideoOutput, bool enable3GbsOutput) = 0;
721    virtual HRESULT Get444And3GBpsVideoOutput (/* out */ bool *is444VideoOutputEnabled, /* out */ bool *threeGbsOutputEnabled) = 0;
722
723    virtual HRESULT SetVideoOutputConversionMode (BMDVideoOutputConversionMode conversionMode) = 0;
724    virtual HRESULT GetVideoOutputConversionMode (/* out */ BMDVideoOutputConversionMode *conversionMode) = 0;
725
726    virtual HRESULT Set_HD1080p24_to_HD1080i5994_Conversion (bool enable) = 0;
727    virtual HRESULT Get_HD1080p24_to_HD1080i5994_Conversion (/* out */ bool *enabled) = 0;
728
729    /* Video Input Configuration */
730
731    virtual HRESULT SetVideoInputFormat (BMDVideoConnection videoInputFormat) = 0;
732    virtual HRESULT GetVideoInputFormat (/* out */ BMDVideoConnection *videoInputFormat) = 0;
733
734    virtual HRESULT SetAnalogVideoInputFlags (BMDAnalogVideoFlags analogVideoFlags) = 0;
735    virtual HRESULT GetAnalogVideoInputFlags (/* out */ BMDAnalogVideoFlags *analogVideoFlags) = 0;
736
737    virtual HRESULT SetVideoInputConversionMode (BMDVideoInputConversionMode conversionMode) = 0;
738    virtual HRESULT GetVideoInputConversionMode (/* out */ BMDVideoInputConversionMode *conversionMode) = 0;
739
740    virtual HRESULT SetBlackVideoOutputDuringCapture (bool blackOutInCapture) = 0;
741    virtual HRESULT GetBlackVideoOutputDuringCapture (/* out */ bool *blackOutInCapture) = 0;
742
743    virtual HRESULT Set32PulldownSequenceInitialTimecodeFrame (uint32_t aFrameTimecode) = 0;
744    virtual HRESULT Get32PulldownSequenceInitialTimecodeFrame (/* out */ uint32_t *aFrameTimecode) = 0;
745
746    virtual HRESULT SetVancSourceLineMapping (uint32_t activeLine1VANCsource, uint32_t activeLine2VANCsource, uint32_t activeLine3VANCsource) = 0;
747    virtual HRESULT GetVancSourceLineMapping (/* out */ uint32_t *activeLine1VANCsource, /* out */ uint32_t *activeLine2VANCsource, /* out */ uint32_t *activeLine3VANCsource) = 0;
748
749    /* Audio Input Configuration */
750
751    virtual HRESULT SetAudioInputFormat (BMDAudioConnection audioInputFormat) = 0;
752    virtual HRESULT GetAudioInputFormat (/* out */ BMDAudioConnection *audioInputFormat) = 0;
753};
754
755/* End Interface IDeckLinkConfiguration */
756
757/* Interface IDeckLinkAttributes - DeckLink Attribute interface */
758
759class IDeckLinkAttributes : public IUnknown
760{
761public:
762    virtual HRESULT GetFlag (/* in */ BMDDeckLinkAttributeID cfgID, /* out */ bool *value) = 0;
763    virtual HRESULT GetInt (/* in */ BMDDeckLinkAttributeID cfgID, /* out */ int64_t *value) = 0;
764    virtual HRESULT GetFloat (/* in */ BMDDeckLinkAttributeID cfgID, /* out */ double *value) = 0;
765    virtual HRESULT GetString (/* in */ BMDDeckLinkAttributeID cfgID, /* out */ const char **value) = 0;
766
767protected:
768    virtual ~IDeckLinkAttributes () {}; // call Release method to drop reference count
769};
770
771/* End Interface IDeckLinkAttributes */
772
773/* Interface IDeckLinkKeyer - DeckLink Keyer interface */
774
775class IDeckLinkKeyer : public IUnknown
776{
777public:
778    virtual HRESULT Enable (/* in */ bool isExternal) = 0;
779    virtual HRESULT SetLevel (/* in */ uint8_t level) = 0;
780    virtual HRESULT RampUp (/* in */ uint32_t numberOfFrames) = 0;
781    virtual HRESULT RampDown (/* in */ uint32_t numberOfFrames) = 0;
782    virtual HRESULT Disable (void) = 0;
783
784protected:
785    virtual ~IDeckLinkKeyer () {}; // call Release method to drop reference count
786};
787
788/* End Interface IDeckLinkKeyer */
789
790/* Functions */
791
792extern "C" {
793
794    IDeckLinkIterator *CreateDeckLinkIteratorInstance (void);
795    IDeckLinkGLScreenPreviewHelper *CreateOpenGLScreenPreviewHelper (void);
796
797};
798
799/* End Functions */
800
801#endif      // defined(__cplusplus)
802#endif      // __DeckLink_API_h__
Note: See TracBrowser for help on using the repository browser.