Kaynağa Gözat

complete picview_usbport, change driver_camera_ioctl for use usb port get video name.

yuchuli 6 ay önce
ebeveyn
işleme
3482684b06

+ 4 - 0
src/driver/driver_camera_ioctl/driver_camera_ioctl.pro

@@ -16,6 +16,7 @@ DEFINES += QT_DEPRECATED_WARNINGS
 #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
 
 SOURCES += main.cpp \
+    ../driver_camera_usb/assignvideo.cpp \
     usb_cam.cpp
 
 
@@ -35,6 +36,8 @@ SOURCES += main.cpp \
 
 INCLUDEPATH += /home/linaro/opencv3
 
+INCLUDEPATH += $$PWD/../driver_camera_usb
+
 
 #contains(QMAKE_HOST.arch, aarch64){
 #    DEFINES += USE_OPENCV4
@@ -46,6 +49,7 @@ INCLUDEPATH += /usr/include/x86_64-linux-gnu
 DEFINES += USE_OPENCV4
 
 HEADERS += \
+    ../driver_camera_usb/assignvideo.h \
     usb_cam.h
 
 

+ 2 - 0
src/driver/driver_camera_ioctl/driver_camera_ioctl.xml

@@ -6,5 +6,7 @@
 		<param name="use_rawmjpeg" value = "true" />
 		<param name="framerate" value="30" />
 		<param name="cameraname" value="/dev/video2" />
+		<param name="UseUSBPort" value="false" />
+		<param name="USBPort" value="1-3.1" />
 	</node>
 </xml>

+ 19 - 0
src/driver/driver_camera_ioctl/main.cpp

@@ -37,6 +37,8 @@
 #include "ivexit.h"
 #include <signal.h>
 
+#include "assignvideo.h"
+
 QCoreApplication * gApp;
 
 
@@ -335,6 +337,23 @@ int main(int argc, char *argv[])
 
     gbcompress = xp.GetParam("bcompress",true);
 
+    bool bUseUSBPort = xp.GetParam("UseUSBPort",false);
+    if(bUseUSBPort)
+    {
+        std::string strport = xp.GetParam("USBPort",std::string(""));
+        if(strport != std::string(""))
+        {
+            std::cout<<" Use USBPort get camera"<<std::endl;
+            assignvideo xvid;
+            std::string strdevname = xvid.GetVideoName(strport);
+            std::cout<<" dev name: "<<strdevname<<std::endl;
+            if(strdevname.size()>3)
+            {
+                gvideo_device_name_ = strdevname;
+            }
+        }
+    }
+
 
 
     gpa = iv::modulecomm::RegisterSend(gmsgname.data(),20000000,1);

+ 8 - 0
src/driver/driver_camera_usb/assignvideo.cpp

@@ -85,6 +85,9 @@ assignvideo::assignvideo()
 
 }
 
+
+
+
 std::string assignvideo::GetVideoName(std::string usbport)
 {
 
@@ -144,3 +147,8 @@ std::string assignvideo::GetVideoName(std::string usbport)
 
     return std::string("");
 }
+
+void assignvideo::StopAssign()
+{
+    mbRun = false;
+}

+ 9 - 0
src/driver/driver_camera_usb/assignvideo.h

@@ -6,6 +6,9 @@
 
 #include <QProcess>
 
+#include <thread>
+#include <mutex>
+
 class assignvideo
 {
 public:
@@ -13,8 +16,14 @@ public:
 
     std::string GetVideoName(std::string usbport);
 
+    void StopAssign();
+
 private:
     bool mbRun = true;
+
+    std::string mstrusbport;
+
+    void threadgetvideoname();
 };
 
 #endif // ASSIGNVIDEO_H

+ 12 - 3
src/driver/driver_camera_usb/main.cpp

@@ -287,16 +287,25 @@ void testthread()
 }
 
 
