Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Language Bindings
  4. Code suddenly stops at self.cam = QCamera() , PyQt5.9.2, Qt5.9.3, Python3.5

Code suddenly stops at self.cam = QCamera() , PyQt5.9.2, Qt5.9.3, Python3.5

Scheduled Pinned Locked Moved Unsolved Language Bindings
pyqtpython
55 Posts 4 Posters 19.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 Xenoshell

    @JNBarchan, @jsulm
    The output for the for-loop is:

    /dev/video0
    

    Here the output is:

    blz@blz-desktop:~$ ls -l /dev/video0
    crw-rw----+ 1 root video 81, 0 Dez 11 10:55 /dev/video0
    
    

    To me it looks like i dont have the permission to everything.

    jsulmJ Offline
    jsulmJ Offline
    jsulm
    Lifetime Qt Champion
    wrote on last edited by
    #20

    @Xenoshell Add yourself to the video group if it's not already the case

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

    X 1 Reply Last reply
    2
    • X Xenoshell

      @JNBarchan, @jsulm
      The output for the for-loop is:

      /dev/video0
      

      Here the output is:

      blz@blz-desktop:~$ ls -l /dev/video0
      crw-rw----+ 1 root video 81, 0 Dez 11 10:55 /dev/video0
      
      

      To me it looks like i dont have the permission to everything.

      JonBJ Offline
      JonBJ Offline
      JonB
      wrote on last edited by JonB
      #21

      @Xenoshell
      You can see if you're already a member of video group via executing command groups.

      If your username is blz, I think you already are....

      If you are a member, it would then look like: as yourself, not root, you do have access to the camera device, hence you say it seems to "initially open", but then something else is happening which works as root but not as you.... You could temporarily sudo chmod 666 /dev/video0, see if that helps, then revert to sudo chmod 660 /dev/video0.

      1 Reply Last reply
      0
      • jsulmJ jsulm

        @Xenoshell Add yourself to the video group if it's not already the case

        X Offline
        X Offline
        Xenoshell
        wrote on last edited by
        #22

        @jsulm @JNBarchan ,
        i am already member of the video group.
        The camera device only opens if i use sudo. If i dont it just gets stuck at self.cam = QCamera().
        After the command sudo chmod 666 /dev/video0 i tried using qt5.py without sudo but it just got stuck.
        So there has to be a group which i am not a member of that uses QCamera(). Am i at least right with this assumption?

        1 Reply Last reply
        0
        • X Offline
          X Offline
          Xenoshell
          wrote on last edited by
          #23

          Ok i cant reproduce the gdb output anymore. It just stops at 1 and then somehow locks up and i have to relog again.
          I somehow have this feeling that the code/the usb-camera use audio or at least try to use it. When i want to turn off the pi i always get the message that "Pulse Audio Sound System" is currently running and if i want to terminate it.
          Tomorrow i will sit down and try to get the gdb output without sudo /with sudo and look what is possible.
          Debugging can really be stressful...

          1 Reply Last reply
          0
          • X Offline
            X Offline
            Xenoshell
            wrote on last edited by Xenoshell
            #24

            @jsulm, @JNBarchan
            Here i am again, this is the new gdb output:

            (gdb) run qt5.py
            Starting program: /usr/bin/python3 qt5.py
            Cannot parse expression `.L1185 4@r4'.
            warning: Probes-based dynamic linker interface failed.
            Reverting to original interface.
            
            [Thread debugging using libthread_db enabled]
            Using host libthread_db library "/lib/arm-linux-gnueabihf/libthread_db.so.1".
            1
            [New Thread 0x72b39470 (LWP 4134)]
            2
            3
            [New Thread 0x6de10470 (LWP 4139)]
            [Thread 0x6de10470 (LWP 4139) exited]
            [New Thread 0x6de10470 (LWP 4140)]
            [Thread 0x6de10470 (LWP 4140) exited]
            

            At this output is libpulse.so and also libasound.so.2 i talked about in my post above. It could actually be that QCamera() tries to also initalise Audio but obviously i dont have any audiooutput plugged in and thats why it stops at QCamera

            (gdb) bt
            #0  __libc_do_syscall () at ../sysdeps/unix/sysv/linux/arm/libc-do-syscall.S:46
            #1  0x76f21c0a in __GI_ppoll (fds=0x7001a8, nfds=1, timeout=<optimized out>, 
                sigmask=0x0) at ../sysdeps/unix/sysv/linux/ppoll.c:50
            #2  0x73389e12 in pa_mainloop_poll ()
               from /usr/lib/arm-linux-gnueabihf/libpulse.so.0
            #3  0x7338a290 in pa_mainloop_iterate ()
               from /usr/lib/arm-linux-gnueabihf/libpulse.so.0
            #4  0x6de2888c in conf_pulse_hook_load_if_running ()
               from /usr/lib/arm-linux-gnueabihf/alsa-lib/libasound_module_conf_pulse.so
            #5  0x6e01c9f2 in ?? () from /usr/lib/arm-linux-gnueabihf/libasound.so.2
            Backtrace stopped: previous frame identical to this frame (corrupt stack?)
            

            Here the info threads:

            (gdb) info threads
              Id   Target Id         Frame 
            * 1    Thread 0x76ff6300 (LWP 4204) "python3" __libc_do_syscall ()
                at ../sysdeps/unix/sysv/linux/arm/libc-do-syscall.S:46
              2    Thread 0x72b39470 (LWP 4206) "QXcbEventReader" 0x76f21b90 in poll ()
                at ../sysdeps/unix/syscall-template.S:84
            

            Can anyone tell me whats going on in those gdb outputs? Are they even important or are they just there and we cant really do anything with them?

            JonBJ 1 Reply Last reply
            0
            • X Xenoshell

              @jsulm, @JNBarchan
              Here i am again, this is the new gdb output:

              (gdb) run qt5.py
              Starting program: /usr/bin/python3 qt5.py
              Cannot parse expression `.L1185 4@r4'.
              warning: Probes-based dynamic linker interface failed.
              Reverting to original interface.
              
              [Thread debugging using libthread_db enabled]
              Using host libthread_db library "/lib/arm-linux-gnueabihf/libthread_db.so.1".
              1
              [New Thread 0x72b39470 (LWP 4134)]
              2
              3
              [New Thread 0x6de10470 (LWP 4139)]
              [Thread 0x6de10470 (LWP 4139) exited]
              [New Thread 0x6de10470 (LWP 4140)]
              [Thread 0x6de10470 (LWP 4140) exited]
              

              At this output is libpulse.so and also libasound.so.2 i talked about in my post above. It could actually be that QCamera() tries to also initalise Audio but obviously i dont have any audiooutput plugged in and thats why it stops at QCamera

              (gdb) bt
              #0  __libc_do_syscall () at ../sysdeps/unix/sysv/linux/arm/libc-do-syscall.S:46
              #1  0x76f21c0a in __GI_ppoll (fds=0x7001a8, nfds=1, timeout=<optimized out>, 
                  sigmask=0x0) at ../sysdeps/unix/sysv/linux/ppoll.c:50
              #2  0x73389e12 in pa_mainloop_poll ()
                 from /usr/lib/arm-linux-gnueabihf/libpulse.so.0
              #3  0x7338a290 in pa_mainloop_iterate ()
                 from /usr/lib/arm-linux-gnueabihf/libpulse.so.0
              #4  0x6de2888c in conf_pulse_hook_load_if_running ()
                 from /usr/lib/arm-linux-gnueabihf/alsa-lib/libasound_module_conf_pulse.so
              #5  0x6e01c9f2 in ?? () from /usr/lib/arm-linux-gnueabihf/libasound.so.2
              Backtrace stopped: previous frame identical to this frame (corrupt stack?)
              

              Here the info threads:

              (gdb) info threads
                Id   Target Id         Frame 
              * 1    Thread 0x76ff6300 (LWP 4204) "python3" __libc_do_syscall ()
                  at ../sysdeps/unix/sysv/linux/arm/libc-do-syscall.S:46
                2    Thread 0x72b39470 (LWP 4206) "QXcbEventReader" 0x76f21b90 in poll ()
                  at ../sysdeps/unix/syscall-template.S:84
              

              Can anyone tell me whats going on in those gdb outputs? Are they even important or are they just there and we cant really do anything with them?

              JonBJ Offline
              JonBJ Offline
              JonB
              wrote on last edited by
              #25

              @Xenoshell
              Because you are using Python, not a standalone executable of your program compiled from C++, if you use gdb you have to gdb the Python executable, not your app running as a Python script. This means gdb probably is not of any interest to you, per se, for general debugging of your app; though it may give us some clues in this particular case.

              To clarify, for your app script completely. Just run gdb against Python without any mention of your qt5.py script. For the record, here is my output under Ubuntu not Pi:

              jon@ubuntu:~$ gdb python3
              Reading symbols from python3...(no debugging symbols found)...done.
              (gdb) run
              Starting program: /usr/bin/python3 
              [Thread debugging using libthread_db enabled]
              Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
              Python 3.5.3 (default, Nov 23 2017, 11:34:05) 
              [GCC 6.3.0 20170406] on linux
              Type "help", "copyright", "credits" or "license" for more information.
              >>> 
              
              

              Does yours produce much the same? Does it only give the libpulse/libasound if a certain line is in your Python script, and not if it is removed, then you'd have an idea what is related to what? I wish you'd show what that line is now, because we no longer know whether you are enumerating available cameras or opening a camera?

              X 1 Reply Last reply
              0
              • JonBJ JonB

                @Xenoshell
                Because you are using Python, not a standalone executable of your program compiled from C++, if you use gdb you have to gdb the Python executable, not your app running as a Python script. This means gdb probably is not of any interest to you, per se, for general debugging of your app; though it may give us some clues in this particular case.

                To clarify, for your app script completely. Just run gdb against Python without any mention of your qt5.py script. For the record, here is my output under Ubuntu not Pi:

                jon@ubuntu:~$ gdb python3
                Reading symbols from python3...(no debugging symbols found)...done.
                (gdb) run
                Starting program: /usr/bin/python3 
                [Thread debugging using libthread_db enabled]
                Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
                Python 3.5.3 (default, Nov 23 2017, 11:34:05) 
                [GCC 6.3.0 20170406] on linux
                Type "help", "copyright", "credits" or "license" for more information.
                >>> 
                
                

                Does yours produce much the same? Does it only give the libpulse/libasound if a certain line is in your Python script, and not if it is removed, then you'd have an idea what is related to what? I wish you'd show what that line is now, because we no longer know whether you are enumerating available cameras or opening a camera?

                X Offline
                X Offline
                Xenoshell
                wrote on last edited by Xenoshell
                #26

                @JNBarchan
                This is the whole output:

                blz@blz-desktop:~$ gdb python3
                GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.5) 7.11.1
                Copyright (C) 2016 Free Software Foundation, Inc.
                License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
                This is free software: you are free to change and redistribute it.
                There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
                and "show warranty" for details.
                This GDB was configured as "arm-linux-gnueabihf".
                Type "show configuration" for configuration details.
                For bug reporting instructions, please see:
                <http://www.gnu.org/software/gdb/bugs/>.
                Find the GDB manual and other documentation resources online at:
                <http://www.gnu.org/software/gdb/documentation/>.
                For help, type "help".
                Type "apropos word" to search for commands related to "word"...
                Reading symbols from python3...Reading symbols from /usr/lib/debug/.build-id/d7/14ad8d8b52ca34a8a81f10b4917027977b05ca.debug...done.
                done.
                (gdb) run
                Starting program: /usr/bin/python3 
                Cannot parse expression `.L1185 4@r4'.
                warning: Probes-based dynamic linker interface failed.
                Reverting to original interface.
                
                [Thread debugging using libthread_db enabled]
                Using host libthread_db library "/lib/arm-linux-gnueabihf/libthread_db.so.1".
                Python 3.5.2 (default, Nov 23 2017, 16:37:01) 
                [GCC 5.4.0 20160609] on linux
                Type "help", "copyright", "credits" or "license" for more information.
                >>> 
                
                

                My code always stops at self.cam = QCamera() otherwise it would also print 4 and not suddenly stop
                As a reminder, here is my code:

                import sys
                from PyQt5 import QtCore , QtWidgets, QtGui, QtMultimedia, QtMultimediaWidgets
                from PyQt5.QtCore import QObject, pyqtSignal, pyqtSlot
                from PyQt5.QtWidgets import QApplication, QPushButton, QMainWindow
                from PyQt5.QtMultimedia import QCamera, QCameraInfo, QMediaObject, QCameraViewfinderSettings, QCameraImageCapture
                from PyQt5.QtMultimediaWidgets import QCameraViewfinder
                
                
                class Camera(QObject):
                    def __init__(self, parent = QObject()):
                        super(Camera, self).__init__(parent)
                        print("3")
                        self.cam = QCamera()
                        print("4")
                        self.caminfo = QCameraInfo(self.cam)
                        self.camvfind = QCameraViewfinder()
                        self.camvfindset = QCameraViewfinderSettings()
                        self.cammode = self.cam.CaptureMode(2)
                        self.camimgcap = QCameraImageCapture(self.cam)
                
                    def iniCamera(self):
                        #print(self.caminfo.description())
                        #print(self.caminfo.availableCameras())
                        
                        for caminfo in QCameraInfo.availableCameras():
                            print(caminfo.deviceName())
                        
                        
                        if self.cam.isCaptureModeSupported(self.cammode):
                            print("Capturemode supported")
                    
                    def startVid(self):
                        self.camimgcap.CaptureDestination(2)
                        
                        self.camvfind.show()
                        
                        self.cam.setViewfinder(self.camvfind)
                        
                        self.cam.setCaptureMode(self.cammode)
                        
                        self.cam.start()
                        
                        
                
                if __name__ == '__main__':
                    print("1")
                    app = QtWidgets.QApplication(sys.argv)
                    print("2")
                    cam = Camera()
                    print("4")
                    cam.iniCamera()
                    
                    cam.startVid()
                    
                    sys.exit(app.exec_())
                
                
                JonBJ 1 Reply Last reply
                0
                • X Xenoshell

                  @JNBarchan
                  This is the whole output:

                  blz@blz-desktop:~$ gdb python3
                  GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.5) 7.11.1
                  Copyright (C) 2016 Free Software Foundation, Inc.
                  License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
                  This is free software: you are free to change and redistribute it.
                  There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
                  and "show warranty" for details.
                  This GDB was configured as "arm-linux-gnueabihf".
                  Type "show configuration" for configuration details.
                  For bug reporting instructions, please see:
                  <http://www.gnu.org/software/gdb/bugs/>.
                  Find the GDB manual and other documentation resources online at:
                  <http://www.gnu.org/software/gdb/documentation/>.
                  For help, type "help".
                  Type "apropos word" to search for commands related to "word"...
                  Reading symbols from python3...Reading symbols from /usr/lib/debug/.build-id/d7/14ad8d8b52ca34a8a81f10b4917027977b05ca.debug...done.
                  done.
                  (gdb) run
                  Starting program: /usr/bin/python3 
                  Cannot parse expression `.L1185 4@r4'.
                  warning: Probes-based dynamic linker interface failed.
                  Reverting to original interface.
                  
                  [Thread debugging using libthread_db enabled]
                  Using host libthread_db library "/lib/arm-linux-gnueabihf/libthread_db.so.1".
                  Python 3.5.2 (default, Nov 23 2017, 16:37:01) 
                  [GCC 5.4.0 20160609] on linux
                  Type "help", "copyright", "credits" or "license" for more information.
                  >>> 
                  
                  

                  My code always stops at self.cam = QCamera() otherwise it would also print 4 and not suddenly stop
                  As a reminder, here is my code:

                  import sys
                  from PyQt5 import QtCore , QtWidgets, QtGui, QtMultimedia, QtMultimediaWidgets
                  from PyQt5.QtCore import QObject, pyqtSignal, pyqtSlot
                  from PyQt5.QtWidgets import QApplication, QPushButton, QMainWindow
                  from PyQt5.QtMultimedia import QCamera, QCameraInfo, QMediaObject, QCameraViewfinderSettings, QCameraImageCapture
                  from PyQt5.QtMultimediaWidgets import QCameraViewfinder
                  
                  
                  class Camera(QObject):
                      def __init__(self, parent = QObject()):
                          super(Camera, self).__init__(parent)
                          print("3")
                          self.cam = QCamera()
                          print("4")
                          self.caminfo = QCameraInfo(self.cam)
                          self.camvfind = QCameraViewfinder()
                          self.camvfindset = QCameraViewfinderSettings()
                          self.cammode = self.cam.CaptureMode(2)
                          self.camimgcap = QCameraImageCapture(self.cam)
                  
                      def iniCamera(self):
                          #print(self.caminfo.description())
                          #print(self.caminfo.availableCameras())
                          
                          for caminfo in QCameraInfo.availableCameras():
                              print(caminfo.deviceName())
                          
                          
                          if self.cam.isCaptureModeSupported(self.cammode):
                              print("Capturemode supported")
                      
                      def startVid(self):
                          self.camimgcap.CaptureDestination(2)
                          
                          self.camvfind.show()
                          
                          self.cam.setViewfinder(self.camvfind)
                          
                          self.cam.setCaptureMode(self.cammode)
                          
                          self.cam.start()
                          
                          
                  
                  if __name__ == '__main__':
                      print("1")
                      app = QtWidgets.QApplication(sys.argv)
                      print("2")
                      cam = Camera()
                      print("4")
                      cam.iniCamera()
                      
                      cam.startVid()
                      
                      sys.exit(app.exec_())
                  
                  
                  JonBJ Offline
                  JonBJ Offline
                  JonB
                  wrote on last edited by JonB
                  #27

                  @Xenoshell
                  I asked earlier:

                  Does it only give the libpulse/libasound if a certain line is in your Python script, and not if it is removed, then you'd have an idea what is related to what?

                  So, if I were you, under gdb, I'd try commenting in & commenting out the QCamera() line, and report whether your debugger only shows the libpulse error if & only if you have that line in there. then you'd know for sure whether QCamera() has anything to do with libpulse....

                  I'd also try QCamera("video0") or QCamera("/dev/video0") or whatever it is, instead of plain QCamera(). I'd probably also try QCamera("rubbish"). These are all things for you to play with to try to understand just what causes the problem/hang, it's up to you....

                  X 1 Reply Last reply
                  0
                  • JonBJ JonB

                    @Xenoshell
                    I asked earlier:

                    Does it only give the libpulse/libasound if a certain line is in your Python script, and not if it is removed, then you'd have an idea what is related to what?

                    So, if I were you, under gdb, I'd try commenting in & commenting out the QCamera() line, and report whether your debugger only shows the libpulse error if & only if you have that line in there. then you'd know for sure whether QCamera() has anything to do with libpulse....

                    I'd also try QCamera("video0") or QCamera("/dev/video0") or whatever it is, instead of plain QCamera(). I'd probably also try QCamera("rubbish"). These are all things for you to play with to try to understand just what causes the problem/hang, it's up to you....

                    X Offline
                    X Offline
                    Xenoshell
                    wrote on last edited by Xenoshell
                    #28

                    @JNBarchan
                    I commented QCamera() and obviously i also need to comment the stuff that is in correlation to self.cam because otherwise i would get a simple error because self.cam is not there. Then i also dont get the libpulse error, well tbh there is not much to compile because about half the code is commented.
                    I tried using QCamera("/dev/video0) and also video0, this results in the error:

                    TypeError: arguments did not match any overloaded call:
                      QCamera(QObject parent=None): argument 1 has unexpected type 'str'
                      QCamera(QByteArray, QObject parent=None): argument 1 has unexpected type 'str'
                      QCamera(QCameraInfo, QObject parent=None): argument 1 has unexpected type 'str'
                      QCamera(QCamera.Position, QObject parent=None): argument 1 has unexpected type 'str'
                    

                    I can follow you that this should be right but how are you supposed to initialize QCamera if you need the QCameraInfo or a QByteArray?
                    Are you supposed to initalize without anything -> find out the QByteArray -> initialize QCamera with the correct QByteArray?

                    Thanks again for your help

                    JonBJ 1 Reply Last reply
                    0
                    • X Xenoshell

                      @JNBarchan
                      I commented QCamera() and obviously i also need to comment the stuff that is in correlation to self.cam because otherwise i would get a simple error because self.cam is not there. Then i also dont get the libpulse error, well tbh there is not much to compile because about half the code is commented.
                      I tried using QCamera("/dev/video0) and also video0, this results in the error:

                      TypeError: arguments did not match any overloaded call:
                        QCamera(QObject parent=None): argument 1 has unexpected type 'str'
                        QCamera(QByteArray, QObject parent=None): argument 1 has unexpected type 'str'
                        QCamera(QCameraInfo, QObject parent=None): argument 1 has unexpected type 'str'
                        QCamera(QCamera.Position, QObject parent=None): argument 1 has unexpected type 'str'
                      

                      I can follow you that this should be right but how are you supposed to initialize QCamera if you need the QCameraInfo or a QByteArray?
                      Are you supposed to initalize without anything -> find out the QByteArray -> initialize QCamera with the correct QByteArray?

                      Thanks again for your help

                      JonBJ Offline
                      JonBJ Offline
                      JonB
                      wrote on last edited by
                      #29

                      @Xenoshell
                      For the way to invoke QCamera(), sorry, I misremembered the constructor, and thought it took a string. It takes a byte array of the name instead. From Python, you'll use str.encode(), e.g. "/dev/video0".encode().

                      Maybe it's not a good idea to try to create an "empty" QCamera(). Try using a constructor which does take an actual camera. One of:

                      • `QCamera(QCameraInfo.defaultCamera())
                      • QCamera("/dev/video0".encode())
                      • One of the available cameras returned by the loop:
                      for caminfo in QCameraInfo.availableCameras():
                          print(caminfo.deviceName())
                          acam = QCamera(caminfo)
                      

                      I hope one of the above works instead of the default constructor. Maybe only root can create the empty one (though have to say I'm dubious)....

                      Now that I think I understand what your code is intending to do, I believe you always intended QCamera(QCameraInfo.defaultCamera()). Don't forget the docs admonition:

                      QCameraInfo QCameraInfo::defaultCamera()
                      Returns the default camera on the system.
                      The returned object should be checked using isNull() before being used, in case there is no default camera or no cameras at all.
                      See also availableCameras().

                      X 1 Reply Last reply
                      1
                      • JonBJ JonB

                        @Xenoshell
                        For the way to invoke QCamera(), sorry, I misremembered the constructor, and thought it took a string. It takes a byte array of the name instead. From Python, you'll use str.encode(), e.g. "/dev/video0".encode().

                        Maybe it's not a good idea to try to create an "empty" QCamera(). Try using a constructor which does take an actual camera. One of:

                        • `QCamera(QCameraInfo.defaultCamera())
                        • QCamera("/dev/video0".encode())
                        • One of the available cameras returned by the loop:
                        for caminfo in QCameraInfo.availableCameras():
                            print(caminfo.deviceName())
                            acam = QCamera(caminfo)
                        

                        I hope one of the above works instead of the default constructor. Maybe only root can create the empty one (though have to say I'm dubious)....

                        Now that I think I understand what your code is intending to do, I believe you always intended QCamera(QCameraInfo.defaultCamera()). Don't forget the docs admonition:

                        QCameraInfo QCameraInfo::defaultCamera()
                        Returns the default camera on the system.
                        The returned object should be checked using isNull() before being used, in case there is no default camera or no cameras at all.
                        See also availableCameras().

                        X Offline
                        X Offline
                        Xenoshell
                        wrote on last edited by Xenoshell
                        #30

                        @JNBarchan
                        well that didnt do anything... When i use QCamera("/dev/video0".encode()) or QCamera(QCameraInfo.defaultCamera()) it just prints till 3 and then stops.
                        Maybe i need to add myself to the audio group (EDIT: ok already am)

                        JonBJ 1 Reply Last reply
                        0
                        • X Xenoshell

                          @JNBarchan
                          well that didnt do anything... When i use QCamera("/dev/video0".encode()) or QCamera(QCameraInfo.defaultCamera()) it just prints till 3 and then stops.
                          Maybe i need to add myself to the audio group (EDIT: ok already am)

                          JonBJ Offline
                          JonBJ Offline
                          JonB
                          wrote on last edited by
                          #31

                          @Xenoshell
                          Then at this point I'm afraid I'm stumped. QCamera(QCameraInfo.defaultCamera()) should definitely not hang. I don't know what is going on in the Qt code which will cause something to do so unless run as root. (I just wonder whether something might be prompting for, say, root password to allow access, and that's why it hangs/goes black....)

                          You need one of the experts who knows what the Qt code does to get you anywhere now, I think....

                          X 1 Reply Last reply
                          0
                          • JonBJ JonB

                            @Xenoshell
                            Then at this point I'm afraid I'm stumped. QCamera(QCameraInfo.defaultCamera()) should definitely not hang. I don't know what is going on in the Qt code which will cause something to do so unless run as root. (I just wonder whether something might be prompting for, say, root password to allow access, and that's why it hangs/goes black....)

                            You need one of the experts who knows what the Qt code does to get you anywhere now, I think....

                            X Offline
                            X Offline
                            Xenoshell
                            wrote on last edited by
                            #32

                            @JNBarchan
                            No worries, i think it should work too and am baffled... Maybe i can summon @Lifetime-Qt-Champion @SGaist ? He has also helped me alot in the past. But i am quite sure it has something to do with the gdb output

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

                              You can't without lots of chocolate...

                              Minimal PyQt5 example that shows a viewfinder using the default camera:

                              import sys
                              
                              from PyQt5.QtWidgets import QApplication
                              from PyQt5.QtMultimedia import QCamera, QCameraInfo
                              from PyQt5.QtMultimediaWidgets import QCameraViewfinder
                              
                              if __name__ == '__main__':
                              
                                  app = QApplication(sys.argv)
                                  camera = QCamera(QCameraInfo.defaultCamera());
                                  viewfinder = QCameraViewfinder()
                                  viewfinder.show()
                                  camera.setViewfinder(viewfinder);
                                  camera.start()
                              
                                  sys.exit(app.exec_())
                              

                              Does it work for you ?

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

                              X JonBJ 3 Replies Last reply
                              1
                              • SGaistS SGaist

                                You can't without lots of chocolate...

                                Minimal PyQt5 example that shows a viewfinder using the default camera:

                                import sys
                                
                                from PyQt5.QtWidgets import QApplication
                                from PyQt5.QtMultimedia import QCamera, QCameraInfo
                                from PyQt5.QtMultimediaWidgets import QCameraViewfinder
                                
                                if __name__ == '__main__':
                                
                                    app = QApplication(sys.argv)
                                    camera = QCamera(QCameraInfo.defaultCamera());
                                    viewfinder = QCameraViewfinder()
                                    viewfinder.show()
                                    camera.setViewfinder(viewfinder);
                                    camera.start()
                                
                                    sys.exit(app.exec_())
                                

                                Does it work for you ?

                                X Offline
                                X Offline
                                Xenoshell
                                wrote on last edited by Xenoshell
                                #34

                                @SGaist
                                Nope doesnt work. Its the same thing. Without sudo it doesnt do anything and with sudo it just locks up and i have to login again. I cant find a reason why the raspberry pi just locks up. For me thats the strangest thing to happen. I had my code once on Raspbian but now i am on Ubuntu Mate since i always got a segmentation fault on Raspbian.

                                JonBJ 1 Reply Last reply
                                0
                                • SGaistS SGaist

                                  You can't without lots of chocolate...

                                  Minimal PyQt5 example that shows a viewfinder using the default camera:

                                  import sys
                                  
                                  from PyQt5.QtWidgets import QApplication
                                  from PyQt5.QtMultimedia import QCamera, QCameraInfo
                                  from PyQt5.QtMultimediaWidgets import QCameraViewfinder
                                  
                                  if __name__ == '__main__':
                                  
                                      app = QApplication(sys.argv)
                                      camera = QCamera(QCameraInfo.defaultCamera());
                                      viewfinder = QCameraViewfinder()
                                      viewfinder.show()
                                      camera.setViewfinder(viewfinder);
                                      camera.start()
                                  
                                      sys.exit(app.exec_())
                                  

                                  Does it work for you ?

                                  JonBJ Offline
                                  JonBJ Offline
                                  JonB
                                  wrote on last edited by JonB
                                  #35

                                  @SGaist
                                  We have established that for the OP QCamera(QCameraInfo.defaultCamera()) --- or indeed QCamera(anything-at-all-or-nothing) --- hangs unless he runs it via sudo. (The only thing I don't think he has clarified is whether QCamera("nosuchcamera".decode()) succeeds returning an invalid camera object or also hangs --- but I suspect the latter.)

                                  What would be nice to know from an expert is: from the Qt source code, what does just a minimal QCamera() constructor actually do? It seems to invoke something in the OS/multimedia --- perhaps something which requires a permission --- but what??

                                  1 Reply Last reply
                                  0
                                  • X Xenoshell

                                    @SGaist
                                    Nope doesnt work. Its the same thing. Without sudo it doesnt do anything and with sudo it just locks up and i have to login again. I cant find a reason why the raspberry pi just locks up. For me thats the strangest thing to happen. I had my code once on Raspbian but now i am on Ubuntu Mate since i always got a segmentation fault on Raspbian.

                                    JonBJ Offline
                                    JonBJ Offline
                                    JonB
                                    wrote on last edited by
                                    #36

                                    @Xenoshell
                                    Hmm, have a look at new post which has arrived: https://forum.qt.io/topic/85920/error-running-camera-example/2

                                    This confirms your suspicion that libpulse has something to do with cameras and perhaps QCamera. I don't know what to tell you to do about it, but maybe check what you have installed in that light (libpulse & libpulse-dev)?

                                    X 1 Reply Last reply
                                    1
                                    • JonBJ JonB

                                      @Xenoshell
                                      Hmm, have a look at new post which has arrived: https://forum.qt.io/topic/85920/error-running-camera-example/2

                                      This confirms your suspicion that libpulse has something to do with cameras and perhaps QCamera. I don't know what to tell you to do about it, but maybe check what you have installed in that light (libpulse & libpulse-dev)?

                                      X Offline
                                      X Offline
                                      Xenoshell
                                      wrote on last edited by Xenoshell
                                      #37

                                      @JNBarchan
                                      I knew it! Sadly installing libpulse-dev did nothing for my problem. Everything stays the same.
                                      Does that mean that maybe my installation of Qt5 or PyQt5 is faulted? I know that i didnt managed to install PyQt5/Qt5 with the QtMultimedia because somehow the command didnt work and i then just used the repository to get qtmultimedia

                                      EDIT: i just checked the groups again and if something strikes my eye. I saw that i am not in the pulse and pulse-access group. I dont think its gonna do anything, though.

                                      JonBJ 1 Reply Last reply
                                      0
                                      • X Xenoshell

                                        @JNBarchan
                                        I knew it! Sadly installing libpulse-dev did nothing for my problem. Everything stays the same.
                                        Does that mean that maybe my installation of Qt5 or PyQt5 is faulted? I know that i didnt managed to install PyQt5/Qt5 with the QtMultimedia because somehow the command didnt work and i then just used the repository to get qtmultimedia

                                        EDIT: i just checked the groups again and if something strikes my eye. I saw that i am not in the pulse and pulse-access group. I dont think its gonna do anything, though.

                                        JonBJ Offline
                                        JonBJ Offline
                                        JonB
                                        wrote on last edited by
                                        #38

                                        @Xenoshell
                                        Well it's possible (it would only be your Qt installation, not your PyQt). I don't know how you went about it, as I only fetch from Ubuntu repositories (apt-get) for all things Qt, never from Qt themselves. If you're saying you did a "max-and-match" --- some things one way, some another --- you might not have a consistent/correctly located set of libraries. You might want to clarify what you mean by:

                                        i didnt managed to install PyQt5/Qt5 with the QtMultimedia because somehow the command didnt work and i then just used the repository to get qtmultimedia

                                        as anything which "didn't work" in this area could be a clue....

                                        However, this would be implicated if your code always "hung". But the fact that it does work as root but not as you makes one assume that your installation does work.

                                        Deffo think you should post here your problems/try again with anything which "did not work right" during install, especially if it's to do with multimedia....

                                        X 1 Reply Last reply
                                        0
                                        • JonBJ JonB

                                          @Xenoshell
                                          Well it's possible (it would only be your Qt installation, not your PyQt). I don't know how you went about it, as I only fetch from Ubuntu repositories (apt-get) for all things Qt, never from Qt themselves. If you're saying you did a "max-and-match" --- some things one way, some another --- you might not have a consistent/correctly located set of libraries. You might want to clarify what you mean by:

                                          i didnt managed to install PyQt5/Qt5 with the QtMultimedia because somehow the command didnt work and i then just used the repository to get qtmultimedia

                                          as anything which "didn't work" in this area could be a clue....

                                          However, this would be implicated if your code always "hung". But the fact that it does work as root but not as you makes one assume that your installation does work.

                                          Deffo think you should post here your problems/try again with anything which "did not work right" during install, especially if it's to do with multimedia....

                                          X Offline
                                          X Offline
                                          Xenoshell
                                          wrote on last edited by Xenoshell
                                          #39

                                          @JNBarchan
                                          Well i wanted to install Qt5 from source but in the default installation is not QtMultimedia. So i wanted to use the command to install also QtMultimedia but somehow the command didnt get recognized so i just didnt install QtMulti from source but installed it with a repository. The help command didnt do much for using the correct command, because im quite sure i can read.

                                          JonBJ 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