MediaInfAiDataPersonVehicleNonDetection.hpp
1 //
2 // Created by tangfahong on 2024/4/10.
3 //
4 
5 #ifndef EMX_MediaInfAiDataPersonVehicleNonDetection_HPP
6 #define EMX_MediaInfAiDataPersonVehicleNonDetection_HPP
7 
8 #include "MediaInfAiData.hpp"
9 #include "MediaRegion.hpp"
10 #include <cstring>
11 #include "EmxCore.hpp"
12 
13 namespace Emx {
19  public:
21  memset(&fullPic, 0, sizeof(MediaInfAiPic));
22  }
23 
25 
26  public:
27  struct DataMsg {
29  uint64_t id;
30  /*目标类型*/
31  enum class TypeE : uint32_t {
32  Person = 0,
33  Vehicle,
35  EBike,
36  } type;
38  int imgOff;
39  };
40 
41  void Alloc(int n) {
42  Free();
43  array = (DataMsg *) EP_MALLOC(n * (int) sizeof(DataMsg));
44  if (array) { memset((void *) array, 0, n * sizeof(DataMsg)); }
45  memset(&fullPic, 0, sizeof(MediaInfAiPic));
46  }
47 
48  void Free() {
49  if (array) {
50  for (int i = 0; i < num; i++) {
51  if ((array[i].pic.size > 0) && array[i].pic.img) {
52  free(array[i].pic.img);
53  array[i].pic.img = nullptr;
54  array[i].pic.size = 0;
55  }
56  }
57  if ((fullPic.size > 0) && fullPic.img) {
58  free(fullPic.img);
59  fullPic.img = nullptr;
60  }
61  free(array);
62  array = nullptr;
63  }
64  }
65 
66  int GetSerializeSize() override {
67  int totalImgSize = 0;
68  totalImgSize += sizeof(MediaInfAiPic);
69  totalImgSize += fullPic.size;
70  for (int i = 0; i < num; i++) { totalImgSize += array[i].pic.size; }
71  return (int) sizeof(num) + num * (int) sizeof(DataMsg) + totalImgSize;
72  }
73 
74  void Serialize(uint8_t *buffer) override {
75  int off = 0;
76  memcpy(buffer + off, &num, sizeof(num));
77  off += (int) sizeof(num);
78  memcpy(buffer + off, &fullPic, sizeof(MediaInfAiPic));
79  int fullImgOff = off + (int) sizeof(MediaInfAiPic);
80  if (fullPic.img && fullPic.size > 0) {
81  memcpy(buffer + fullImgOff, fullPic.img, fullPic.size);
82  }
83  off += (fullPic.size + sizeof(MediaInfAiPic));
84 
85  int imgOff = off + num * (int) sizeof(DataMsg);
86  for (int i = 0; i < num; i++) {
87  if (array[i].pic.img && array[i].pic.size > 0) {
88  memcpy(buffer + imgOff, array[i].pic.img, array[i].pic.size);
89  }
90  array[i].imgOff = imgOff;
91  memcpy(buffer + off, array + i, (int) sizeof(DataMsg));
92  imgOff += array[i].pic.size;
93  off += (int) sizeof(DataMsg);
94  }
95  }
96 
97  void Parse(const uint8_t *buffer, int size) override {
98  int off = 0;
99  memcpy(&num, buffer + off, sizeof(num));
100  off += sizeof(num);
101  Alloc(num);
102  memcpy(&fullPic, buffer + off, (int) sizeof(MediaInfAiPic));
103  off += (int) sizeof(MediaInfAiPic);
104  if (fullPic.size > 0) {
105  fullPic.img = (uint8_t *) EP_MALLOC(fullPic.size);
106  if (fullPic.img) { memcpy(fullPic.img, buffer + off, fullPic.size); }
107  }
108  off += fullPic.size;
109  if (num * (int) sizeof(DataMsg) + off <= size) {
110  memcpy(array, buffer + off, num * (int) sizeof(DataMsg));
111  for (int i = 0; i < num; i++) {
112  if (array[i].pic.size) {
113  array[i].pic.img = (uint8_t *) EP_MALLOC(array[i].pic.size);
114  if (array[i].pic.img) memcpy(array[i].pic.img, buffer + array[i].imgOff, array[i].pic.size);
115  }
116  }
117  }
118  }
119 
120  public:
121  int num;
123  MediaInfAiPic fullPic;//背景图,根据配置决定是否有截图
124  };
126 }// namespace Emx
127 
128 #endif//EMX_MediaInfAiDataPersonVehicleNonDetection_HPP
Definition: MediaInfAiDataPersonVehicleNonDetection.hpp:18
void Parse(const uint8_t *buffer, int size) override
Definition: MediaInfAiDataPersonVehicleNonDetection.hpp:97
virtual ~MediaInfAiDataPersonVehicleNonDetection()
Definition: MediaInfAiDataPersonVehicleNonDetection.hpp:24
int GetSerializeSize() override
Definition: MediaInfAiDataPersonVehicleNonDetection.hpp:66
void Alloc(int n)
Definition: MediaInfAiDataPersonVehicleNonDetection.hpp:41
DataMsg * array
Definition: MediaInfAiDataPersonVehicleNonDetection.hpp:122
void Free()
Definition: MediaInfAiDataPersonVehicleNonDetection.hpp:48
MediaInfAiPic fullPic
Definition: MediaInfAiDataPersonVehicleNonDetection.hpp:123
void Serialize(uint8_t *buffer) override
Definition: MediaInfAiDataPersonVehicleNonDetection.hpp:74
MediaInfAiDataPersonVehicleNonDetection()
Definition: MediaInfAiDataPersonVehicleNonDetection.hpp:20
int num
Definition: MediaInfAiDataPersonVehicleNonDetection.hpp:121
Definition: MediaInfAiData.hpp:29
Definition: EmxGpio.hpp:10
Definition: MediaInfAiDataPersonVehicleNonDetection.hpp:27
TypeE
Definition: MediaInfAiDataPersonVehicleNonDetection.hpp:31
int imgOff
私有数据,记录内存偏移
Definition: MediaInfAiDataPersonVehicleNonDetection.hpp:38
Rect rect
当前目标位置信息
Definition: MediaInfAiDataPersonVehicleNonDetection.hpp:37
MediaInfAiPic pic
目标抠图,根据配置参数决定是否有截图
Definition: MediaInfAiDataPersonVehicleNonDetection.hpp:28
uint64_t id
目标id
Definition: MediaInfAiDataPersonVehicleNonDetection.hpp:29
enum Emx::MediaInfAiDataPersonVehicleNonDetection::DataMsg::TypeE type
Definition: MediaInfAiData.hpp:16
uint8_t * img
Definition: MediaInfAiData.hpp:26
int32_t size
Definition: MediaInfAiData.hpp:25
矩形框
Definition: MediaRegion.hpp:35