Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Qt for Python
  4. How to use QThread to display videos
Forum Updated to NodeBB v4.3 + New Features

How to use QThread to display videos

Scheduled Pinned Locked Moved Unsolved Qt for Python
20 Posts 7 Posters 2.0k Views 2 Watching
  • 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.
  • JonBJ JonB

    @muxing
    If you do computations which take longer to perform than the rate at which you need to display the result you will have trouble keeping up and no delay or frame skipping, won't you?

    M Offline
    M Offline
    muxing
    wrote on last edited by
    #11

    @JonB
    There is not much direct relationship between calculation and video display.

    Because video updates are still in the main interface, what we have observed now is that even without complex calculations, there will still be delays over time. After running the program for more than two hours, the delay has reached about 8 seconds.

    According to online reports, using OpenCV to read network camera videos generally results in delays. However, I think the time spent on other running parts of the program will also affect the update speed of the video screen in the main interface, and as time accumulates, the delay becomes more and more obvious.

    Now I have written a main interface that only displays videos without any other functions. I will test and see how much video delay can accumulate over time to determine the impact of my other functions on video display.

    1 Reply Last reply
    0
    • CristianMaureiraC Offline
      CristianMaureiraC Offline
      CristianMaureira
      wrote on last edited by
      #12

      (Side note: a lot of thread-related issues were improved in PySide6, so if possible try to use that instead of PySide2)

      M 1 Reply Last reply
      0
      • M muxing

        @SGaist Thanks for reminding me
        Heavy processing involves real-time PIV analysis of images, which requires some time for acute calculations.If you wait for PIV analysis in the main thread for a few seconds, the main interface will appear unresponsive.Performing PIV analysis multiple times will reveal that the video display becomes stuttering and has high latency.

        The video signal was captured using a mobile phone camera and 1920X1080 in size.

        Due to the Python‘s GIL, even if I put complex calculation parts into auxiliary threads, the video displayed on the main interface may still be delayed and stuttered? If I use C++language for development, can auxiliary threads solve this problem?

        S Offline
        S Offline
        SimonSchroeder
        wrote on last edited by
        #13

        @muxing said in How to use QThread to display videos:

        Due to the Python‘s GIL, even if I put complex calculation parts into auxiliary threads, the video displayed on the main interface may still be delayed and stuttered? If I use C++language for development, can auxiliary threads solve this problem?

        Python's GIL means that only a single thread is executed at a time (there's currently an effort to remove the GIL, but you have to compile Python yourself to get it). You don't get real multithreading. This means that C++ would solve your problem. Almost any other language will solve your problem (I am not aware of any other language having something comparable to the GIL). In the future you might be able to use Mojo which aims to be fully compatible with Python syntax (eventually).

        JonBJ M 2 Replies Last reply
        0
        • S SimonSchroeder

          @muxing said in How to use QThread to display videos:

          Due to the Python‘s GIL, even if I put complex calculation parts into auxiliary threads, the video displayed on the main interface may still be delayed and stuttered? If I use C++language for development, can auxiliary threads solve this problem?

          Python's GIL means that only a single thread is executed at a time (there's currently an effort to remove the GIL, but you have to compile Python yourself to get it). You don't get real multithreading. This means that C++ would solve your problem. Almost any other language will solve your problem (I am not aware of any other language having something comparable to the GIL). In the future you might be able to use Mojo which aims to be fully compatible with Python syntax (eventually).

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

          @SimonSchroeder said in How to use QThread to display videos:

          Python's GIL means that only a single thread is executed at a time

          When I looked this up a long time ago, my limited understanding was: Python script can have multiple threads executing like other (e.g. C++) programs. But when a thread comes to execute a Python instruction (e.g. as opposed to running just Qt code) then it blocks (becomes single-threaded) against any other thread executing a Python instruction? It is the Python instruction interpreter which is effectively single-threaded, not what those threads are doing (if executing some non-Python instruction code).

          M 1 Reply Last reply
          0
          • CristianMaureiraC CristianMaureira

            (Side note: a lot of thread-related issues were improved in PySide6, so if possible try to use that instead of PySide2)

            M Offline
            M Offline
            muxing
            wrote on last edited by
            #15

            @CristianMaureira
            I initially installed PySide6, but when using QtDesigner, it froze and I had no choice but to install PySide2 as the second best option.

            1 Reply Last reply
            0
            • S SimonSchroeder

              @muxing said in How to use QThread to display videos:

              Due to the Python‘s GIL, even if I put complex calculation parts into auxiliary threads, the video displayed on the main interface may still be delayed and stuttered? If I use C++language for development, can auxiliary threads solve this problem?

              Python's GIL means that only a single thread is executed at a time (there's currently an effort to remove the GIL, but you have to compile Python yourself to get it). You don't get real multithreading. This means that C++ would solve your problem. Almost any other language will solve your problem (I am not aware of any other language having something comparable to the GIL). In the future you might be able to use Mojo which aims to be fully compatible with Python syntax (eventually).

              M Offline
              M Offline
              muxing
              wrote on last edited by
              #16

              @SimonSchroeder
              So Python is currently not very suitable for developing overly complex programs.

              Thank you for recommending Mojo language to me. This is my first time hearing about this new language and I look forward to it getting better and better.

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

                Python is suitable, however it needs some care depending on what you do.

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

                M 1 Reply Last reply
                0
                • JonBJ JonB

                  @SimonSchroeder said in How to use QThread to display videos:

                  Python's GIL means that only a single thread is executed at a time

                  When I looked this up a long time ago, my limited understanding was: Python script can have multiple threads executing like other (e.g. C++) programs. But when a thread comes to execute a Python instruction (e.g. as opposed to running just Qt code) then it blocks (becomes single-threaded) against any other thread executing a Python instruction? It is the Python instruction interpreter which is effectively single-threaded, not what those threads are doing (if executing some non-Python instruction code).

                  M Offline
                  M Offline
                  muxing
                  wrote on last edited by
                  #18

                  @JonB
                  Thank you for sharing your valuable experience, it is very helpful for beginners to understand.

                  1 Reply Last reply
                  0
                  • SGaistS SGaist

                    Python is suitable, however it needs some care depending on what you do.

                    M Offline
                    M Offline
                    muxing
                    wrote on last edited by
                    #19

                    @SGaist
                    So what is Python suitable for?

                    SGaistS 1 Reply Last reply
                    0
                    • M muxing

                      @SGaist
                      So what is Python suitable for?

                      SGaistS Offline
                      SGaistS Offline
                      SGaist
                      Lifetime Qt Champion
                      wrote on last edited by
                      #20

                      @muxing It's useful for a large range of applications whether on the command line or using a GUI.

                      It's used for automation, scientific computation, application extension, etc.

                      As I wrote above, you have to be careful when you code for it (as for any other language, all have limits).

                      As for the multi-threading part, check Python 3.13. The GIL is being removed.

                      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

                      • Login

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