BaseRecordThread.cpp 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. #include "BaseRecordThread.h"
  2. #include <QDateTime>
  3. BaseRecordThread::BaseRecordThread(RecordThreadInfo_t& threadInfo)
  4. : m_threadInfo(threadInfo)
  5. {
  6. m_logger = spdlog::get("RecordAudio");
  7. if(m_logger == nullptr)
  8. {
  9. fmt::print("RecordThread: RecordAudio Logger not found.\n");
  10. return;
  11. }
  12. m_logBase = fmt::format("录音通道: {}:{}", m_threadInfo.cardRoadInfo.strSoundCardName.toStdString(),
  13. m_threadInfo.cardRoadInfo.roadInfo.nRoadNum);
  14. }
  15. BaseRecordThread::~BaseRecordThread()
  16. {
  17. }
  18. /* 线程任务函数,子类需要实现 */
  19. void BaseRecordThread::threadTask()
  20. {
  21. m_isRunning.store(true);
  22. m_logBase = fmt::format("录音通道: {}:{}", m_threadInfo.cardRoadInfo.strSoundCardName.toStdString(),
  23. m_threadInfo.cardRoadInfo.roadInfo.nRoadNum);
  24. m_threadInfo.threadState = EThreadState::State_Running;
  25. /* 执行任务 */
  26. task();
  27. m_threadInfo.threadState = EThreadState::State_Stopped;
  28. }
  29. /* 停止线程 */
  30. void BaseRecordThread::stopThread()
  31. {
  32. m_isRunning.store(false);
  33. }
  34. /* 获取频率ID */
  35. const RecordThreadInfo_t& BaseRecordThread::getThreadInfo()
  36. {
  37. return m_threadInfo;
  38. }
  39. /* 根据文件大小计算时间长度,单位ms */
  40. QDateTime BaseRecordThread::previTime(QDateTime& currentTime, int64_t dataSize)
  41. {
  42. if(dataSize <= 0)
  43. {
  44. return currentTime; // 如果数据大小为0,返回当前时间
  45. }
  46. int64_t offsetMS = dataSize * 1000 / m_oneSecondSize;
  47. return currentTime.addMSecs(-offsetMS);
  48. }
  49. /*根据当前时间和数据大小向后推算时间 */
  50. QDateTime BaseRecordThread::nextTime(QDateTime& currentTime, int64_t dataSize)
  51. {
  52. if(dataSize <= 0)
  53. {
  54. return currentTime; // 如果数据大小为0,返回当前时间
  55. }
  56. int64_t offsetMS = dataSize * 1000 / m_oneSecondSize;
  57. return currentTime.addMSecs(offsetMS);
  58. }
  59. /* 计算出到下一个整点秒需要去掉多少个字节 */
  60. int32_t BaseRecordThread::calculateOffsetToNextSecond(QDateTime& currentTime)
  61. {
  62. QDateTime nextSecond = currentTime.addSecs(1);
  63. nextSecond = nextSecond.addMSecs(-nextSecond.time().msec()); // 去掉毫秒部分
  64. int64_t offsetMS = nextSecond.toMSecsSinceEpoch() - currentTime.toMSecsSinceEpoch();
  65. return static_cast<int32_t>(offsetMS * m_oneSecondSize / 1000); // 转换为字节数
  66. }