修改分包接收前板发的YUV数据,取图成功后保存YUV图和JPG图
This commit is contained in:
@@ -2,20 +2,16 @@
|
||||
#include "RecvDataHandler.h"
|
||||
#include "../Network/ClientHandler.h"
|
||||
|
||||
DataHandler::DataHandler(QLabel* leftLens_imageLabel, QLabel* rightLens_imageLabel, QLabel* videoLabel,
|
||||
QLineEdit* VideoResolutionEdit,
|
||||
QTextEdit* licenseHwInfoEdit, QMap<QString, QLineEdit*>* devInfoLineEdits,
|
||||
QJsonArray frontBoardOneClickTest, QJsonArray frontBoardTest, QJsonArray frontBoardFuncConfig,
|
||||
QJsonArray frontBoardDevInfoJson, QJsonArray frontBoardLicenseJson,
|
||||
QJsonArray backBoardOneClickTest, QJsonArray backBoardTest, QJsonArray backBoardFuncConfig,
|
||||
QJsonArray backBoardDevInfoJson, QJsonArray backBoardUuidJson,
|
||||
QJsonArray getPicJson, QJsonArray getVideoJson, QObject* parent)
|
||||
DataHandler::DataHandler(QLabel* videoLabel, QLineEdit* VideoResolutionEdit, QSize labelSize, QMap<QString, QLineEdit*>* devInfoLineEdits,
|
||||
QJsonArray frontBoardOneClickTest, QJsonArray frontBoardTest, QJsonArray frontBoardFuncConfig,
|
||||
QJsonArray frontBoardDevInfoJson, QJsonArray frontBoardLicenseJson,
|
||||
QJsonArray backBoardOneClickTest, QJsonArray backBoardTest, QJsonArray backBoardFuncConfig,
|
||||
QJsonArray backBoardDevInfoJson, QJsonArray backBoardUuidJson,
|
||||
QJsonArray getPicJson, QJsonArray getVideoJson, QObject* parent)
|
||||
: QObject(parent),
|
||||
leftLens_m_imageLabel(leftLens_imageLabel),
|
||||
rightLens_m_imageLabel(rightLens_imageLabel),
|
||||
videoLabel(videoLabel),
|
||||
VideoResolutionEdit(VideoResolutionEdit),
|
||||
licenseHwInfoEdit(licenseHwInfoEdit),
|
||||
labelSize(labelSize),
|
||||
devInfoLineEdits(devInfoLineEdits),
|
||||
frontBoardOneClickTest(frontBoardOneClickTest), frontBoardTest(frontBoardTest),
|
||||
frontBoardFuncConfig(frontBoardFuncConfig), frontBoardDevInfoJson(frontBoardDevInfoJson),
|
||||
@@ -23,18 +19,18 @@ DataHandler::DataHandler(QLabel* leftLens_imageLabel, QLabel* rightLens_imageLab
|
||||
backBoardOneClickTest(backBoardOneClickTest), backBoardTest(backBoardTest),
|
||||
backBoardFuncConfig(backBoardFuncConfig), backBoardDevInfoJson(backBoardDevInfoJson),
|
||||
backBoardUuidJson(backBoardUuidJson), getPicJson(getPicJson), getVideoJson(getVideoJson),
|
||||
ffmpegDecoder(new FFmpegDecoder()), // 初始化FFmpeg解码器
|
||||
buffer(new QByteArray())
|
||||
buffer(new QByteArray()), picBuffer(new QByteArray()),
|
||||
ffmpegDecoder(new FFmpegDecoder()) // 初始化FFmpeg解码器
|
||||
|
||||
{
|
||||
ffmpegDecoder->initialize(); // 初始化解码器
|
||||
clearAllRecvData();
|
||||
initializeMsgIdToCmdMap();
|
||||
qDebug() << "DataHandler created";
|
||||
qDebug() << "DataHandler thread created";
|
||||
}
|
||||
|
||||
DataHandler::~DataHandler()
|
||||
{
|
||||
qDebug() << "---1--- DataHandler destroyed";
|
||||
if (ffmpegDecoder) {
|
||||
ffmpegDecoder->stopFFmpegDecoder();
|
||||
ffmpegDecoder->requestInterruption();
|
||||
@@ -44,7 +40,7 @@ DataHandler::~DataHandler()
|
||||
}
|
||||
delete buffer;
|
||||
buffer = nullptr;
|
||||
qDebug() << "---2--- DataHandler destroyed";
|
||||
qDebug() << "DataHandler thread destroyed";
|
||||
}
|
||||
|
||||
void DataHandler::handleOpenFocusWindow(int itemIndex)
|
||||
@@ -96,7 +92,8 @@ void DataHandler::showVideo(const QString& client, const QByteArray& valData)
|
||||
|
||||
void DataHandler::updateLineEdit(int msg_id, const QByteArray& actual_data) {
|
||||
QString dataStr = QString(actual_data.toHex(' '));
|
||||
licenseHwInfoEdit->setPlainText(dataStr);
|
||||
//licenseHwInfoEdit->setPlainText(dataStr);
|
||||
emit updateLicenseHwInfoEdit(dataStr);
|
||||
|
||||
if (msgIdToCmdMap.contains(msg_id)) {
|
||||
QString cmd = msgIdToCmdMap[msg_id];
|
||||
@@ -133,8 +130,7 @@ void DataHandler::handleData(const QString& client, const QByteArray& recvData,
|
||||
|
||||
qDebug() << "read file data size:" << recvdata.size();
|
||||
#endif
|
||||
|
||||
//qDebug() << "---Received data size:" << recvData.size();
|
||||
qDebug() << "---Received data size:" << recvData.size();
|
||||
// 将接收到的数据追加到buffer
|
||||
buffer->append(recvData);
|
||||
|
||||
@@ -148,17 +144,46 @@ void DataHandler::handleData(const QString& client, const QByteArray& recvData,
|
||||
(static_cast<unsigned char>(buffer->at(6)));
|
||||
//qDebug() << "---Received dataSize:" << dataSize;
|
||||
//qDebug() << "---msg_id:" << QString::number(msg_id, 16).toUpper();
|
||||
//qDebug() << "---(static_cast<unsigned char>(buffer->at(10)):" << static_cast<unsigned char>(buffer->at(10));
|
||||
//qDebug() << "---(static_cast<unsigned char>(buffer->at(11)):" << static_cast<unsigned char>(buffer->at(11));
|
||||
//qDebug() << "---(static_cast<unsigned char>(buffer->at(12)):" << static_cast<unsigned char>(buffer->at(12));
|
||||
//qDebug() << "---(static_cast<unsigned char>(buffer->at(13)):" << static_cast<unsigned char>(buffer->at(13));
|
||||
//qDebug() << "---(static_cast<unsigned char>(buffer->at(14)):" << static_cast<unsigned char>(buffer->at(14));
|
||||
//qDebug() << "---(static_cast<unsigned char>(buffer->at(15)):" << static_cast<unsigned char>(buffer->at(15));
|
||||
/*qDebug() << "---(static_cast<unsigned char>(buffer->at(0)):" << QString::number(static_cast<unsigned char>(buffer->at(0)), 16).toUpper();
|
||||
qDebug() << "---(static_cast<unsigned char>(buffer->at(1)):" << QString::number(static_cast<unsigned char>(buffer->at(1)), 16).toUpper();
|
||||
qDebug() << "---(static_cast<unsigned char>(buffer->at(2)):" << QString::number(static_cast<unsigned char>(buffer->at(2)), 16).toUpper();
|
||||
qDebug() << "---(static_cast<unsigned char>(buffer->at(3)):" << QString::number(static_cast<unsigned char>(buffer->at(3)), 16).toUpper();
|
||||
qDebug() << "---(static_cast<unsigned char>(buffer->at(4)):" << QString::number(static_cast<unsigned char>(buffer->at(4)), 16).toUpper();
|
||||
qDebug() << "---(static_cast<unsigned char>(buffer->at(5)):" << QString::number(static_cast<unsigned char>(buffer->at(5)), 16).toUpper();
|
||||
qDebug() << "---(static_cast<unsigned char>(buffer->at(6)):" << QString::number(static_cast<unsigned char>(buffer->at(6)), 16).toUpper();
|
||||
qDebug() << "---(static_cast<unsigned char>(buffer->at(7)):" << QString::number(static_cast<unsigned char>(buffer->at(7)), 16).toUpper();
|
||||
qDebug() << "---(static_cast<unsigned char>(buffer->at(8)):" << QString::number(static_cast<unsigned char>(buffer->at(8)), 16).toUpper();
|
||||
qDebug() << "---(static_cast<unsigned char>(buffer->at(9)):" << QString::number(static_cast<unsigned char>(buffer->at(9)), 16).toUpper();
|
||||
qDebug() << "---(static_cast<unsigned char>(buffer->at(10)):" << QString::number(static_cast<unsigned char>(buffer->at(10)), 16).toUpper();
|
||||
qDebug() << "---(static_cast<unsigned char>(buffer->at(11)):" << QString::number(static_cast<unsigned char>(buffer->at(11)), 16).toUpper();
|
||||
qDebug() << "---(static_cast<unsigned char>(buffer->at(12)):" << QString::number(static_cast<unsigned char>(buffer->at(12)), 16).toUpper();
|
||||
qDebug() << "---(static_cast<unsigned char>(buffer->at(13)):" << QString::number(static_cast<unsigned char>(buffer->at(13)), 16).toUpper();
|
||||
qDebug() << "---(static_cast<unsigned char>(buffer->at(14)):" << QString::number(static_cast<unsigned char>(buffer->at(14)), 16).toUpper();
|
||||
qDebug() << "---(static_cast<unsigned char>(buffer->at(15)):" << QString::number(static_cast<unsigned char>(buffer->at(15)), 16).toUpper();*/
|
||||
// 第11字节为返回 OK/NG
|
||||
bool success = (static_cast<unsigned char>(buffer->at(10)) == 0x00);
|
||||
int totalSize = 10 + dataSize; // 数据头大小(10字节) + 实际数据大小
|
||||
|
||||
if (buffer->size() >= totalSize) {
|
||||
qDebug() << "---(static_cast<unsigned char>(buffer->at(0)):" << QString::number(static_cast<unsigned char>(buffer->at(0)), 16).toUpper();
|
||||
qDebug() << "---(static_cast<unsigned char>(buffer->at(1)):" << QString::number(static_cast<unsigned char>(buffer->at(1)), 16).toUpper();
|
||||
qDebug() << "---(static_cast<unsigned char>(buffer->at(2)):" << QString::number(static_cast<unsigned char>(buffer->at(2)), 16).toUpper();
|
||||
qDebug() << "---(static_cast<unsigned char>(buffer->at(3)):" << QString::number(static_cast<unsigned char>(buffer->at(3)), 16).toUpper();
|
||||
qDebug() << "---(static_cast<unsigned char>(buffer->at(4)):" << QString::number(static_cast<unsigned char>(buffer->at(4)), 16).toUpper();
|
||||
qDebug() << "---(static_cast<unsigned char>(buffer->at(5)):" << QString::number(static_cast<unsigned char>(buffer->at(5)), 16).toUpper();
|
||||
qDebug() << "---(static_cast<unsigned char>(buffer->at(6)):" << QString::number(static_cast<unsigned char>(buffer->at(6)), 16).toUpper();
|
||||
qDebug() << "---(static_cast<unsigned char>(buffer->at(7)):" << QString::number(static_cast<unsigned char>(buffer->at(7)), 16).toUpper();
|
||||
qDebug() << "---(static_cast<unsigned char>(buffer->at(8)):" << QString::number(static_cast<unsigned char>(buffer->at(8)), 16).toUpper();
|
||||
qDebug() << "---(static_cast<unsigned char>(buffer->at(9)):" << QString::number(static_cast<unsigned char>(buffer->at(9)), 16).toUpper();
|
||||
qDebug() << "---(static_cast<unsigned char>(buffer->at(10)):" << QString::number(static_cast<unsigned char>(buffer->at(10)), 16).toUpper();
|
||||
qDebug() << "---(static_cast<unsigned char>(buffer->at(11)):" << QString::number(static_cast<unsigned char>(buffer->at(11)), 16).toUpper();
|
||||
qDebug() << "---(static_cast<unsigned char>(buffer->at(12)):" << QString::number(static_cast<unsigned char>(buffer->at(12)), 16).toUpper();
|
||||
qDebug() << "---(static_cast<unsigned char>(buffer->at(13)):" << QString::number(static_cast<unsigned char>(buffer->at(13)), 16).toUpper();
|
||||
qDebug() << "---(static_cast<unsigned char>(buffer->at(14)):" << QString::number(static_cast<unsigned char>(buffer->at(14)), 16).toUpper();
|
||||
qDebug() << "---(static_cast<unsigned char>(buffer->at(15)):" << QString::number(static_cast<unsigned char>(buffer->at(15)), 16).toUpper();
|
||||
qDebug() << "---(static_cast<unsigned char>(buffer->at(16)):" << QString::number(static_cast<unsigned char>(buffer->at(16)), 16).toUpper();
|
||||
qDebug() << "---(static_cast<unsigned char>(buffer->at(17)):" << QString::number(static_cast<unsigned char>(buffer->at(17)), 16).toUpper();
|
||||
qDebug() << "---(static_cast<unsigned char>(buffer->at(18)):" << QString::number(static_cast<unsigned char>(buffer->at(18)), 16).toUpper();
|
||||
// 去掉前面 11 字节
|
||||
QByteArray data = buffer->mid(11, dataSize);
|
||||
//QByteArray data = buffer->mid(10, dataSize);
|
||||
@@ -166,7 +191,7 @@ void DataHandler::handleData(const QString& client, const QByteArray& recvData,
|
||||
QByteArray actual_data = hexStringToByteArray(hexString);
|
||||
//qDebug() << "---Received hexString:" << hexString;
|
||||
buffer->remove(0, totalSize); // 移除已处理的数据
|
||||
if(msg_id != 0x0040 && msg_id != START_VIDEO) {
|
||||
if(msg_id != 0x0040 && msg_id != START_VIDEO && msg_id != GET_IMG) {
|
||||
//if (msg_id != 0x0040) {
|
||||
qDebug() << "--- msg_id:" << msg_id;
|
||||
qDebug() << "--- clientLastMsgId.value(client, 0):" << clientLastMsgId.value(client, 0);
|
||||
@@ -179,8 +204,6 @@ void DataHandler::handleData(const QString& client, const QByteArray& recvData,
|
||||
true, itemData, funcItemData, jsonArray, itemJsonIndex);
|
||||
}
|
||||
clientLastMsgId[client] = msg_id;
|
||||
qDebug() << "--- client:" << client;
|
||||
qDebug() << "--- clientLastMsgId[client]:" << clientLastMsgId[client];
|
||||
}
|
||||
handleCmd(msg_id, client, actual_data);
|
||||
}
|
||||
@@ -225,21 +248,6 @@ void DataHandler::handleCmd(int msg_id, const QString& client, QByteArray actual
|
||||
void DataHandler::handleFrontCmd(int msg_id, const QString& client, QByteArray actual_data)
|
||||
{
|
||||
switch (msg_id) {
|
||||
case 0x0019:
|
||||
{
|
||||
showPic(leftLens_m_imageLabel, rightLens_m_imageLabel, client, actual_data);
|
||||
}
|
||||
break;
|
||||
case 0x0011:
|
||||
{
|
||||
showVideo(client, actual_data);
|
||||
}
|
||||
break;
|
||||
case 0x0021:
|
||||
{
|
||||
//showVideo(client, actual_data);
|
||||
}
|
||||
break;
|
||||
case FACE_ENROLL_SINGLE:
|
||||
{
|
||||
|
||||
@@ -297,7 +305,34 @@ void DataHandler::handleFrontCmd(int msg_id, const QString& client, QByteArray a
|
||||
break;
|
||||
case GET_IMG:
|
||||
{
|
||||
showPic(leftLens_m_imageLabel, rightLens_m_imageLabel, client, actual_data);
|
||||
qDebug() << "--- showPic actual_data.size():" << actual_data.size();
|
||||
int lens_n = static_cast<unsigned char>(actual_data[1]);
|
||||
int width = (static_cast<unsigned char>(actual_data[3]) << 8) | static_cast<unsigned char>(actual_data[2]);
|
||||
int height = (static_cast<unsigned char>(actual_data[5]) << 8) | static_cast<unsigned char>(actual_data[4]);
|
||||
int format = static_cast<unsigned char>(actual_data[6]);
|
||||
qDebug() << "lens_n = " << lens_n;
|
||||
qDebug() << "format = " << format;
|
||||
qDebug() << "width = " << width;
|
||||
qDebug() << "height = " << height;
|
||||
qint32 picSize = width * height * 1.5;
|
||||
|
||||
QByteArray yuvData = actual_data.mid(7);
|
||||
qDebug() << "--- showPic width * height * 1.5:" << picSize;
|
||||
qDebug() << "--- showPic picBuffer.size():" << picBuffer->size();
|
||||
if (yuvData.size() + picBuffer->size() == picSize) {
|
||||
picBuffer->append(yuvData);
|
||||
showPic(labelSize, lens_n, width, height, format, picBuffer);
|
||||
picBuffer->remove(0, picSize);
|
||||
}
|
||||
else if (yuvData.size() + picBuffer->size() > picSize) {
|
||||
picBuffer->append(yuvData);
|
||||
qDebug() << "width is " << width << " height is " << height << "PIC size is" << picSize;
|
||||
qDebug() << "But recv PIC size is " << picBuffer->size();
|
||||
picBuffer->remove(0, picBuffer->size());
|
||||
}
|
||||
else {
|
||||
picBuffer->append(yuvData);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case START_VIDEO:
|
||||
@@ -507,7 +542,6 @@ void DataHandler::handleDevInfo(int msg_id, const QString& client, QByteArray ac
|
||||
case GET_FRONT_HW_INFO:
|
||||
{
|
||||
qDebug() << "GET_FRONT_HW_INFO";
|
||||
//QString dataStr = QString(actual_data.toHex(' '));
|
||||
QStringList hexList;
|
||||
QString dataStr;
|
||||
qDebug() << "actual_data.size(): " << actual_data.size();
|
||||
@@ -521,7 +555,8 @@ void DataHandler::handleDevInfo(int msg_id, const QString& client, QByteArray ac
|
||||
else
|
||||
dataStr = "前板发送的HW INFO 数据大小不正确";
|
||||
QString displayText = dataStr;
|
||||
licenseHwInfoEdit->setPlainText(displayText);
|
||||
//licenseHwInfoEdit->setPlainText(displayText);
|
||||
emit updateLicenseHwInfoEdit(displayText);
|
||||
}
|
||||
break;
|
||||
case WRITE_FRONT_LICENSE:
|
||||
|
||||
@@ -33,9 +33,7 @@ class DataHandler : public QObject
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit DataHandler(QLabel* leftLens_imageLabel, QLabel* rightLens_imageLabel, QLabel* videoLabel,
|
||||
QLineEdit* VideoResolutionEdit,
|
||||
QTextEdit* licenseHwInfoEdit, QMap<QString, QLineEdit*>* devInfoLineEdits,
|
||||
explicit DataHandler(QLabel* videoLabel, QLineEdit* VideoResolutionEdit, QSize labelSize, QMap<QString, QLineEdit*>* devInfoLineEdits,
|
||||
QJsonArray frontBoardOneClickTest, QJsonArray frontBoardTest, QJsonArray frontBoardFuncConfig,
|
||||
QJsonArray frontBoardDevInfoJson, QJsonArray frontBoardLicenseJson,
|
||||
QJsonArray backBoardOneClickTest, QJsonArray backBoardTest, QJsonArray backBoardFuncConfig,
|
||||
@@ -52,7 +50,11 @@ signals:
|
||||
void statusUpdated(const QString& clientAddress, int currentItemIndex, int currentFuncItemIndex,
|
||||
bool success, const QString& currentItemLabel, const QString& currentFuncItemLabel,
|
||||
const QJsonArray& jsonArray, int itemJsonIndex);
|
||||
|
||||
void updateLicenseHwInfoEdit(const QString& text);
|
||||
void updateLeftLensImage(const QPixmap& pixmap);
|
||||
void updateRightLensImage(const QPixmap& pixmap);
|
||||
void updateVideoLabel(const QPixmap& pixmap);
|
||||
void updateVideoResolution(const QString& resolutionText);
|
||||
private:
|
||||
QJsonArray frontBoardOneClickTest; // 前板一键功能测试 JSON
|
||||
QJsonArray frontBoardTest; // 前板单项测试 JSON
|
||||
@@ -67,20 +69,22 @@ private:
|
||||
QJsonArray getDevInfoJson; // 获取设备信息 JSON 配置
|
||||
QJsonArray getPicJson; // 发送取图指令 JSON 配置
|
||||
QJsonArray getVideoJson; // 发送拉视频指令 JSON 配置
|
||||
QLabel* leftLens_m_imageLabel;
|
||||
QLabel* rightLens_m_imageLabel;
|
||||
//QLabel* leftLens_m_imageLabel;
|
||||
//QLabel* rightLens_m_imageLabel;
|
||||
QLabel* videoLabel;
|
||||
QLineEdit* VideoResolutionEdit;
|
||||
QTextEdit* licenseHwInfoEdit;
|
||||
//QTextEdit* licenseHwInfoEdit;
|
||||
QByteArray allRecvData; // 完整的一帧数据
|
||||
int remain = 0;
|
||||
int start_run = 0;
|
||||
long dataLen = 0;
|
||||
FFmpegDecoder* ffmpegDecoder;
|
||||
QByteArray *buffer;
|
||||
QByteArray* buffer;
|
||||
QByteArray* picBuffer;
|
||||
QHash<QString, unsigned char> clientLastMsgId;
|
||||
QMap<QString, QLineEdit*>* devInfoLineEdits;
|
||||
QMap<int, QString> msgIdToCmdMap;
|
||||
QSize labelSize;
|
||||
|
||||
// 如果接收十六进制数据,转为二进制
|
||||
QByteArray hexStringToByteArray(const QString& hexString);
|
||||
@@ -92,6 +96,8 @@ private:
|
||||
void handleBackCmd(int msg_id, const QString& client, QByteArray actual_data);
|
||||
void initializeMsgIdToCmdMap();
|
||||
void updateLineEdit(int msg_id, const QByteArray& actual_data);
|
||||
void showPic(QSize labelSize, int lens_n,
|
||||
int width, int height, int format, const QByteArray* valData);
|
||||
};
|
||||
|
||||
#endif // DATAHANDLER_H
|
||||
|
||||
Reference in New Issue
Block a user