8 #ifndef CSCORE_FRAME_H_ 9 #define CSCORE_FRAME_H_ 17 #include <wpi/SmallVector.h> 18 #include <wpi/mutex.h> 21 #include "cscore_cpp.h" 31 typedef uint64_t Time;
35 explicit Impl(
SourceImpl& source_) : source(source_) {}
37 wpi::recursive_mutex mutex;
38 std::atomic_int refcount{0};
43 std::vector<int> compressionParams;
47 Frame() noexcept : m_impl{
nullptr} {}
53 Frame(
const Frame& frame) noexcept : m_impl{frame.m_impl} {
54 if (m_impl) ++m_impl->refcount;
59 ~
Frame() { DecRef(); }
66 explicit operator bool()
const {
return m_impl && m_impl->error.empty(); }
68 friend void swap(
Frame& first,
Frame& second) noexcept {
70 swap(first.m_impl, second.m_impl);
73 Time GetTime()
const {
return m_impl ? m_impl->time : 0; }
80 int GetOriginalWidth()
const {
81 if (!m_impl)
return 0;
82 std::lock_guard<wpi::recursive_mutex> lock(m_impl->mutex);
83 if (m_impl->images.empty())
return 0;
84 return m_impl->images[0]->width;
87 int GetOriginalHeight()
const {
88 if (!m_impl)
return 0;
89 std::lock_guard<wpi::recursive_mutex> lock(m_impl->mutex);
90 if (m_impl->images.empty())
return 0;
91 return m_impl->images[0]->height;
94 int GetOriginalPixelFormat()
const {
95 if (!m_impl)
return 0;
96 std::lock_guard<wpi::recursive_mutex> lock(m_impl->mutex);
97 if (m_impl->images.empty())
return 0;
98 return m_impl->images[0]->pixelFormat;
101 Image* GetExistingImage(
size_t i = 0)
const {
102 if (!m_impl)
return nullptr;
103 std::lock_guard<wpi::recursive_mutex> lock(m_impl->mutex);
104 if (i >= m_impl->images.size())
return nullptr;
105 return m_impl->images[i];
108 Image* GetExistingImage(
int width,
int height)
const {
109 if (!m_impl)
return nullptr;
110 std::lock_guard<wpi::recursive_mutex> lock(m_impl->mutex);
111 for (
auto i : m_impl->images) {
112 if (i->Is(width, height))
return i;
117 Image* GetExistingImage(
int width,
int height,
118 VideoMode::PixelFormat pixelFormat)
const {
119 if (!m_impl)
return nullptr;
120 std::lock_guard<wpi::recursive_mutex> lock(m_impl->mutex);
121 for (
auto i : m_impl->images) {
122 if (i->Is(width, height, pixelFormat))
return i;
127 Image* GetNearestImage(
int width,
int height)
const;
128 Image* GetNearestImage(
int width,
int height,
129 VideoMode::PixelFormat pixelFormat)
const;
131 Image* Convert(
Image* image, VideoMode::PixelFormat pixelFormat,
132 int jpegQuality = 80);
140 Image* ConvertBGRToMJPEG(
Image* image,
int quality);
141 Image* ConvertGrayToMJPEG(
Image* image,
int quality);
143 Image* GetImage(
int width,
int height, VideoMode::PixelFormat pixelFormat,
144 int jpegQuality = 80);
146 bool GetCv(cv::Mat& image) {
147 return GetCv(image, GetOriginalWidth(), GetOriginalHeight());
149 bool GetCv(cv::Mat& image,
int width,
int height);
153 if (m_impl && --(m_impl->refcount) == 0) ReleaseFrame();
162 #endif // CSCORE_FRAME_H_ Definition: CvSourceImpl.h:19
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small...
Definition: SmallVector.h:868
Definition: SourceImpl.h:30
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:49