2015-02-18 15:15:38 -08:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include "decklink-device.hpp"
|
|
|
|
|
|
|
|
class DeckLinkDeviceInstance : public IDeckLinkInputCallback {
|
|
|
|
protected:
|
|
|
|
struct obs_source_frame currentFrame;
|
|
|
|
struct obs_source_audio currentPacket;
|
|
|
|
DeckLink *decklink = nullptr;
|
|
|
|
DeckLinkDevice *device = nullptr;
|
|
|
|
DeckLinkDeviceMode *mode = nullptr;
|
|
|
|
ComPtr<IDeckLinkInput> input;
|
|
|
|
volatile long refCount = 1;
|
|
|
|
|
|
|
|
void HandleAudioPacket(IDeckLinkAudioInputPacket *audioPacket,
|
|
|
|
const uint64_t timestamp);
|
|
|
|
void HandleVideoFrame(IDeckLinkVideoInputFrame *videoFrame,
|
|
|
|
const uint64_t timestamp);
|
|
|
|
|
|
|
|
public:
|
|
|
|
DeckLinkDeviceInstance(DeckLink *decklink, DeckLinkDevice *device);
|
2015-07-11 14:22:14 -07:00
|
|
|
virtual ~DeckLinkDeviceInstance();
|
2015-02-18 15:15:38 -08:00
|
|
|
|
|
|
|
inline DeckLinkDevice *GetDevice() const {return device;}
|
|
|
|
inline long long GetActiveModeId() const
|
|
|
|
{
|
|
|
|
return mode ? mode->GetId() : 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
inline DeckLinkDeviceMode *GetMode() const {return mode;}
|
|
|
|
|
|
|
|
bool StartCapture(DeckLinkDeviceMode *mode);
|
|
|
|
bool StopCapture(void);
|
|
|
|
|
|
|
|
HRESULT STDMETHODCALLTYPE VideoInputFrameArrived(
|
|
|
|
IDeckLinkVideoInputFrame *videoFrame,
|
|
|
|
IDeckLinkAudioInputPacket *audioPacket);
|
|
|
|
HRESULT STDMETHODCALLTYPE VideoInputFormatChanged(
|
|
|
|
BMDVideoInputFormatChangedEvents events,
|
|
|
|
IDeckLinkDisplayMode *newMode,
|
|
|
|
BMDDetectedVideoInputFormatFlags detectedSignalFlags);
|
|
|
|
|
|
|
|
ULONG STDMETHODCALLTYPE AddRef(void);
|
|
|
|
HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid, LPVOID *ppv);
|
|
|
|
ULONG STDMETHODCALLTYPE Release(void);
|
|
|
|
};
|