summaryrefslogtreecommitdiff
path: root/v4l2-apps/util/qv4l2/qv4l2.h
blob: 5421a867d319a9071cc88c1fd267ca7a1a15e50f (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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
/* qv4l2: a control panel controlling v4l2 devices.
 *
 * Copyright (C) 2006 Hans Verkuil <hverkuil@xs4all.nl>
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 */

#ifndef QV4L2_H
#define QV4L2_H

#include <qmainwindow.h>
#include <qtabwidget.h>
#include <qsignalmapper.h>
#include <qgrid.h>
#include <map>
#include <vector>

#include <linux/videodev2.h>

class QComboBox;
class QSpinBox;

typedef std::vector<unsigned> ClassIDVec;
typedef std::map<unsigned, ClassIDVec> ClassMap;
typedef std::map<unsigned, struct v4l2_queryctrl> CtrlMap;
typedef std::map<unsigned, QWidget *> WidgetMap;

enum {
	CTRL_UPDATE_ON_CHANGE = 0x10,
	CTRL_DEFAULTS,
	CTRL_REFRESH,
	CTRL_UPDATE
};

class ApplicationWindow: public QMainWindow
{
    Q_OBJECT

public:
    ApplicationWindow();
    ~ApplicationWindow();

    void setDevice(const QString &device);
    bool doIoctl(QString descr, unsigned cmd, void *arg);

protected:
    void closeEvent( QCloseEvent* );

private slots:
    void selectdev(int);
    void choose();
    void ctrlAction(int);

    void about();

private:
    void add_dirVideoDevice(const char *dirname);
    void addTabs();
    void finishGrid(QWidget *vbox, QGrid *grid, unsigned ctrl_class, bool odd);
    void addCtrl(QGrid *grid, const struct v4l2_queryctrl &qctrl);
    void updateCtrl(unsigned id);
    void refresh(unsigned ctrl_class);
    void setDefaults(unsigned ctrl_class);
    int getVal(unsigned id);
    long long getVal64(unsigned id);
    void setVal(unsigned id, int v);
    void setVal64(unsigned id, long long v);
    QString getCtrlFlags(unsigned flags);
    void setWhat(QWidget *w, unsigned id, long long v);
    void updateVideoInput();
    void updateVideoOutput();
    void updateAudioInput();
    void updateAudioOutput();
    void updateStandard();
    void updateFreq();
    void updateFreqChannel();

    QString filename;
    QSignalMapper *sigMapper;
    QTabWidget *tabs;
    QPopupMenu *videoDevice;
    int fd;
    CtrlMap ctrlMap;
    WidgetMap widgetMap;
    ClassMap classMap;
};

extern ApplicationWindow *g_mw;

#endif