|
- #include "ValidProcess.h"
-
- ValidProcess::ValidProcess(QObject* parent) : IProcess(parent)
- {}
- ValidProcess::~ValidProcess()
- {
- if (m_pConstBuffer) {
- delete m_pConstBuffer;
- m_pConstBuffer = nullptr;
- }
- m_file.write(m_fileArray);
- m_file.flush();
- m_file.close();
- }
-
- void ValidProcess::init(Frame* frame, map<unsigned int, IProcess*>& mapUIntProcess)
- {
- m_pFrame = frame;
- m_mapUIntProcess = mapUIntProcess;
- m_pConstBuffer = new ConstBuffer(DataBufferLength, false, false, m_pFrame->m_uiFrameLen);
- createDataPath("Valid");
- }
- void ValidProcess::run()
- {
- unsigned char* m_ReadBuffer = new unsigned char[m_pFrame->m_uiFrameLen];
- unsigned short usReadLen;
- m_uiDataSize = 0;
- m_uiIndex = 0;
- m_bNeedWork = true;
- while (m_bNeedWork) {
- usReadLen = m_pConstBuffer->read(m_ReadBuffer, m_pFrame->m_uiFrameLen);
- if (usReadLen <= 0) {
- QThread::usleep(1);
- continue;
- }
- m_byteArray.append((char*)m_ReadBuffer, (int)m_pFrame->m_uiFrameLen);
- m_uiDataSize = m_byteArray.size();
- m_uiIndex = 0;
- // 副帧类型
- if (m_pFrame->m_usSubFrameType == 1) { // 无副帧
- while (m_uiIndex + m_pFrame->m_uiFrameLen <= m_uiDataSize) {
- if (m_pFrame->m_headArray[0] == m_byteArray[m_uiIndex]
- && m_pFrame->m_headArray[1] == m_byteArray[m_uiIndex + 1]) {
- if (m_pFrame->m_usHeadAddr == 1) { // 帧头在每行最前
- m_validArray = m_byteArray.mid(m_uiIndex - m_pFrame->m_usBeforeHeadLen,
- m_pFrame->m_uiFrameLen);
- frameExtract();
- m_uiIndex += m_pFrame->m_uiFrameLen;
- } else if (m_pFrame->m_usHeadAddr == 2) { // 帧头在每行最后
- if (m_pFrame->m_usBeforeHeadLen <= m_uiIndex) { // 说明第一个子帧满足
- m_validArray = m_byteArray.mid(m_uiIndex - m_pFrame->m_usBeforeHeadLen,
- m_pFrame->m_uiFrameLen);
- frameExtract();
- m_uiIndex -= m_pFrame->m_usBeforeHeadLen;
- m_uiIndex += m_pFrame->m_uiFrameLen;
- } else {
- ++m_uiIndex;
- }
- }
- } else {
- ++m_uiIndex;
- }
- }
- m_byteArray.remove(0, m_uiIndex);
- m_uiDataSize = 0;
- m_uiIndex = 0;
- } else if (m_pFrame->m_usSubFrameType == 2) { // 反码副帧
- while (m_uiIndex + m_pFrame->m_uiFrameLen <= m_uiDataSize) {
- if (m_pFrame->m_headArray[0] == m_byteArray[m_uiIndex]
- && m_pFrame->m_headArray[1] == m_byteArray[m_uiIndex + 1]
- && m_pFrame->m_subHeadArray[0]
- == m_byteArray[m_uiIndex + m_pFrame->m_uiFrameLen - m_pFrame->m_uiColumn]
- && m_pFrame->m_subHeadArray[1]
- == m_byteArray[m_uiIndex + m_pFrame->m_uiFrameLen - m_pFrame->m_uiColumn
- + 1]) {
- if (m_pFrame->m_usHeadAddr == 1) { // 帧头在每行最前
- m_validArray = m_byteArray.mid(m_uiIndex - m_pFrame->m_usBeforeHeadLen,
- m_pFrame->m_uiFrameLen);
- frameExtract();
- m_uiIndex += m_pFrame->m_uiFrameLen;
- } else if (m_pFrame->m_usHeadAddr == 2) { // 帧头在每行最后
- if (m_pFrame->m_usBeforeHeadLen <= m_uiIndex) { // 说明第一个子帧满足
- m_validArray = m_byteArray.mid(m_uiIndex - m_pFrame->m_usBeforeHeadLen,
- m_pFrame->m_uiFrameLen);
- frameExtract();
- m_uiIndex -= m_pFrame->m_usBeforeHeadLen;
- m_uiIndex += m_pFrame->m_uiFrameLen;
- } else {
- ++m_uiIndex;
- }
- }
- } else {
- ++m_uiIndex;
- }
- }
- m_byteArray.remove(0, m_uiIndex);
- m_uiDataSize = 0;
- m_uiIndex = 0;
- } else if (m_pFrame->m_usSubFrameType == 3) { // ID副帧
- while (m_uiIndex + m_pFrame->m_uiFrameLen <= m_uiDataSize) {
- if (m_pFrame->m_headArray[0] == m_byteArray[m_uiIndex]
- && m_pFrame->m_headArray[1] == m_byteArray[m_uiIndex + 1]
- && m_pFrame->m_headArray[0]
- == m_byteArray[m_uiIndex + m_pFrame->m_uiFrameLen - m_pFrame->m_uiColumn]
- && m_pFrame->m_headArray[1]
- == m_byteArray[m_uiIndex + m_pFrame->m_uiFrameLen - m_pFrame->m_uiColumn
- + 1]) {
- QByteArray startId = QByteArray::number(m_pFrame->m_usIdStart, 16); // 第一个Id号
- QByteArray endId = QByteArray::number(m_pFrame->m_usIdEnd, 16); // 最后一个Id号
- if (m_pFrame->m_usHeadAddr == 1) { // 帧头在每行最前
- if (startId[0] == m_byteArray[m_uiIndex + m_pFrame->m_usIdAddr]
- && endId[0]
- == m_byteArray[m_uiIndex + m_pFrame->m_usIdAddr
- + m_pFrame->m_uiFrameLen
- - m_pFrame->m_uiColumn]) {
- m_validArray = m_byteArray.mid(m_uiIndex - m_pFrame->m_usBeforeHeadLen,
- m_pFrame->m_uiFrameLen);
- frameExtract();
- m_uiIndex += m_pFrame->m_uiFrameLen;
- }
- } else if (m_pFrame->m_usHeadAddr == 2) {
- if (m_pFrame->m_usBeforeHeadLen <= m_uiIndex) { // 说明第一个子帧满足
- if (startId[0]
- == m_byteArray[m_uiIndex - m_pFrame->m_usBeforeHeadLen
- + m_pFrame->m_usIdAddr]
- && endId[0]
- == m_byteArray[m_uiIndex - m_pFrame->m_usBeforeHeadLen
- + m_pFrame->m_usIdAddr
- + m_pFrame->m_uiFrameLen
- - m_pFrame->m_uiColumn]) {
- m_validArray =
- m_byteArray.mid(m_uiIndex - m_pFrame->m_usBeforeHeadLen,
- m_pFrame->m_uiFrameLen);
- frameExtract();
- m_uiIndex -= m_pFrame->m_usBeforeHeadLen;
- m_uiIndex += m_pFrame->m_uiFrameLen;
- } else {
- ++m_uiIndex;
- }
- }
- }
- } else {
- ++m_uiIndex;
- }
- }
- m_byteArray.remove(0, m_uiIndex);
- m_uiDataSize = 0;
- m_uiIndex = 0;
- }
- }
- m_uiDataSize = 0;
- m_uiIndex = 0;
- m_byteArray.clear();
- m_validArray.clear();
- }
-
- void ValidProcess::frameExtract()
- {
- for (auto process : m_mapUIntProcess) {
- if (process.second) {
- if (process.second->getProcessModel() == 3) { // 图像
- VideoProcess* pVideoProcess = (VideoProcess*)process.second;
- if (pVideoProcess->getVideoPlayStatus() == false) {
- continue;
- }
- }
- process.second->getConstBuffer()->write((unsigned char*)m_validArray.data(),
- (unsigned short)m_validArray.size());
- }
- }
- m_fileArray.append(m_validArray);
- m_validArray.clear();
- if (DataAchiveBuffer <= m_fileArray.size()) {
- m_file.write(m_fileArray);
- m_file.flush();
- m_fileArray.clear();
- }
- }
|