+
 int main(int argc, char *argv[])
 {
 
-    assignvideo xvid;
-    std::string strdevname = xvid.GetVideoName(std::string("1-4.2.4"));
-    std::cout<<" dev name: "<<strdevname<<std::endl;
+
 
     showversion("driver_camera_usb");
     QCoreApplication a(argc, argv);
 
+
+//    assignvideo xvid;
+//    std::string strdevname = xvid.GetVideoName(std::string("1-4.2.3"));
+//    std::cout<<" dev name: "<<strdevname<<std::endl;
+
+//    if(strdevname.size()<3){
+//        std::cout<<" can't find dev name."<<std::endl;
+//        return 0;
+//    }
+
 //    std::thread * pthread = new std::thread(testthread);
 //    return a.exec();
 

+ 1 - 1
src/driver/driver_h264_rtspclient/main.cpp

@@ -196,7 +196,7 @@ void threadrecv()
 }
 
 
-
+#include <signal.h>
 
 int main(int argc, char *argv[])
 {

+ 103 - 203
src/tool/picview_usbport/mainwindow.cpp

@@ -95,11 +95,11 @@ MainWindow::MainWindow(QWidget *parent) :
 
     gw = this;
     mTime.start();
-    mnlidarcount = 0;
-    mnonepcd = 0;
+    mnsaveone = 0;
     mbSaveOne = false;
     mbSave = false;
     mnsave = 0;
+    mnpiccount = 0;
 
     mbOpen = false;
 
@@ -117,27 +117,25 @@ MainWindow::MainWindow(QWidget *parent) :
 
     scene = new QGraphicsScene;
 
-    CreateView();
+    QString strpath = QCoreApplication::applicationDirPath();
+    strpath = strpath + "/picview_usbport.xml";
 
-    int i;
-    for(i=0;i<MAX_CAMERA;i++)
-    {
-        mpicindex[i] = 0;
-        mpicviewindex[i] = 0;
-    }
+    std::cout<<strpath.toStdString()<<std::endl;
+    iv::xmlparam::Xmlparam xp(strpath.toStdString());
+
+    mnwidth = xp.GetParam("Width",1920);
+    mnheight = xp.GetParam("Height",1080);
+    mnFrameRate = xp.GetParam("FrameRate",30);
+
+    CreateView();
 
-    mCurCameraIndex = 0;
 
 //    myview->scale(0.3,0.3);
 //    myview->show();
 
-    QString strpath = QCoreApplication::applicationDirPath();
 
 
-        strpath = strpath + "/picview.xml";
 
-    std::cout<<strpath.toStdString()<<std::endl;
-    iv::xmlparam::Xmlparam xp(strpath.toStdString());
 
 
     connect(&mTimer,SIGNAL(timeout()),this,SLOT(onTimer()));
@@ -212,73 +210,6 @@ void MainWindow::SearchCamera()
 }
 
 
