GlobalVariable.h 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390
  1. #ifndef __GLOBAL_VARIABLE_H__
  2. #define __GLOBAL_VARIABLE_H__
  3. #include <QString>
  4. #include <QList>
  5. #include <QChar>
  6. #include <QMap>
  7. #include <QMetaType>
  8. #include <QDateTime>
  9. /**
  10. * @brief 星期枚举定义,星期八是带有日期的特殊日
  11. *
  12. */
  13. enum class eWeekType
  14. {
  15. Week_Monday = 1, /* 星期一 */
  16. Week_Tuesday, /* 星期二 */
  17. Week_Wednesday, /* 星期三 */
  18. Week_Thursday, /* 星期四 */
  19. Week_Friday, /* 星期五 */
  20. Week_Saturday, /* 星期六 */
  21. Week_Sunday, /* 星期日 */
  22. Week_Special, /* 特殊日期 */
  23. };
  24. Q_DECLARE_METATYPE(eWeekType)
  25. extern const QMap<eWeekType, QString> MapWeekTypeToString;
  26. /**
  27. * @brief 一条计划
  28. *
  29. */
  30. struct OnePlan_t
  31. {
  32. eWeekType weekType; /* 星期类型 */
  33. QDate date; /* 日期,格式为YYYY-MM-DD */
  34. QTime timeStart; /* 时间,格式为HH:mm:ss */
  35. QTime timeEnd; /* 时间,格式为HH:mm:ss */
  36. bool operator==(const OnePlan_t &other) const
  37. {
  38. return (weekType == other.weekType) && (date == other.date) && (timeStart == other.timeStart) && (timeEnd == other.timeEnd);
  39. }
  40. bool operator!=(const OnePlan_t &other) const
  41. {
  42. return !(*this == other);
  43. }
  44. };
  45. /* ====================================================================
  46. * 声卡相关信息结构体
  47. * ==================================================================== */
  48. /* 单个录音通道信息,带有频道信息 */
  49. struct OneRoadInfo_t
  50. {
  51. int nRoadNum = -1; /* 录音通道编号,是声卡在系统中的物理编号 */
  52. int nChannelID = -1; /* 频道ID */
  53. QString strChannelName; /* 频道名称 */
  54. };
  55. /**
  56. * @brief 声卡信息,这里的信息都是设备上和物理声卡相关的
  57. *
  58. */
  59. struct SoundCardInfo_t
  60. {
  61. int nSoundCardNum = -1; /* 声卡编号 */
  62. QString strSoundCardID; /* 声卡ID,这个是声卡名称,可以用来打开 */
  63. QString strSoundCardName; /* 声卡名称 */
  64. QString strSoundCardDriver; /* 声卡驱动名称 */
  65. QList<OneRoadInfo_t> listRoad; /* 录音通道列表,存储通道编号 */
  66. };
  67. /**
  68. * @brief 单个声卡通道信息,带有声卡自身的信息
  69. *
  70. */
  71. struct SoundCardRoadInfo_t
  72. {
  73. int nSoundCardNum = -1; /* 声卡编号 */
  74. QString strSoundCardID; /* 声卡ID,这个是声卡名称,可以用来打开 */
  75. QString strSoundCardName; /* 声卡名称 */
  76. OneRoadInfo_t roadInfo; /* 单个通道信息 */
  77. };
  78. /* 注册数据类型到系统 */
  79. Q_DECLARE_METATYPE(SoundCardRoadInfo_t)
  80. /* ====================================================================
  81. * CompareItemInfo_t对比项结构体
  82. * ==================================================================== */
  83. /**
  84. * @brief 对比项信息在表格中的显示结构体
  85. *
  86. */
  87. struct CompareItemTableItem_t
  88. {
  89. int nSerialNum; /* 序号,在表格中的序号 */
  90. int nID; /* 对比项ID */
  91. QString strName; /* 对比项名称 */
  92. bool isEnable; /* 对比项状态,是否启用 */
  93. int nChannelCount; /* 通道数 */
  94. };
  95. /* 对比项的通道信息 */
  96. struct CompareItemRoadInfo_t
  97. {
  98. bool isEnableRecord; /* 是否开启录音 */
  99. int nCompareRoadNum; /* 对比通道编号,1是主通道,其余往后排 */
  100. QString strCompareRoadName; /* 对比项通道名称,不是声卡的通道名 */
  101. SoundCardRoadInfo_t scRoadInfo; /* 声卡通道信息,包含声卡编号和通道编号 */
  102. bool operator==(const CompareItemRoadInfo_t &other) const;
  103. };
  104. /* 检测阈值,静音和过载是整数,反相是小数 */
  105. union Threshold_t
  106. {
  107. uint64_t nThreshold; /* 静音和过载的阈值 */
  108. double dThreshold; /* 反相的阈值 */
  109. };
  110. /**
  111. * @brief 静音、过载、反相检测参数
  112. *
  113. */
  114. struct CompareItemDetectParam_t
  115. {
  116. bool isEnable = false; /* 是否启用检测 */
  117. Threshold_t threshold; /* 检测阈值 */
  118. int nLen = 0; /* 检测长度,单位秒 */
  119. int nSensitivity = 0; /* 敏感度,0-100,0最不敏感,100最敏感 */
  120. CompareItemDetectParam_t() = default;
  121. CompareItemDetectParam_t(const CompareItemDetectParam_t &other);
  122. CompareItemDetectParam_t& operator=(const CompareItemDetectParam_t &other);
  123. };
  124. /**
  125. * @brief 对比项信息
  126. *
  127. */
  128. struct CompareItemInfo_t
  129. {
  130. int nID = -1; /* 对比项ID,对比项唯一识别号,不可更改 */
  131. QString strName; /* 对比项名称 */
  132. bool isEnable = false; /* 对比项状态,是否启用 */
  133. QMap<int, CompareItemRoadInfo_t> mapRoad; /* 通道信息列表,int是通道编号,在对比项中的编号 */
  134. CompareItemDetectParam_t paramMute; /* 静音检测参数 */
  135. CompareItemDetectParam_t paramOverload; /* 过载检测参数 */
  136. CompareItemDetectParam_t paramPhase; /* 反相检测参数 */
  137. CompareItemInfo_t() = default;
  138. CompareItemInfo_t(const CompareItemInfo_t &other);
  139. CompareItemInfo_t& operator=(const CompareItemInfo_t &other);
  140. /* 判断对比想基础部分是否相等,不包含通道信息 */
  141. bool isEqualBase(const CompareItemInfo_t &other) const;
  142. /* 判断对比项的通道是否相同 */
  143. bool isEqualRoads(const CompareItemInfo_t &other) const;
  144. };
  145. /* =============================================================================
  146. * 检测时段配置
  147. * ============================================================================= */
  148. /**
  149. * @brief 一个对比项的检测计划
  150. *
  151. */
  152. struct DetectPeriodConfig_t
  153. {
  154. int nID = 0; /* ID */
  155. bool isApplySlient = false; /* 非检测计划日期是否应用静音 */
  156. bool isApplyOverload = false; /* 非检测计划日期是否应用超载 */
  157. bool isApplyPhase = false; /* 非检测计划日期是否应用反相 */
  158. bool isApplyNoise = false; /* 非检测计划日期是否应用噪音 */
  159. QList<OnePlan_t> listDetect; /* 检测计划列表 */
  160. QList<OnePlan_t> listNoDetect; /* 非检测计划列表 */
  161. bool operator==(const DetectPeriodConfig_t &other) const;
  162. /* 判断基础信息是否更改 */
  163. bool isBaseInfoChanged(const DetectPeriodConfig_t &other) const;
  164. };
  165. /**
  166. * @brief 非检测计划应用清空
  167. *
  168. */
  169. struct NoDetectPlanApply_t
  170. {
  171. int nID = 0; /* ID */
  172. bool isApplySlient = false; /* 非检测计划日期是否应用静音 */
  173. bool isApplyOverload = false; /* 非检测计划日期是否应用超载 */
  174. bool isApplyPhase = false; /* 非检测计划日期是否应用反相 */
  175. bool isApplyNoise = false; /* 非检测计划日期是否应用噪音 */
  176. };
  177. /* =========================================================================================
  178. * 线程信息相关枚举和结构体
  179. * =========================================================================================*/
  180. // enum class ERoadID
  181. // {
  182. // RoadID_None = 0, /* 无通道 */
  183. // RoadID_1 = 1, /* 通道1 */
  184. // RoadID_2, /* 通道2 */
  185. // RoadID_3, /* 通道3 */
  186. // RoadID_4, /* 通道4 */
  187. // RoadID_5, /* 通道5 */
  188. // RoadID_6, /* 通道6 */
  189. // RoadID_7, /* 通道7 */
  190. // RoadID_8, /* 通道8 */
  191. // RoadID_9, /* 通道9 */
  192. // RoadID_10, /* 通道10 */
  193. // RoadID_11, /* 通道11 */
  194. // RoadID_12, /* 通道12 */
  195. // RoadID_13, /* 通道13 */
  196. // RoadID_14, /* 通道14 */
  197. // RoadID_15, /* 通道15 */
  198. // RoadID_16, /* 通道16 */
  199. // RoadID_17, /* 通道17 */
  200. // RoadID_18, /* 通道18 */
  201. // RoadID_19, /* 通道19 */
  202. // RoadID_20, /* 通道20 */
  203. // RoadID_21, /* 通道21 */
  204. // RoadID_22, /* 通道22 */
  205. // RoadID_23, /* 通道23 */
  206. // RoadID_24, /* 通道24 */
  207. // RoadID_25, /* 通道25 */
  208. // RoadID_26, /* 通道26 */
  209. // RoadID_27, /* 通道27 */
  210. // RoadID_28, /* 通道28 */
  211. // RoadID_29, /* 通道29 */
  212. // RoadID_30, /* 通道30 */
  213. // RoadID_31, /* 通道31 */
  214. // RoadID_32, /* 通道32 */
  215. // RoadID_33, /* 通道33 */
  216. // RoadID_34, /* 通道34 */
  217. // RoadID_35, /* 通道35 */
  218. // RoadID_36, /* 通道36 */
  219. // RoadID_37, /* 通道37 */
  220. // RoadID_38, /* 通道38 */
  221. // RoadID_39, /* 通道39 */
  222. // RoadID_40, /* 通道40 */
  223. // RoadID_41, /* 通道41 */
  224. // RoadID_42, /* 通道42 */
  225. // RoadID_43, /* 通道43 */
  226. // RoadID_44, /* 通道44 */
  227. // RoadID_45, /* 通道45 */
  228. // RoadID_46, /* 通道46 */
  229. // RoadID_47, /* 通道47 */
  230. // RoadID_48, /* 通道48 */
  231. // RoadID_49, /* 通道49 */
  232. // RoadID_50, /* 通道50 */
  233. // RoadID_51, /* 通道51 */
  234. // RoadID_52, /* 通道52 */
  235. // RoadID_53, /* 通道53 */
  236. // RoadID_54, /* 通道54 */
  237. // RoadID_55, /* 通道55 */
  238. // RoadID_56, /* 通道56 */
  239. // RoadID_57, /* 通道57 */
  240. // RoadID_58, /* 通道58 */
  241. // RoadID_59, /* 通道59 */
  242. // RoadID_60, /* 通道60 */
  243. // RoadID_61, /* 通道61 */
  244. // RoadID_62, /* 通道62 */
  245. // RoadID_63, /* 通道63 */
  246. // RoadID_64, /* 通道64 */
  247. // RoadID_MAX = RoadID_64, /* 最大通道数 */
  248. // };
  249. /**
  250. * @brief 线程状态枚举
  251. *
  252. */
  253. enum class EThreadState
  254. {
  255. State_None = 0, /* 无状态 */
  256. State_Inited, /* 已初始化 */
  257. State_Running, /* 运行中 */
  258. State_Stopped, /* 已停止 */
  259. State_Error /* 错误状态 */
  260. };
  261. /**
  262. * @brief 线程类型枚举
  263. *
  264. */
  265. enum class EThreadType
  266. {
  267. Type_None = 0, /* 无类型 */
  268. Type_RecordSrc, /* 录音源线程 */
  269. Type_AssignSrcData, /* 分派数据线程 */
  270. Type_CreateWAV, /* 生成WAV文件线程 */
  271. Type_CalculateDBAndPhase, /* 计算音量和反相线程 */
  272. // Type_CreateNoise, /* 生成噪音数据线程 */
  273. Type_CreateLongWAV, /* 生成长文件线程 */
  274. Type_RtpSend, /* RTP发送线程 */
  275. Type_ConsistencyCheck, /* 一致性检查线程 */
  276. Type_CheckDBAndPhase /* 检查音量和反相线程 */
  277. };
  278. /**
  279. * @brief 录音通道信息
  280. *
  281. */
  282. // struct RoadNumberInfo_t
  283. // {
  284. // ERoadID roadID; /* 录音通道编号 */
  285. // std::string strRoadName; /* 录音通道名称 */
  286. // int roadNum; /* 录音通道编号,在对比项里的编号 */
  287. // RoadNumberInfo_t() = default;
  288. // RoadNumberInfo_t(const RoadNumberInfo_t& info)
  289. // : roadID(info.roadID), strRoadName(info.strRoadName), roadNum(info.roadNum) {}
  290. // RoadNumberInfo_t& operator=(const RoadNumberInfo_t& info)
  291. // {
  292. // if (this == &info) return *this; // 防止自赋值
  293. // roadID = info.roadID;
  294. // strRoadName = info.strRoadName;
  295. // roadNum = info.roadNum;
  296. // return *this;
  297. // }
  298. // };
  299. /**
  300. * @brief 录音线程信息结构体
  301. */
  302. struct RecordThreadInfo_t
  303. {
  304. SoundCardRoadInfo_t cardRoadInfo; /* 录音通道信息 */
  305. EThreadType threadType; /* 线程类型 */
  306. EThreadState threadState; /* 线程状态 */
  307. // BaseRecordThread* pThread = nullptr; /* 线程对象 */
  308. };
  309. class BaseCalculateThread;
  310. /**
  311. * @brief 计算线程信息结构体
  312. *
  313. */
  314. struct CalculateThreadInfo_t
  315. {
  316. CompareItemInfo_t compareItemInfo; /* 对比项信息 */
  317. EThreadType threadType; /* 线程类型 */
  318. EThreadState threadState; /* 线程状态 */
  319. // BaseCalculateThread* pThread = nullptr; /* 计算线程对象 */
  320. CalculateThreadInfo_t() = default;
  321. CalculateThreadInfo_t(const CalculateThreadInfo_t& info);
  322. CalculateThreadInfo_t& operator=(const CalculateThreadInfo_t& info);
  323. };
  324. #endif // __GLOBAL_VARIABLE_H__