8 #include <condition_variable> 13 #include <nx/sdk/analytics/helpers/video_frame_processing_device_agent.h> 14 #include <nx/sdk/analytics/helpers/pixel_format.h> 17 #include "objects/random.h" 20 namespace vms_server_plugins {
31 virtual void getPluginSideSettings(
34 virtual void doSetNeededMetadataTypes(
48 virtual bool pullMetadataPackets(
49 std::vector<nx::sdk::analytics::IMetadataPacket*>* metadataPackets)
override;
53 std::vector<nx::sdk::analytics::IMetadataPacket*> cookSomeObjects();
55 int64_t usSinceEpoch()
const;
61 bool checkVideoFramePlane(
66 void dumpSomeFrameBytes(
72 void stopFetchingMetadata();
76 void processPluginDiagnosticEvents();
78 void setObjectCount(
int objectCount);
80 void cleanUpTimestampQueue();
84 template<
typename ObjectType>
85 void setIsObjectTypeGenerationNeeded(
bool isObjectTypeGenerationNeeded)
87 if (isObjectTypeGenerationNeeded)
89 m_objectGenerator.registerObjectFactory<ObjectType>(
90 []() {
return std::make_unique<ObjectType>(); });
94 m_objectGenerator.unregisterObjectFactory<ObjectType>();
98 void updateObjectGenerationParameters();
100 void updateEventGenerationParameters();
105 std::atomic<bool> m_terminated{
false};
107 std::unique_ptr<std::thread> m_pluginDiagnosticEventThread;
108 std::mutex m_pluginDiagnosticEventGenerationLoopMutex;
109 std::condition_variable m_pluginDiagnosticEventGenerationLoopCondition;
110 std::atomic<bool> m_needToThrowPluginDiagnosticEvents{
false};
112 std::unique_ptr<std::thread> m_eventThread;
113 std::mutex m_eventGenerationLoopMutex;
114 std::condition_variable m_eventGenerationLoopCondition;
115 std::atomic<bool> m_eventsNeeded{
false};
117 int m_frameCounter = 0;
118 std::string m_eventTypeId;
120 std::deque<int64_t> m_frameTimestampQueue;
121 int64_t m_lastVideoFrameTimestampUs = 0;
123 struct DeviceAgentSettings
125 bool needToGenerateObjects()
129 || generatePedestrians
130 || generateHumanFaces
134 std::atomic<bool> generateEvents{
true};
136 std::atomic<bool> generateCars{
true};
137 std::atomic<bool> generateTrucks{
true};
138 std::atomic<bool> generatePedestrians{
true};
139 std::atomic<bool> generateHumanFaces{
true};
140 std::atomic<bool> generateBicycles{
true};
142 std::atomic<int> generateObjectsEveryNFrames{1};
143 std::atomic<int> numberOfObjectsToGenerate{1};
145 std::atomic<bool> generatePreviews{
true};
147 std::atomic<bool> throwPluginDiagnosticEvents{
false};
148 std::atomic<bool> leakFrames{
false};
150 std::atomic<std::chrono::milliseconds> additionalFrameProcessingDelay{
151 std::chrono::milliseconds::zero()};
153 std::atomic<std::chrono::milliseconds> overallMetadataDelay{
154 std::chrono::milliseconds::zero()};
156 std::atomic<int> numberOfFramesBeforePreviewGeneration{30};
159 DeviceAgentSettings m_deviceAgentSettings;
163 int currentEventTypeIndex = 0;
164 bool isCurrentEventActive =
false;
167 EventContext m_eventContext;
171 ObjectContext() =
default;
172 ObjectContext(std::unique_ptr<AbstractObject>
object): object(std::move(
object)) {}
174 ObjectContext& operator=(std::unique_ptr<AbstractObject>&& otherObject)
177 object = std::move(otherObject);
184 isPreviewGenerated =
false;
188 bool operator!()
const {
return !object; }
190 std::unique_ptr<AbstractObject> object;
191 bool isPreviewGenerated =
false;
192 int frameCounter = 0;
195 std::mutex m_objectGenerationMutex;
197 std::vector<ObjectContext> m_objectContexts;
200 const std::string kLineCrossingEventType =
"nx.stub.lineCrossing";
201 const std::string kObjectInTheAreaEventType =
"nx.stub.objectInTheArea";
202 const std::string kLoiteringEventType =
"nx.stub.loitering";
203 const std::string kIntrusionEventType =
"nx.stub.intrusion";
204 const std::string kGunshotEventType =
"nx.stub.gunshot";
205 const std::string kSuspiciousNoiseEventType =
"nx.stub.suspiciousNoise";
206 const std::string kSoundRelatedEventGroup =
"nx.stub.soundRelatedEvent";
virtual bool pushCompressedVideoFrame(const nx::sdk::analytics::ICompressedVideoPacket *videoFrame) override
Definition: device_agent.cpp:225
virtual nx::sdk::Result< const nx::sdk::IStringMap * > settingsReceived() override
Definition: device_agent.cpp:181
virtual bool pushUncompressedVideoFrame(const nx::sdk::analytics::IUncompressedVideoFrame *videoFrame) override
Definition: device_agent.cpp:237
Definition: i_compressed_video_packet.h:16
virtual std::string manifestString() const override
Definition: device_agent.cpp:135
Definition: i_device_info.h:14
Definition: apple_utils.h:6
Definition: video_frame_processing_device_agent.h:37
Definition: i_uncompressed_video_frame.h:13
Definition: i_data_packet.h:16
Definition: device_agent.h:24