Logo
ApraPipes 1.0
Loading...
Searching...
No Matches
MultimediaQueueXform.h
1#pragma once
2
3#include "Module.h"
4#include <map>
5#include <variant>
6
9{
10public:
11 // Note: Removed ambiguous default constructor - use constructor with defaults below
12 MultimediaQueueXformProps(uint32_t queueLength = 10000, uint16_t tolerance = 5000, int _mmqFps = 24, bool _isDelayTime = true)
13 {
14 lowerWaterMark = queueLength;
15 upperWaterMark = queueLength + tolerance;
16 isMapDelayInTime = _isDelayTime;
17 mmqFps = _mmqFps;
18 }
19
20 uint32_t lowerWaterMark; // Length of multimedia queue in terms of time or number of frames
21 uint32_t upperWaterMark; //Length of the multimedia queue when the next module queue is full
23 int mmqFps;
24
26 {
27 return ModuleProps::getSerializeSize() + sizeof(lowerWaterMark) + sizeof(upperWaterMark) + sizeof(isMapDelayInTime) + sizeof(mmqFps);
28 }
29
34
35private:
37
38 template<class Archive>
39 void serialize(Archive &ar, const unsigned int version)
40 {
41 ar & boost::serialization::base_object<ModuleProps>(*this);
42 ar & lowerWaterMark;
43 ar & upperWaterMark;
45 ar & mmqFps;
46 }
47
48public:
49 // Declarative pipeline property binding
50 void applyProperties(const std::map<std::string, std::variant<int64_t, double, bool, std::string>>& props)
51 {
52 for (const auto& [key, value] : props) {
53 if (key == "queueLength" || key == "lowerWaterMark") {
54 if (std::holds_alternative<int64_t>(value)) {
55 lowerWaterMark = static_cast<uint32_t>(std::get<int64_t>(value));
56 }
57 } else if (key == "tolerance") {
58 if (std::holds_alternative<int64_t>(value)) {
59 upperWaterMark = lowerWaterMark + static_cast<uint32_t>(std::get<int64_t>(value));
60 }
61 } else if (key == "upperWaterMark") {
62 if (std::holds_alternative<int64_t>(value)) {
63 upperWaterMark = static_cast<uint32_t>(std::get<int64_t>(value));
64 }
65 } else if (key == "mmqFps") {
66 if (std::holds_alternative<int64_t>(value)) {
67 mmqFps = static_cast<int>(std::get<int64_t>(value));
68 }
69 } else if (key == "isMapDelayInTime") {
70 if (std::holds_alternative<bool>(value)) {
71 isMapDelayInTime = std::get<bool>(value);
72 }
73 }
74 }
75 }
76
77 std::variant<int64_t, double, bool, std::string> getProperty(const std::string& name) const
78 {
79 if (name == "queueLength" || name == "lowerWaterMark") return static_cast<int64_t>(lowerWaterMark);
80 if (name == "upperWaterMark") return static_cast<int64_t>(upperWaterMark);
81 if (name == "mmqFps") return static_cast<int64_t>(mmqFps);
82 if (name == "isMapDelayInTime") return isMapDelayInTime;
83 return int64_t(0);
84 }
85};
86
87class State;
88
90public:
92
94 }
95 bool init();
96 bool term();
97 void setState(uint64_t ts, uint64_t te);
98 bool handleCommand(Command::CommandType type, frame_sp& frame);
99 bool allowFrames(uint64_t& ts, uint64_t& te);
100 void addInputPin(framemetadata_sp& metadata, string& pinId);
103 bool handlePropsChange(frame_sp& frame);
104 boost::shared_ptr<State> mState;
106 boost::shared_ptr<FrameContainerQueue> getQue();
107 void extractFramesAndEnqueue(boost::shared_ptr<FrameContainerQueue>& FrameQueue);
108 void setMmqFps(int fps);
109 void setPlaybackSpeed(float playbackSpeed);
110 void stopExportFrames();
111protected:
112 bool process(frame_container& frames);
113 bool validateInputPins();
114 bool validateOutputPins();
116
117private:
118 void getQueueBoundaryTS(uint64_t& tOld, uint64_t& tNew);
119 std::string mOutputPinId;
120 bool pushToNextModule = true;
121 bool reset = false;
122 uint64_t startTimeSaved = 0;
123 uint64_t endTimeSaved = 0;
124 uint64_t queryStartTime = 0;
125 uint64_t queryEndTime = 0;
126 bool direction = true;
128 using sys_clock = std::chrono::system_clock;
129 sys_clock::time_point frame_begin;
130 std::chrono::nanoseconds myTargetFrameLen;
131 std::chrono::nanoseconds myNextWait;
134 bool initDone = false;
136 int initialFps = 0;
137 float speed = 1;
139};
CommandType
Definition Command.h:9
FrameType
Definition FrameMetadata.h:29
Definition Module.h:33
virtual size_t getSerializeSize()
Definition Module.h:101
Definition Module.h:151
Definition MultimediaQueueXform.h:9
bool readLoop
Definition MultimediaQueueXform.h:33
void serialize(Archive &ar, const unsigned int version)
Definition MultimediaQueueXform.h:39
MultimediaQueueXformProps(uint32_t queueLength=10000, uint16_t tolerance=5000, int _mmqFps=24, bool _isDelayTime=true)
Definition MultimediaQueueXform.h:12
void applyProperties(const std::map< std::string, std::variant< int64_t, double, bool, std::string > > &props)
Definition MultimediaQueueXform.h:50
bool isMapDelayInTime
Definition MultimediaQueueXform.h:22
uint32_t lowerWaterMark
Definition MultimediaQueueXform.h:20
int maxIndex
Definition MultimediaQueueXform.h:31
int mmqFps
Definition MultimediaQueueXform.h:23
friend class boost::serialization::access
Definition MultimediaQueueXform.h:36
std::variant< int64_t, double, bool, std::string > getProperty(const std::string &name) const
Definition MultimediaQueueXform.h:77
int startIndex
Definition MultimediaQueueXform.h:30
string strFullFileNameWithPattern
Definition MultimediaQueueXform.h:32
size_t getSerializeSize()
Definition MultimediaQueueXform.h:25
uint32_t upperWaterMark
Definition MultimediaQueueXform.h:21
Definition MultimediaQueueXform.h:89
bool validateOutputPins()
Definition MultimediaQueueXform.cpp:531
uint64_t startTimeSaved
Definition MultimediaQueueXform.h:122
void setMmqFps(int fps)
Definition MultimediaQueueXform.cpp:1077
std::chrono::system_clock sys_clock
Definition MultimediaQueueXform.h:128
bool validateInputOutputPins()
Definition MultimediaQueueXform.cpp:536
boost::shared_ptr< State > mState
Definition MultimediaQueueXform.h:104
void stopExportFrames()
Definition MultimediaQueueXform.cpp:1144
boost::shared_ptr< FrameContainerQueue > getQue()
Definition MultimediaQueueXform.cpp:662
void extractFramesAndEnqueue(boost::shared_ptr< FrameContainerQueue > &FrameQueue)
Definition MultimediaQueueXform.cpp:632
bool initDone
Definition MultimediaQueueXform.h:134
uint64_t latestFrameExportedFromProcess
Definition MultimediaQueueXform.h:133
bool reset
Definition MultimediaQueueXform.h:121
void addInputPin(framemetadata_sp &metadata, string &pinId)
Definition MultimediaQueueXform.cpp:541
void getQueueBoundaryTS(uint64_t &tOld, uint64_t &tNew)
Definition MultimediaQueueXform.cpp:582
uint64_t queryStartTime
Definition MultimediaQueueXform.h:124
void setProps(MultimediaQueueXformProps _props)
Definition MultimediaQueueXform.cpp:1130
FrameMetadata::FrameType mFrameType
Definition MultimediaQueueXform.h:127
bool process(frame_container &frames)
Definition MultimediaQueueXform.cpp:889
MultimediaQueueXformProps getProps()
Definition MultimediaQueueXform.cpp:1124
float speed
Definition MultimediaQueueXform.h:137
sys_clock::time_point frame_begin
Definition MultimediaQueueXform.h:129
bool direction
Definition MultimediaQueueXform.h:126
void setPlaybackSpeed(float playbackSpeed)
Definition MultimediaQueueXform.cpp:1083
MultimediaQueueXform(MultimediaQueueXformProps _props)
Definition MultimediaQueueXform.cpp:521
uint64_t queryEndTime
Definition MultimediaQueueXform.h:125
uint64_t endTimeSaved
Definition MultimediaQueueXform.h:123
int framesToSkip
Definition MultimediaQueueXform.h:135
bool handleCommand(Command::CommandType type, frame_sp &frame)
Definition MultimediaQueueXform.cpp:667
bool validateInputPins()
Definition MultimediaQueueXform.cpp:526
std::string mOutputPinId
Definition MultimediaQueueXform.h:119
bool exportFrames
Definition MultimediaQueueXform.h:138
bool init()
Definition MultimediaQueueXform.cpp:548
MultimediaQueueXformProps mProps
Definition MultimediaQueueXform.h:105
bool allowFrames(uint64_t &ts, uint64_t &te)
Definition MultimediaQueueXform.cpp:877
int initialFps
Definition MultimediaQueueXform.h:136
void setState(uint64_t ts, uint64_t te)
Definition MultimediaQueueXform.cpp:591
bool term()
Definition MultimediaQueueXform.cpp:576
bool pushToNextModule
Definition MultimediaQueueXform.h:120
bool handlePropsChange(frame_sp &frame)
Definition MultimediaQueueXform.cpp:1105
std::chrono::nanoseconds myTargetFrameLen
Definition MultimediaQueueXform.h:130
uint64_t latestFrameExportedFromHandleCmd
Definition MultimediaQueueXform.h:132
std::chrono::nanoseconds myNextWait
Definition MultimediaQueueXform.h:131
virtual ~MultimediaQueueXform()
Definition MultimediaQueueXform.h:93
Definition GTKView.cpp:4