1 /* Webcamoid, webcam capture application.
2  * Copyright (C) 2016  Gonzalo Exequiel Pedone
3  *
4  * Webcamoid is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation, either version 3 of the License, or
7  * (at your option) any later version.
8  *
9  * Webcamoid is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
16  *
17  * Web-Site: http://webcamoid.github.io/
18  */
19 
20 #ifndef CAPTURE_H
21 #define CAPTURE_H
22 
23 #include <QObject>
24 
25 class Capture;
26 class AkCaps;
27 class AkPacket;
28 
29 using CapturePtr = QSharedPointer<Capture>;
30 
31 class Capture: public QObject
32 {
33     Q_OBJECT
34     Q_PROPERTY(QStringList webcams
35                READ webcams
36                NOTIFY webcamsChanged)
37     Q_PROPERTY(QString device
38                READ device
39                WRITE setDevice
40                RESET resetDevice
41                NOTIFY deviceChanged)
42     Q_PROPERTY(QString ioMethod
43                READ ioMethod
44                WRITE setIoMethod
45                RESET resetIoMethod
46                NOTIFY ioMethodChanged)
47     Q_PROPERTY(int nBuffers
48                READ nBuffers
49                WRITE setNBuffers
50                RESET resetNBuffers
51                NOTIFY nBuffersChanged)
52 
53     public:
54         Capture(QObject *parent=nullptr);
55         virtual ~Capture() = default;
56 
57         Q_INVOKABLE virtual QStringList webcams() const;
58         Q_INVOKABLE virtual QString device() const;
59         Q_INVOKABLE virtual QList<int> streams();
60         Q_INVOKABLE virtual QList<int> listTracks(const QString &mimeType);
61         Q_INVOKABLE virtual QString ioMethod() const;
62         Q_INVOKABLE virtual int nBuffers() const;
63         Q_INVOKABLE virtual QString description(const QString &webcam) const;
64         Q_INVOKABLE virtual QVariantList caps(const QString &webcam) const;
65         Q_INVOKABLE virtual QString capsDescription(const AkCaps &caps) const;
66         Q_INVOKABLE virtual QVariantList imageControls() const;
67         Q_INVOKABLE virtual bool setImageControls(const QVariantMap &imageControls);
68         Q_INVOKABLE virtual bool resetImageControls();
69         Q_INVOKABLE virtual QVariantList cameraControls() const;
70         Q_INVOKABLE virtual bool setCameraControls(const QVariantMap &cameraControls);
71         Q_INVOKABLE virtual bool resetCameraControls();
72         Q_INVOKABLE virtual AkPacket readFrame();
73 
74     signals:
75         void webcamsChanged(const QStringList &webcams) const;
76         void deviceChanged(const QString &device);
77         void streamsChanged(const QList<int> &streams);
78         void ioMethodChanged(const QString &ioMethod);
79         void nBuffersChanged(int nBuffers);
80         void error(const QString &message);
81         void imageControlsChanged(const QVariantMap &imageControls) const;
82         void cameraControlsChanged(const QVariantMap &cameraControls) const;
83 
84     public slots:
85         virtual bool init();
86         virtual void uninit();
87         virtual void setDevice(const QString &device);
88         virtual void setStreams(const QList<int> &streams);
89         virtual void setIoMethod(const QString &ioMethod);
90         virtual void setNBuffers(int nBuffers);
91         virtual void resetDevice();
92         virtual void resetStreams();
93         virtual void resetIoMethod();
94         virtual void resetNBuffers();
95         virtual void reset();
96 };
97 
98 #endif // CAPTURE_H
99