|
@@ -0,0 +1,133 @@
|
|
|
+#include "mainwindow.h"
|
|
|
+#include "ui_mainwindow.h"
|
|
|
+
|
|
|
+#include <QInputDialog>
|
|
|
+#include <iostream>
|
|
|
+
|
|
|
+#include <opencv2/opencv.hpp>
|
|
|
+#include <opencv2/core.hpp>
|
|
|
+
|
|
|
+MainWindow::MainWindow(QWidget *parent) :
|
|
|
+ QMainWindow(parent),
|
|
|
+ ui(new Ui::MainWindow)
|
|
|
+{
|
|
|
+ ui->setupUi(this);
|
|
|
+ mprtspdown = new rtspclientdown(mstrrtspurl);
|
|
|
+ mph264decode = new ivh264framedecode(mnframewidth,mnframeheight,false);
|
|
|
+
|
|
|
+ mpthreadframe = new std::thread(&MainWindow::threadframe,this);
|
|
|
+ mpthreadpic =new std::thread(&MainWindow::threadpic,this);
|
|
|
+
|
|
|
+ mmyview = new MyView(ui->centralWidget);
|
|
|
+ mmyview->setObjectName(QStringLiteral("graphicsView"));
|
|
|
+ mmyview->setGeometry(QRect(30, 30, 600, 600));
|
|
|
+ mmyview->setCacheMode(mmyview->CacheBackground);
|
|
|
+
|
|
|
+ mpsceneImg = new QGraphicsScene;
|
|
|
+
|
|
|
+ connect(this,SIGNAL(CamUpdate()),this,SLOT(onCamUpdate()));
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+MainWindow::~MainWindow()
|
|
|
+{
|
|
|
+ mbthreadrun = false;
|
|
|
+ mpthreadframe->join();
|
|
|
+ mpthreadpic->join();
|
|
|
+
|
|
|
+ delete mprtspdown;
|
|
|
+ delete ui;
|
|
|
+}
|
|
|
+
|
|
|
+void MainWindow::on_actionSet_URL_triggered()
|
|
|
+{
|
|
|
+ bool ok;
|
|
|
+ QString strurl = QInputDialog::getText(this,tr("Set URL:"),tr("URL:"),QLineEdit::Normal,mstrrtspurl.data(),&ok);
|
|
|
+
|
|
|
+ if(ok &!strurl.isEmpty())
|
|
|
+ {
|
|
|
+
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void MainWindow::threadframe()
|
|
|
+{
|
|
|
+ while(mbthreadrun)
|
|
|
+ {
|
|
|
+ iv::h264rawframedata xframe;
|
|
|
+ if(mprtspdown->Getrtspframe(xframe,30) == 1)
|
|
|
+ {
|
|
|
+ iv::rawframedata xraw;
|
|
|
+ xraw.mpstr_ptr = xframe.mpstr_ptr;
|
|
|
+ xraw.ndatasize = xframe.mdatasize;
|
|
|
+ mph264decode->addframedata(xraw);
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void MainWindow::threadpic()
|
|
|
+{
|
|
|
+
|
|
|
+ while(mbthreadrun)
|
|
|
+ {
|
|
|
+ int nindex = mph264decode->GetUpdatedIndex(10);
|
|
|
+ if(nindex<0)continue;
|
|
|
+// std::cout<<" recv a yuv."<<std::endl;
|
|
|
+ iv::framedecodebuf * pbuf = mph264decode->LockReadBuff(nindex);
|
|
|
+ int cy = pbuf->frameheight;
|
|
|
+ int cx = pbuf->framewidth;
|
|
|
+ cv::Mat rgbImg(cy, cx,CV_8UC3);
|
|
|
+
|
|
|
+
|
|
|
+ cv::cvtColor(pbuf->myuvImg, rgbImg, CV_YUV2RGB_I420);
|
|
|
+
|
|
|
+ mph264decode->UnlockReadBuff(nindex);
|
|
|
+
|
|
|
+ QImage image2 = QImage((uchar*)(rgbImg.data), rgbImg.cols, rgbImg.rows, QImage::Format_RGB888);
|
|
|
+
|
|
|
+ mMutexCam.lock();
|
|
|
+// emit CamUpdate(ncampos,image2);
|
|
|
+ *mpImageCam = image2.copy();
|
|
|
+ mbCamUpdate = true;
|
|
|
+ mMutexCam.unlock();
|
|
|
+ emit CamUpdate();
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void MainWindow::resizeEvent(QResizeEvent *event)
|
|
|
+{
|
|
|
+ (void)event;
|
|
|
+
|
|
|
+ QSize sizemain = ui->centralWidget->size();
|
|
|
+
|
|
|
+ mmyview->setGeometry(0,0,sizemain.width(),sizemain.height());
|
|
|
+
|
|
|
+ double fscale = (sizemain.width()*3/3)*1.0/mnframewidth;
|
|
|
+ double fscale2 = (sizemain.height()*3/3)*1.0/mnframeheight;
|
|
|
+ if(fscale > fscale2) fscale = fscale2;
|
|
|
+ fscale = fscale * 0.99;
|
|
|
+ mmyview->viewscaleto(fscale);
|
|
|
+}
|
|
|
+
|
|
|
+void MainWindow::onCamUpdate()
|
|
|
+{
|
|
|
+ update();
|
|
|
+}
|
|
|
+
|
|
|
+void MainWindow::paintEvent(QPaintEvent *)
|
|
|
+{
|
|
|
+
|
|
|
+ if(mbCamUpdate)
|
|
|
+ {
|
|
|
+ mMutexCam.lock();
|
|
|
+ mbCamUpdate = false;
|
|
|
+ mpsceneImg->clear();
|
|
|
+ mpsceneImg->addPixmap(QPixmap::fromImage(*mpImageCam));
|
|
|
+ mmyview->setScene(mpsceneImg);
|
|
|
+ mmyview->show();
|
|
|
+ mMutexCam.unlock();
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+}
|