DeckLinkAPIStreaming.h 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381
  1. /* -LICENSE-START-
  2. ** Copyright (c) 2020 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. #ifndef BMD_DECKLINKAPISTREAMING_H
  28. #define BMD_DECKLINKAPISTREAMING_H
  29. #ifndef BMD_CONST
  30. #if defined(_MSC_VER)
  31. #define BMD_CONST __declspec(selectany) static const
  32. #else
  33. #define BMD_CONST static const
  34. #endif
  35. #endif
  36. #ifndef BMD_PUBLIC
  37. #define BMD_PUBLIC
  38. #endif
  39. // Type Declarations
  40. // Interface ID Declarations
  41. BMD_CONST REFIID IID_IBMDStreamingDeviceNotificationCallback = /* F9531D64-3305-4B29-A387-7F74BB0D0E84 */ { 0xF9,0x53,0x1D,0x64,0x33,0x05,0x4B,0x29,0xA3,0x87,0x7F,0x74,0xBB,0x0D,0x0E,0x84 };
  42. BMD_CONST REFIID IID_IBMDStreamingH264InputCallback = /* 823C475F-55AE-46F9-890C-537CC5CEDCCA */ { 0x82,0x3C,0x47,0x5F,0x55,0xAE,0x46,0xF9,0x89,0x0C,0x53,0x7C,0xC5,0xCE,0xDC,0xCA };
  43. BMD_CONST REFIID IID_IBMDStreamingDiscovery = /* 2C837444-F989-4D87-901A-47C8A36D096D */ { 0x2C,0x83,0x74,0x44,0xF9,0x89,0x4D,0x87,0x90,0x1A,0x47,0xC8,0xA3,0x6D,0x09,0x6D };
  44. BMD_CONST REFIID IID_IBMDStreamingVideoEncodingMode = /* 1AB8035B-CD13-458D-B6DF-5E8F7C2141D9 */ { 0x1A,0xB8,0x03,0x5B,0xCD,0x13,0x45,0x8D,0xB6,0xDF,0x5E,0x8F,0x7C,0x21,0x41,0xD9 };
  45. BMD_CONST REFIID IID_IBMDStreamingMutableVideoEncodingMode = /* 19BF7D90-1E0A-400D-B2C6-FFC4E78AD49D */ { 0x19,0xBF,0x7D,0x90,0x1E,0x0A,0x40,0x0D,0xB2,0xC6,0xFF,0xC4,0xE7,0x8A,0xD4,0x9D };
  46. BMD_CONST REFIID IID_IBMDStreamingVideoEncodingModePresetIterator = /* 7AC731A3-C950-4AD0-804A-8377AA51C6C4 */ { 0x7A,0xC7,0x31,0xA3,0xC9,0x50,0x4A,0xD0,0x80,0x4A,0x83,0x77,0xAA,0x51,0xC6,0xC4 };
  47. BMD_CONST REFIID IID_IBMDStreamingDeviceInput = /* 24B6B6EC-1727-44BB-9818-34FF086ACF98 */ { 0x24,0xB6,0xB6,0xEC,0x17,0x27,0x44,0xBB,0x98,0x18,0x34,0xFF,0x08,0x6A,0xCF,0x98 };
  48. BMD_CONST REFIID IID_IBMDStreamingH264NALPacket = /* E260E955-14BE-4395-9775-9F02CC0A9D89 */ { 0xE2,0x60,0xE9,0x55,0x14,0xBE,0x43,0x95,0x97,0x75,0x9F,0x02,0xCC,0x0A,0x9D,0x89 };
  49. BMD_CONST REFIID IID_IBMDStreamingAudioPacket = /* D9EB5902-1AD2-43F4-9E2C-3CFA50B5EE19 */ { 0xD9,0xEB,0x59,0x02,0x1A,0xD2,0x43,0xF4,0x9E,0x2C,0x3C,0xFA,0x50,0xB5,0xEE,0x19 };
  50. BMD_CONST REFIID IID_IBMDStreamingMPEG2TSPacket = /* 91810D1C-4FB3-4AAA-AE56-FA301D3DFA4C */ { 0x91,0x81,0x0D,0x1C,0x4F,0xB3,0x4A,0xAA,0xAE,0x56,0xFA,0x30,0x1D,0x3D,0xFA,0x4C };
  51. BMD_CONST REFIID IID_IBMDStreamingH264NALParser = /* 5867F18C-5BFA-4CCC-B2A7-9DFD140417D2 */ { 0x58,0x67,0xF1,0x8C,0x5B,0xFA,0x4C,0xCC,0xB2,0xA7,0x9D,0xFD,0x14,0x04,0x17,0xD2 };
  52. /* Enum BMDStreamingDeviceMode - Device modes */
  53. typedef uint32_t BMDStreamingDeviceMode;
  54. enum _BMDStreamingDeviceMode {
  55. bmdStreamingDeviceIdle = /* 'idle' */ 0x69646C65,
  56. bmdStreamingDeviceEncoding = /* 'enco' */ 0x656E636F,
  57. bmdStreamingDeviceStopping = /* 'stop' */ 0x73746F70,
  58. bmdStreamingDeviceUnknown = /* 'munk' */ 0x6D756E6B
  59. };
  60. /* Enum BMDStreamingEncodingFrameRate - Encoded frame rates */
  61. typedef uint32_t BMDStreamingEncodingFrameRate;
  62. enum _BMDStreamingEncodingFrameRate {
  63. /* Interlaced rates */
  64. bmdStreamingEncodedFrameRate50i = /* 'e50i' */ 0x65353069,
  65. bmdStreamingEncodedFrameRate5994i = /* 'e59i' */ 0x65353969,
  66. bmdStreamingEncodedFrameRate60i = /* 'e60i' */ 0x65363069,
  67. /* Progressive rates */
  68. bmdStreamingEncodedFrameRate2398p = /* 'e23p' */ 0x65323370,
  69. bmdStreamingEncodedFrameRate24p = /* 'e24p' */ 0x65323470,
  70. bmdStreamingEncodedFrameRate25p = /* 'e25p' */ 0x65323570,
  71. bmdStreamingEncodedFrameRate2997p = /* 'e29p' */ 0x65323970,
  72. bmdStreamingEncodedFrameRate30p = /* 'e30p' */ 0x65333070,
  73. bmdStreamingEncodedFrameRate50p = /* 'e50p' */ 0x65353070,
  74. bmdStreamingEncodedFrameRate5994p = /* 'e59p' */ 0x65353970,
  75. bmdStreamingEncodedFrameRate60p = /* 'e60p' */ 0x65363070
  76. };
  77. /* Enum BMDStreamingEncodingSupport - Output encoding mode supported flag */
  78. typedef uint32_t BMDStreamingEncodingSupport;
  79. enum _BMDStreamingEncodingSupport {
  80. bmdStreamingEncodingModeNotSupported = 0,
  81. bmdStreamingEncodingModeSupported,
  82. bmdStreamingEncodingModeSupportedWithChanges
  83. };
  84. /* Enum BMDStreamingVideoCodec - Video codecs */
  85. typedef uint32_t BMDStreamingVideoCodec;
  86. enum _BMDStreamingVideoCodec {
  87. bmdStreamingVideoCodecH264 = /* 'H264' */ 0x48323634
  88. };
  89. /* Enum BMDStreamingH264Profile - H264 encoding profile */
  90. typedef uint32_t BMDStreamingH264Profile;
  91. enum _BMDStreamingH264Profile {
  92. bmdStreamingH264ProfileHigh = /* 'high' */ 0x68696768,
  93. bmdStreamingH264ProfileMain = /* 'main' */ 0x6D61696E,
  94. bmdStreamingH264ProfileBaseline = /* 'base' */ 0x62617365
  95. };
  96. /* Enum BMDStreamingH264Level - H264 encoding level */
  97. typedef uint32_t BMDStreamingH264Level;
  98. enum _BMDStreamingH264Level {
  99. bmdStreamingH264Level12 = /* 'lv12' */ 0x6C763132,
  100. bmdStreamingH264Level13 = /* 'lv13' */ 0x6C763133,
  101. bmdStreamingH264Level2 = /* 'lv2 ' */ 0x6C763220,
  102. bmdStreamingH264Level21 = /* 'lv21' */ 0x6C763231,
  103. bmdStreamingH264Level22 = /* 'lv22' */ 0x6C763232,
  104. bmdStreamingH264Level3 = /* 'lv3 ' */ 0x6C763320,
  105. bmdStreamingH264Level31 = /* 'lv31' */ 0x6C763331,
  106. bmdStreamingH264Level32 = /* 'lv32' */ 0x6C763332,
  107. bmdStreamingH264Level4 = /* 'lv4 ' */ 0x6C763420,
  108. bmdStreamingH264Level41 = /* 'lv41' */ 0x6C763431,
  109. bmdStreamingH264Level42 = /* 'lv42' */ 0x6C763432
  110. };
  111. /* Enum BMDStreamingH264EntropyCoding - H264 entropy coding */
  112. typedef uint32_t BMDStreamingH264EntropyCoding;
  113. enum _BMDStreamingH264EntropyCoding {
  114. bmdStreamingH264EntropyCodingCAVLC = /* 'EVLC' */ 0x45564C43,
  115. bmdStreamingH264EntropyCodingCABAC = /* 'EBAC' */ 0x45424143
  116. };
  117. /* Enum BMDStreamingAudioCodec - Audio codecs */
  118. typedef uint32_t BMDStreamingAudioCodec;
  119. enum _BMDStreamingAudioCodec {
  120. bmdStreamingAudioCodecAAC = /* 'AAC ' */ 0x41414320
  121. };
  122. /* Enum BMDStreamingEncodingModePropertyID - Encoding mode properties */
  123. typedef uint32_t BMDStreamingEncodingModePropertyID;
  124. enum _BMDStreamingEncodingModePropertyID {
  125. /* Integers, Video Properties */
  126. bmdStreamingEncodingPropertyVideoFrameRate = /* 'vfrt' */ 0x76667274, // Uses values of type BMDStreamingEncodingFrameRate
  127. bmdStreamingEncodingPropertyVideoBitRateKbps = /* 'vbrt' */ 0x76627274,
  128. /* Integers, H264 Properties */
  129. bmdStreamingEncodingPropertyH264Profile = /* 'hprf' */ 0x68707266,
  130. bmdStreamingEncodingPropertyH264Level = /* 'hlvl' */ 0x686C766C,
  131. bmdStreamingEncodingPropertyH264EntropyCoding = /* 'hent' */ 0x68656E74,
  132. /* Flags, H264 Properties */
  133. bmdStreamingEncodingPropertyH264HasBFrames = /* 'hBfr' */ 0x68426672,
  134. /* Integers, Audio Properties */
  135. bmdStreamingEncodingPropertyAudioCodec = /* 'acdc' */ 0x61636463,
  136. bmdStreamingEncodingPropertyAudioSampleRate = /* 'asrt' */ 0x61737274,
  137. bmdStreamingEncodingPropertyAudioChannelCount = /* 'achc' */ 0x61636863,
  138. bmdStreamingEncodingPropertyAudioBitRateKbps = /* 'abrt' */ 0x61627274
  139. };
  140. #if defined(__cplusplus)
  141. // Forward Declarations
  142. class IBMDStreamingDeviceNotificationCallback;
  143. class IBMDStreamingH264InputCallback;
  144. class IBMDStreamingDiscovery;
  145. class IBMDStreamingVideoEncodingMode;
  146. class IBMDStreamingMutableVideoEncodingMode;
  147. class IBMDStreamingVideoEncodingModePresetIterator;
  148. class IBMDStreamingDeviceInput;
  149. class IBMDStreamingH264NALPacket;
  150. class IBMDStreamingAudioPacket;
  151. class IBMDStreamingMPEG2TSPacket;
  152. class IBMDStreamingH264NALParser;
  153. /* Interface IBMDStreamingDeviceNotificationCallback - Device notification callbacks. */
  154. class BMD_PUBLIC IBMDStreamingDeviceNotificationCallback : public IUnknown
  155. {
  156. public:
  157. virtual HRESULT StreamingDeviceArrived (/* in */ IDeckLink* device) = 0;
  158. virtual HRESULT StreamingDeviceRemoved (/* in */ IDeckLink* device) = 0;
  159. virtual HRESULT StreamingDeviceModeChanged (/* in */ IDeckLink* device, /* in */ BMDStreamingDeviceMode mode) = 0;
  160. protected:
  161. virtual ~IBMDStreamingDeviceNotificationCallback () {} // call Release method to drop reference count
  162. };
  163. /* Interface IBMDStreamingH264InputCallback - H264 input callbacks. */
  164. class BMD_PUBLIC IBMDStreamingH264InputCallback : public IUnknown
  165. {
  166. public:
  167. virtual HRESULT H264NALPacketArrived (/* in */ IBMDStreamingH264NALPacket* nalPacket) = 0;
  168. virtual HRESULT H264AudioPacketArrived (/* in */ IBMDStreamingAudioPacket* audioPacket) = 0;
  169. virtual HRESULT MPEG2TSPacketArrived (/* in */ IBMDStreamingMPEG2TSPacket* tsPacket) = 0;
  170. virtual HRESULT H264VideoInputConnectorScanningChanged (void) = 0;
  171. virtual HRESULT H264VideoInputConnectorChanged (void) = 0;
  172. virtual HRESULT H264VideoInputModeChanged (void) = 0;
  173. protected:
  174. virtual ~IBMDStreamingH264InputCallback () {} // call Release method to drop reference count
  175. };
  176. /* Interface IBMDStreamingDiscovery - Installs device notifications */
  177. class BMD_PUBLIC IBMDStreamingDiscovery : public IUnknown
  178. {
  179. public:
  180. virtual HRESULT InstallDeviceNotifications (/* in */ IBMDStreamingDeviceNotificationCallback* theCallback) = 0;
  181. virtual HRESULT UninstallDeviceNotifications (void) = 0;
  182. protected:
  183. virtual ~IBMDStreamingDiscovery () {} // call Release method to drop reference count
  184. };
  185. /* Interface IBMDStreamingVideoEncodingMode - Represents an encoded video mode. */
  186. class BMD_PUBLIC IBMDStreamingVideoEncodingMode : public IUnknown
  187. {
  188. public:
  189. virtual HRESULT GetName (/* out */ CFStringRef* name) = 0;
  190. virtual unsigned int GetPresetID (void) = 0;
  191. virtual unsigned int GetSourcePositionX (void) = 0;
  192. virtual unsigned int GetSourcePositionY (void) = 0;
  193. virtual unsigned int GetSourceWidth (void) = 0;
  194. virtual unsigned int GetSourceHeight (void) = 0;
  195. virtual unsigned int GetDestWidth (void) = 0;
  196. virtual unsigned int GetDestHeight (void) = 0;
  197. virtual HRESULT GetFlag (/* in */ BMDStreamingEncodingModePropertyID cfgID, /* out */ bool* value) = 0;
  198. virtual HRESULT GetInt (/* in */ BMDStreamingEncodingModePropertyID cfgID, /* out */ int64_t* value) = 0;
  199. virtual HRESULT GetFloat (/* in */ BMDStreamingEncodingModePropertyID cfgID, /* out */ double* value) = 0;
  200. virtual HRESULT GetString (/* in */ BMDStreamingEncodingModePropertyID cfgID, /* out */ CFStringRef* value) = 0;
  201. virtual HRESULT CreateMutableVideoEncodingMode (/* out */ IBMDStreamingMutableVideoEncodingMode** newEncodingMode) = 0; // Creates a mutable copy of the encoding mode
  202. protected:
  203. virtual ~IBMDStreamingVideoEncodingMode () {} // call Release method to drop reference count
  204. };
  205. /* Interface IBMDStreamingMutableVideoEncodingMode - Represents a mutable encoded video mode. */
  206. class BMD_PUBLIC IBMDStreamingMutableVideoEncodingMode : public IBMDStreamingVideoEncodingMode
  207. {
  208. public:
  209. virtual HRESULT SetSourceRect (/* in */ uint32_t posX, /* in */ uint32_t posY, /* in */ uint32_t width, /* in */ uint32_t height) = 0;
  210. virtual HRESULT SetDestSize (/* in */ uint32_t width, /* in */ uint32_t height) = 0;
  211. virtual HRESULT SetFlag (/* in */ BMDStreamingEncodingModePropertyID cfgID, /* in */ bool value) = 0;
  212. virtual HRESULT SetInt (/* in */ BMDStreamingEncodingModePropertyID cfgID, /* in */ int64_t value) = 0;
  213. virtual HRESULT SetFloat (/* in */ BMDStreamingEncodingModePropertyID cfgID, /* in */ double value) = 0;
  214. virtual HRESULT SetString (/* in */ BMDStreamingEncodingModePropertyID cfgID, /* in */ CFStringRef value) = 0;
  215. protected:
  216. virtual ~IBMDStreamingMutableVideoEncodingMode () {} // call Release method to drop reference count
  217. };
  218. /* Interface IBMDStreamingVideoEncodingModePresetIterator - Enumerates encoding mode presets */
  219. class BMD_PUBLIC IBMDStreamingVideoEncodingModePresetIterator : public IUnknown
  220. {
  221. public:
  222. virtual HRESULT Next (/* out */ IBMDStreamingVideoEncodingMode** videoEncodingMode) = 0;
  223. protected:
  224. virtual ~IBMDStreamingVideoEncodingModePresetIterator () {} // call Release method to drop reference count
  225. };
  226. /* Interface IBMDStreamingDeviceInput - Created by QueryInterface from IDeckLink */
  227. class BMD_PUBLIC IBMDStreamingDeviceInput : public IUnknown
  228. {
  229. public:
  230. /* Input modes */
  231. virtual HRESULT DoesSupportVideoInputMode (/* in */ BMDDisplayMode inputMode, /* out */ bool* result) = 0;
  232. virtual HRESULT GetVideoInputModeIterator (/* out */ IDeckLinkDisplayModeIterator** iterator) = 0;
  233. virtual HRESULT SetVideoInputMode (/* in */ BMDDisplayMode inputMode) = 0;
  234. virtual HRESULT GetCurrentDetectedVideoInputMode (/* out */ BMDDisplayMode* detectedMode) = 0;
  235. /* Capture modes */
  236. virtual HRESULT GetVideoEncodingMode (/* out */ IBMDStreamingVideoEncodingMode** encodingMode) = 0;
  237. virtual HRESULT GetVideoEncodingModePresetIterator (/* in */ BMDDisplayMode inputMode, /* out */ IBMDStreamingVideoEncodingModePresetIterator** iterator) = 0;
  238. virtual HRESULT DoesSupportVideoEncodingMode (/* in */ BMDDisplayMode inputMode, /* in */ IBMDStreamingVideoEncodingMode* encodingMode, /* out */ BMDStreamingEncodingSupport* result, /* out */ IBMDStreamingVideoEncodingMode** changedEncodingMode) = 0;
  239. virtual HRESULT SetVideoEncodingMode (/* in */ IBMDStreamingVideoEncodingMode* encodingMode) = 0;
  240. /* Input control */
  241. virtual HRESULT StartCapture (void) = 0;
  242. virtual HRESULT StopCapture (void) = 0;
  243. virtual HRESULT SetCallback (/* in */ IUnknown* theCallback) = 0;
  244. protected:
  245. virtual ~IBMDStreamingDeviceInput () {} // call Release method to drop reference count
  246. };
  247. /* Interface IBMDStreamingH264NALPacket - Represent an H.264 NAL packet */
  248. class BMD_PUBLIC IBMDStreamingH264NALPacket : public IUnknown
  249. {
  250. public:
  251. virtual long GetPayloadSize (void) = 0;
  252. virtual HRESULT GetBytes (/* out */ void** buffer) = 0;
  253. virtual HRESULT GetBytesWithSizePrefix (/* out */ void** buffer) = 0; // Contains a 32-bit unsigned big endian size prefix
  254. virtual HRESULT GetDisplayTime (/* in */ uint64_t requestedTimeScale, /* out */ uint64_t* displayTime) = 0;
  255. virtual HRESULT GetPacketIndex (/* out */ uint32_t* packetIndex) = 0; // Deprecated
  256. protected:
  257. virtual ~IBMDStreamingH264NALPacket () {} // call Release method to drop reference count
  258. };
  259. /* Interface IBMDStreamingAudioPacket - Represents a chunk of audio data */
  260. class BMD_PUBLIC IBMDStreamingAudioPacket : public IUnknown
  261. {
  262. public:
  263. virtual BMDStreamingAudioCodec GetCodec (void) = 0;
  264. virtual long GetPayloadSize (void) = 0;
  265. virtual HRESULT GetBytes (/* out */ void** buffer) = 0;
  266. virtual HRESULT GetPlayTime (/* in */ uint64_t requestedTimeScale, /* out */ uint64_t* playTime) = 0;
  267. virtual HRESULT GetPacketIndex (/* out */ uint32_t* packetIndex) = 0; // Deprecated
  268. protected:
  269. virtual ~IBMDStreamingAudioPacket () {} // call Release method to drop reference count
  270. };
  271. /* Interface IBMDStreamingMPEG2TSPacket - Represent an MPEG2 Transport Stream packet */
  272. class BMD_PUBLIC IBMDStreamingMPEG2TSPacket : public IUnknown
  273. {
  274. public:
  275. virtual long GetPayloadSize (void) = 0;
  276. virtual HRESULT GetBytes (/* out */ void** buffer) = 0;
  277. protected:
  278. virtual ~IBMDStreamingMPEG2TSPacket () {} // call Release method to drop reference count
  279. };
  280. /* Interface IBMDStreamingH264NALParser - For basic NAL parsing */
  281. class BMD_PUBLIC IBMDStreamingH264NALParser : public IUnknown
  282. {
  283. public:
  284. virtual HRESULT IsNALSequenceParameterSet (/* in */ IBMDStreamingH264NALPacket* nal) = 0;
  285. virtual HRESULT IsNALPictureParameterSet (/* in */ IBMDStreamingH264NALPacket* nal) = 0;
  286. virtual HRESULT GetProfileAndLevelFromSPS (/* in */ IBMDStreamingH264NALPacket* nal, /* out */ uint32_t* profileIdc, /* out */ uint32_t* profileCompatability, /* out */ uint32_t* levelIdc) = 0;
  287. protected:
  288. virtual ~IBMDStreamingH264NALParser () {} // call Release method to drop reference count
  289. };
  290. /* Functions */
  291. extern "C" {
  292. IBMDStreamingDiscovery* BMD_PUBLIC CreateBMDStreamingDiscoveryInstance(void);
  293. IBMDStreamingH264NALParser* BMD_PUBLIC CreateBMDStreamingH264NALParser(void);
  294. }
  295. #endif /* defined(__cplusplus) */
  296. #endif /* defined(BMD_DECKLINKAPISTREAMING_H) */