MediaAi.hpp
1 //
2 // Created by xiong on 2022/4/27.
3 //
4 
5 #ifndef EMX_MediaAi_HPP
6 #define EMX_MediaAi_HPP
7 
8 #include "media/client/MediaParamCBase.hpp"
9 #include "media/common/MediaInfAiDataCrossingDetection.hpp"
10 #include "media/common/MediaInfAiDataFaceRecognition.hpp"
11 #include "media/common/MediaInfAiData.hpp"
12 #include "media/common/MediaInfAiDataInvasionDetection.hpp"
13 #include "media/common/MediaInfAiDataLicensePlateRecognition.hpp"
14 #include "media/common/MediaInfAiDataMotionDetection.hpp"
15 #include "media/common/MediaInfAiDataPassengerFlowStatistics.hpp"
16 #include "media/common/MediaInfAiDataPersonDetection.hpp"
17 #include "media/common/MediaInfAiDataPersonVehicleNonDetection.hpp"
18 #include "media/common/MediaInfAiDataVehicleRecognition.hpp"
19 #include "media/common/MediaInfAiDataFaceDetection.hpp"
20 #include "media/common/MediaInfAiDataElectricBicycleDetection.hpp"
21 #include "media/common/MediaInfAiDataOffDutyDetection.hpp"
22 #include "media/common/MediaInfAiDataRegionalPeopleStatistics.hpp"
23 #include "media/common/MediaInfAiDataBabyCryDetection.hpp"
24 #include "media/common/MediaInfAiDataPtzTargetTrack.hpp"
25 #include "media/common/MediaInfAiDataClassify.hpp"
26 #include "media/common/MediaInfAiDataKeywordSpotting.hpp"
27 #include "media/common/MediaInfAiDataFlameSmokeDetection.hpp"
28 #include "media/common/MediaInfAiDataPersonRecognition.hpp"
29 #include "media/common/MediaInfAi.hpp"
30 #include "media/common/MediaRingBuffer.hpp"
31 
32 
33 namespace Emx {
38  class MediaAi : public MediaInfAi, public MediaParamCBase<Json::Value> {
39  public:
40  explicit MediaAi(int32_t chn) : MediaParamCBase(MediaModE::Ai, chn) {}
41 
42  ErrCodeE SetParam(const Json::Value &param) override;
43 
44  ErrCodeE GetParam(Json::Value &param) override;
45 
46  ErrCodeE GetVersion(std::string &version) override;
47 
48  ErrCodeE Ctrl(const Json::Value &in, Json::Value &out) override;
49  };
50 
53  public:
55 
56  virtual ~MediaAiDataRecvBase() {}
57 
62  using OnGetInfoCallback = std::function<void(MediaInfAiData::Header &header)>;
63 
71 
72  protected:
73  void OnMsgRecv(uint32_t topic, const char *data, int32_t size);
74 
75  protected:
78 
79  ErrCodeE OnGetBuffer(ErrCodeE e, const uint8_t *buffer, void *usr, int32_t off, int32_t size, uint32_t magicId);
80  };
81 
84  public:
86 
87  virtual ~MediaAiDataRecvAsync() {}
88 
97  ErrCodeE Start(EuvLoop *loop, char *buffer, int size, OnGetInfoCallback cbInfo);
98 
100  void Stop();
101 
103  void RecvFramePause() { m_sub.PauseRecv(); }
104 
106  void RecvFrameResume() { m_sub.ResumeRecv(); }
107 
109  bool IsReceivingFrame() { return m_sub.IsReceiving(); }
110 
111  private:
113  };
114 
117  public:
119 
125  ErrCodeE Open(int32_t timeoutMs);
126 
128  void Close();
129 
136  ErrCodeE GetInfo(MediaInfAiData::Header &header, int32_t timeoutMs);
137 
138  private:
140  };
141 
143 }// namespace Emx
144 #endif//EMX_MediaAi_HPP
实现多路复用循环的主体,所有基于EuvLoop的事件都应绑定到一个EuvLoop上
Definition: EuvLoop.hpp:18
ErrCodeE ResumeRecv()
开始接收数据/重新开始接收数据
bool IsReceiving()
获取当前客户端是否正在监听接收
Definition: EuvStmClientBase.hpp:69
void PauseRecv()
停止接收,调用后将不会收到数据
异步AI数据接收
Definition: MediaAi.hpp:83
void RecvFrameResume()
恢复接收AI消息数据
Definition: MediaAi.hpp:106
void RecvFramePause()
暂停接收AI消息数据
Definition: MediaAi.hpp:103
virtual ~MediaAiDataRecvAsync()
Definition: MediaAi.hpp:87
bool IsReceivingFrame()
是否正在接收AI消息数据
Definition: MediaAi.hpp:109
void Stop()
停止接收AI消息数据
ErrCodeE Start(EuvLoop *loop, char *buffer, int size, OnGetInfoCallback cbInfo)
开始接收AI消息数据
MediaAiDataRecvAsync()
Definition: MediaAi.hpp:85
AI数据接收基类
Definition: MediaAi.hpp:52
std::function< void(MediaInfAiData::Header &header)> OnGetInfoCallback
仅接收到AI消息头信息的回调函数(未去接收实际消息数据)
Definition: MediaAi.hpp:62
MediaRingBufferReader m_ring
Definition: MediaAi.hpp:77
virtual ~MediaAiDataRecvBase()
Definition: MediaAi.hpp:56
void OnMsgRecv(uint32_t topic, const char *data, int32_t size)
ErrCodeE GetDataByInfo(const MediaInfAiData::Header &header, MediaInfAiData *data)
通过OnGetInfoCallback获取到header之后可通过此函数接收实际的消息数据
MediaAiDataRecvBase()
Definition: MediaAi.hpp:54
OnGetInfoCallback m_cbInfo
Definition: MediaAi.hpp:76
ErrCodeE OnGetBuffer(ErrCodeE e, const uint8_t *buffer, void *usr, int32_t off, int32_t size, uint32_t magicId)
同步AI数据接收
Definition: MediaAi.hpp:116
MediaAiDataRecvSync()
Definition: MediaAi.hpp:118
ErrCodeE Open(int32_t timeoutMs)
打开接收端口
void Close()
关闭接收端口
ErrCodeE GetInfo(MediaInfAiData::Header &header, int32_t timeoutMs)
获取消息头信息
AI
Definition: MediaAi.hpp:38
ErrCodeE SetParam(const Json::Value &param) override
ErrCodeE GetParam(Json::Value &param) override
ErrCodeE Ctrl(const Json::Value &in, Json::Value &out) override
MediaAi(int32_t chn)
Definition: MediaAi.hpp:40
ErrCodeE GetVersion(std::string &version) override
Definition: MediaInfAiData.hpp:29
Definition: MediaInfAi.hpp:13
客户端参数基类,方便通用操作
Definition: MediaParamCBase.hpp:35
媒体环形共享缓冲区读类(注意:所有操作都是非线程安全的)
Definition: MediaRingBuffer.hpp:60
用于Topic的异步订阅
Definition: MsgTopic.hpp:175
同步阻塞订阅
Definition: MsgTopic.hpp:248
MediaModE
Definition: MediaTypedef.hpp:60
ErrCodeE
错误码定义
Definition: EmxTypeDef.hpp:29
Definition: EmxGpio.hpp:10
AI数据头
Definition: MediaInfAiData.hpp:65