obs-studio/plugins/aja/aja-source.hpp

88 lines
1.9 KiB
C++

#pragma once
#include "aja-props.hpp"
#include <obs-module.h>
#include <ajantv2/includes/ajatypes.h>
#include <ajantv2/includes/ntv2testpatterngen.h>
#include <ajabase/common/types.h>
#include <ajabase/system/thread.h>
#include <mutex>
class CNTV2Card;
class AJASource {
public:
explicit AJASource(obs_source_t *source);
~AJASource();
void SetCard(CNTV2Card *card);
CNTV2Card *GetCard();
void SetOBSSource(obs_source_t *source);
obs_source_t *GetOBSSource(void) const;
void SetName(const std::string &name);
std::string GetName() const;
void GenerateTestPattern(NTV2VideoFormat vf, NTV2PixelFormat pf,
NTV2TestPatternSelect ps);
// Capture Thread stuff
static void CaptureThread(AJAThread *thread, void *data);
void Activate(bool enable = false);
void Deactivate();
bool IsCapturing() const;
void SetCapturing(bool capturing);
// CardEntry/Device stuff
std::string CardID() const;
void SetCardID(const std::string &cardID);
uint32_t DeviceIndex() const;
void SetDeviceIndex(uint32_t index);
// Source Props
void SetSourceProps(const SourceProps &props);
SourceProps GetSourceProps() const;
void CacheConnections(const NTV2XptConnections &cnx);
void ClearConnections();
bool ReadChannelVPIDs(NTV2Channel channel, VPIDData &vpids);
bool ReadWireFormats(NTV2DeviceID device_id, IOSelection io_select,
NTV2VideoFormat &vf, NTV2PixelFormat &pf,
VPIDDataList &vpids);
void ResetVideoBuffer(NTV2VideoFormat vf, NTV2PixelFormat pf);
void ResetAudioBuffer(size_t size);
NTV2_POINTER mVideoBuffer;
NTV2_POINTER mAudioBuffer;
private:
CNTV2Card *mCard;
std::string mSourceName;
std::string mCardID;
UWord mDeviceIndex;
bool mBuffering;
bool mIsCapturing;
SourceProps mSourceProps;
NTV2TestPatternBuffer mTestPattern;
AJAThread *mCaptureThread;
std::mutex mMutex;
obs_source_t *mSource;
NTV2XptConnections mCrosspoints;
};