6 #include <condition_variable> 13 #include <nx/sdk/analytics/helpers/consuming_device_agent.h> 14 #include <nx/sdk/analytics/helpers/object_metadata_packet.h> 15 #include <nx/sdk/analytics/helpers/pixel_format.h> 16 #include <nx/sdk/helpers/uuid_helper.h> 19 #include "stub_analytics_plugin_special_objects_ini.h" 22 namespace vms_server_plugins {
25 namespace special_objects {
27 const std::string kBlinkingObjectType =
"nx.stub.blinkingObject";
28 const std::string kFixedObjectType =
"nx.stub.fixedObject";
29 const std::string kPointObjectType =
"nx.stub.pointObject";
30 const std::string kCounterObjectType =
"nx.stub.counter";
31 const std::string kEmptyNameObjectType =
"nx.stub.emptyNameObject";
47 virtual bool pullMetadataPackets(
51 std::vector<nx::sdk::Ptr<nx::sdk::analytics::IMetadataPacket>> cookSomeObjects();
54 int64_t metadataTimestampUs);
56 void addBlinkingObjectIfNeeded(
57 int64_t metadataTimestampUs,
61 void addFixedObjectIfNeeded(
64 void addCounterIfNeeded(
67 void addPointIfNeeded(
70 void addEmptyNameObjectIfNeeded(
73 void processVideoFrame(
77 void processCustomMetadataPacket(
81 void cleanUpTimestampQueue();
86 int m_frameCounter = 0;
88 std::deque<int64_t> m_frameTimestampUsQueue;
89 int64_t m_lastVideoFrameTimestampUs = 0;
90 int64_t m_lastBlinkingObjectTimestampUs = 0;
92 struct DeviceAgentSettings
94 bool needToGenerateObjects()
const 96 return generateFixedObject
99 || blinkingObjectPeriodMs.load() != std::chrono::milliseconds::zero();
102 std::atomic<bool> generateFixedObject{
false};
104 std::mutex fixedObjectColorMutex;
105 std::string fixedObjectColor;
107 std::atomic<bool> generateCounter{
false};
108 std::atomic<bool> generatePoint{
false};
109 std::atomic<bool> generateEmptyNameObject{
false};
111 std::atomic<std::chrono::milliseconds> blinkingObjectPeriodMs{
112 std::chrono::milliseconds::zero()};
114 std::atomic<bool> blinkingObjectInDedicatedPacket{
false};
116 std::atomic<int> generateObjectsEveryNFrames{1};
118 std::atomic<std::chrono::milliseconds> additionalFrameProcessingDelayMs{
119 std::chrono::milliseconds::zero()};
121 std::atomic<std::chrono::milliseconds> overallMetadataDelayMs{
122 std::chrono::milliseconds::zero()};
124 std::atomic<float> counterBoundingBoxSideSize{0};
125 std::atomic<float> counterBoundingBoxXOffset{0};
126 std::atomic<float> counterBoundingBoxYOffset{0};
129 DeviceAgentSettings m_deviceAgentSettings;
131 std::mutex m_objectGenerationMutex;
132 int m_counterObjectAttributeValue = 0;
134 const sdk::Uuid m_blinkingObjectTrackId = sdk::UuidHelper::randomUuid();
135 const sdk::Uuid m_fixedObjectTrackId = sdk::UuidHelper::randomUuid();
136 const sdk::Uuid m_counterObjectTrackId = sdk::UuidHelper::randomUuid();
virtual std::string manifestString() const override
Definition: device_agent.cpp:59
Definition: consuming_device_agent.h:36
Definition: device_agent.h:33
Definition: i_device_info.h:13
Definition: apple_utils.h:6
virtual bool pushCompressedVideoFrame(nx::sdk::Ptr< const nx::sdk::analytics::ICompressedVideoPacket > videoFrame) override
Definition: device_agent.cpp:191
virtual nx::sdk::Result< const nx::sdk::ISettingsResponse * > settingsReceived() override
Definition: device_agent.cpp:91