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. QCamera (auto) exposure/focus settings
QtWS25 Last Chance

QCamera (auto) exposure/focus settings

Scheduled Pinned Locked Moved Unsolved General and Desktop
21 Posts 4 Posters 8.3k 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.
  • X Offline
    X Offline
    xtingray
    wrote on last edited by xtingray
    #1

    Hi!
    Some time ago I made a basic but functional implementation of a Stopmotion interface using the QCamera class. In fact, everything works pretty well, except for one thing: the auto exposure/focus settings are enabled all the time, generating a constant "blink" effect with a lot of horizontal lines moving around on my display.
    Here is a short example of my problem: https://www.youtube.com/watch?v=QFb1gOmr2Xw

    So, my question is: how can I set the exposure/focus parameters of my webcam using Qt to avoid this behaviour? I noticed that there is a class called QCameraExposure and other called QCameraFocus, but the lack of documentation don't let me find the hint I need.

    Any suggestion?


    Qt Developer

    1 Reply Last reply
    0
    • SGaistS Offline
      SGaistS Offline
      SGaist
      Lifetime Qt Champion
      wrote on last edited by
      #2

      Hi,

      AFAIK, you can get these directly from the QCamera instance and then modify them to change the camera settings.

      Interested in AI ? www.idiap.ch
      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

      mrjjM 1 Reply Last reply
      0
      • SGaistS SGaist

        Hi,

        AFAIK, you can get these directly from the QCamera instance and then modify them to change the camera settings.

        mrjjM Offline
        mrjjM Offline
        mrjj
        Lifetime Qt Champion
        wrote on last edited by
        #3

        hi
        From these
        http://doc.qt.io/qt-5/qcamera.html#exposure
        ?

        1 Reply Last reply
        0
        • X Offline
          X Offline
          xtingray
          wrote on last edited by
          #4

          Just guessing, I tried this code:

              QCamera *camera = new QCamera();
              ...
              camera->setCaptureMode(QCamera::CaptureStillImage);
              QCameraExposure *exposure = camera->exposure();
              exposure->setExposureMode(QCameraExposure::ExposureManual);
              QCameraFocus *focus = camera->focus();
              focus->setFocusMode(QCameraFocus::ManualFocus);
              focus->setFocusPointMode(QCameraFocus::FocusPointCenter);
          

          But the result is exactly the same, the webcam keeps trying to calculate exposure and focus values every second. I am using a webcam FaceCam 320X. Suggestions?


          Qt Developer

          1 Reply Last reply
          0
          • jsulmJ Offline
            jsulmJ Offline
            jsulm
            Lifetime Qt Champion
            wrote on last edited by
            #5

            Does this webcam support manual exposure and focus?

            https://forum.qt.io/topic/113070/qt-code-of-conduct

            X 1 Reply Last reply
            0
            • jsulmJ jsulm

              Does this webcam support manual exposure and focus?

              X Offline
              X Offline
              xtingray
              wrote on last edited by
              #6

              @jsulm It is a very basic webcam model, so I really doubt it. To me, this has been a slow learning process about dealing with cameras using Qt.

              Now, I wonder if the right path to solve my issue (if there is a solution for this) is to look for some "Webcam system settings" in the operating system context and try to deal with the auto-exposure/focus from there.

              Should I give up to manage webcams for doing stopmotion and focus on DSRL devices? Should I get used to the annoying blinking horizontal lines if I decide to work with webcams? -> https://www.youtube.com/watch?v=QFb1gOmr2Xw

              I would like to understand the technical boundaries of working with webcams, how far can I take my expectations?

              Comments are very welcome! :)


              Qt Developer

              1 Reply Last reply
              0
              • SGaistS Offline
                SGaistS Offline
                SGaist
                Lifetime Qt Champion
                wrote on last edited by
                #7

                Something surprises me here, isn't that camera focus handling manual ?

                Do you have the same phenomenon if you use QML ?

                Interested in AI ? www.idiap.ch
                Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                X 1 Reply Last reply
                0
                • SGaistS SGaist

                  Something surprises me here, isn't that camera focus handling manual ?

                  Do you have the same phenomenon if you use QML ?

                  X Offline
                  X Offline
                  xtingray
                  wrote on last edited by xtingray
                  #8

                  @SGaist said:

                  Something surprises me here, isn't that camera focus handling manual ?

                  In fact, you are right. The focus doesn't change when the finger appears. But, what about the exposure? why the camera view is blinking all the time? I tried setting focus and exposure values as Auto and Manual with the same result.

                  Do you have the same phenomenon if you use QML ?

                  I was trying to learn QML but I must confess that I couldn't deal with it, different paradigm, just difficult to me. My apologies to QML developers.


                  Qt Developer

                  1 Reply Last reply
                  0
                  • SGaistS Offline
                    SGaistS Offline
                    SGaist
                    Lifetime Qt Champion
                    wrote on last edited by
                    #9

                    It is just for the sake of testing, not trying to convince you to change your code base.

                    Just create a default QtQuick application and put

                    import QtQuick 2.6
                    import QtQuick.Window 2.2
                    import QtMultimedia 5.0
                    
                    Window {
                        visible: true
                        Camera {
                            id: camera
                        }
                    
                        VideoOutput {
                            source: camera
                            anchors.fill: parent
                            focus : visible // to receive focus and capture key events when visible
                        }
                    }
                    

                    in the main.qml file.

                    It will show you the first camera it finds.

                    Interested in AI ? www.idiap.ch
                    Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                    1 Reply Last reply
                    0
                    • X Offline
                      X Offline
                      xtingray
                      wrote on last edited by xtingray
                      #10

                      This morning I was testing the QML code you shared with me and I compared it with my own implementation. Here is the result:
                      https://www.youtube.com/watch?v=3LnvnTu-8vo

                      What I wonder most is how the blink effect disappears when the natural light is strong. I mean, I used to run my tests at night and as you could see, the blinking effect was exaggerated, but in this latest test is almost imperceptible. I made a comparison with the FaceTime app and definitely there is a big difference when you work either with night or day light.

                      About the QML vs QWidget implementation, I must say that in my opinion, the "quality" result is the same. My most important learning about this issue is that natural light matters when you are going to work with webcams, at least from Mac operating systems. I guess for some of you this could sound "really obvious", but please, count on I am a newbie in this topic ;)

                      I ran some night tests from my laptop with Ubuntu using the same webcam and the same Qt code, and the auto exposure effect was not so intense as in my Mac.

                      After all my tests, I consider that this issue is far beyond the software itself, environment light matters. Maybe with DSLR devices is a different story.


                      Qt Developer

                      1 Reply Last reply
                      0
                      • SGaistS Offline
                        SGaistS Offline
                        SGaist
                        Lifetime Qt Champion
                        wrote on last edited by
                        #11

                        Do you know whether that camera provides a RGB or YUV stream ?

                        Interested in AI ? www.idiap.ch
                        Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                        X 1 Reply Last reply
                        0
                        • SGaistS SGaist

                          Do you know whether that camera provides a RGB or YUV stream ?

                          X Offline
                          X Offline
                          xtingray
                          wrote on last edited by
                          #12

                          @SGaist Not sure how to answer your question, but this is all the info I could get from the manufacturer:
                          http://www.geniusnet.com/Genius/wSite/ct?xItem=53156&ctNode=161


                          Qt Developer

                          1 Reply Last reply
                          0
                          • SGaistS Offline
                            SGaistS Offline
                            SGaist
                            Lifetime Qt Champion
                            wrote on last edited by
                            #13

                            Do you mind building a custom QtMultimedia with two patches to test that ?

                            Interested in AI ? www.idiap.ch
                            Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                            X 1 Reply Last reply
                            0
                            • SGaistS SGaist

                              Do you mind building a custom QtMultimedia with two patches to test that ?

                              X Offline
                              X Offline
                              xtingray
                              wrote on last edited by
                              #14

                              @SGaist Not at all. If you can give me the building instructions to follow I can do it :)


                              Qt Developer

                              1 Reply Last reply
                              0
                              • SGaistS Offline
                                SGaistS Offline
                                SGaist
                                Lifetime Qt Champion
                                wrote on last edited by
                                #15

                                You can clone QtMultimedia from here and checkout the branch matching your current Qt.

                                Then:
                                git fetch https://codereview.qt-project.org/qt/qtmultimedia refs/changes/04/156204/5 && git format-patch -1 --stdout FETCH_HEAD > yuv422.patch
                                git fetch https://codereview.qt-project.org/qt/qtmultimedia refs/changes/45/156845/2 && git format-patch -1 --stdout FETCH_HEAD > yuv422_avcamera.patch

                                That will give you two patches that you can apply with:
                                patch -p1 -i yuv422.patch and patch -p1 -i yuv422_avcamera.patch.

                                If you have trouble compiling QtMultimedia from git, you can also grab the sources from the installer and just apply the two patches on them. It shouldn't be problematic.

                                Interested in AI ? www.idiap.ch
                                Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                                X 1 Reply Last reply
                                0
                                • SGaistS SGaist

                                  You can clone QtMultimedia from here and checkout the branch matching your current Qt.

                                  Then:
                                  git fetch https://codereview.qt-project.org/qt/qtmultimedia refs/changes/04/156204/5 && git format-patch -1 --stdout FETCH_HEAD > yuv422.patch
                                  git fetch https://codereview.qt-project.org/qt/qtmultimedia refs/changes/45/156845/2 && git format-patch -1 --stdout FETCH_HEAD > yuv422_avcamera.patch

                                  That will give you two patches that you can apply with:
                                  patch -p1 -i yuv422.patch and patch -p1 -i yuv422_avcamera.patch.

                                  If you have trouble compiling QtMultimedia from git, you can also grab the sources from the installer and just apply the two patches on them. It shouldn't be problematic.

                                  X Offline
                                  X Offline
                                  xtingray
                                  wrote on last edited by
                                  #16

                                  @SGaist Hi, following your instructions I downloaded the git branch corresponding to my Qt version (5.6), applied the patches and finally, compiled the whole source code with no issues (qmake and then make).

                                  Now, what should I do with the content of this "qtmultimedia" folder?

                                  PS: I am running my tests on a Mac system.


                                  Qt Developer

                                  1 Reply Last reply
                                  0
                                  • SGaistS Offline
                                    SGaistS Offline
                                    SGaist
                                    Lifetime Qt Champion
                                    wrote on last edited by
                                    #17

                                    You need to call make install, that will replace your current QtMultimedia. Then you only have to re-build your application, it should use the new available format if possible (just double check that's indeed the case)

                                    Interested in AI ? www.idiap.ch
                                    Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                                    X 1 Reply Last reply
                                    0
                                    • SGaistS SGaist

                                      You need to call make install, that will replace your current QtMultimedia. Then you only have to re-build your application, it should use the new available format if possible (just double check that's indeed the case)

                                      X Offline
                                      X Offline
                                      xtingray
                                      wrote on last edited by
                                      #18

                                      @SGaist Just one question before continuing: Should I make a backup copy of some directory of my current Qt (official) installation? I don't want to break something :S


                                      Qt Developer

                                      1 Reply Last reply
                                      0
                                      • SGaistS Offline
                                        SGaistS Offline
                                        SGaist
                                        Lifetime Qt Champion
                                        wrote on last edited by
                                        #19

                                        It shouldn't break anything but you can copy your QtMultimedia.framework as well as the mediaservices plugin folder.

                                        Interested in AI ? www.idiap.ch
                                        Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                                        X 1 Reply Last reply
                                        0
                                        • SGaistS SGaist

                                          It shouldn't break anything but you can copy your QtMultimedia.framework as well as the mediaservices plugin folder.

                                          X Offline
                                          X Offline
                                          xtingray
                                          wrote on last edited by
                                          #20

                                          @SGaist Sorry for my delay. I was busy working on my latest release.

                                          Now that I had some time to run the test, I must say that I couldn't detect any difference in my camera behavior after installing the new version of the QtMultimedia module. The blinking effect remains.

                                          Initially, I was expecting to run my tests on my Mac system. Unfortunately, I couldn't work with the Qt 4.6 version due to some qmake bug I found when I was trying to compile my project, so I decided to try the whole thing from my Linux box.

                                          This is the output I got before compiling:

                                          # qmake
                                          Checking for openal... no
                                          Checking for alsa... yes
                                          Checking for pulseaudio... yes
                                          Checking for gstreamer... yes
                                          Checking for gstreamer_photography... no
                                          Checking for gstreamer_encodingprofiles... yes
                                          Checking for gstreamer_appsrc... yes
                                          Checking for linux_v4l... yes
                                          Checking for resourcepolicy... no
                                          Checking for gpu_vivante... no
                                          

                                          Not sure if this test doesn't have any sense in Linux. Please, let me know if there are another tests related to the webcam management I could run.


                                          Qt Developer

                                          1 Reply Last reply
                                          0

                                          • Login

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