libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
timecodegenerator.h
Go to the documentation of this file.
1
8#pragma once
9
10
11#include <promeki/config.h>
12#if PROMEKI_ENABLE_CORE
13#include <promeki/namespace.h>
14#include <promeki/framecount.h>
15#include <promeki/framerate.h>
16#include <promeki/timecode.h>
17
18PROMEKI_NAMESPACE_BEGIN
19
41class TimecodeGenerator {
42 public:
44 enum RunMode {
45 Still,
46 Forward,
47 Reverse
48 };
49
51 TimecodeGenerator() = default;
52
58 TimecodeGenerator(const FrameRate &frameRate, bool dropFrame = false);
59
64 FrameRate frameRate() const { return _frameRate; }
65
70 void setFrameRate(const FrameRate &frameRate);
71
76 bool dropFrame() const { return _dropFrame; }
77
89 void setDropFrame(bool df);
90
95 Timecode::Mode timecodeMode() const { return _mode; }
96
101 RunMode runMode() const { return _runMode; }
102
107 void setRunMode(RunMode mode) {
108 _runMode = mode;
109 return;
110 }
111
116 Timecode timecode() const { return _timecode; }
117
125 void setTimecode(const Timecode &tc);
126
135 void jam(const Timecode &tc);
136
146 Timecode advance();
147
152 FrameCount frameCount() const { return _frameCount; }
153
159 void reset();
160
161 private:
162 FrameRate _frameRate;
163 bool _dropFrame = false;
164 Timecode::Mode _mode;
165 RunMode _runMode = Forward;
166 Timecode _timecode;
167 Timecode _startTimecode;
168 FrameCount _frameCount{0};
169
170 void deriveMode();
171 void applyMode();
172};
173
174PROMEKI_NAMESPACE_END
175
176#endif // PROMEKI_ENABLE_CORE