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 
8 #include <nx/sdk/analytics/common_video_frame_processing_device_agent.h>
9 
10 #include "engine.h"
11 
12 namespace nx {
13 namespace mediaserver_plugins {
14 namespace analytics {
15 namespace stub {
16 
18 {
19 public:
21  virtual ~DeviceAgent() override;
22 
23  virtual nx::sdk::Error setNeededMetadataTypes(
24  const nx::sdk::analytics::IMetadataTypes* neededMetadataTypes) override;
25 
26  virtual nx::sdk::Settings* pluginSideSettings() const override;
27 
28 protected:
29  virtual std::string manifest() const override;
30 
31  virtual void settingsReceived() override;
32 
33  virtual bool pushCompressedVideoFrame(
34  const nx::sdk::analytics::CompressedVideoPacket* videoFrame) override;
35 
36  virtual bool pushUncompressedVideoFrame(
37  const nx::sdk::analytics::UncompressedVideoFrame* videoFrame) override;
38 
39  virtual bool pullMetadataPackets(
40  std::vector<nx::sdk::analytics::MetadataPacket*>* metadataPackets) override;
41 
42 private:
43  virtual Engine* engine() const override { return engineCasted<Engine>(); }
44 
45  nx::sdk::analytics::MetadataPacket* cookSomeEvents();
46  nx::sdk::analytics::MetadataPacket* cookSomeObjects();
47 
48  int64_t usSinceEpoch() const;
49 
50  bool checkFrame(const nx::sdk::analytics::UncompressedVideoFrame* videoFrame) const;
51 
52  nx::sdk::Error startFetchingMetadata(
53  const nx::sdk::analytics::IMetadataTypes* metadataTypes);
54 
55  void stopFetchingMetadata();
56 
57  void processPluginEvents();
58 
59 private:
60  std::unique_ptr<std::thread> m_pluginEventThread;
61  std::mutex m_pluginEventGenerationLoopMutex;
62  std::condition_variable m_pluginEventGenerationLoopCondition;
63  std::atomic<bool> m_terminated{false};
64 
65  std::unique_ptr<std::thread> m_eventThread;
66  std::condition_variable m_eventGenerationLoopCondition;
67  std::mutex m_eventGenerationLoopMutex;
68  std::atomic<bool> m_stopping{false};
69 
70  bool m_previewAttributesGenerated = false;
71  int m_frameCounter = 0;
72  int m_counter = 0;
73  int m_objectCounter = 0;
74  int m_currentObjectIndex = -1;
75  nxpl::NX_GUID m_objectId;
76  std::string m_eventTypeId;
77  int64_t m_lastVideoFrameTimestampUsec = 0;
78 };
79 
80 const std::string kLineCrossingEventType = "nx.stub.lineCrossing";
81 const std::string kObjectInTheAreaEventType = "nx.stub.objectInTheArea";
82 const std::string kCarObjectType = "nx.stub.car";
83 const std::string kHumanFaceObjectType = "nx.stub.humanFace";
84 
85 } // namespace stub
86 } // namespace analytics
87 } // namespace mediaserver_plugins
88 } // namespace nx
virtual void settingsReceived() override
Definition: device_agent.cpp:79
Definition: device_agent.h:36
virtual bool pushCompressedVideoFrame(const nx::sdk::analytics::CompressedVideoPacket *videoFrame) override
Definition: device_agent.cpp:92
virtual Settings * pluginSideSettings() const =0
Definition: device_agent.cpp:242
Definition: compressed_video_packet.h:16
GUID of plugin interface.
Definition: plugin_api.h:21
Definition: common_video_frame_processing_device_agent.h:33
Definition: metadata_types.h:13
Definition: metadata_packet.h:21
Definition: uncompressed_video_frame.h:17
Definition: debug.cpp:14
virtual bool pushUncompressedVideoFrame(const nx::sdk::analytics::UncompressedVideoFrame *videoFrame) override
Definition: device_agent.cpp:106
virtual const IString * manifest(Error *error) const =0
virtual Engine * engine() const =0
virtual Error setNeededMetadataTypes(const IMetadataTypes *neededMetadataTypes)=0
Definition: device_agent.cpp:151
Definition: engine.h:37
Definition: settings.h:15