| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 | 
							- #pragma once
 
- #define LOG(level, message, ...) blog(level, "%s: " message, "decklink", ##__VA_ARGS__)
 
- #include <obs-module.h>
 
- #include "decklink-device.hpp"
 
- #include "../../libobs/media-io/video-scaler.h"
 
- class AudioRepacker;
 
- class DecklinkBase;
 
- class DeckLinkDeviceInstance : public IDeckLinkInputCallback {
 
- protected:
 
- 	struct obs_source_frame2 currentFrame;
 
- 	struct obs_source_audio currentPacket;
 
- 	DecklinkBase            *decklink = nullptr;
 
- 	DeckLinkDevice          *device = nullptr;
 
- 	DeckLinkDeviceMode      *mode = nullptr;
 
- 	BMDVideoConnection      videoConnection;
 
- 	BMDAudioConnection      audioConnection;
 
- 	BMDDisplayMode          displayMode = bmdModeNTSC;
 
- 	BMDPixelFormat          pixelFormat = bmdFormat8BitYUV;
 
- 	video_colorspace        colorSpace = VIDEO_CS_DEFAULT;
 
- 	video_colorspace        activeColorSpace = VIDEO_CS_DEFAULT;
 
- 	video_range_type        colorRange = VIDEO_RANGE_DEFAULT;
 
- 	ComPtr<IDeckLinkInput>  input;
 
- 	ComPtr<IDeckLinkOutput> output;
 
- 	volatile long           refCount = 1;
 
- 	int64_t                 audioOffset = 0;
 
- 	uint64_t                nextAudioTS = 0;
 
- 	uint64_t                lastVideoTS = 0;
 
- 	AudioRepacker           *audioRepacker = nullptr;
 
- 	speaker_layout          channelFormat = SPEAKERS_STEREO;
 
- 	bool                    swap;
 
- 	IDeckLinkMutableVideoFrame *decklinkOutputFrame = nullptr;
 
- 	void FinalizeStream();
 
- 	void SetupVideoFormat(DeckLinkDeviceMode *mode_);
 
- 	void HandleAudioPacket(IDeckLinkAudioInputPacket *audioPacket,
 
- 			const uint64_t timestamp);
 
- 	void HandleVideoFrame(IDeckLinkVideoInputFrame *videoFrame,
 
- 			const uint64_t timestamp);
 
- public:
 
- 	DeckLinkDeviceInstance(DecklinkBase *decklink, DeckLinkDevice *device);
 
- 	virtual ~DeckLinkDeviceInstance();
 
- 	inline DeckLinkDevice *GetDevice() const {return device;}
 
- 	inline long long GetActiveModeId() const
 
- 	{
 
- 		return mode ? mode->GetId() : 0;
 
- 	}
 
- 	inline BMDPixelFormat GetActivePixelFormat() const {return pixelFormat;}
 
- 	inline video_colorspace GetActiveColorSpace() const {return colorSpace;}
 
- 	inline video_range_type GetActiveColorRange() const {return colorRange;}
 
- 	inline speaker_layout GetActiveChannelFormat() const {return channelFormat;}
 
- 	inline bool GetActiveSwapState() const {return swap;}
 
- 	inline BMDVideoConnection GetVideoConnection() const {return videoConnection;}
 
- 	inline BMDAudioConnection GetAudioConnection() const {return audioConnection;}
 
- 	inline DeckLinkDeviceMode *GetMode() const {return mode;}
 
- 	bool StartCapture(DeckLinkDeviceMode *mode,
 
- 			BMDVideoConnection bmdVideoConnection,
 
- 			BMDAudioConnection bmdAudioConnection);
 
- 	bool StopCapture(void);
 
- 	bool StartOutput(DeckLinkDeviceMode *mode_);
 
- 	bool StopOutput(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);
 
- 	void DisplayVideoFrame(video_data *frame);
 
- 	void WriteAudio(audio_data *frames);
 
- };
 
 
  |