-void MainWindow::UpdatePic(iv::vision::rawpic pic,int index)
-{
-    mMutex.lock();
-    mrectime = QDateTime::currentMSecsSinceEpoch();
-    mrawpics[index].CopyFrom(pic);
- //   qDebug("timex is %ld ",mrawpic.time());
-
-
-    mpicindex[index]++;
-    mMutex.unlock();
-
-    if((mbSaveOne)&&(index == mCurCameraIndex))
-    {
-        QString strpath = mstrSavePath;
-        strpath = strpath+"/";
-        strpath = strpath + QDateTime::currentDateTime().toString("yyyy-MM-dd-hh-mm-ss-zzz") + ".jpg";
-   //     pcl::io::loadPCDFile<pcl::PointXYZRGBA>("table_scene_lms400.pcd", *cloud
-        SaveOnePic(strpath,index);
-        mbSaveOne = false;
-        mnonepcd++;
-
-    }
-
-    if((mbSave)&&(index == mCurCameraIndex))
-    {
-        QString strpath = mstrSavePath;
-        strpath = strpath+"/";
-        strpath = strpath + QDateTime::currentDateTime().toString("yyyy-MM-dd-hh-mm-ss-zzz") + ".jpg";
-        SaveOnePic(strpath,index);
-        mnsave++;
-
-    }
-    mnlidarcount++;
-
-    emit updatepic();
-
-
-
-}
-
-void MainWindow::UpdatePointCloud(pcl::PointCloud<pcl::PointXYZI>::Ptr pc)
-{
-    if(mbSaveOne)
-    {
-        QString strpath = mstrSavePath;
-        strpath = strpath+"/";
-        strpath = strpath + QDateTime::currentDateTime().toString("yyyy-MM-dd-hh-mm-ss-zzz") + "-1.pcd";
-   //     pcl::io::loadPCDFile<pcl::PointXYZRGBA>("table_scene_lms400.pcd", *cloud
-    }
-
-    if(mbSave)
-    {
-        QString strpath = mstrSavePath;
-        strpath = strpath+"/";
-        strpath = strpath + QDateTime::currentDateTime().toString("yyyy-MM-dd-hh-mm-ss-zzz") + ".pcd";
-
-    }
-    mMutex.lock();
-    mMutex.unlock();
-    mnlidarcount++;
-    mpLE_lidarcount->setText(QString::number(mnlidarcount));
-
-
-//    if(!pc->empty())update();
-}
-
-
 void MainWindow::on_checkBox_clicked()
 {
 
@@ -296,25 +227,20 @@ void MainWindow::onTimer()
 void MainWindow::paintEvent(QPaintEvent *)
 {
 
+    if(mbupdate == false)return;
 
-    if(mpicviewindex[mCurCameraIndex] == mpicindex[mCurCameraIndex])return;
-
-    mpicviewindex[mCurCameraIndex] = mpicindex[mCurCameraIndex];
+    std::shared_ptr<char> pdata_ptr;
+    int npicsize;
+    mmutexpic.lock();
+    mbupdate = false;
+    pdata_ptr = mppic_ptr;
+    npicsize = mnpicsize;
+    mmutexpic.unlock();
 
 
-    mpLE_onepcd->setText(QString::number(mnonepcd));
+    mpLE_onepcd->setText(QString::number(mnsaveone));
     mpLE_savepcd->setText(QString::number(mnsave));
-    mpLE_lidarcount->setText(QString::number(mnlidarcount));
-
- //   qDebug("hear4.");
-    iv::vision::rawpic pic;
-    qint64 rectime;
-    mMutex.lock();
-    pic.CopyFrom(mrawpics[mCurCameraIndex]);
-    rectime = mrectime;
-    mMutex.unlock();
-
-//    qDebug("hear5.");
+    mpLE_lidarcount->setText(QString::number(mnpiccount));
 
 
     painter->begin(image);
@@ -325,48 +251,17 @@ void MainWindow::paintEvent(QPaintEvent *)
     painter->setRenderHint(QPainter::Antialiasing, true);//设置反锯齿模式,好看一点
 
     painter->translate(1000,1000);
-
-
- //   std::string strpic = pic.picdata();
-
-//    int rows,cols,type;
-//    const char * pstr = strpic.data();
-//    memcpy(&rows,pstr+2,sizeof(int));
-//    memcpy(&cols,pstr+6,sizeof(int));
-//    memcpy(&type,pstr+10,sizeof(int));
-
-
-    
-    cv::Mat mat(pic.height(),pic.width(),pic.mattype());
     
-    if(pic.type() == 1)
-        memcpy(mat.data,pic.picdata().data(),mat.rows*mat.cols*mat.elemSize());
-    else
-    {
-
-        qDebug("jpg");
-        std::vector<unsigned char> buff(pic.picdata().data(),pic.picdata().data()+pic.picdata().size());
-        mat = cv::imdecode(buff,1);
-    }
- //   qDebug("pic len is %d ",strpic.length());
-
-
-
+    cv::Mat mat;
+      
+    std::vector<unsigned char> buff(pdata_ptr.get(),pdata_ptr.get() + npicsize);
+    mat = cv::imdecode(buff,1);
 
     cv::cvtColor(mat, mat, CV_BGR2RGB);
     QImage image2 = QImage((uchar*)(mat.data), mat.cols, mat.rows,  QImage::Format_RGB888);
 
 
 
-//    QImage image2 = QImage((uchar*)(mat.data), mat.cols, mat.rows,  QImage::Format_ARGB32);
-
- //   QImage image2 = QImage((uchar*)(mat.data), mat.cols, mat.rows,  QImage::Format_RGBA8888);
-
-
-
-
-
-
 //    QColor x;
 //    x.setHsl(200,255,120);
 //    painter->setPen(x);
@@ -377,15 +272,6 @@ void MainWindow::paintEvent(QPaintEvent *)
     myview->setScene(scene);
     myview->show();
 
-    mpLE_capturetime->setText(QString::number(pic.time()));
-
- //   qint64 timediff = rectime - pic.time();
-    qint64 timediff = xt - pic.time();
-
-
-    mpLE_rectime->setText(QString::number(xt));
-    mpLE_timediff->setText(QString::number(timediff));
-
 
     mat.release();
 }
@@ -474,46 +360,6 @@ void MainWindow::CreateStatusView(QGridLayout *gl)
     mpLE_savefolder = ple4;
     connect(pb4,SIGNAL(clicked(bool)),this,SLOT(onSelectFolder()));
 
-    QLabel * pl5 = new QLabel(this);
-    pl5->setText("capture time");
-    pl5->setFixedWidth(150);
-
-    QLineEdit * ple5 = new QLineEdit(this);
-    ple5->setFixedWidth(150);
-
-    gl->addWidget(pl5,iRow,0);
-    gl->addWidget(ple5,iRow,1);
-    iRow++;
-
-    mpLE_capturetime = ple5;
-
-    QLabel * pl6 = new QLabel(this);
-    pl6->setText("receive time");
-    pl6->setFixedWidth(150);
-
-    QLineEdit * ple6 = new QLineEdit(this);
-    ple6->setFixedWidth(150);
-
-    gl->addWidget(pl6,iRow,0);
-    gl->addWidget(ple6,iRow,1);
-    iRow++;
-
-    mpLE_rectime = ple6;
-
-
-    QLabel * pl7 = new QLabel(this);
-    pl7->setText("latence time");
-    pl7->setFixedWidth(150);
-
-    QLineEdit * ple7 = new QLineEdit(this);
-    ple7->setFixedWidth(150);
-
-    gl->addWidget(pl7,iRow,0);
-    gl->addWidget(ple7,iRow,1);
-    iRow++;
-
-    mpLE_timediff = ple7;
-
     QComboBox * pcb = new QComboBox(this);
     pcb->setFixedWidth(150);
     gl->addWidget(pcb,iRow,0);
@@ -539,6 +385,45 @@ void MainWindow::CreateStatusView(QGridLayout *gl)
     }
     connect(pcb,SIGNAL(currentIndexChanged(int)),this,SLOT(onSelectCamera(int)));
 
