|
|
|
|
#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.70:8554/LIVE")); // rtsp://192.168.5.70: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);
|
|
|
|
|
}
|