8 #include <condition_variable> 12 #include <nx/sdk/analytics/helpers/video_frame_processing_device_agent.h> 13 #include <nx/sdk/analytics/helpers/pixel_format.h> 16 #include "objects/random.h" 19 namespace vms_server_plugins {
30 virtual void getPluginSideSettings(
33 virtual void doSetNeededMetadataTypes(
47 virtual bool pullMetadataPackets(
48 std::vector<nx::sdk::analytics::IMetadataPacket*>* metadataPackets)
override;
52 std::vector<nx::sdk::analytics::IMetadataPacket*> cookSomeObjects();
54 int64_t usSinceEpoch()
const;
60 bool checkVideoFramePlane(
65 void dumpSomeFrameBytes(
71 void stopFetchingMetadata();
75 void processPluginDiagnosticEvents();
77 void setObjectCount(
int objectCount);
81 template<
typename ObjectType>
82 void setIsObjectTypeGenerationNeeded(
bool isObjectTypeGenerationNeeded)
84 if (isObjectTypeGenerationNeeded)
86 m_objectGenerator.registerObjectFactory<ObjectType>(
87 []() {
return std::make_unique<ObjectType>(); });
91 m_objectGenerator.unregisterObjectFactory<ObjectType>();
95 void updateObjectGenerationParameters();
97 void updateEventGenerationParameters();
102 std::atomic<bool> m_terminated{
false};
104 std::unique_ptr<std::thread> m_pluginDiagnosticEventThread;
105 std::mutex m_pluginDiagnosticEventGenerationLoopMutex;
106 std::condition_variable m_pluginDiagnosticEventGenerationLoopCondition;
107 std::atomic<bool> m_needToThrowPluginDiagnosticEvents{
false};
109 std::unique_ptr<std::thread> m_eventThread;
110 std::mutex m_eventGenerationLoopMutex;
111 std::condition_variable m_eventGenerationLoopCondition;
112 std::atomic<bool> m_eventsNeeded{
false};
114 int m_frameCounter = 0;
115 std::string m_eventTypeId;
116 int64_t m_lastVideoFrameTimestampUs = 0;
118 struct DeviceAgentSettings
120 bool needToGenerateObjects()
124 || generatePedestrians
125 || generateHumanFaces
129 std::atomic<bool> generateEvents{
true};
131 std::atomic<bool> generateCars{
true};
132 std::atomic<bool> generateTrucks{
true};
133 std::atomic<bool> generatePedestrians{
true};
134 std::atomic<bool> generateHumanFaces{
true};
135 std::atomic<bool> generateBicycles{
true};
137 std::atomic<int> generateObjectsEveryNFrames{1};
138 std::atomic<int> numberOfObjectsToGenerate{1};
140 std::atomic<bool> generatePreviews{
true};
142 std::atomic<bool> throwPluginDiagnosticEvents{
false};
143 std::atomic<bool> leakFrames{
false};
144 std::atomic<std::chrono::milliseconds> additionalFrameProcessingDelay{
145 std::chrono::milliseconds::zero()};
147 std::atomic<int> numberOfFramesBeforePreviewGeneration{30};
150 DeviceAgentSettings m_deviceAgentSettings;
154 int currentEventTypeIndex = 0;
155 bool isCurrentEventActive =
false;
158 EventContext m_eventContext;
162 ObjectContext() =
default;
163 ObjectContext(std::unique_ptr<AbstractObject>
object): object(std::move(
object)) {}
165 ObjectContext& operator=(std::unique_ptr<AbstractObject>&& otherObject)
168 object = std::move(otherObject);
175 isPreviewGenerated =
false;
179 bool operator!()
const {
return !object; }
181 std::unique_ptr<AbstractObject> object;
182 bool isPreviewGenerated =
false;
183 int frameCounter = 0;
186 std::mutex m_objectGenerationMutex;
188 std::vector<ObjectContext> m_objectContexts;
191 const std::string kLineCrossingEventType =
"nx.stub.lineCrossing";
192 const std::string kObjectInTheAreaEventType =
"nx.stub.objectInTheArea";
193 const std::string kLoiteringEventType =
"nx.stub.loitering";
194 const std::string kIntrusionEventType =
"nx.stub.intrusion";
195 const std::string kGunshotEventType =
"nx.stub.gunshot";
196 const std::string kSuspiciousNoiseEventType =
"nx.stub.suspiciousNoise";
197 const std::string kSoundRelatedEventGroup =
"nx.stub.soundRelatedEvent";
virtual bool pushCompressedVideoFrame(const nx::sdk::analytics::ICompressedVideoPacket *videoFrame) override
Definition: device_agent.cpp:221
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:233
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:23