summaryrefslogtreecommitdiffstats
path: root/tests/manual/gstreamer-custom-camera/gstreamer-custom-camera.cpp
blob: dbd729d154e6de99fa7a2e1143ea1ce7ad92e501 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only

#include <QtMultimedia/QAudioOutput>
#include <QtMultimedia/private/qgstreamer_platformspecificinterface_p.h>
#include <QtMultimediaWidgets/QtMultimediaWidgets>
#include <QtWidgets/QApplication>
#include <QtCore/QCommandLineParser>

using namespace std::chrono_literals;
using namespace Qt::Literals;

int main(int argc, char **argv)
{
    qputenv("QT_MEDIA_BACKEND", "gstreamer");

    QApplication app(argc, argv);

    QCommandLineParser parser;
    parser.setApplicationDescription("GStreamer Custom Camera");
    parser.addHelpOption();
    parser.addVersionOption();
    parser.addPositionalArgument(
            "pipeline", "Pipeline string, e.g. `videotestsrc pattern=smpte-rp-219 is-live=true`");

    parser.process(app);

    QByteArray pipelineString;

    if (parser.positionalArguments().isEmpty()) {
        // pipelineString = "videotestsrc pattern=smpte-rp-219 is-live=true";
        pipelineString = "videotestsrc is-live=true ! gamma gamma=2.0";
    } else {
        pipelineString = parser.positionalArguments()[0].toLatin1();
    }

    QVideoWidget wid;

    QMediaCaptureSession session;
    session.setVideoSink(wid.videoSink());

    QCamera *cam = QGStreamerPlatformSpecificInterface::instance()->makeCustomGStreamerCamera(
            pipelineString, &session);
    session.setCamera(cam);
    cam->start();

    wid.show();

    return QApplication::exec();
}