2012-03-22 06:04:31 +00:00
/* -LICENSE-START-
2022-03-07 16:26:50 +00:00
* * Copyright ( c ) 2021 Blackmagic Design
2012-03-22 06:04:31 +00:00
* *
* * 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 :
2022-03-07 16:26:50 +00:00
* *
2012-03-22 06:04:31 +00:00
* * 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 .
2022-03-07 16:26:50 +00:00
* *
2012-03-22 06:04:31 +00:00
* * 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_DECKLINKAPISTREAMING_H
# define BMD_DECKLINKAPISTREAMING_H
2014-12-03 13:42:43 +00:00
# ifndef BMD_CONST
# if defined(_MSC_VER)
# define BMD_CONST __declspec(selectany) static const
# else
# define BMD_CONST static const
# endif
# endif
2020-02-27 11:32:17 +00:00
# ifndef BMD_PUBLIC
# define BMD_PUBLIC
# endif
2012-03-22 06:04:31 +00:00
// Type Declarations
// Interface ID Declarations
2022-03-07 16:26:50 +00:00
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 } ;
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 } ;
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 } ;
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 } ;
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 } ;
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 } ;
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 } ;
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 } ;
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 } ;
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 } ;
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 } ;
2012-03-22 06:04:31 +00:00
/* Enum BMDStreamingDeviceMode - Device modes */
typedef uint32_t BMDStreamingDeviceMode ;
enum _BMDStreamingDeviceMode {
2022-03-07 16:26:50 +00:00
bmdStreamingDeviceIdle = /* 'idle' */ 0x69646C65 ,
bmdStreamingDeviceEncoding = /* 'enco' */ 0x656E636F ,
bmdStreamingDeviceStopping = /* 'stop' */ 0x73746F70 ,
bmdStreamingDeviceUnknown = /* 'munk' */ 0x6D756E6B
2012-03-22 06:04:31 +00:00
} ;
/* Enum BMDStreamingEncodingFrameRate - Encoded frame rates */
typedef uint32_t BMDStreamingEncodingFrameRate ;
enum _BMDStreamingEncodingFrameRate {
/* Interlaced rates */
2022-03-07 16:26:50 +00:00
bmdStreamingEncodedFrameRate50i = /* 'e50i' */ 0x65353069 ,
bmdStreamingEncodedFrameRate5994i = /* 'e59i' */ 0x65353969 ,
bmdStreamingEncodedFrameRate60i = /* 'e60i' */ 0x65363069 ,
2012-03-22 06:04:31 +00:00
/* Progressive rates */
2022-03-07 16:26:50 +00:00
bmdStreamingEncodedFrameRate2398p = /* 'e23p' */ 0x65323370 ,
bmdStreamingEncodedFrameRate24p = /* 'e24p' */ 0x65323470 ,
bmdStreamingEncodedFrameRate25p = /* 'e25p' */ 0x65323570 ,
bmdStreamingEncodedFrameRate2997p = /* 'e29p' */ 0x65323970 ,
bmdStreamingEncodedFrameRate30p = /* 'e30p' */ 0x65333070 ,
bmdStreamingEncodedFrameRate50p = /* 'e50p' */ 0x65353070 ,
bmdStreamingEncodedFrameRate5994p = /* 'e59p' */ 0x65353970 ,
bmdStreamingEncodedFrameRate60p = /* 'e60p' */ 0x65363070
2012-03-22 06:04:31 +00:00
} ;
/* Enum BMDStreamingEncodingSupport - Output encoding mode supported flag */
typedef uint32_t BMDStreamingEncodingSupport ;
enum _BMDStreamingEncodingSupport {
bmdStreamingEncodingModeNotSupported = 0 ,
2022-03-07 16:26:50 +00:00
bmdStreamingEncodingModeSupported ,
bmdStreamingEncodingModeSupportedWithChanges
2012-03-22 06:04:31 +00:00
} ;
/* Enum BMDStreamingVideoCodec - Video codecs */
typedef uint32_t BMDStreamingVideoCodec ;
enum _BMDStreamingVideoCodec {
2022-03-07 16:26:50 +00:00
bmdStreamingVideoCodecH264 = /* 'H264' */ 0x48323634
2012-03-22 06:04:31 +00:00
} ;
/* Enum BMDStreamingH264Profile - H264 encoding profile */
typedef uint32_t BMDStreamingH264Profile ;
enum _BMDStreamingH264Profile {
2022-03-07 16:26:50 +00:00
bmdStreamingH264ProfileHigh = /* 'high' */ 0x68696768 ,
bmdStreamingH264ProfileMain = /* 'main' */ 0x6D61696E ,
bmdStreamingH264ProfileBaseline = /* 'base' */ 0x62617365
2012-03-22 06:04:31 +00:00
} ;
/* Enum BMDStreamingH264Level - H264 encoding level */
typedef uint32_t BMDStreamingH264Level ;
enum _BMDStreamingH264Level {
2022-03-07 16:26:50 +00:00
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
2012-03-22 06:04:31 +00:00
} ;
/* Enum BMDStreamingH264EntropyCoding - H264 entropy coding */
typedef uint32_t BMDStreamingH264EntropyCoding ;
enum _BMDStreamingH264EntropyCoding {
2022-03-07 16:26:50 +00:00
bmdStreamingH264EntropyCodingCAVLC = /* 'EVLC' */ 0x45564C43 ,
bmdStreamingH264EntropyCodingCABAC = /* 'EBAC' */ 0x45424143
2012-03-22 06:04:31 +00:00
} ;
/* Enum BMDStreamingAudioCodec - Audio codecs */
typedef uint32_t BMDStreamingAudioCodec ;
enum _BMDStreamingAudioCodec {
2022-03-07 16:26:50 +00:00
bmdStreamingAudioCodecAAC = /* 'AAC ' */ 0x41414320
2012-03-22 06:04:31 +00:00
} ;
/* Enum BMDStreamingEncodingModePropertyID - Encoding mode properties */
typedef uint32_t BMDStreamingEncodingModePropertyID ;
enum _BMDStreamingEncodingModePropertyID {
/* Integers, Video Properties */
2022-03-07 16:26:50 +00:00
bmdStreamingEncodingPropertyVideoFrameRate = /* 'vfrt' */ 0x76667274 , // Uses values of type BMDStreamingEncodingFrameRate
bmdStreamingEncodingPropertyVideoBitRateKbps = /* 'vbrt' */ 0x76627274 ,
2012-03-22 06:04:31 +00:00
/* Integers, H264 Properties */
2022-03-07 16:26:50 +00:00
bmdStreamingEncodingPropertyH264Profile = /* 'hprf' */ 0x68707266 ,
bmdStreamingEncodingPropertyH264Level = /* 'hlvl' */ 0x686C766C ,
bmdStreamingEncodingPropertyH264EntropyCoding = /* 'hent' */ 0x68656E74 ,
2012-03-22 06:04:31 +00:00
/* Flags, H264 Properties */
2022-03-07 16:26:50 +00:00
bmdStreamingEncodingPropertyH264HasBFrames = /* 'hBfr' */ 0x68426672 ,
2012-03-22 06:04:31 +00:00
/* Integers, Audio Properties */
2022-03-07 16:26:50 +00:00
bmdStreamingEncodingPropertyAudioCodec = /* 'acdc' */ 0x61636463 ,
bmdStreamingEncodingPropertyAudioSampleRate = /* 'asrt' */ 0x61737274 ,
bmdStreamingEncodingPropertyAudioChannelCount = /* 'achc' */ 0x61636863 ,
bmdStreamingEncodingPropertyAudioBitRateKbps = /* 'abrt' */ 0x61627274
2012-03-22 06:04:31 +00:00
} ;
2022-03-07 16:26:50 +00:00
# if defined(__cplusplus)
2012-03-22 06:04:31 +00:00
// Forward Declarations
class IBMDStreamingDeviceNotificationCallback ;
class IBMDStreamingH264InputCallback ;
class IBMDStreamingDiscovery ;
class IBMDStreamingVideoEncodingMode ;
class IBMDStreamingMutableVideoEncodingMode ;
class IBMDStreamingVideoEncodingModePresetIterator ;
class IBMDStreamingDeviceInput ;
class IBMDStreamingH264NALPacket ;
class IBMDStreamingAudioPacket ;
class IBMDStreamingMPEG2TSPacket ;
class IBMDStreamingH264NALParser ;
/* Interface IBMDStreamingDeviceNotificationCallback - Device notification callbacks. */
2020-02-27 11:32:17 +00:00
class BMD_PUBLIC IBMDStreamingDeviceNotificationCallback : public IUnknown
2012-03-22 06:04:31 +00:00
{
public :
virtual HRESULT StreamingDeviceArrived ( /* in */ IDeckLink * device ) = 0 ;
virtual HRESULT StreamingDeviceRemoved ( /* in */ IDeckLink * device ) = 0 ;
virtual HRESULT StreamingDeviceModeChanged ( /* in */ IDeckLink * device , /* in */ BMDStreamingDeviceMode mode ) = 0 ;
protected :
2014-12-03 13:42:43 +00:00
virtual ~ IBMDStreamingDeviceNotificationCallback ( ) { } // call Release method to drop reference count
2012-03-22 06:04:31 +00:00
} ;
/* Interface IBMDStreamingH264InputCallback - H264 input callbacks. */
2020-02-27 11:32:17 +00:00
class BMD_PUBLIC IBMDStreamingH264InputCallback : public IUnknown
2012-03-22 06:04:31 +00:00
{
public :
virtual HRESULT H264NALPacketArrived ( /* in */ IBMDStreamingH264NALPacket * nalPacket ) = 0 ;
virtual HRESULT H264AudioPacketArrived ( /* in */ IBMDStreamingAudioPacket * audioPacket ) = 0 ;
virtual HRESULT MPEG2TSPacketArrived ( /* in */ IBMDStreamingMPEG2TSPacket * tsPacket ) = 0 ;
virtual HRESULT H264VideoInputConnectorScanningChanged ( void ) = 0 ;
virtual HRESULT H264VideoInputConnectorChanged ( void ) = 0 ;
virtual HRESULT H264VideoInputModeChanged ( void ) = 0 ;
protected :
2014-12-03 13:42:43 +00:00
virtual ~ IBMDStreamingH264InputCallback ( ) { } // call Release method to drop reference count
2012-03-22 06:04:31 +00:00
} ;
/* Interface IBMDStreamingDiscovery - Installs device notifications */
2020-02-27 11:32:17 +00:00
class BMD_PUBLIC IBMDStreamingDiscovery : public IUnknown
2012-03-22 06:04:31 +00:00
{
public :
virtual HRESULT InstallDeviceNotifications ( /* in */ IBMDStreamingDeviceNotificationCallback * theCallback ) = 0 ;
virtual HRESULT UninstallDeviceNotifications ( void ) = 0 ;
protected :
2014-12-03 13:42:43 +00:00
virtual ~ IBMDStreamingDiscovery ( ) { } // call Release method to drop reference count
2012-03-22 06:04:31 +00:00
} ;
/* Interface IBMDStreamingVideoEncodingMode - Represents an encoded video mode. */
2020-02-27 11:32:17 +00:00
class BMD_PUBLIC IBMDStreamingVideoEncodingMode : public IUnknown
2012-03-22 06:04:31 +00:00
{
public :
2022-03-07 16:26:50 +00:00
virtual HRESULT GetName ( /* out */ CFStringRef * name ) = 0 ;
2012-03-22 06:04:31 +00:00
virtual unsigned int GetPresetID ( void ) = 0 ;
virtual unsigned int GetSourcePositionX ( void ) = 0 ;
virtual unsigned int GetSourcePositionY ( void ) = 0 ;
virtual unsigned int GetSourceWidth ( void ) = 0 ;
virtual unsigned int GetSourceHeight ( void ) = 0 ;
virtual unsigned int GetDestWidth ( void ) = 0 ;
virtual unsigned int GetDestHeight ( void ) = 0 ;
virtual HRESULT GetFlag ( /* in */ BMDStreamingEncodingModePropertyID cfgID , /* out */ bool * value ) = 0 ;
virtual HRESULT GetInt ( /* in */ BMDStreamingEncodingModePropertyID cfgID , /* out */ int64_t * value ) = 0 ;
virtual HRESULT GetFloat ( /* in */ BMDStreamingEncodingModePropertyID cfgID , /* out */ double * value ) = 0 ;
2022-03-07 16:26:50 +00:00
virtual HRESULT GetString ( /* in */ BMDStreamingEncodingModePropertyID cfgID , /* out */ CFStringRef * value ) = 0 ;
virtual HRESULT CreateMutableVideoEncodingMode ( /* out */ IBMDStreamingMutableVideoEncodingMode * * newEncodingMode ) = 0 ; // Creates a mutable copy of the encoding mode
2012-03-22 06:04:31 +00:00
protected :
2014-12-03 13:42:43 +00:00
virtual ~ IBMDStreamingVideoEncodingMode ( ) { } // call Release method to drop reference count
2012-03-22 06:04:31 +00:00
} ;
/* Interface IBMDStreamingMutableVideoEncodingMode - Represents a mutable encoded video mode. */
2020-02-27 11:32:17 +00:00
class BMD_PUBLIC IBMDStreamingMutableVideoEncodingMode : public IBMDStreamingVideoEncodingMode
2012-03-22 06:04:31 +00:00
{
public :
virtual HRESULT SetSourceRect ( /* in */ uint32_t posX , /* in */ uint32_t posY , /* in */ uint32_t width , /* in */ uint32_t height ) = 0 ;
virtual HRESULT SetDestSize ( /* in */ uint32_t width , /* in */ uint32_t height ) = 0 ;
virtual HRESULT SetFlag ( /* in */ BMDStreamingEncodingModePropertyID cfgID , /* in */ bool value ) = 0 ;
virtual HRESULT SetInt ( /* in */ BMDStreamingEncodingModePropertyID cfgID , /* in */ int64_t value ) = 0 ;
virtual HRESULT SetFloat ( /* in */ BMDStreamingEncodingModePropertyID cfgID , /* in */ double value ) = 0 ;
virtual HRESULT SetString ( /* in */ BMDStreamingEncodingModePropertyID cfgID , /* in */ CFStringRef value ) = 0 ;
protected :
2014-12-03 13:42:43 +00:00
virtual ~ IBMDStreamingMutableVideoEncodingMode ( ) { } // call Release method to drop reference count
2012-03-22 06:04:31 +00:00
} ;
/* Interface IBMDStreamingVideoEncodingModePresetIterator - Enumerates encoding mode presets */
2020-02-27 11:32:17 +00:00
class BMD_PUBLIC IBMDStreamingVideoEncodingModePresetIterator : public IUnknown
2012-03-22 06:04:31 +00:00
{
public :
virtual HRESULT Next ( /* out */ IBMDStreamingVideoEncodingMode * * videoEncodingMode ) = 0 ;
protected :
2014-12-03 13:42:43 +00:00
virtual ~ IBMDStreamingVideoEncodingModePresetIterator ( ) { } // call Release method to drop reference count
2012-03-22 06:04:31 +00:00
} ;
/* Interface IBMDStreamingDeviceInput - Created by QueryInterface from IDeckLink */
2020-02-27 11:32:17 +00:00
class BMD_PUBLIC IBMDStreamingDeviceInput : public IUnknown
2012-03-22 06:04:31 +00:00
{
public :
/* Input modes */
virtual HRESULT DoesSupportVideoInputMode ( /* in */ BMDDisplayMode inputMode , /* out */ bool * result ) = 0 ;
virtual HRESULT GetVideoInputModeIterator ( /* out */ IDeckLinkDisplayModeIterator * * iterator ) = 0 ;
virtual HRESULT SetVideoInputMode ( /* in */ BMDDisplayMode inputMode ) = 0 ;
virtual HRESULT GetCurrentDetectedVideoInputMode ( /* out */ BMDDisplayMode * detectedMode ) = 0 ;
/* Capture modes */
virtual HRESULT GetVideoEncodingMode ( /* out */ IBMDStreamingVideoEncodingMode * * encodingMode ) = 0 ;
virtual HRESULT GetVideoEncodingModePresetIterator ( /* in */ BMDDisplayMode inputMode , /* out */ IBMDStreamingVideoEncodingModePresetIterator * * iterator ) = 0 ;
virtual HRESULT DoesSupportVideoEncodingMode ( /* in */ BMDDisplayMode inputMode , /* in */ IBMDStreamingVideoEncodingMode * encodingMode , /* out */ BMDStreamingEncodingSupport * result , /* out */ IBMDStreamingVideoEncodingMode * * changedEncodingMode ) = 0 ;
virtual HRESULT SetVideoEncodingMode ( /* in */ IBMDStreamingVideoEncodingMode * encodingMode ) = 0 ;
/* Input control */
virtual HRESULT StartCapture ( void ) = 0 ;
virtual HRESULT StopCapture ( void ) = 0 ;
virtual HRESULT SetCallback ( /* in */ IUnknown * theCallback ) = 0 ;
protected :
2014-12-03 13:42:43 +00:00
virtual ~ IBMDStreamingDeviceInput ( ) { } // call Release method to drop reference count
2012-03-22 06:04:31 +00:00
} ;
/* Interface IBMDStreamingH264NALPacket - Represent an H.264 NAL packet */
2020-02-27 11:32:17 +00:00
class BMD_PUBLIC IBMDStreamingH264NALPacket : public IUnknown
2012-03-22 06:04:31 +00:00
{
public :
virtual long GetPayloadSize ( void ) = 0 ;
virtual HRESULT GetBytes ( /* out */ void * * buffer ) = 0 ;
2022-03-07 16:26:50 +00:00
virtual HRESULT GetBytesWithSizePrefix ( /* out */ void * * buffer ) = 0 ; // Contains a 32-bit unsigned big endian size prefix
2012-03-22 06:04:31 +00:00
virtual HRESULT GetDisplayTime ( /* in */ uint64_t requestedTimeScale , /* out */ uint64_t * displayTime ) = 0 ;
2022-03-07 16:26:50 +00:00
virtual HRESULT GetPacketIndex ( /* out */ uint32_t * packetIndex ) = 0 ; // Deprecated
2012-03-22 06:04:31 +00:00
protected :
2014-12-03 13:42:43 +00:00
virtual ~ IBMDStreamingH264NALPacket ( ) { } // call Release method to drop reference count
2012-03-22 06:04:31 +00:00
} ;
/* Interface IBMDStreamingAudioPacket - Represents a chunk of audio data */
2020-02-27 11:32:17 +00:00
class BMD_PUBLIC IBMDStreamingAudioPacket : public IUnknown
2012-03-22 06:04:31 +00:00
{
public :
virtual BMDStreamingAudioCodec GetCodec ( void ) = 0 ;
virtual long GetPayloadSize ( void ) = 0 ;
virtual HRESULT GetBytes ( /* out */ void * * buffer ) = 0 ;
virtual HRESULT GetPlayTime ( /* in */ uint64_t requestedTimeScale , /* out */ uint64_t * playTime ) = 0 ;
2022-03-07 16:26:50 +00:00
virtual HRESULT GetPacketIndex ( /* out */ uint32_t * packetIndex ) = 0 ; // Deprecated
2012-03-22 06:04:31 +00:00
protected :
2014-12-03 13:42:43 +00:00
virtual ~ IBMDStreamingAudioPacket ( ) { } // call Release method to drop reference count
2012-03-22 06:04:31 +00:00
} ;
/* Interface IBMDStreamingMPEG2TSPacket - Represent an MPEG2 Transport Stream packet */
2020-02-27 11:32:17 +00:00
class BMD_PUBLIC IBMDStreamingMPEG2TSPacket : public IUnknown
2012-03-22 06:04:31 +00:00
{
public :
virtual long GetPayloadSize ( void ) = 0 ;
virtual HRESULT GetBytes ( /* out */ void * * buffer ) = 0 ;
protected :
2014-12-03 13:42:43 +00:00
virtual ~ IBMDStreamingMPEG2TSPacket ( ) { } // call Release method to drop reference count
2012-03-22 06:04:31 +00:00
} ;
/* Interface IBMDStreamingH264NALParser - For basic NAL parsing */
2020-02-27 11:32:17 +00:00
class BMD_PUBLIC IBMDStreamingH264NALParser : public IUnknown
2012-03-22 06:04:31 +00:00
{
public :
virtual HRESULT IsNALSequenceParameterSet ( /* in */ IBMDStreamingH264NALPacket * nal ) = 0 ;
virtual HRESULT IsNALPictureParameterSet ( /* in */ IBMDStreamingH264NALPacket * nal ) = 0 ;
virtual HRESULT GetProfileAndLevelFromSPS ( /* in */ IBMDStreamingH264NALPacket * nal , /* out */ uint32_t * profileIdc , /* out */ uint32_t * profileCompatability , /* out */ uint32_t * levelIdc ) = 0 ;
protected :
2014-12-03 13:42:43 +00:00
virtual ~ IBMDStreamingH264NALParser ( ) { } // call Release method to drop reference count
2012-03-22 06:04:31 +00:00
} ;
/* Functions */
extern " C " {
2022-03-07 16:26:50 +00:00
IBMDStreamingDiscovery * BMD_PUBLIC CreateBMDStreamingDiscoveryInstance ( void ) ;
IBMDStreamingH264NALParser * BMD_PUBLIC CreateBMDStreamingH264NALParser ( void ) ;
2012-03-22 06:04:31 +00:00
2014-12-03 13:42:43 +00:00
}
2012-03-22 06:04:31 +00:00
2022-03-07 16:26:50 +00:00
# endif /* defined(__cplusplus) */
2012-03-22 06:04:31 +00:00
# endif /* defined(BMD_DECKLINKAPISTREAMING_H) */