SimpleFastOpenAtomicVisualiser
Loading...
Searching...
No Matches
record.h
Go to the documentation of this file.
1#ifndef RECORD_H
2#define RECORD_H
3
4#include <filesystem>
5#include <cstdint>
6#include <vector>
7
8#include <glm/glm.hpp>
9
14class Record
15{
16public:
17
25 Record(std::filesystem::path file, glm::ivec2 resolution, uint8_t fps)
26 : file(file),
28 fps(fps)
29 {}
30
31 virtual ~Record(){}
32
38 virtual void open() = 0;
39
45 void queueFrame(std::vector<uint8_t> pixels)
46 {
47 if (fileOpen) { inBuffer.push_back(pixels); }
48 }
49
55 uint8_t queueSize() { return inBuffer.size(); }
56
62 uint64_t framesLeft() { return inBuffer.size() + outBuffer.size(); }
63
70 {
71 if (writing || inBuffer.size() == 0) { return; }
72 writing = true;
74 inBuffer.clear();
75 std::thread io = std::thread
76 (
78 this
79 );
80 io.detach();
81 }
82
90 virtual void close() = 0;
91
98 bool isWriting() const { return writing; }
99
106 bool isOpen() const { return fileOpen; }
107
114 bool finalise()
115 {
116 if (!isWriting())
117 {
118 if (queueSize() > 0)
119 {
120 writeFrames();
121 }
122 else
123 {
124 close();
125 return true;
126 }
127 }
128 return false;
129 }
130
131protected:
132
133 std::filesystem::path file;
134 glm::ivec2 resolution;
136 bool fileOpen = false;
137 bool writing = false;
138
139 std::vector<std::vector<uint8_t>> inBuffer, outBuffer;
140
141 virtual void write(const uint8_t * frame) = 0;
142
144 {
145 for (const auto & frame : outBuffer)
146 {
147 write(frame.data());
148 }
149 outBuffer.clear();
150 writing = false;
151 }
152};
153
154#endif /* RECORD_H */
An API for recording video.
Definition record.h:15
void queueFrame(std::vector< uint8_t > pixels)
Enqueue a frame to be written.
Definition record.h:45
uint8_t fps
Definition record.h:135
uint64_t framesLeft()
Number of frame left to be written in total.
Definition record.h:62
bool isOpen() const
If the file is open.
Definition record.h:106
std::vector< std::vector< uint8_t > > outBuffer
Definition record.h:139
uint8_t queueSize()
Number of frames yet to be sent for writing.
Definition record.h:55
std::filesystem::path file
Definition record.h:133
virtual void open()=0
Open the video file.
glm::ivec2 resolution
Definition record.h:134
virtual ~Record()
Definition record.h:31
bool finalise()
Check if finalised.
Definition record.h:114
Record(std::filesystem::path file, glm::ivec2 resolution, uint8_t fps)
Construct a new Record from a file path, resolution and fps.
Definition record.h:25
bool fileOpen
Definition record.h:136
void writeFrames()
Send the frames in the buffer for writing.
Definition record.h:69
bool isWriting() const
If the video is being written to in the background.
Definition record.h:98
bool writing
Definition record.h:137
std::vector< std::vector< uint8_t > > inBuffer
Definition record.h:139
void writeBuffer()
Definition record.h:143
virtual void close()=0
Close the video file.
virtual void write(const uint8_t *frame)=0
glm::vec< L, float, glm::qualifier::highp > vec
Definition commandLine.h:214