+
+    iRow++;
+    iRow++;
+
+    pl = new QLabel(this);
+    pl->setText("Width:");
+    pl->setFixedWidth(150);
+    ple = new QLineEdit(this);
+    ple->setFixedWidth(150);
+    gl->addWidget(pl,iRow,0);
+    gl->addWidget(ple,iRow,1);
+    mpLE_Width = ple;
+
+    iRow++;
+    pl = new QLabel(this);
+    pl->setText("Height:");
+    pl->setFixedWidth(150);
+    ple = new QLineEdit(this);
+    ple->setFixedWidth(150);
+    gl->addWidget(pl,iRow,0);
+    gl->addWidget(ple,iRow,1);
+    mpLE_Height = ple;
+
+    iRow++;
+    pl = new QLabel(this);
+    pl->setText("Frame Rate:");
+    pl->setFixedWidth(150);
+    ple = new QLineEdit(this);
+    ple->setFixedWidth(150);
+    gl->addWidget(pl,iRow,0);
+    gl->addWidget(ple,iRow,1);
+    mpLE_FrameRate = ple;
+
+    iRow++;
+
+    mpLE_Width->setText(QString::number(mnwidth));
+    mpLE_Height->setText(QString::number(mnheight));
+    mpLE_FrameRate->setText(QString::number(mnFrameRate));
+
     QSpacerItem * xpsi2 = new QSpacerItem(400,1000,QSizePolicy::Maximum);
 
     gl->addItem(xpsi2,iRow,0);
