2017-04-19 19:54:15 +00:00
/* -LICENSE-START-
* * Copyright ( c ) 2013 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 :
2019-07-27 12:47:10 +00:00
* *
2017-04-19 19:54:15 +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 .
2019-07-27 12:47:10 +00:00
* *
2017-04-19 19:54:15 +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_DECKLINKAPI_v9_9_H
# define BMD_DECKLINKAPI_v9_9_H
# include "DeckLinkAPI.h"
2020-12-22 17:32:50 +00:00
# include "DeckLinkAPI_v10_11.h"
2017-04-19 19:54:15 +00:00
// Interface ID Declarations
BMD_CONST REFIID IID_IDeckLinkOutput_v9_9 = /* A3EF0963-0862-44ED-92A9-EE89ABF431C7 */ { 0xA3 , 0xEF , 0x09 , 0x63 , 0x08 , 0x62 , 0x44 , 0xED , 0x92 , 0xA9 , 0xEE , 0x89 , 0xAB , 0xF4 , 0x31 , 0xC7 } ;
# if defined(__cplusplus)
// Forward Declarations
class IDeckLinkOutput_v9_9 ;
/* Interface IDeckLinkOutput - Created by QueryInterface from IDeckLink. */
class IDeckLinkOutput_v9_9 : public IUnknown
{
public :
2020-12-22 17:32:50 +00:00
virtual HRESULT DoesSupportVideoMode ( /* in */ BMDDisplayMode displayMode , /* in */ BMDPixelFormat pixelFormat , /* in */ BMDVideoOutputFlags flags , /* out */ BMDDisplayModeSupport_v10_11 * result , /* out */ IDeckLinkDisplayMode * * resultDisplayMode ) = 0 ;
2017-04-19 19:54:15 +00:00
virtual HRESULT GetDisplayModeIterator ( /* out */ IDeckLinkDisplayModeIterator * * iterator ) = 0 ;
2019-07-27 12:47:10 +00:00
2017-04-19 19:54:15 +00:00
virtual HRESULT SetScreenPreviewCallback ( /* in */ IDeckLinkScreenPreviewCallback * previewCallback ) = 0 ;
2019-07-27 12:47:10 +00:00
2017-04-19 19:54:15 +00:00
/* Video Output */
2019-07-27 12:47:10 +00:00
2017-04-19 19:54:15 +00:00
virtual HRESULT EnableVideoOutput ( /* in */ BMDDisplayMode displayMode , /* in */ BMDVideoOutputFlags flags ) = 0 ;
virtual HRESULT DisableVideoOutput ( void ) = 0 ;
2019-07-27 12:47:10 +00:00
2017-04-19 19:54:15 +00:00
virtual HRESULT SetVideoOutputFrameMemoryAllocator ( /* in */ IDeckLinkMemoryAllocator * theAllocator ) = 0 ;
virtual HRESULT CreateVideoFrame ( /* in */ int32_t width , /* in */ int32_t height , /* in */ int32_t rowBytes , /* in */ BMDPixelFormat pixelFormat , /* in */ BMDFrameFlags flags , /* out */ IDeckLinkMutableVideoFrame * * outFrame ) = 0 ;
virtual HRESULT CreateAncillaryData ( /* in */ BMDPixelFormat pixelFormat , /* out */ IDeckLinkVideoFrameAncillary * * outBuffer ) = 0 ;
2019-07-27 12:47:10 +00:00
2017-04-19 19:54:15 +00:00
virtual HRESULT DisplayVideoFrameSync ( /* in */ IDeckLinkVideoFrame * theFrame ) = 0 ;
virtual HRESULT ScheduleVideoFrame ( /* in */ IDeckLinkVideoFrame * theFrame , /* in */ BMDTimeValue displayTime , /* in */ BMDTimeValue displayDuration , /* in */ BMDTimeScale timeScale ) = 0 ;
virtual HRESULT SetScheduledFrameCompletionCallback ( /* in */ IDeckLinkVideoOutputCallback * theCallback ) = 0 ;
virtual HRESULT GetBufferedVideoFrameCount ( /* out */ uint32_t * bufferedFrameCount ) = 0 ;
2019-07-27 12:47:10 +00:00
2017-04-19 19:54:15 +00:00
/* Audio Output */
2019-07-27 12:47:10 +00:00
2017-04-19 19:54:15 +00:00
virtual HRESULT EnableAudioOutput ( /* in */ BMDAudioSampleRate sampleRate , /* in */ BMDAudioSampleType sampleType , /* in */ uint32_t channelCount , /* in */ BMDAudioOutputStreamType streamType ) = 0 ;
virtual HRESULT DisableAudioOutput ( void ) = 0 ;
2019-07-27 12:47:10 +00:00
2017-04-19 19:54:15 +00:00
virtual HRESULT WriteAudioSamplesSync ( /* in */ void * buffer , /* in */ uint32_t sampleFrameCount , /* out */ uint32_t * sampleFramesWritten ) = 0 ;
2019-07-27 12:47:10 +00:00
2017-04-19 19:54:15 +00:00
virtual HRESULT BeginAudioPreroll ( void ) = 0 ;
virtual HRESULT EndAudioPreroll ( void ) = 0 ;
virtual HRESULT ScheduleAudioSamples ( /* in */ void * buffer , /* in */ uint32_t sampleFrameCount , /* in */ BMDTimeValue streamTime , /* in */ BMDTimeScale timeScale , /* out */ uint32_t * sampleFramesWritten ) = 0 ;
2019-07-27 12:47:10 +00:00
2017-04-19 19:54:15 +00:00
virtual HRESULT GetBufferedAudioSampleFrameCount ( /* out */ uint32_t * bufferedSampleFrameCount ) = 0 ;
virtual HRESULT FlushBufferedAudioSamples ( void ) = 0 ;
2019-07-27 12:47:10 +00:00
2017-04-19 19:54:15 +00:00
virtual HRESULT SetAudioCallback ( /* in */ IDeckLinkAudioOutputCallback * theCallback ) = 0 ;
2019-07-27 12:47:10 +00:00
2017-04-19 19:54:15 +00:00
/* Output Control */
2019-07-27 12:47:10 +00:00
2017-04-19 19:54:15 +00:00
virtual HRESULT StartScheduledPlayback ( /* in */ BMDTimeValue playbackStartTime , /* in */ BMDTimeScale timeScale , /* in */ double playbackSpeed ) = 0 ;
virtual HRESULT StopScheduledPlayback ( /* in */ BMDTimeValue stopPlaybackAtTime , /* out */ BMDTimeValue * actualStopTime , /* in */ BMDTimeScale timeScale ) = 0 ;
virtual HRESULT IsScheduledPlaybackRunning ( /* out */ bool * active ) = 0 ;
virtual HRESULT GetScheduledStreamTime ( /* in */ BMDTimeScale desiredTimeScale , /* out */ BMDTimeValue * streamTime , /* out */ double * playbackSpeed ) = 0 ;
virtual HRESULT GetReferenceStatus ( /* out */ BMDReferenceStatus * referenceStatus ) = 0 ;
2019-07-27 12:47:10 +00:00
2017-04-19 19:54:15 +00:00
/* Hardware Timing */
2019-07-27 12:47:10 +00:00
2017-04-19 19:54:15 +00:00
virtual HRESULT GetHardwareReferenceClock ( /* in */ BMDTimeScale desiredTimeScale , /* out */ BMDTimeValue * hardwareTime , /* out */ BMDTimeValue * timeInFrame , /* out */ BMDTimeValue * ticksPerFrame ) = 0 ;
2019-07-27 12:47:10 +00:00
2017-04-19 19:54:15 +00:00
protected :
virtual ~ IDeckLinkOutput_v9_9 ( ) { } ; // call Release method to drop reference count
} ;
# endif // defined(__cplusplus)
# endif /* defined(BMD_DECKLINKAPI_v9_9_H) */