MediaServerOsd.hpp
1 //
2 // Created by xiong on 2023/8/16.
3 //
4 
5 #ifndef EMX_MediaServerOsd_HPP
6 #define EMX_MediaServerOsd_HPP
7 
8 #include "MediaServerBase.hpp"
9 #include "core/euv/EuvTimer.hpp"
10 #include "media/common/MediaInfOsd.hpp"
11 #include "media/common/MediaRegion.hpp"
12 #include <list>
13 #include <thread>
14 #include <vector>
15 #include <mutex>
16 
17 class OutlineOsd;
18 
19 namespace Emx {
25  public:
26  explicit MediaServerOsdChn(int32_t chn) : MediaServerModuleChnBase(MediaModE::Osd, chn), m_timeRecord(0) {}
27 
28  ~MediaServerOsdChn() override = default;
29 
30  ErrCodeE LoadParam() override;
31 
32  ErrCodeE SaveParam() override;
33 
34  void *GetParam() override { return &m_param; }
35 
36  void *GetNewParam() override { return &m_paramNew; }
37 
38  void *GetRunningParam() override { return &m_paramRunning; }
39 
40  ErrCodeE SetOsdContent(OsdContent *pInfo) override { return ErrCodeE::Success; }
41 
42  ErrCodeE OnRecvReqChn(uint32_t method, const char *data, int32_t size, std::string &out) override;
43 
44  int GetParamSize() override { return -1; }
45 
46  ErrCodeE GetParamDefaultData(std::string &data) override;
47 
48  void NewParamInCome(const char *data, int size) override;
49 
50  bool ParamChanged() override;
51 
52  void GetParamData(std::string &data) override;
53 
54  void GetRunningParamData(std::string &data) override;
55 
56  void UpdateParam() override;
57 
58  void UpdateRunningParam() override {};
59 
61 
62  void OnServerDestroy() override;
63 
65 
66  protected:
71  virtual Size GetChnPicSize() = 0;
72 
73  struct RegionInfo {
75  int x;
76  int y;
77  int w;
78  int h;
79  int layer;
80  bool show;
81  int id;
82  uint16_t flickerInterval;
83  uint8_t isFlicker;
84  uint8_t autoSwitchColor;
85  };
86  struct SwitchColorRect {
87  uint16_t x;
88  uint16_t y;
89  uint16_t w;
90  uint16_t h;
91  };
92 
97  virtual void RegionCreateAll(std::list<RegionInfo> &region) {}
98 
102  virtual void RegionDestroyAll(const std::list<RegionInfo> &region) {};
103 
112  virtual void SetBitMap(int id, uint8_t *pix, int w, int h,
113  std::vector<SwitchColorRect> *switchColorRectList = nullptr) = 0;
114 
121  virtual ErrCodeE ImageToCanvas(int id, const std::string &data) = 0;
122 
126  virtual void Pause() {}
127 
131  virtual void Resume() {}
132 
133  private:
138  void CreateAll();
139 
144  void DestroyAll();
145 
150  void PreproccessAll();
151 
156  void ResourceFreeAll();
157 
162  void ThreadWrite();
163 
164  OutlineOsd *CreateOutline(int fontSize, uint32_t color, const char *font);
165 
171  void DestroyOutline(OutlineOsd *outline);
172 
182  void GetTime(time_t time, char *formatString, char weekFormat[7][16], int maxSize, char *content);
183 
195  void CalcCoordinate(Margin &margin, int regionWidth, int regionHeight, int backgroundWidth,
196  int backgroundHeight, int &x, int &y);
197 
203  void SetRunningParam(Param *param);
204 
209  void ParamPush();
210 
216  bool ParamPop();
221  void ThreadRun();
226  void ThreadStop();
231  void TimeUpdata();
236  void TextUpdata();
237 
243  void ContentPush(OsdContent &info);
244 
245  protected:
251 
252  private:
253  Size m_chnPicSize;
254 
255  struct OutlineOsdCfg {
256  OutlineOsd *outline;
257  int fontSize;
258  char font[32];
259  int refCnt;
260  uint32_t color;
261  };
262  std::list<OutlineOsdCfg *> m_outline;
263 
268  struct OsdItem {
269  OutlineOsd *outline;
270  ParamItem *item;
271  RegionInfo *region;
272  std::vector<SwitchColorRect> switchColorRect;
273  int index;
274  };
275 
276  std::list<OsdItem> m_osdTime;
277  std::list<OsdItem> m_osdText;
278  std::list<OsdItem> m_osdImage;
279  std::list<RegionInfo> m_region;
280 
281  EuvTimer m_timer;
282  time_t m_timeRecord;
283  bool m_threadRunning = false;
284  bool m_craeteFlag = false;
285  std::thread m_thread;
286  std::vector<Param> m_paramQueue;
287  std::mutex m_paramMtx;
288  std::vector<OsdContent> m_contentQueue;
289  std::string m_cacheChar;
290  int m_thickness;
291 
292  private:
301  int TextWrapLineSize(ParamText &paramText, RegionInfo &region, OutlineOsd *outline);
310  int TextWrapLine(OsdItem &text);
311  };
312 
314  public:
316  };
318 }// namespace Emx
319 
320 #endif//EMX_MediaServerOsd_HPP
Definition: MediaInfOsd.hpp:17
TypeE
OSD类型
Definition: MediaInfOsd.hpp:24
媒体模块的通用基类
Definition: MediaServerBase.hpp:104
Definition: MediaServerBase.hpp:18
Definition: MediaServerOsd.hpp:24
ErrCodeE SetOsdContent(OsdContent *pInfo) override
Definition: MediaServerOsd.hpp:40
~MediaServerOsdChn() override=default
virtual void Pause()
暂停OSD通道,用于编码通道切换分辨率时停止osd,可视情况选择是否实现
Definition: MediaServerOsd.hpp:126
virtual void RegionDestroyAll(const std::list< RegionInfo > &region)
销毁所有region
Definition: MediaServerOsd.hpp:102
ErrCodeE SaveParam() override
virtual Size GetChnPicSize()=0
获取通道图像大小(osd所叠加的画面大小,例如vpss chn的宽高)
void UpdateParam() override
Param m_paramTread
Definition: MediaServerOsd.hpp:250
Param * m_pParam
Definition: MediaServerOsd.hpp:246
virtual void Resume()
恢复OSD通道,用于编码通道切换分辨率后恢复osd,可视情况选择是否实现
Definition: MediaServerOsd.hpp:131
ErrCodeE OnParamChanged() override
void * GetParam() override
Definition: MediaServerOsd.hpp:34
void OnServerDestroy() override
ErrCodeE OnRecvReqChn(uint32_t method, const char *data, int32_t size, std::string &out) override
void * GetNewParam() override
Definition: MediaServerOsd.hpp:36
void GetRunningParamData(std::string &data) override
ErrCodeE LoadParam() override
Param m_paramRunning
Definition: MediaServerOsd.hpp:249
Param m_param
Definition: MediaServerOsd.hpp:247
ErrCodeE GetParamDefaultData(std::string &data) override
ErrCodeE OnServerCreate() override
void UpdateRunningParam() override
Definition: MediaServerOsd.hpp:58
void * GetRunningParam() override
Definition: MediaServerOsd.hpp:38
Param m_paramNew
Definition: MediaServerOsd.hpp:248
virtual ErrCodeE ImageToCanvas(int id, const std::string &data)=0
将图片更新至画布
MediaServerOsdChn(int32_t chn)
Definition: MediaServerOsd.hpp:26
virtual void RegionCreateAll(std::list< RegionInfo > &region)
创建所有region,并填充id字段,用于标识不同的region
Definition: MediaServerOsd.hpp:97
virtual void SetBitMap(int id, uint8_t *pix, int w, int h, std::vector< SwitchColorRect > *switchColorRectList=nullptr)=0
设置bitmap
void GetParamData(std::string &data) override
int GetParamSize() override
Definition: MediaServerOsd.hpp:44
bool ParamChanged() override
void NewParamInCome(const char *data, int size) override
Definition: MediaServerOsd.hpp:313
MediaServerOsd()
Definition: MediaServerOsd.hpp:315
关于系统需要持久化保存的参数的相关操作
Definition: EmxParam.hpp:18
MediaModE
Definition: MediaTypedef.hpp:60
ErrCodeE
错误码定义
Definition: EmxTypeDef.hpp:29
@ Success
成功
Definition: EmxGpio.hpp:10
时间或文字类型OSD显示内容
Definition: MediaInfOsd.hpp:106
Definition: MediaInfOsd.hpp:118
Definition: MediaServerOsd.hpp:73
int x
区域x坐标
Definition: MediaServerOsd.hpp:75
uint8_t isFlicker
是否闪烁显示
Definition: MediaServerOsd.hpp:83
int w
区域宽
Definition: MediaServerOsd.hpp:77
int y
区域y坐标
Definition: MediaServerOsd.hpp:76
uint16_t flickerInterval
闪烁间隔,单位毫秒
Definition: MediaServerOsd.hpp:82
int id
region的唯一标识
Definition: MediaServerOsd.hpp:81
bool show
是否显示
Definition: MediaServerOsd.hpp:80
int layer
叠加层级
Definition: MediaServerOsd.hpp:79
MediaInfOsd::TypeE type
OSD类型
Definition: MediaServerOsd.hpp:74
uint8_t autoSwitchColor
是否自动黑白颜色转换
Definition: MediaServerOsd.hpp:84
int h
区域高
Definition: MediaServerOsd.hpp:78
Definition: MediaServerOsd.hpp:86
uint16_t h
区域高
Definition: MediaServerOsd.hpp:90
uint16_t y
区域起始y坐标
Definition: MediaServerOsd.hpp:88
uint16_t w
区域宽
Definition: MediaServerOsd.hpp:89
uint16_t x
区域起始x坐标
Definition: MediaServerOsd.hpp:87
图像大小
Definition: MediaRegion.hpp:25