QCamera Problems!



  • I am newly using QCamera in Linux (Ubuntu 16.04), but it seems does not work properly in Linux. I faced to the following warning:
    Unable to query the parameter info: "Invalid argument"
    0_1521670616388_Screen Shot 2018-03-22 at 2.46.24 AM.png

    I am using Qt5.10.0 in Linux, Windows and Mac OS X. The problem is just in Linux and it works fine in other OS like Windows and Mac....

    To find the problem I have added another WebCam as USB Webcam, I have changed my OS device (Test in another PC with another Webcam), but warning is remained.

    I have also tested the QT Camera Example and I found that this warning is also coming with the example: https://doc.qt.io/qt-5.10/qtmultimedia-multimediawidgets-camera-example.html

    I am sure there is a bug with QT5 and Camera does not work well.
    I think there is a lack of Proper Plugin in Linux which cuz this warning.

    This warning is caused following problems:
    1- Ui element become disabled when you fire staring QCamera Object. For example you can not click on any Push Buttons!!!!!
    2- Scaling is not good in Mode of "Qt::KeepAspectRatioByExpanding"

    My very very simple test code :

    QCamera *Camera;
    QCameraImageCapture *ImageCapture;
    QCameraInfo *CameraInfo;

    void MainWindow::on_pushButton_clicked()
    {
    Camera = new QCamera;
    ImageCapture = new QCameraImageCapture(Camera);

    //connect(ImageCapture, &QCameraImageCapture::imageCaptured, this, &MainWindow::processCapturedImage);
    Camera->setViewfinder(ui->wCamera);
    ui->wCamera->setAspectRatioMode(Qt::KeepAspectRatioByExpanding);
    Camera->setCaptureMode(QCamera::CaptureViewfinder);
    Camera->start();
    

    }

    Hope someone test.

    Thanks.


  • Lifetime Qt Champion

    Hi,

    Do you have gstreamer installed ? If so, which version ?



  • @SGaist said in QCamera Problems!:

    gstreamer

    Hi GSaist.

    Here is details:
    0_1521673462047_Screen Shot 2018-03-22 at 3.33.32 AM.png


  • Lifetime Qt Champion

    You should check the QtMultimedia plugin with ldd to see if it finds the gstreamer libraries. It might be still using the 0.1 version.



  • @SGaist said in QCamera Problems!:

    check the QtMultimedia plugin with ldd

    Thank you SGaist, there is no EXEC file in gstreamer plugin folder. With ldd we can just check exec dependency Libs.
    Would you please tell me how to check Lib dependency of Qt Plugins?



  • @SGaist said in QCamera Problems!:

    QtMultimedia

    0_1521769297493_Screen Shot 2018-03-23 at 6.10.17 AM.png


  • Moderators

    @Hasan-Vaez said in QCamera Problems!:

    With ldd we can just check exec dependency Libs.

    This is wrong. ldd works with libs as well


  • Lifetime Qt Champion

    You are mixing your distribution provided Qt with the one you installed through the online installer. They are two different versions of Qt hence my question about the libraries linked to your 5.10 version of the gstreamer plugin.



  • @jsulm I know. Where is lib (SO file) in Multimedia plugin?


  • Moderators

    @Hasan-Vaez For camera:

    ldd ~/Qt/5.10.0/gcc_64/plugins/mediaservice/libgstcamerabin.so 
    


  • @SGaist Thank you for your reply and trying to solve this maybe bug.
    I did not install GStreamer after installing QT.

    I try to setup a new Ubuntu 16.04LTS in VMWare machine + QT5.10.0 again and run the example of QCamera which is in part of the Qt package and see what happened.



  • @SGaist said in QCamera Problems!:

    with

    I installed a new Ubuntu 14.04 LTS, Qt5.10.0 (Offline installer).
    Also installed some essential PKGs for running Camera: mesa-common-dev, libpulse-dev, libgl1-mesa-dev

    But problem is remained!!!

    Mr. Gsaist, did you tried? : https://doc.qt.io/qt-5.10/qtmultimedia-multimediawidgets-camera-example.html

    Would you please make a run the QCamera example from QT example folder.



  • If you are running from a VMware machine, you could have problems accessing the camera.
    Make sure that the camera is not connected to the host.
    See the "Player | Removable Devices | ..." menu option of VMware player.
    Also, if its connect to the usb you may have to downgrade from usb3.0 to sub 2.0 or even usb 1.1 from the player settings menu.



  • @mranger90
    Thank you, but I think you do not read my full description in the top.
    I tested it in another PC without VM.


  • Qt Champions 2017

    @Hasan-Vaez said in QCamera Problems!:

    Unable to query the parameter info: "Invalid argument"

    Google that suggest something with the gstreamer. but im not 100% sure.

    Anyway, i would test the camera in the same linux using some linux camera program to verify something can see it.
    https://www.linuxlinks.com/webcam/



  • Just tell me, you do not having any problem with Camera with QT C++ in linux?



  • I've been able to use it many time with various Linuxi and through several Qt releases.
    Are you able to use the camera outside of Qt, for example with the Cheese app ?



  • @mranger90
    Thank you for your reply.
    Yes, I can use it outside of QT. I tested it with Cheese app in Ubuntu 16.04 LTS without any problem.
    I also have not any problem in other OS like MAC and WINDOWS.



  • @mranger90
    Please tell me what plugins did you install for qmultimedia in QT5?



  • Unfortunately I don't have any of those systems in front of me now and won't until Monday.
    Off the top of my head I'm pretty sure I've installed libgstreamerdev and maybe gstpluginsbase?
    Not sure of the exact package names.



  • Ok, I just set up an Ubuntu 16.04 VM with VMWare on my pathetically underpowered home system which is running Win 10 as the native OS.
    Installed Qt 5.10.0.
    Have a Microsoft LifeCam HD-600 usb camera.
    VMWare is set up to use USB 1.1.
    Cheese can access and display the camera.
    To build the Examples/multimediaWidgets/camera project I had to install:
    libgl-mesa-dev
    mesa-common-dev
    libpulse-dev

    Other than a little fiddling with the camera parameters that's all I had to do to get it to work on a stock ubuntu 16.04 install.
    I'd have to dig out some of my other apps to test with, but it looks like this should work for you. If you can post a more complete set of your code I'd be happy to test it tomorrow.



  • @mranger90 said in QCamera Problems!:

    libpulse-dev

    Thank you arranger for your comments.
    I install another Ubuntu 16.04, Qt5.10.0 (along with 3 components: libgl1-mesa-dev mesa-common-dev libpulse-dev)
    Test the Camera example with VMWARE MAC CAM and also with LOGITEC CAM.

    The problem remained!

    My codes are:
    1- Camera example in QT folder
    2- The following simple codes:

    QCamera *Camera;
    QCameraImageCapture *ImageCapture;
    QCameraInfo *CameraInfo;

    void MainWindow::on_pushButton_clicked()
    {
    Camera = new QCamera;
    ImageCapture = new QCameraImageCapture(Camera);

    Camera->setViewfinder(ui->wCamera);
    ui->wCamera->setAspectRatioMode(Qt::KeepAspectRatioByExpanding);
    Camera->setCaptureMode(QCamera::CaptureViewfinder);
    Camera->start();
    }

    All things seems to be correct, there should be a small point which I don't know what is it??



  • ok, Heres the simplest code I could create that runs with my setup:
    Mainwindow.h

    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    
    #include <QMainWindow>
    #include <QCamera>
    
    namespace Ui {
    class MainWindow;
    }
    
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
    
    public:
        explicit MainWindow(QWidget *parent = 0);
        ~MainWindow();
    
    private slots:
        void on_actionStart_triggered();
    
    private:
        Ui::MainWindow *ui;
        QCamera *m_camera;
    };
    
    #endif // MAINWINDOW_H
    
    

    mainwindow.cpp

    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    
    #include <QVideoWidget>
    #include <QCameraInfo>
    #include <QCameraViewfinderSettings>
    #include <QDebug>
    
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
        QVideoWidget *videoDisplay = new QVideoWidget;
        setCentralWidget(videoDisplay);
    
        // get a list of available cameras
        QList<QCameraInfo> cameras = QCameraInfo::availableCameras();
        // just pick the first
        if (cameras.size() > 0) {
            qDebug() << "creating camera from " << cameras.at(0).deviceName() << cameras.at(0).description();
            m_camera = new QCamera(cameras.at(0));
            if (m_camera) {
                m_camera->setViewfinder(videoDisplay);
                m_camera->setCaptureMode(QCamera::CaptureViewfinder);
                QCameraViewfinderSettings settings = m_camera->viewfinderSettings();
                // change resolution to 320x240
                settings.setResolution(QSize(320,240));
                m_camera->setViewfinderSettings(settings);
    
    
            }
        }
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    
    void MainWindow::on_actionStart_triggered()
    {
        if (m_camera) {
            m_camera->start();
        }
    }
    
    

    camtest.pro

    
    QT       += core gui multimedia multimediawidgets
    
    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
    
    TARGET = camtest
    TEMPLATE = app
    
    DEFINES += QT_DEPRECATED_WARNINGS
    SOURCES += \
            main.cpp \
            mainwindow.cpp
    
    HEADERS += \
            mainwindow.h
    
    FORMS += \
            mainwindow.ui
    
    

    Mainwindow is just a stock MainWindow with a menu item to start video capture.

    Let me know if this works.



  • @mranger90
    Thank you for for taking these times.
    I think I found the problem.

    Camera sources uses some codes which is not compatible with some old camera and also with VMWare cams, as it uses some parameters which can not be found in old cams and VMware cams.

    VMWare cameras use USB 2.0 and 3.0 and can not set as USB 1.1.

    QCamera has high probability problem with VMWare and also with Cameras with USB 1.1!

    The finial test is to purchase a new Cam and test it in Linux.

    I think this problem comes from Hardware and all of my configs are set OK.

    If the problem become solved by changing a new Cam I should report it as s bug, Cuz some users use their QT written programs in VMWare machines.

    Would you please tell me whether you test your codes in VMWare or not?

    Thank and regards.



  • Yes, I set this up in a VMWare 12 player last night.
    Actually, it is very system and camera dependent.
    For instance, on my low powered home system I MUST set VMWare to use USB 1.1
    or there will be problems. That is the camera is recognized but not video will be displayed.
    Also, due to the low capabilities of my system, I do not get a valid display unless the camera is set to 320x240.
    I really don't believe this is a Qt issue because so much is dependent on the underlying system capabilities, both in hardware and software. Perhaps if you play around with the QViewFinder settings, you may find a combination that works.



  • @mranger90
    Agree, I have tested in windows and the video does not work.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.