#include "modelcameradlg.h" #include "ui_modelcameradlg.h" ModelCameraDlg::ModelCameraDlg(QWidget *parent) : QDialog(parent), ui(new Ui::ModelCameraDlg) { ui->setupUi(this); ui->videoIPLineEdit->setText( QStringLiteral("rtsp://192.168.5.74:8554/live")); // ui->pushStreamIPEdit->setText( QStringLiteral("rtmp://182.92.130.23/app/stream99")); ui->cameraVideoWidget->setVedioSaveFileDirPath("./3DCameraVideo"); InitialComboBox(); cameraCMDThread = new QThread(); encodeModelCamera = new EncodeModelCamera(); encodeModelCamera->moveToThread(cameraCMDThread); cameraCMDThread->start(); connect(this, &ModelCameraDlg::sendCmdData_signal, encodeModelCamera, &EncodeModelCamera::SendCMD); connect(encodeModelCamera, &EncodeModelCamera::UDP_Receive, this, &ModelCameraDlg::on_receiveUDP); connect(this, &ModelCameraDlg::sendNetParam_signal, encodeModelCamera, &EncodeModelCamera::setIPandPort); } ModelCameraDlg::~ModelCameraDlg() { delete ui; if (cameraCMDThread != nullptr) { cameraCMDThread->quit(); cameraCMDThread->wait(); encodeModelCamera->deleteLater(); cameraCMDThread->deleteLater(); } } void ModelCameraDlg::InitialComboBox() { ui->photoTimeDbSpinBox->setSuffix("s"); // 快门速度 ui->SSComboBox->insertItem(0, "1/100"); ui->SSComboBox->insertItem(1, "1/125"); ui->SSComboBox->insertItem(2, "1/160"); ui->SSComboBox->insertItem(3, "1/200"); ui->SSComboBox->insertItem(4, "1/250"); ui->SSComboBox->insertItem(5, "1/320"); ui->SSComboBox->insertItem(6, "1/400"); ui->SSComboBox->insertItem(7, "1/500"); ui->SSComboBox->insertItem(8, "1/640"); ui->SSComboBox->insertItem(9, "1/800"); ui->SSComboBox->insertItem(10, "1/1000"); ui->SSComboBox->insertItem(11, "1/1250"); ui->SSComboBox->insertItem(12, "1/1600"); ui->SSComboBox->insertItem(13, "1/2000"); // ISO ui->ISOComboBox->insertItem(0, "50~800"); ui->ISOComboBox->insertItem(1, "50~1600"); ui->ISOComboBox->insertItem(2, "50"); ui->ISOComboBox->insertItem(3, "100"); ui->ISOComboBox->insertItem(4, "125"); ui->ISOComboBox->insertItem(5, "160"); ui->ISOComboBox->insertItem(6, "200"); ui->ISOComboBox->insertItem(7, "250"); ui->ISOComboBox->insertItem(8, "320"); ui->ISOComboBox->insertItem(9, "400"); ui->ISOComboBox->insertItem(10, "500"); ui->ISOComboBox->insertItem(11, "640"); ui->ISOComboBox->insertItem(12, "800"); ui->ISOComboBox->insertItem(13, "1000"); ui->ISOComboBox->insertItem(14, "1250"); ui->ISOComboBox->insertItem(15, "1600"); // AWB ui->AWBComboBox->insertItem(0, "自动"); ui->AWBComboBox->insertItem(1, "日光"); // 相机模式 ui->cameraModelComboBox->insertItem(0, "拍照模式"); ui->cameraModelComboBox->insertItem(1, "录像模式"); // 色彩模式 ui->ColorModelComboBox->insertItem(0, "艳丽"); ui->ColorModelComboBox->insertItem(1, "标准"); } // 解析通过校验的udp数据、界面刷新显示 void ModelCameraDlg::on_receiveUDP(QByteArray arrdata) { int picNum = (arrdata[3] << 8) | arrdata[4]; // 照片数量(某一个视角) QString str = QString::number(picNum); ui->lineEdit_2->setText(QString::number(picNum * 5)); ui->lineEdit_3->setText(str); ui->lineEdit_4->setText(str); ui->lineEdit_5->setText(str); ui->lineEdit_6->setText(str); ui->lineEdit_7->setText(str); int shutterSpd = (arrdata[7] << 8) | arrdata[8]; // 快门速度(倒数) ui->lineEdit_10->setText(QString("1/%1").arg(shutterSpd)); int iso = (arrdata[9] << 8) | arrdata[10]; // iso固定值 -1表示50~1600,-2表示50~800 if (iso == -1) { ui->lineEdit_14->setText("50~1600"); } else if (iso == -2) { ui->lineEdit_14->setText("50~800"); } else { QString qstr = QString("%1").arg(iso); ui->lineEdit_14->setText(qstr); } int awb = (arrdata[11] << 8) | arrdata[12]; // 白平衡值 0x0001:自动,0x0002:日光 if (awb == 1) { ui->lineEdit_9->setText("自动"); } else if (awb == 2) { ui->lineEdit_9->setText("日光"); } int colorMode = (arrdata[13] << 8) | arrdata[14]; // 色彩模式 0x0001:艳丽,0x0002:标准 if (colorMode == 1) { ui->lineEdit_12->setText("艳丽"); } else if (colorMode == 2) { ui->lineEdit_12->setText("标准"); } } // 开始拍照点击事件 void ModelCameraDlg::on_startPhotoBtn_clicked() { quint8 photoTime = ui->photoTimeDbSpinBox->value() * 10; cmdDataArray.clear(); cmdDataArray.insert(0, 0x02); cmdDataArray.insert(1, 0xA1); cmdDataArray.insert(2, 0x03); cmdDataArray.insert(3, 0x01); cmdDataArray.insert(4, photoTime); emit sendCmdData_signal(cmdDataArray); } // 停止拍照 void ModelCameraDlg::on_stopPhotoBtn_clicked() { cmdDataArray.clear(); cmdDataArray.insert(0, 0x01); cmdDataArray.insert(1, 0xA1); cmdDataArray.insert(2, 0x03); cmdDataArray.insert(3, QByteArray(1, char(0x00))); emit sendCmdData_signal(cmdDataArray); } // 开机 void ModelCameraDlg::on_ONBtn_clicked() { cmdDataArray.clear(); cmdDataArray.insert(0, 0x01); cmdDataArray.insert(1, 0xA1); cmdDataArray.insert(2, 0x01); cmdDataArray.insert(3, 0x01); emit sendCmdData_signal(cmdDataArray); } // 关机 void ModelCameraDlg::on_OFFBtn_clicked() { cmdDataArray.clear(); cmdDataArray.insert(0, 0x01); cmdDataArray.insert(1, 0xA1); cmdDataArray.insert(2, 0x01); cmdDataArray.insert(3, QByteArray(1, char(0x00))); emit sendCmdData_signal(cmdDataArray); } // 播放视频 void ModelCameraDlg::on_pushButton_5_clicked() { QString str = ui->pushButton_5->text(); ffmpegvideoDlg *videoDlg = ui->cameraVideoWidget; if (str == "播放视频") { QString streamIP = ui->videoIPLineEdit->text(); if (streamIP.isEmpty()) { QMessageBox::warning(NULL, "提示", "拉流地址为空!", QMessageBox::Ok); return; } if (!(streamIP.left(4) == "rtmp" || streamIP.left(4) == "rtsp")) { QMessageBox::warning(NULL, "提示", "拉流地址有误!", QMessageBox::Ok); return; } videoDlg->setStreamIP(streamIP); videoDlg->setPlayVideo(true); ui->pushButton_5->setText("暂停播放"); } else { videoDlg->setPlayVideo(false); ui->pushButton_5->setText("播放视频"); } } // 推流 void ModelCameraDlg::on_pushStreamBtn_clicked() { QString str = ui->pushStreamBtn->text(); ffmpegvideoDlg *videoDlg = ui->cameraVideoWidget; if (str == "开始推流") { QString streamIP = ui->videoIPLineEdit->text(); QString pushIP = ui->pushStreamIPEdit->text(); if (streamIP.isEmpty() || pushIP.isEmpty()) { QMessageBox::warning(NULL, "提示", "拉流或推流地址为空!", QMessageBox::Ok); return; } if (!(streamIP.left(4) == "rtmp" || streamIP.left(4) == "rtsp")) { QMessageBox::warning(NULL, "提示", "拉流地址有误!", QMessageBox::Ok); return; } if (!(pushIP.left(4) == "rtmp" || pushIP.left(4) == "rtsp")) { QMessageBox::warning(NULL, "提示", "推流地址有误!", QMessageBox::Ok); return; } videoDlg->setStreamIP(streamIP); videoDlg->setPushStreamIP(pushIP); videoDlg->setPushStream(true); ui->pushStreamBtn->setText("停止推流"); } else { videoDlg->setPushStream(false); ui->pushStreamBtn->setText("开始推流"); } } // 快门速度 void ModelCameraDlg::on_SSComboBox_activated(int index) { QString tmp = ui->SSComboBox->itemText(index); QString strSS = tmp.right(tmp.length() - 2); qint16 hexValue = strSS.toShort(); // cmdDataArray.clear(); cmdDataArray.insert(0, 0x04); cmdDataArray.insert(1, 0xA2); cmdDataArray.insert(2, 0x01); cmdDataArray.insert(3, 0x01); QByteArray byteArray; byteArray.resize(2); qToBigEndian(hexValue, (char *)byteArray.data()); cmdDataArray.append(byteArray); cmdDataArray.insert(6, 0xFF); emit sendCmdData_signal(cmdDataArray); } // ISO void ModelCameraDlg::on_ISOComboBox_activated(int index) { QString strSS = ui->ISOComboBox->itemText(index); if (index == 0) strSS = "-2"; else if (index == 1) strSS = "-1"; qint16 hexValue = strSS.toShort(); // cmdDataArray.clear(); cmdDataArray.insert(0, 0x04); cmdDataArray.insert(1, 0xA2); cmdDataArray.insert(2, 0x02); cmdDataArray.insert(3, 0x01); QByteArray byteArray; byteArray.resize(2); qToBigEndian(hexValue, (char *)byteArray.data()); cmdDataArray.append(byteArray); cmdDataArray.insert(6, 0xFF); emit sendCmdData_signal(cmdDataArray); } // AWB白平衡 void ModelCameraDlg::on_AWBComboBox_activated(int index) { quint16 hexValue = index + 1; // cmdDataArray.clear(); cmdDataArray.insert(0, 0x04); cmdDataArray.insert(1, 0xA2); cmdDataArray.insert(2, 0x06); cmdDataArray.insert(3, 0x01); QByteArray byteArray; byteArray.resize(2); qToBigEndian(hexValue, (uchar *)byteArray.data()); cmdDataArray.append(byteArray); cmdDataArray.insert(6, 0xFF); emit sendCmdData_signal(cmdDataArray); } // 相机模式 void ModelCameraDlg::on_cameraModelComboBox_activated(int index) { // quint16 hexValue = index + 1;// cmdDataArray.clear(); cmdDataArray.insert(0, 0x01); cmdDataArray.insert(1, 0xA1); cmdDataArray.insert(2, 0x02); if (index == 0) cmdDataArray.insert(3, QByteArray(1, char(0x00))); else if (index == 1) cmdDataArray.insert(3, 0x01); emit sendCmdData_signal(cmdDataArray); } // 色彩模式 void ModelCameraDlg::on_ColorModelComboBox_activated(int index) { quint16 hexValue = index + 1; // cmdDataArray.clear(); cmdDataArray.insert(0, 0x04); cmdDataArray.insert(1, 0xA2); cmdDataArray.insert(2, 0x08); cmdDataArray.insert(3, 0x01); QByteArray byteArray; byteArray.resize(2); qToBigEndian(hexValue, (uchar *)byteArray.data()); cmdDataArray.append(byteArray); cmdDataArray.insert(6, 0xFF); emit sendCmdData_signal(cmdDataArray); } // 获取开关机状态 void ModelCameraDlg::quireOnorOff() { cmdDataArray.clear(); cmdDataArray.insert(0, 0x01); cmdDataArray.insert(1, 0xA1); cmdDataArray.insert(2, 0x01); cmdDataArray.insert(3, 0xFF); emit sendCmdData_signal(cmdDataArray); } // 查询图传状态 void ModelCameraDlg::quirePictranStatus() {} // 查询快门速度 void ModelCameraDlg::quireShutterSpeed() { cmdDataArray.clear(); cmdDataArray.insert(0, 0x02); cmdDataArray.insert(1, 0xA2); cmdDataArray.insert(2, 0x01); cmdDataArray.insert(3, 0xFF); cmdDataArray.insert(4, 0xFF); emit sendCmdData_signal(cmdDataArray); } // 查询ISO void ModelCameraDlg::quireISO() { cmdDataArray.clear(); cmdDataArray.insert(0, 0x02); cmdDataArray.insert(1, 0xA2); cmdDataArray.insert(2, 0x02); cmdDataArray.insert(3, 0xFF); cmdDataArray.insert(4, 0xFF); emit sendCmdData_signal(cmdDataArray); } // 查询白平衡 void ModelCameraDlg::quireAWB() { cmdDataArray.clear(); cmdDataArray.insert(0, 0x02); cmdDataArray.insert(1, 0xA2); cmdDataArray.insert(2, 0x06); cmdDataArray.insert(3, 0xFF); cmdDataArray.insert(4, 0xFF); emit sendCmdData_signal(cmdDataArray); } // 查询相机模式 void ModelCameraDlg::quireCameraMode() { cmdDataArray.clear(); cmdDataArray.insert(0, 0x01); cmdDataArray.insert(1, 0xA1); cmdDataArray.insert(2, 0x02); cmdDataArray.insert(3, 0xFF); emit sendCmdData_signal(cmdDataArray); } // 查询色彩(饱和度)模式 void ModelCameraDlg::quireColorMode() { cmdDataArray.clear(); cmdDataArray.insert(0, 0x01); cmdDataArray.insert(1, 0xA2); cmdDataArray.insert(2, 0x08); cmdDataArray.insert(3, 0xFF); cmdDataArray.insert(4, 0xFF); emit sendCmdData_signal(cmdDataArray); } // 查询温度 void ModelCameraDlg::quireTempe() {} // 查询照片总数,以及各个视角的照片数量 void ModelCameraDlg::quirePicNumAll() { cmdDataArray.clear(); cmdDataArray.insert(0, 0x01); cmdDataArray.insert(1, 0xA1); cmdDataArray.insert(2, 0x07); cmdDataArray.insert(3, 0xFF); emit sendCmdData_signal(cmdDataArray); }