0

I`m digging example qt6 6.2.2 camera.pro and found next line code:

m_captureSession.setVideoOutput(ui->viewfinder);

this is the way of outing frames to ui.

I know what QVideoSinc is used for grab every frame and process it.

I have replaced this line with m_captureSession.setVideoSink(&videoSink);

where videoSinc defined as my class :

class MyVideoSinc : public QVideoSink
{
    Q_OBJECT
public:
    bool videoframeReady=false;
    MyVideoSinc()
    {
        connect(this, &QVideoSink::videoFrameChanged, this, &MyVideoSinc::hvideoFrameChanged);
    }
public Q_SLOTS:

    void hvideoFrameChanged(const QVideoFrame &frame)
    {
        videoframeReady=true;
    }
};

hvideoFrameChanged raised for every frame in Windows build, but only once in Android application.

What is wrong here. How to grab and process frames from QCamera in QT6 ? I don`t want show frames with ui->viewfinder. I need processing frames myself.

svar
  • 11
  • 2

1 Answers1

0

I made a small repository to show how to process frames with QVideoSink in Qt6. Have a look at it.

I use such approach in my own applications, I tested it on Android 9, all works like a charm.

But be careful, on Linux from launch to launch FPS can differ very much, sometimes FPS are normal, but very often FPS are very-very low - 1 FPS only. This is a bug Qt6, 6.2.3 affected still. Have a look at the bug.

Igor Mironchik
  • 582
  • 4
  • 17
  • Hi @Igor Mironchik. It is impossible to work with camera now:) your app maybe works but it very very slow. I have posted 2 bug reports related to this https://bugreports.qt.io/browse/QTBUG-99969 and https://bugreports.qt.io/browse/QTBUG-99650 – svar Feb 03 '22 at 17:45
  • Hi @svar, I checked your QTBUG-99969, you are wrong, connection to `QVideoSink::videoFrameChanged` doesn't slow down the application. Read my answer carefully, I wrote about possible low FPS, I have opened a bug for it. Everything is fine with `QVideoSink`, but from launch to launch possible low FPS, and only. – Igor Mironchik Feb 03 '22 at 18:11
  • Hi @Igor Mironchik, может быть на линуксе другое поведение, там в 1 fps скатывается время от времени. Но на андройде я словил явную проблему. Причем я ничего не делаю внутри этого события - оно пустое. Я только подписываюсь и параллельно проигрываемое видео начинает делать слайдшоу вместо 25 кадров в сек. В примере я тупо объединил их же 2 примера - их проигрыватель и видеокамеру и тот же результат. Они там явно накосячили. Проверял на двух телефонах xiaomi. – svar Feb 03 '22 at 19:37
  • Проверил с двумя совершенно не связанными проектами. Просто подписка на это событие обработки фрейма и всё тормозит. На windows жутко медленное копирование если использовать QImage. Они сами признали это и пытаются уже подключить хардварное копирование через видеокарту. Мне в проекте от них только видео взять - ну как так то - так тормозить. А его дальше ведь обрабатывать еще надо. – svar Feb 03 '22 at 19:39
  • Okay, I see. I agree that working with camera is very raw in Qt6. – Igor Mironchik Feb 03 '22 at 21:25
  • Hi @Igor Mironchik, checked your example camera.zip (from bugreport) - Android release mode 1920x1080 30 fps NV21 - actually works on 6 FPS. Voted your bugreport. – svar Feb 05 '22 at 09:28
  • Hi @svar, Thanks for voting. This is very critical issue for me. Together we can do things. Hope that Qt will fix this as soon as possible. – Igor Mironchik Feb 06 '22 at 05:39