libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
imgseq.h
Go to the documentation of this file.
1
8#pragma once
9
10
11#include <promeki/config.h>
12#if PROMEKI_ENABLE_PROAV
13#include <promeki/namespace.h>
14#include <promeki/error.h>
15#include <promeki/string.h>
16#include <promeki/filepath.h>
17#include <promeki/numname.h>
18#include <promeki/framerate.h>
19#include <promeki/size2d.h>
20#include <promeki/pixelformat.h>
21#include <promeki/metadata.h>
22
23PROMEKI_NAMESPACE_BEGIN
24
25class JsonObject;
26
84class ImgSeq {
85 public:
93 static inline const char *TypeTag = "imgseq";
94
96 ImgSeq() = default;
97
111 static ImgSeq load(const FilePath &path, Error *err = nullptr);
112
119 static ImgSeq fromJson(const JsonObject &json, Error *err = nullptr);
120
132 static bool isImgSeqJson(const String &jsonText);
133
145 Error save(const FilePath &path) const;
146
151 JsonObject toJson() const;
152
167 Error detectRange(const FilePath &dir);
168
170 bool isValid() const { return _name.isValid(); }
171
181 const FilePath &dir() const { return _dir; }
182
184 void setDir(const FilePath &val) { _dir = val; }
185
187 const NumName &name() const { return _name; }
188
190 void setName(const NumName &val) { _name = val; }
191
193 size_t head() const { return _head; }
194
196 void setHead(size_t val) { _head = val; }
197
199 size_t tail() const { return _tail; }
200
202 void setTail(size_t val) { _tail = val; }
203
213 size_t length() const {
214 if (!isValid()) return 0;
215 return (_tail >= _head) ? (_tail - _head + 1) : 0;
216 }
217
219 const FrameRate &frameRate() const { return _frameRate; }
220
222 void setFrameRate(const FrameRate &val) { _frameRate = val; }
223
225 const Size2Du32 &videoSize() const { return _videoSize; }
226
228 void setVideoSize(const Size2Du32 &val) { _videoSize = val; }
229
231 const PixelFormat &pixelFormat() const { return _pixelFormat; }
232
234 void setPixelFormat(const PixelFormat &val) { _pixelFormat = val; }
235
245 const String &audioFile() const { return _audioFile; }
246
248 void setAudioFile(const String &val) { _audioFile = val; }
249
251 const Metadata &metadata() const { return _metadata; }
252
254 Metadata &metadata() { return _metadata; }
255
257 void setMetadata(const Metadata &val) { _metadata = val; }
258
269 const FilePath &sidecarPath() const { return _sidecarPath; }
270
272 void setSidecarPath(const FilePath &val) { _sidecarPath = val; }
273
284 String frameFileName(size_t idx) const { return _name.name(static_cast<int>(_head + idx)); }
285
286 private:
287 FilePath _dir;
288 NumName _name;
289 size_t _head = 0;
290 size_t _tail = 0;
291 FrameRate _frameRate;
292 Size2Du32 _videoSize;
293 PixelFormat _pixelFormat;
294 String _audioFile;
295 Metadata _metadata;
296 FilePath _sidecarPath;
297};
298
299PROMEKI_NAMESPACE_END
300
301#endif // PROMEKI_ENABLE_PROAV