MediaInfAiDataElectricBicycleDetection.hpp
1 //
2 // Created by tangfahong on 2025/9/22.
3 //
4 
5 #ifndef EMX_MediaInfAiDataElectricBicycleDetection_HPP
6 #define EMX_MediaInfAiDataElectricBicycleDetection_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 : uint8_t {
32  Bicycle = 0,
33  Motorbike,
34  Tricycle,
35  } type;
36  /*电动车状态*/
37  enum class StateE : uint8_t {
38  Parked = 0,
39  Biked,
41  } state;
42 
43  uint8_t quality;
44  uint8_t reserved;
45 
47  int imgOff;
48  };
49 
50  void Alloc(int n) {
51  Free();
52  array = (DataMsg *) EP_MALLOC(n * (int) sizeof(DataMsg));
53  if (array) { memset((void *) array, 0, n * sizeof(DataMsg)); }
54  memset(&fullPic, 0, sizeof(MediaInfAiPic));
55  }
56 
57  void Free() {
58  if (array) {
59  for (int i = 0; i < num; i++) {
60  if ((array[i].pic.size > 0) && array[i].pic.img) {
61  free(array[i].pic.img);
62  array[i].pic.img = nullptr;
63  array[i].pic.size = 0;
64  }
65  }
66  if ((fullPic.size > 0) && fullPic.img) {
67  free(fullPic.img);
68  fullPic.img = nullptr;
69  }
70  free(array);
71  array = nullptr;
72  }
73  }
74 
75  int GetSerializeSize() override {
76  int totalImgSize = 0;
77  totalImgSize += sizeof(MediaInfAiPic);
78  totalImgSize += fullPic.size;
79  for (int i = 0; i < num; i++) { totalImgSize += array[i].pic.size; }
80  return (int) sizeof(num) + num * (int) sizeof(DataMsg) + totalImgSize;
81  }
82 
83  void Serialize(uint8_t *buffer) override {
84  int off = 0;
85  memcpy(buffer + off, &num, sizeof(num));
86  off += (int) sizeof(num);
87  memcpy(buffer + off, &fullPic, sizeof(MediaInfAiPic));
88  int fullImgOff = off + (int) sizeof(MediaInfAiPic);
89  if (fullPic.img && fullPic.size > 0) { memcpy(buffer + fullImgOff, fullPic.img, fullPic.size); }
90  off += (fullPic.size + sizeof(MediaInfAiPic));
91 
92  int imgOff = off + num * (int) sizeof(DataMsg);
93  for (int i = 0; i < num; i++) {
94  if (array[i].pic.img && array[i].pic.size > 0) {
95  memcpy(buffer + imgOff, array[i].pic.img, array[i].pic.size);
96  }
97  array[i].imgOff = imgOff;
98  memcpy(buffer + off, array + i, (int) sizeof(DataMsg));
99  imgOff += array[i].pic.size;
100  off += (int) sizeof(DataMsg);
101  }
102  }
103 
104  void Parse(const uint8_t *buffer, int size) override {
105  int off = 0;
106  memcpy(&num, buffer + off, sizeof(num));
107  off += sizeof(num);
108  Alloc(num);
109  memcpy(&fullPic, buffer + off, (int) sizeof(MediaInfAiPic));
110  off += (int) sizeof(MediaInfAiPic);
111  if (fullPic.size > 0) {
112  fullPic.img = (uint8_t *) EP_MALLOC(fullPic.size);
113  if (fullPic.img) { memcpy(fullPic.img, buffer + off, fullPic.size); }
114  }
115  off += fullPic.size;
116  if (num * (int) sizeof(DataMsg) + off <= size) {
117  memcpy(array, buffer + off, num * (int) sizeof(DataMsg));
118  for (int i = 0; i < num; i++) {
119  if (array[i].pic.size) {
120  array[i].pic.img = (uint8_t *) EP_MALLOC(array[i].pic.size);
121  if (array[i].pic.img) memcpy(array[i].pic.img, buffer + array[i].imgOff, array[i].pic.size);
122  }
123  }
124  }
125  }
126 
127  public:
128  int num;
130  MediaInfAiPic fullPic;//背景图,根据配置决定是否有截图
131  };
133 }// namespace Emx
134 
135 #endif//EMX_MediaInfAiDataElectricBicycleDetection_HPP
Definition: MediaInfAiDataElectricBicycleDetection.hpp:18
DataMsg * array
Definition: MediaInfAiDataElectricBicycleDetection.hpp:129
int num
Definition: MediaInfAiDataElectricBicycleDetection.hpp:128
MediaInfAiDataElectricBicycleDetection()
Definition: MediaInfAiDataElectricBicycleDetection.hpp:20
void Free()
Definition: MediaInfAiDataElectricBicycleDetection.hpp:57
void Parse(const uint8_t *buffer, int size) override
Definition: MediaInfAiDataElectricBicycleDetection.hpp:104
int GetSerializeSize() override
Definition: MediaInfAiDataElectricBicycleDetection.hpp:75
MediaInfAiPic fullPic
Definition: MediaInfAiDataElectricBicycleDetection.hpp:130
void Serialize(uint8_t *buffer) override
Definition: MediaInfAiDataElectricBicycleDetection.hpp:83
void Alloc(int n)
Definition: MediaInfAiDataElectricBicycleDetection.hpp:50
virtual ~MediaInfAiDataElectricBicycleDetection()
Definition: MediaInfAiDataElectricBicycleDetection.hpp:24
Definition: MediaInfAiData.hpp:29
Definition: EmxGpio.hpp:10
Definition: MediaInfAiDataElectricBicycleDetection.hpp:27
uint8_t reserved
预留
Definition: MediaInfAiDataElectricBicycleDetection.hpp:44
StateE
Definition: MediaInfAiDataElectricBicycleDetection.hpp:37
enum Emx::MediaInfAiDataElectricBicycleDetection::DataMsg::TypeE type
uint8_t quality
当前电动车抓拍质量[0~100]
Definition: MediaInfAiDataElectricBicycleDetection.hpp:43
MediaInfAiPic pic
目标抠图,根据配置参数决定是否有截图
Definition: MediaInfAiDataElectricBicycleDetection.hpp:28
Rect rect
当前目标位置信息
Definition: MediaInfAiDataElectricBicycleDetection.hpp:46
enum Emx::MediaInfAiDataElectricBicycleDetection::DataMsg::StateE state
uint64_t id
目标id
Definition: MediaInfAiDataElectricBicycleDetection.hpp:29
int imgOff
私有数据,记录内存偏移
Definition: MediaInfAiDataElectricBicycleDetection.hpp:47
TypeE
Definition: MediaInfAiDataElectricBicycleDetection.hpp:31
Definition: MediaInfAiData.hpp:16
uint8_t * img
Definition: MediaInfAiData.hpp:26
int32_t size
Definition: MediaInfAiData.hpp:25
矩形框
Definition: MediaRegion.hpp:35