stub_analytics_plugin  1.6
Network Optix Video Analytics SDK
device_agent.h
1 #pragma once
2 
3 #include <thread>
4 #include <atomic>
5 #include <memory>
6 #include <condition_variable>
7 #include <vector>
8 #include <string>
9 
10 #include <nx/sdk/uuid.h>
11 #include <nx/sdk/analytics/helpers/video_frame_processing_device_agent.h>
12 
13 #include "engine.h"
14 
15 namespace nx {
16 namespace vms_server_plugins {
17 namespace analytics {
18 namespace stub {
19 
21 {
22 public:
23  DeviceAgent(Engine* engine);
24  virtual ~DeviceAgent() override;
25 
26  virtual nx::sdk::Error setNeededMetadataTypes(
27  const nx::sdk::analytics::IMetadataTypes* neededMetadataTypes) override;
28 
29  virtual nx::sdk::IStringMap* pluginSideSettings() const override;
30 
31 protected:
32  virtual std::string manifest() const override;
33 
34  virtual void settingsReceived() override;
35 
36  virtual bool pushCompressedVideoFrame(
37  const nx::sdk::analytics::ICompressedVideoPacket* videoFrame) override;
38 
39  virtual bool pushUncompressedVideoFrame(
40  const nx::sdk::analytics::IUncompressedVideoFrame* videoFrame) override;
41 
42  virtual bool pullMetadataPackets(
43  std::vector<nx::sdk::analytics::IMetadataPacket*>* metadataPackets) override;
44 
45 private:
46  virtual Engine* engine() const override { return engineCasted<Engine>(); }
47 
48  nx::sdk::analytics::IMetadataPacket* cookSomeEvents();
49  nx::sdk::analytics::IMetadataPacket* cookSomeObjects();
50 
51  int64_t usSinceEpoch() const;
52 
53  bool checkFrame(const nx::sdk::analytics::IUncompressedVideoFrame* frame) const;
54 
55  nx::sdk::Error startFetchingMetadata(
56  const nx::sdk::analytics::IMetadataTypes* metadataTypes);
57 
58  void stopFetchingMetadata();
59 
60  void processPluginEvents();
61 
62 private:
63  std::unique_ptr<std::thread> m_pluginEventThread;
64  std::mutex m_pluginEventGenerationLoopMutex;
65  std::condition_variable m_pluginEventGenerationLoopCondition;
66  bool m_terminated = false;
67 
68  std::unique_ptr<std::thread> m_eventThread;
69  std::condition_variable m_eventGenerationLoopCondition;
70  std::mutex m_eventGenerationLoopMutex;
71  std::atomic<bool> m_stopping{false};
72 
73  bool m_previewAttributesGenerated = false;
74  int m_frameCounter = 0;
75  int m_counter = 0;
76  int m_objectCounter = 0;
77  int m_currentObjectIndex = -1;
78  nx::sdk::Uuid m_objectId;
79  std::string m_eventTypeId;
80  int64_t m_lastVideoFrameTimestampUsec = 0;
81 };
82 
83 const std::string kLineCrossingEventType = "nx.stub.lineCrossing";
84 const std::string kObjectInTheAreaEventType = "nx.stub.objectInTheArea";
85 const std::string kLoiteringEventType = "nx.stub.loitering";
86 const std::string kIntrusionEventType = "nx.stub.intrusion";
87 const std::string kGunshotEventType = "nx.stub.gunshot";
88 const std::string kSuspiciousNoiseEventType = "nx.stub.suspiciousNoise";
89 const std::string kSoundRelatedEventGroup = "nx.stub.soundRelatedEvent";
90 const std::string kCarObjectType = "nx.stub.car";
91 const std::string kHumanFaceObjectType = "nx.stub.humanFace";
92 
93 } // namespace stub
94 } // namespace analytics
95 } // namespace vms_server_plugins
96 } // namespace nx
virtual bool pushCompressedVideoFrame(const nx::sdk::analytics::ICompressedVideoPacket *videoFrame) override
Definition: device_agent.cpp:96
Definition: i_string_map.h:8
Definition: i_metadata_packet.h:17
virtual bool pushUncompressedVideoFrame(const nx::sdk::analytics::IUncompressedVideoFrame *videoFrame) override
Definition: device_agent.cpp:110
Definition: i_compressed_video_packet.h:14
Definition: i_metadata_types.h:11
Definition: uuid.h:17
virtual std::string manifest() const override
Definition: device_agent.cpp:52
Definition: debug.cpp:13
Definition: video_frame_processing_device_agent.h:34
Definition: i_uncompressed_video_frame.h:11
virtual void settingsReceived() override
Definition: device_agent.cpp:83
Definition: engine.h:28