8 #ifndef CSCORE_SOURCEIMPL_H_ 9 #define CSCORE_SOURCEIMPL_H_ 12 #include <condition_variable> 19 #include <llvm/ArrayRef.h> 20 #include <llvm/StringMap.h> 21 #include <llvm/StringRef.h> 25 #include "PropertyImpl.h" 26 #include "cscore_cpp.h" 44 void SetConnected(
bool connected);
50 int GetNumSinks()
const {
return m_numSinks; }
64 int GetNumSinksEnabled()
const {
return m_numSinksEnabled; }
68 NumSinksEnabledChanged();
73 NumSinksEnabledChanged();
77 uint64_t GetCurFrameTime();
87 Frame GetNextFrame(
double timeout);
95 CS_Status* status)
const;
96 CS_PropertyKind GetPropertyKind(
int property)
const;
99 CS_Status* status)
const;
100 int GetProperty(
int property, CS_Status* status)
const;
101 virtual void SetProperty(
int property,
int value, CS_Status* status) = 0;
102 int GetPropertyMin(
int property, CS_Status* status)
const;
103 int GetPropertyMax(
int property, CS_Status* status)
const;
104 int GetPropertyStep(
int property, CS_Status* status)
const;
105 int GetPropertyDefault(
int property, CS_Status* status)
const;
108 CS_Status* status)
const;
110 CS_Status* status) = 0;
111 std::vector<std::string> GetEnumPropertyChoices(
int property,
112 CS_Status* status)
const;
115 virtual void SetBrightness(
int brightness, CS_Status* status) = 0;
116 virtual int GetBrightness(CS_Status* status)
const = 0;
117 virtual void SetWhiteBalanceAuto(CS_Status* status) = 0;
118 virtual void SetWhiteBalanceHoldCurrent(CS_Status* status) = 0;
119 virtual void SetWhiteBalanceManual(
int value, CS_Status* status) = 0;
120 virtual void SetExposureAuto(CS_Status* status) = 0;
121 virtual void SetExposureHoldCurrent(CS_Status* status) = 0;
122 virtual void SetExposureManual(
int value, CS_Status* status) = 0;
125 VideoMode GetVideoMode(CS_Status* status)
const;
126 virtual bool SetVideoMode(
const VideoMode& mode, CS_Status* status) = 0;
130 virtual bool SetPixelFormat(VideoMode::PixelFormat pixelFormat,
132 virtual bool SetResolution(
int width,
int height, CS_Status* status);
133 virtual bool SetFPS(
int fps, CS_Status* status);
135 std::vector<VideoMode> EnumerateVideoModes(CS_Status* status)
const;
137 std::unique_ptr<Image> AllocImage(VideoMode::PixelFormat pixelFormat,
138 int width,
int height,
size_t size);
141 void PutFrame(VideoMode::PixelFormat pixelFormat,
int width,
int height,
143 void PutFrame(std::unique_ptr<Image> image, Frame::Time time);
147 virtual void NumSinksChanged() = 0;
148 virtual void NumSinksEnabledChanged() = 0;
150 std::atomic_int m_numSinks{0};
151 std::atomic_int m_numSinksEnabled{0};
156 if (property <= 0 || static_cast<size_t>(property) > m_propertyData.size())
158 return m_propertyData[
property - 1].get();
161 if (property <= 0 || static_cast<size_t>(property) > m_propertyData.size())
163 return m_propertyData[
property - 1].get();
169 virtual std::unique_ptr<PropertyImpl> CreateEmptyProperty(
174 virtual bool CacheProperties(CS_Status* status)
const = 0;
176 void NotifyPropertyCreated(
int propIndex,
PropertyImpl& prop);
179 void UpdatePropertyValue(
int property,
bool setString,
int value,
183 mutable std::vector<std::unique_ptr<PropertyImpl>> m_propertyData;
185 mutable std::vector<VideoMode> m_videoModes;
190 mutable std::atomic_bool m_properties_cached{
false};
192 mutable std::mutex m_mutex;
195 void ReleaseImage(std::unique_ptr<Image> image);
196 std::unique_ptr<Frame::Impl> AllocFrameImpl();
197 void ReleaseFrameImpl(std::unique_ptr<Frame::Impl> data);
200 std::string m_description;
202 std::mutex m_frameMutex;
203 std::condition_variable m_frameCv;
205 bool m_destroyFrames{
false};
208 std::mutex m_poolMutex;
209 std::vector<std::unique_ptr<Frame::Impl>> m_framesAvail;
210 std::vector<std::unique_ptr<Image>> m_imagesAvail;
212 std::atomic_bool m_connected{
false};
223 #endif // CSCORE_SOURCEIMPL_H_ Definition: SinkImpl.h:19
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory)...
Definition: ArrayRef.h:32
Definition: SourceImpl.h:30
Definition: PropertyImpl.h:21
bool IsConnected(NT_Inst inst)
Return whether or not the instance is connected to another node.
Definition: ntcore_cpp.cpp:902
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:42
Video mode.
Definition: cscore_cpp.h:46