12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- #include "BaseRecordThread.h"
- #include <QDateTime>
- BaseRecordThread::BaseRecordThread(RecordThreadInfo_t& threadInfo)
- : m_threadInfo(threadInfo)
- {
- m_logger = spdlog::get("RecordAudio");
- if(m_logger == nullptr)
- {
- fmt::print("RecordThread: RecordAudio Logger not found.\n");
- return;
- }
- m_logBase = fmt::format("录音通道: {}:{}", m_threadInfo.cardRoadInfo.strSoundCardName.toStdString(),
- m_threadInfo.cardRoadInfo.roadInfo.nRoadNum);
- }
- BaseRecordThread::~BaseRecordThread()
- {
-
- }
- /* 线程任务函数,子类需要实现 */
- void BaseRecordThread::threadTask()
- {
- m_isRunning.store(true);
- m_logBase = fmt::format("录音通道: {}:{}", m_threadInfo.cardRoadInfo.strSoundCardName.toStdString(),
- m_threadInfo.cardRoadInfo.roadInfo.nRoadNum);
- m_threadInfo.threadState = EThreadState::State_Running;
- /* 执行任务 */
- task();
- m_threadInfo.threadState = EThreadState::State_Stopped;
- }
- /* 停止线程 */
- void BaseRecordThread::stopThread()
- {
- m_isRunning.store(false);
- }
- /* 获取频率ID */
- const RecordThreadInfo_t& BaseRecordThread::getThreadInfo()
- {
- return m_threadInfo;
- }
- /* 根据文件大小计算时间长度,单位ms */
- QDateTime BaseRecordThread::previTime(QDateTime& currentTime, int64_t dataSize)
- {
- if(dataSize <= 0)
- {
- return currentTime; // 如果数据大小为0,返回当前时间
- }
- int64_t offsetMS = dataSize * 1000 / m_oneSecondSize;
- return currentTime.addMSecs(-offsetMS);
- }
- /*根据当前时间和数据大小向后推算时间 */
- QDateTime BaseRecordThread::nextTime(QDateTime& currentTime, int64_t dataSize)
- {
- if(dataSize <= 0)
- {
- return currentTime; // 如果数据大小为0,返回当前时间
- }
- int64_t offsetMS = dataSize * 1000 / m_oneSecondSize;
- return currentTime.addMSecs(offsetMS);
- }
- /* 计算出到下一个整点秒需要去掉多少个字节 */
- int32_t BaseRecordThread::calculateOffsetToNextSecond(QDateTime& currentTime)
- {
- QDateTime nextSecond = currentTime.addSecs(1);
- nextSecond = nextSecond.addMSecs(-nextSecond.time().msec()); // 去掉毫秒部分
- int64_t offsetMS = nextSecond.toMSecsSinceEpoch() - currentTime.toMSecsSinceEpoch();
- return static_cast<int32_t>(offsetMS * m_oneSecondSize / 1000); // 转换为字节数
- }
|