Logo
ApraPipes 1.0
Loading...
Searching...
No Matches
Mp4WriterSink.h
1#pragma once
2
3#include "Module.h"
4#include "declarative/PropertyMacros.h"
5
6class DetailAbs;
7class DetailJpeg;
8class DetailH264;
9
11{
12public:
13 Mp4WriterSinkProps(uint32_t _chunkTime, uint32_t _syncTimeInSecs, uint16_t _fps, std::string _baseFolder, bool _recordedTSBasedDTS = true, bool _enableMetadata = true) : ModuleProps()
14 {
15 baseFolder = _baseFolder;
16 fps = _fps;
17 recordedTSBasedDTS = _recordedTSBasedDTS;
18 enableMetadata = _enableMetadata;
19 if ((_chunkTime >= 1 && _chunkTime <= 60) || (_chunkTime == UINT32_MAX))
20 {
21 chunkTime = _chunkTime;
22 }
23 else
24 {
25 throw AIPException(AIP_FATAL, "ChuntTime should be within [1,60] minutes limit or UINT32_MAX");
26 }
27 if (_syncTimeInSecs >= 1 && _syncTimeInSecs <= 60)
28 {
29 syncTimeInSecs = _syncTimeInSecs;
30 }
31 else
32 {
33 throw AIPException(AIP_FATAL, "SyncTime should be within [1,60] minutes limit");
34 }
35 }
36
38 {
39 baseFolder = "./data/Mp4_videos/";
40 chunkTime = 1; //minutes
42 fps = 30;
43 recordedTSBasedDTS = true;
44 enableMetadata = true;
45 }
46
48 {
50 sizeof(recordedTSBasedDTS) +
51 sizeof(baseFolder) +
52 sizeof(chunkTime) +
53 sizeof(syncTimeInSecs) +
54 sizeof(fps) +
55 sizeof(enableMetadata);;
56 }
57
58 std::string baseFolder;
59 uint32_t chunkTime = 1;
60 uint32_t syncTimeInSecs = 1;
61 uint16_t fps = 30;
62 bool recordedTSBasedDTS = true;
63 bool enableMetadata = true;
64
65 // ============================================================
66 // Property Binding for Declarative Pipeline
67 // ============================================================
68 template<typename PropsT>
69 static void applyProperties(
70 PropsT& props,
71 const std::map<std::string, apra::ScalarPropertyValue>& values,
72 std::vector<std::string>& missingRequired
73 ) {
74 apra::applyProp(props.baseFolder, "baseFolder", values, false, missingRequired);
75 apra::applyProp(props.chunkTime, "chunkTime", values, false, missingRequired);
76 apra::applyProp(props.syncTimeInSecs, "syncTimeInSecs", values, false, missingRequired);
77 apra::applyProp(props.fps, "fps", values, false, missingRequired);
78 apra::applyProp(props.recordedTSBasedDTS, "recordedTSBasedDTS", values, false, missingRequired);
79 apra::applyProp(props.enableMetadata, "enableMetadata", values, false, missingRequired);
80 }
81
82 apra::ScalarPropertyValue getProperty(const std::string& propName) const {
83 if (propName == "baseFolder") return baseFolder;
84 if (propName == "chunkTime") return static_cast<int64_t>(chunkTime);
85 if (propName == "syncTimeInSecs") return static_cast<int64_t>(syncTimeInSecs);
86 if (propName == "fps") return static_cast<int64_t>(fps);
87 if (propName == "recordedTSBasedDTS") return recordedTSBasedDTS;
88 if (propName == "enableMetadata") return enableMetadata;
89 throw std::runtime_error("Unknown property: " + propName);
90 }
91
92 bool setProperty(const std::string& propName, const apra::ScalarPropertyValue& value) {
93 // Most properties are static (can't change after init)
94 return false;
95 }
96
97 std::vector<std::string> dynamicPropertyNames() const {
98 return {}; // No dynamically changeable properties
99 }
100
101private:
103
104 template <class Archive>
105 void serialize(Archive &ar, const unsigned int version)
106 {
107 ar &boost::serialization::base_object<ModuleProps>(*this);
109 ar &baseFolder;
110 ar &chunkTime;
111 ar &syncTimeInSecs;
112 ar &fps;
113 ar &enableMetadata;
114 }
115};
116
117class Mp4WriterSink : public Module
118{
119public:
121 virtual ~Mp4WriterSink();
122 bool init();
123 bool term();
124 void setProps(Mp4WriterSinkProps &props);
126 bool doMp4MuxSync();
127protected:
128 bool process(frame_container& frames);
129 bool processSOS(frame_sp& frame);
130 bool processEOS(string &pinId);
131 bool validateInputPins();
133 bool setMetadata(framemetadata_sp &inputMetadata);
134 bool handlePropsChange(frame_sp &frame);
135 bool shouldTriggerSOS();
136 void addInputPin(framemetadata_sp& metadata, string& pinId);
137 bool enableMp4Metadata(framemetadata_sp &inputMetadata);
138 boost::shared_ptr<DetailAbs> mDetail;
140
141};
Definition Mp4WriterSink.cpp:73
Definition Mp4WriterSink.cpp:272
Definition Mp4WriterSink.cpp:258
Definition Module.h:33
virtual size_t getSerializeSize()
Definition Module.h:101
Definition Module.h:151
Definition Mp4WriterSink.h:11
std::vector< std::string > dynamicPropertyNames() const
Definition Mp4WriterSink.h:97
Mp4WriterSinkProps()
Definition Mp4WriterSink.h:37
size_t getSerializeSize()
Definition Mp4WriterSink.h:47
void serialize(Archive &ar, const unsigned int version)
Definition Mp4WriterSink.h:105
bool setProperty(const std::string &propName, const apra::ScalarPropertyValue &value)
Definition Mp4WriterSink.h:92
static void applyProperties(PropsT &props, const std::map< std::string, apra::ScalarPropertyValue > &values, std::vector< std::string > &missingRequired)
Definition Mp4WriterSink.h:69
bool recordedTSBasedDTS
Definition Mp4WriterSink.h:62
bool enableMetadata
Definition Mp4WriterSink.h:63
friend class boost::serialization::access
Definition Mp4WriterSink.h:102
uint32_t syncTimeInSecs
Definition Mp4WriterSink.h:60
Mp4WriterSinkProps(uint32_t _chunkTime, uint32_t _syncTimeInSecs, uint16_t _fps, std::string _baseFolder, bool _recordedTSBasedDTS=true, bool _enableMetadata=true)
Definition Mp4WriterSink.h:13
uint16_t fps
Definition Mp4WriterSink.h:61
uint32_t chunkTime
Definition Mp4WriterSink.h:59
std::string baseFolder
Definition Mp4WriterSink.h:58
apra::ScalarPropertyValue getProperty(const std::string &propName) const
Definition Mp4WriterSink.h:82
Definition Mp4WriterSink.h:118
bool setMetadata(framemetadata_sp &inputMetadata)
Definition Mp4WriterSink.cpp:634
void addInputPin(framemetadata_sp &metadata, string &pinId)
Definition Mp4WriterSink.cpp:653
bool init()
Definition Mp4WriterSink.cpp:559
bool processSOS(frame_sp &frame)
Definition Mp4WriterSink.cpp:658
void setProps(Mp4WriterSinkProps &props)
Definition Mp4WriterSink.cpp:731
bool enableMp4Metadata(framemetadata_sp &inputMetadata)
Definition Mp4WriterSink.cpp:640
virtual ~Mp4WriterSink()
Definition Mp4WriterSink.cpp:557
bool validateInputOutputPins()
Definition Mp4WriterSink.cpp:596
bool shouldTriggerSOS()
Definition Mp4WriterSink.cpp:681
bool process(frame_container &frames)
Definition Mp4WriterSink.cpp:692
bool validateInputPins()
Definition Mp4WriterSink.cpp:606
bool term()
Definition Mp4WriterSink.cpp:686
bool doMp4MuxSync()
Definition Mp4WriterSink.cpp:736
bool handlePropsChange(frame_sp &frame)
Definition Mp4WriterSink.cpp:723
bool processEOS(string &pinId)
Definition Mp4WriterSink.cpp:711
Mp4WriterSink(Mp4WriterSinkProps _props)
Definition Mp4WriterSink.cpp:552
Mp4WriterSinkProps mProp
Definition Mp4WriterSink.h:139
Mp4WriterSinkProps getProps()
Definition Mp4WriterSink.cpp:716
boost::shared_ptr< DetailAbs > mDetail
Definition Mp4WriterSink.h:138
void applyProp(T &member, const char *propName, const std::map< std::string, ScalarPropertyValue > &values, bool isRequired, std::vector< std::string > &missingRequired)
Definition PropertyMacros.h:36
std::variant< int64_t, double, bool, std::string > ScalarPropertyValue
Definition ModuleRegistry.h:30