Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. QML and Qt Quick
  4. get camera frame on Android (PC is ok)
Forum Updated to NodeBB v4.3 + New Features

get camera frame on Android (PC is ok)

Scheduled Pinned Locked Moved Solved QML and Qt Quick
11 Posts 3 Posters 1.7k Views 1 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.
  • B Offline
    B Offline
    bigbao
    wrote on last edited by
    #1

    header file content:
    class FilterTestRunnable : public QVideoFilterRunnable
    {
    private:
    FilterTest *m_filter;

    //void deleteColorComponentFromYUV(QVideoFrame *input);
    

    public:
    FilterTestRunnable(FilterTest *filter) : m_filter(filter) { }
    QVideoFrame run(QVideoFrame input, const QVideoSurfaceFormat &surfaceFormat, RunFlags flags);
    };
    cpp file content:
    QVideoFilterRunnable
    FilterTest::createFilterRunnable()
    {
    return new FilterTestRunnable(this);
    }

    QVideoFrame FilterTestRunnable::run(QVideoFrame *input,
    const QVideoSurfaceFormat &surfaceFormat,
    QVideoFilterRunnable::RunFlags flags)
    {
    if (!input->isValid())
    return *input;

    QAbstractVideoBuffer::MapMode mode = input->mapMode();
    
    input->map(QAbstractVideoBuffer::ReadWrite);
        if(input->isReadable()){
            qWarning() << "Is readable!";
        }
        input->unmap();
    
    return *input;
    

    }

    problem:
    Always print "QVideoFrame::unmap() was called more times then QVideoFrame::map()"
    “input->isReadable()” is always false

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

      Hi and welcome to devnet,

      IIRC, on Android the the QVideoFrame contains a texture. You should check the QAbstractVideoBuffer::HandleType of it.

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

      B 2 Replies Last reply
      0
      • SGaistS SGaist

        Hi and welcome to devnet,

        IIRC, on Android the the QVideoFrame contains a texture. You should check the QAbstractVideoBuffer::HandleType of it.

        B Offline
        B Offline
        bigbao
        wrote on last edited by
        #3

        @SGaist
        Thank you very much, I still don't quite understand what I should do, can you give me a simple example?

        1 Reply Last reply
        0
        • SGaistS SGaist

          Hi and welcome to devnet,

          IIRC, on Android the the QVideoFrame contains a texture. You should check the QAbstractVideoBuffer::HandleType of it.

          B Offline
          B Offline
          bigbao
          wrote on last edited by
          #4

          @SGaist
          did you mean like this:(This is someone else's code, I don't know what it does, and there is the usage of the handleType you mentioned.)
          QListQVideoFrame::PixelFormat supportedPixelFormats(QAbstractVideoBuffer::HandleType handleType) const
          {
          Q_UNUSED(handleType);
          return QListQVideoFrame::PixelFormat()
          << QVideoFrame::Format_ARGB32
          << QVideoFrame::Format_ARGB32_Premultiplied
          << QVideoFrame::Format_RGB32
          << QVideoFrame::Format_RGB24
          << QVideoFrame::Format_RGB565
          << QVideoFrame::Format_RGB555
          << QVideoFrame::Format_ARGB8565_Premultiplied
          << QVideoFrame::Format_BGRA32
          << QVideoFrame::Format_BGRA32_Premultiplied
          << QVideoFrame::Format_BGR32
          << QVideoFrame::Format_BGR24
          << QVideoFrame::Format_BGR565
          << QVideoFrame::Format_BGR555
          << QVideoFrame::Format_BGRA5658_Premultiplied
          << QVideoFrame::Format_AYUV444
          << QVideoFrame::Format_AYUV444_Premultiplied
          << QVideoFrame::Format_YUV444
          << QVideoFrame::Format_YUV420P
          << QVideoFrame::Format_YV12
          << QVideoFrame::Format_UYVY
          << QVideoFrame::Format_YUYV
          << QVideoFrame::Format_NV12
          << QVideoFrame::Format_NV21
          << QVideoFrame::Format_IMC1
          << QVideoFrame::Format_IMC2
          << QVideoFrame::Format_IMC3
          << QVideoFrame::Format_IMC4
          << QVideoFrame::Format_Y8
          << QVideoFrame::Format_Y16
          << QVideoFrame::Format_Jpeg
          << QVideoFrame::Format_CameraRaw
          << QVideoFrame::Format_AdobeDng;
          }

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

            No, rather qDebug() << frame.handleType().

            In any case, you should take a look at this project which implements a QVideoFilterRunnable which handles video frame also on Android.

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

            B 3 Replies Last reply
            0
            • SGaistS SGaist

              No, rather qDebug() << frame.handleType().

              In any case, you should take a look at this project which implements a QVideoFilterRunnable which handles video frame also on Android.

              B Offline
              B Offline
              bigbao
              wrote on last edited by
              #6

              @SGaist
              thank you very much.
              it's ok. thanks.

              1 Reply Last reply
              0
              • SGaistS SGaist

                No, rather qDebug() << frame.handleType().

                In any case, you should take a look at this project which implements a QVideoFilterRunnable which handles video frame also on Android.

                B Offline
                B Offline
                bigbao
                wrote on last edited by
                #7

                @SGaist
                sorry I don't know how to change " UNSOLVED" to " SOLVED"

                VRoninV 1 Reply Last reply
                0
                • B bigbao

                  @SGaist
                  sorry I don't know how to change " UNSOLVED" to " SOLVED"

                  VRoninV Offline
                  VRoninV Offline
                  VRonin
                  wrote on last edited by
                  #8

                  @bigbao said in get camera frame on Android (PC is ok):

                  how to change " UNSOLVED" to " SOLVED"

                  https://forum.qt.io/topic/71830/hitchhiker-s-visual-guide-to-the-qt-forum

                  "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
                  ~Napoleon Bonaparte

                  On a crusade to banish setIndexWidget() from the holy land of Qt

                  1 Reply Last reply
                  0
                  • SGaistS SGaist

                    No, rather qDebug() << frame.handleType().

                    In any case, you should take a look at this project which implements a QVideoFilterRunnable which handles video frame also on Android.

                    B Offline
                    B Offline
                    bigbao
                    wrote on last edited by bigbao
                    #9

                    @SGaist
                    Hi, in thant code,I want to know supportedViewfinderResolutions of camera,so the main.qml is:

                    ApplicationWindow {
                    visible: true
                    width: 640
                    height: 480
                    title: qsTr("My Video Filter")

                    Camera {
                        id: camera
                        //viewfinder.resolution: "320x240"
                        //viewfinder.resolution: "600x400"
                    }
                    
                    VideoOutput {
                        id: videoOutput
                    
                        anchors.fill: parent
                    
                        autoOrientation: true
                        source: camera
                        filters: [ videoFilter ]
                    }
                    
                    MyVideoFilter {
                        id: videoFilter
                    
                        orientation: videoOutput.orientation
                    }
                    
                    MouseArea{
                        id: mousearea
                        anchors.fill: parent
                        onClicked: show_frame_rate()
                    }
                    
                    function show_frame_rate()
                    {
                        console.log(camera.viewfinder.resolution)
                        console.log(camera.viewfinder.supportedViewfinderResolutions)
                        //there is problem:
                        /* print
                        qml: QSize(-1, -1)
                        qml: undefined
                         */
                    }
                    

                    }

                    I don't konw why , I can't get :
                    print info:
                    qml: QSize(-1, -1)
                    qml: undefined
                    is it possible to get those info in my filter:
                    class MyVideoFilterRunnable : public QVideoFilterRunnable
                    {
                    public:
                    MyVideoFilterRunnable(MyVideoFilter* parent = nullptr);

                    QVideoFrame run(QVideoFrame *input, const QVideoSurfaceFormat &surfaceFormat, RunFlags flags) Q_DECL_OVERRIDE;
                    QVideoFrame run(QVideoFrame *input, const QVideoSurfaceFormat &surfaceFormat, RunFlags flags, QImage image);
                    

                    protected:
                    MyVideoFilter* m_Filter;
                    int m_Orientation;
                    int m_Flip;
                    };

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

                      The backend might have some limitation there.

                      Out of curiosity, what do you need these values for ?

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

                      B 1 Reply Last reply
                      0
                      • SGaistS SGaist

                        The backend might have some limitation there.

                        Out of curiosity, what do you need these values for ?

                        B Offline
                        B Offline
                        bigbao
                        wrote on last edited by
                        #11

                        @SGaist
                        I know these resolutions and choose one of them I need.
                        thanks

                        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