You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
PayloadAPP/Src/ModelCamera/modelcameradlg.cpp

375 lines
11 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include "modelcameradlg.h"
#include "ui_modelcameradlg.h"
ModelCameraDlg::ModelCameraDlg(QWidget *parent)
: QDialog(parent), ui(new Ui::ModelCameraDlg) {
ui->setupUi(this);
ui->videoIPLineEdit->setText(
QStringLiteral("rtmp://liteavapp.qcloud.com/live/"
"liteavdemoplayerstreamid")); // rtsp://192.168.5.70:8554/LIVE
ui->pushStreamIPEdit->setText(
QStringLiteral("rtmp://182.92.130.23/app/stream999"));
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();
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();
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);
}