@@ -591,29 +476,12 @@ void MainWindow::onSelectFolder()
     }
 }
 
-void MainWindow::SaveOnePic(QString strpath,int index)
-{
-    mMutex.lock();
-
-    cv::Mat mat(mrawpics[index].height(),mrawpics[index].width(),mrawpics[index].mattype());
-    if(mrawpics[index].type() == 1)
-        memcpy(mat.data,mrawpics[index].picdata().data(),mat.rows*mat.cols*mat.elemSize());
-    else
-    {
-
-        qDebug("save jpg");
-        std::vector<unsigned char> buff(mrawpics[index].picdata().data(),mrawpics[index].picdata().data()+mrawpics[index].picdata().size());
-        mat = cv::imdecode(buff,1);//mat = cv::imdecode(buff,CV_LOAD_IMAGE_COLOR);
-    }
-
-    cv::imwrite(strpath.toStdString(),mat);
-
-    mMutex.unlock();
-}
 
 void MainWindow::onSelectCamera(int index)
 {
-    mCurCameraIndex = index;
+    mnwidth = mpLE_Width->text().toInt();
+    mnheight = mpLE_Height->text().toInt();
+    mnFrameRate = mpLE_FrameRate->text().toInt();
     if((index>=0)&&(index < static_cast<int>(mvectorusbport.size()))){
         mpLE_DevName->setText(QString::fromStdString(mvectorcameras[index]));
         mstrseldevname = mvectorcameras[index];
@@ -635,8 +503,8 @@ void MainWindow::threadcam(int index){
     UsbCam::pixel_format pixel_format = UsbCam::pixel_format_from_string("mjpeg");
 
     // start the camera
-    camx.start(strdevname, io_method, pixel_format, 1920,
-               1080, 30);
+    camx.start(strdevname, io_method, pixel_format, mnwidth,
+               mnheight, mnFrameRate);
 
     char * strbuf = new char[10000000];
     while(mbthreadrun)
@@ -644,11 +512,43 @@ void MainWindow::threadcam(int index){
         int nLen;
         camx.grab_image(strbuf,&nLen,10000000);
         qDebug("time %ld len: %ld",QDateTime::currentMSecsSinceEpoch(),nLen);
+
+        std::shared_ptr<char> pdata_ptr(new char[nLen],std::default_delete<char[]>());
+        memcpy(pdata_ptr.get(),strbuf,nLen);
+
+        mmutexpic.lock();
+        mppic_ptr = pdata_ptr;
+        mbupdate = true;
+        mnpicsize = nLen;
+        mmutexpic.unlock();
+
+        mnpiccount++;
+
+        emit updatepic();
+
+        if(mbSaveOne || mbSave)
+        {
+            QString strpath = mstrSavePath;
+            strpath = strpath+"/";
+            strpath = strpath + QDateTime::currentDateTime().toString("yyyy-MM-dd-hh-mm-ss-zzz") + ".jpg";
+            QFile xFile;
+            xFile.setFileName(strpath);
+            if(xFile.open(QIODevice::ReadWrite)){
+                xFile.write(pdata_ptr.get(),nLen);
+                xFile.close();
+            }
+            else
+            {
+                std::cout<<" open file "<<strpath.toStdString()<<" fail. "<<std::endl;
+            }
+            if(mbSaveOne)mnsaveone++;
+            else mnsave++;
+            mbSaveOne = false;
+        }
     }
     delete strbuf;
 
     camx.stop_capturing();
-
     std::cout<<"thread capture close."<<std::endl;
     // check auto white balance
 

+ 16 - 22
src/tool/picview_usbport/mainwindow.h

@@ -13,9 +13,6 @@
 #include <QDateTime>
 #include <QComboBox>
 
-#include <pcl/conversions.h>
-#include <pcl/point_cloud.h>
-#include <pcl/point_types.h>
 
 #include <QTimer>
 
@@ -134,10 +131,6 @@ public:
     ~MainWindow();
     QTime mTime;
 
-    void UpdatePointCloud(pcl::PointCloud<pcl::PointXYZI>::Ptr pc);
-
-    void UpdatePic(iv::vision::rawpic pic,int index);
-
 private slots:
     void on_checkBox_clicked();
     void onTimer();
@@ -160,16 +153,11 @@ private:
     QTimer *timer;
     QGraphicsScene *scene;
 
-
-
     QTimer mTimer;
 
     QMutex mMutex;
     QMutex mMutexPer;
 
-    int mCurCameraIndex;
-
-    pcl::PointCloud<pcl::PointXYZI>::Ptr mpoint_cloud;
 
 public:
      void resizeEvent(QResizeEvent *event);
@@ -182,26 +170,19 @@ private:
      void SearchCamera();
      QGroupBox * mgplidar;
      QLineEdit * mpLE_lidarcount;
-     int mnlidarcount;
+     int mnpiccount;
      QPushButton * mpPB_saveonepcd;
      QPushButton * mpPB_savepcd;
      QLineEdit * mpLE_onepcd;
      QLineEdit * mpLE_savepcd;
-     int mnonepcd;
-     bool mbSaveOne;
+     int mnsaveone;
+     bool mbSaveOne = true;
      bool mbSave;
      int mnsave;
      QLineEdit * mpLE_savefolder;
  //    iv::vision::rawpic mrawpic;
-     iv::vision::rawpic mrawpics[MAX_CAMERA];
-     int mpicindex[MAX_CAMERA];
-     int mpicviewindex[MAX_CAMERA];
 
-     void SaveOnePic(QString strpath,int index);
 
-     QLineEdit * mpLE_capturetime;
-     QLineEdit * mpLE_rectime;
-     QLineEdit * mpLE_timediff;
 
      QLineEdit * mpLE_DevName;
 
@@ -215,6 +196,19 @@ private:
 
      std::string mstrseldevname;
 
+     std::shared_ptr<char> mppic_ptr;
+     unsigned int mnpicsize;
+     bool mbupdate = false;
+     std::mutex mmutexpic;
+
+     int mnwidth = 1920;
+     int mnheight = 1080;
+     int mnFrameRate = 30;
+
+     QLineEdit * mpLE_Width;
+     QLineEdit * mpLE_Height;
+     QLineEdit * mpLE_FrameRate;
+
 signals:
      void updatepic();
 

+ 0 - 8
src/tool/picview_usbport/picview.xml

@@ -1,8 +0,0 @@
-<xml>	
-	<node name="picview">
-		<param name="msgname0" value="picfront" />
-		<param name="msgname1" value="picrear" />
-		<param name="msgname2" value="picleft" />
-		<param name="msgname3" value="picright" />
-	</node>
-</xml>

+ 1 - 4
src/tool/picview_usbport/picview_usbport.pro

@@ -11,7 +11,7 @@ greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
 TARGET = picview
 TEMPLATE = app
 
-CONFIG += c++14
+CONFIG += c++17
 
 
 # The following define makes your compiler emit warnings if you use
@@ -70,9 +70,6 @@ contains(QMAKE_HOST.arch, aarch64){
     error( "Couldn't find the ivopencv.pri file!" )
 }
 
-!include(../../../include/ivpcl.pri ) {
-    error( "Couldn't find the ivpcl.pri file!" )
-}
 
 INCLUDEPATH += /home/linaro/opencv3
 

+ 7 - 0
src/tool/picview_usbport/picview_usbport.xml

@@ -0,0 +1,7 @@
+<xml>	
+	<node name="picview_usbport">
+		<param name="Width" value="1280" />
+		<param name="Height" value="720" />
+		<param name="FrameRate" value="30" />
+	</node>
+</xml>