Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. How to start and stop QCamera
QtWS25 Last Chance

How to start and stop QCamera

Scheduled Pinned Locked Moved Unsolved General and Desktop
qcamera
9 Posts 4 Posters 1.6k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M Offline
    M Offline
    mit_cruze
    wrote on 2 Mar 2020, 05:17 last edited by mit_cruze 3 Feb 2020, 05:18
    #1
    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    #include "unistd.h"
    #include <qdebug.h>
    MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
    {
    ui->setupUi(this);
    m_scene = new QGraphicsScene;
    m_item = new QGraphicsVideoItem;
    
    ui->graphicsView->setScene(m_scene);
    ui->graphicsView->scene()->addItem(m_item);
    
    camera = new QCamera(QCameraInfo::defaultCamera());
    camera->setViewfinder(m_item);
    camera->setCaptureMode(QCamera::CaptureVideo);
    }
    
    MainWindow::~MainWindow()
    {
    delete ui;
    }
    // On Start Button
    void MainWindow::on_pushButton_clicked()
    {
    camera->start();
    }
    // On Stop Button
    void MainWindow::on_pushButton_2_clicked()
    {
    camera->stop();
    }
    

    I have above code to stream USB camera. Camera stream does not start on pressing "Start Button". Camera stream is displayed when I first press Stop button and then Start button. Multiple USB cameras are connected to my Linux system. I want select any one camera and start or stop stream. I do not want to record.

    How to make it work correctly?

    P 1 Reply Last reply 2 Mar 2020, 05:43
    0
    • M mit_cruze
      2 Mar 2020, 05:17
      #include "mainwindow.h"
      #include "ui_mainwindow.h"
      #include "unistd.h"
      #include <qdebug.h>
      MainWindow::MainWindow(QWidget *parent) :
      QMainWindow(parent),
      ui(new Ui::MainWindow)
      {
      ui->setupUi(this);
      m_scene = new QGraphicsScene;
      m_item = new QGraphicsVideoItem;
      
      ui->graphicsView->setScene(m_scene);
      ui->graphicsView->scene()->addItem(m_item);
      
      camera = new QCamera(QCameraInfo::defaultCamera());
      camera->setViewfinder(m_item);
      camera->setCaptureMode(QCamera::CaptureVideo);
      }
      
      MainWindow::~MainWindow()
      {
      delete ui;
      }
      // On Start Button
      void MainWindow::on_pushButton_clicked()
      {
      camera->start();
      }
      // On Stop Button
      void MainWindow::on_pushButton_2_clicked()
      {
      camera->stop();
      }
      

      I have above code to stream USB camera. Camera stream does not start on pressing "Start Button". Camera stream is displayed when I first press Stop button and then Start button. Multiple USB cameras are connected to my Linux system. I want select any one camera and start or stop stream. I do not want to record.

      How to make it work correctly?

      P Offline
      P Offline
      Pradeep P N
      wrote on 2 Mar 2020, 05:43 last edited by Pradeep P N 3 Feb 2020, 05:48
      #2

      Hi @mit_cruze

      The above code works fine, behavior is also as expected.

      void MyCamera_Forum::on_pushButton_clicked()
      {
          camera->start(); // Start Camera & Streaming 
      }
      
      void MyCamera_Forum::on_pushButton_2_clicked()
      {
          camera->stop(); // Stop Streaming 
      }
      

      Do you have any other warnings ?
      And you can check for availableCameras under QCameraInfo
      With the available devises you can specify which Camera you want to use.

      All the best.

      Pradeep Nimbalkar.
      Upvote the answer(s) that helped you to solve the issue...
      Keep code clean.

      M 1 Reply Last reply 2 Mar 2020, 06:26
      1
      • K Offline
        K Offline
        Kent-Dorfman
        wrote on 2 Mar 2020, 05:49 last edited by
        #3

        Check the error() condition and state() to determine whether an operation is valid or if an error occured when you try to do something with your camera. Don't make assumptions about the state of the device.

        1 Reply Last reply
        3
        • P Pradeep P N
          2 Mar 2020, 05:43

          Hi @mit_cruze

          The above code works fine, behavior is also as expected.

          void MyCamera_Forum::on_pushButton_clicked()
          {
              camera->start(); // Start Camera & Streaming 
          }
          
          void MyCamera_Forum::on_pushButton_2_clicked()
          {
              camera->stop(); // Stop Streaming 
          }
          

          Do you have any other warnings ?
          And you can check for availableCameras under QCameraInfo
          With the available devises you can specify which Camera you want to use.

          All the best.

          M Offline
          M Offline
          mit_cruze
          wrote on 2 Mar 2020, 06:26 last edited by
          #4

          @Pradeep-P-N On what Qt version did you test?

          P 1 Reply Last reply 2 Mar 2020, 06:50
          0
          • M mit_cruze
            2 Mar 2020, 06:26

            @Pradeep-P-N On what Qt version did you test?

            P Offline
            P Offline
            Pradeep P N
            wrote on 2 Mar 2020, 06:50 last edited by Pradeep P N 3 Feb 2020, 07:03
            #5

            @mit_cruze
            Qt 5.12.1 (Creator 4.10.1) & Qt 5.9.2 (Creator 4.4.1)

            And as said by @Kent-Dorfman
            Did you check the error() QCamera::Error and state() QCamera::State of the camera ?

            Pradeep Nimbalkar.
            Upvote the answer(s) that helped you to solve the issue...
            Keep code clean.

            M 1 Reply Last reply 2 Mar 2020, 08:54
            0
            • P Pradeep P N
              2 Mar 2020, 06:50

              @mit_cruze
              Qt 5.12.1 (Creator 4.10.1) & Qt 5.9.2 (Creator 4.4.1)

              And as said by @Kent-Dorfman
              Did you check the error() QCamera::Error and state() QCamera::State of the camera ?

              M Offline
              M Offline
              mit_cruze
              wrote on 2 Mar 2020, 08:54 last edited by
              #6

              @Pradeep-P-N Hi Pradeep Thanks for reply.

              I have added debugs for Camera state, status and error. Also added output.
              My pushbutton press sequence is 1) Start 2) Stop 3 ) Start

              Debugs:

              // On Start Button
              void MainWindow::on_pushButton_clicked()
              {
                  qDebug() << "before start camera->status(): " << camera->status();
                  qDebug() << "before start camera->state(): " << camera->state();
                  qDebug() << "before start camera->error(): " << camera->error();
                  qDebug() << "before start camera->errorString():" << camera->errorString() ;
                  camera->start();
                  qDebug() << "after start camera->status(): " << camera->status();
                  qDebug() << "after start camera->state(): " << camera->state();
                  qDebug() << "after start camera->error(): " << camera->error();
                  qDebug() << "after start camera->errorString():" << camera->errorString() << "\n";
              }
              // On Stop Button
              void MainWindow::on_pushButton_2_clicked()
              {
                  qDebug() << "before stop camera->status(): " << camera->status();
                  qDebug() << "before stop camera->state(): " << camera->state();
                  qDebug() << "before stop camera->error(): " << camera->error();
                  qDebug() << "before stop camera->errorString():" << camera->errorString() ;
              
                  camera->stop();
                  qDebug() << "after stop camera->status(): " << camera->status();
                  qDebug() << "after stop camera->state(): " << camera->state();
                  qDebug() << "after stop camera->error(): " << camera->error();
                  qDebug() << "after stop camera->errorString():" << camera->errorString()  << "\n";
              
              }
              
              

              Outputs:

              before start camera->status():  QCamera::UnloadedStatus
              before start camera->state():  QCamera::UnloadedState
              before start camera->error():  QCamera::NoError
              before start camera->errorString(): ""
              after start camera->status():  QCamera::LoadingStatus
              after start camera->state():  QCamera::ActiveState
              after start camera->error():  QCamera::NoError
              after start camera->errorString(): "" 
              
              before stop camera->status():  QCamera::LoadedStatus
              before stop camera->state():  QCamera::ActiveState
              before stop camera->error():  QCamera::NoError
              before stop camera->errorString(): ""
              after stop camera->status():  QCamera::LoadedStatus
              after stop camera->state():  QCamera::LoadedState
              after stop camera->error():  QCamera::NoError
              after stop camera->errorString(): "" 
              
              before start camera->status():  QCamera::LoadedStatus
              before start camera->state():  QCamera::LoadedState
              before start camera->error():  QCamera::NoError
              before start camera->errorString(): ""
              after start camera->status():  QCamera::StartingStatus
              after start camera->state():  QCamera::ActiveState
              after start camera->error():  QCamera::NoError
              after start camera->errorString(): "" 
              

              I have Qt 5.9.5 and Qt creator 4.5.2

              1 Reply Last reply
              0
              • S Offline
                S Offline
                SURYA P
                wrote on 2 Mar 2020, 10:53 last edited by
                #7

                Let you check with like this,
                ui->setupUi(this);
                mCamera=new QCamera(this);
                mCameraViewfinder=new QCameraViewfinder(this);
                mCameraImageCapture=new QCameraImageCapture(mCamera,this);
                mLayout=new QVBoxLayout;
                mOpenMenu=new QMenu("OPEN",this);
                mEncoderAction=new QAction("ENCODER",this);
                mAction=new QAction("Capture",this);
                mCaptureAction=new QAction("Save As",this);
                mOpenMenu->addActions({mEncoderAction,mAction,mCaptureAction});
                mCamera->setViewfinder(mCameraViewfinder);
                mLayout->setMargin(0);
                ui->pushButton->setMenu(mOpenMenu);
                mLayout->addWidget(mCameraViewfinder);
                ui->scrollArea->setLayout(mLayout);

                connect(mEncoderAction,&QAction::triggered,[&](){
                    mCamera->start();
                });
                connect(mAction,&QAction::triggered,[&](){
                    mCamera->stop();
                });
                connect(mCaptureAction,&QAction::triggered,[&](){
                   auto filename= QFileDialog::getSaveFileName(this,"Capture","/","Image(*.jpg,*.jpeg)");
                   if(filename.isEmpty()){
                       return;
                   }
                    mCameraImageCapture->setCaptureDestination(QCameraImageCapture::CaptureToFile);
                    QImageEncoderSettings imageEncodersettings;
                    imageEncodersettings.setCodec("image/jpeg");
                    imageEncodersettings.setResolution(1600,1200);
                    mCameraImageCapture->setEncodingSettings(imageEncodersettings);
                    mCamera->setCaptureMode(QCamera::CaptureStillImage);
                    mCamera->start();
                    mCamera->searchAndLock();
                    mCameraImageCapture->capture(filename);
                    mCamera->unlock();
                });
                
                M 1 Reply Last reply 3 Mar 2020, 11:15
                0
                • S SURYA P
                  2 Mar 2020, 10:53

                  Let you check with like this,
                  ui->setupUi(this);
                  mCamera=new QCamera(this);
                  mCameraViewfinder=new QCameraViewfinder(this);
                  mCameraImageCapture=new QCameraImageCapture(mCamera,this);
                  mLayout=new QVBoxLayout;
                  mOpenMenu=new QMenu("OPEN",this);
                  mEncoderAction=new QAction("ENCODER",this);
                  mAction=new QAction("Capture",this);
                  mCaptureAction=new QAction("Save As",this);
                  mOpenMenu->addActions({mEncoderAction,mAction,mCaptureAction});
                  mCamera->setViewfinder(mCameraViewfinder);
                  mLayout->setMargin(0);
                  ui->pushButton->setMenu(mOpenMenu);
                  mLayout->addWidget(mCameraViewfinder);
                  ui->scrollArea->setLayout(mLayout);

                  connect(mEncoderAction,&QAction::triggered,[&](){
                      mCamera->start();
                  });
                  connect(mAction,&QAction::triggered,[&](){
                      mCamera->stop();
                  });
                  connect(mCaptureAction,&QAction::triggered,[&](){
                     auto filename= QFileDialog::getSaveFileName(this,"Capture","/","Image(*.jpg,*.jpeg)");
                     if(filename.isEmpty()){
                         return;
                     }
                      mCameraImageCapture->setCaptureDestination(QCameraImageCapture::CaptureToFile);
                      QImageEncoderSettings imageEncodersettings;
                      imageEncodersettings.setCodec("image/jpeg");
                      imageEncodersettings.setResolution(1600,1200);
                      mCameraImageCapture->setEncodingSettings(imageEncodersettings);
                      mCamera->setCaptureMode(QCamera::CaptureStillImage);
                      mCamera->start();
                      mCamera->searchAndLock();
                      mCameraImageCapture->capture(filename);
                      mCamera->unlock();
                  });
                  
                  M Offline
                  M Offline
                  mit_cruze
                  wrote on 3 Mar 2020, 11:15 last edited by
                  #8

                  @SURYA-P Hi, I have tried your code. I have to press "Capture" and then "ENCODER" to start camera stream. Only pressing ENDCODER camera does not start streaming.

                  1 Reply Last reply
                  0
                  • S Offline
                    S Offline
                    SURYA P
                    wrote on 5 Mar 2020, 11:01 last edited by SURYA P 3 May 2020, 11:01
                    #9

                    Hi i think you want import on your .pro file this
                    QT += core gui multimedia multimediawidgets

                    1 Reply Last reply
                    0

                    6/9

                    2 Mar 2020, 08:54

                    • Login

                    • Login or register to search.
                    6 out of 9
                    • First post
                      6/9
                      Last post
                    0
                    • Categories
                    • Recent
                    • Tags
                    • Popular
                    • Users
                    • Groups
                    • Search
                    • Get Qt Extensions
                    • Unsolved