MythTV master
v4l2util.h
Go to the documentation of this file.
1#ifndef V4L2_UTIL_H
2#define V4L2_UTIL_H
3
4#include "libmythbase/mythconfig.h"
5
6#if CONFIG_V4L2
7#include <linux/videodev2.h>
8#endif
9
10#include "tv.h"
11#include "mythtvexp.h"
12
13#include <QStringList>
14#include "driveroption.h"
15
16struct DriverOption;
17
19{
20 public:
21 V4L2util(void) = default;
22 explicit V4L2util(const QString& dev_name);
23 V4L2util(const QString& dev_name, const QString& vbi_dev_name);
24 ~V4L2util(void);
25
26 bool Open(const QString& dev_name, const QString& vbi_dev_name = "");
27 void Close(void);
28 int FD(void) const { return m_fd; }
29
30 bool operator!(void) const { return m_fd < 0; }
31 bool IsOpen(void) const { return m_fd >= 0; }
32
33 bool GetOptions(DriverOption::Options& options);
34 int GetOptionValue(DriverOption::category_t cat, const QString& desc);
35 bool GetFormats(QStringList& formats);
36 bool GetVideoStandard(QString& name) const;
37 int GetSignalStrength(void) const;
38 bool GetResolution(int& width, int& height) const;
39 uint32_t GetCapabilities(void) const;
40 QString GetDeviceName(void) const;
41 QString GetDriverName(void) const;
42
43 bool HasTuner(void) const;
44 bool HasAudioSupport(void) const;
45 bool HasStreaming(void) const;
46 bool HasSlicedVBI(void) const;
47 bool IsEncoder(void) const;
48 bool UserAdjustableResolution(void) const;
49
50 QString DriverName(void) const { return m_driverName; }
51 QString CardName(void) const { return m_cardName; }
52 QString ProfileName(void) const { return "V4L2:" + m_driverName; }
53
54 int GetStreamType(void) const;
55 bool SetStreamType(int value);
56 // Video controls
57 bool SetVideoAspect(int value);
58 bool SetVideoBitrateMode(int value);
59 bool SetVideoBitrate(int value);
60 bool SetVideoBitratePeak(int value);
61 bool SetResolution(uint32_t width, uint32_t height);
62 // Audio controls
63 bool SetAudioInput(int value);
64 bool SetAudioCodec(int value);
65 bool SetVolume(int volume);
66 bool SetLanguageMode(int mode);
67 bool SetAudioSamplingRate(int value);
68 bool SetAudioBitrateL2(int value);
69
70 // Actions
71 bool StartEncoding(void);
72 bool StopEncoding(void);
73 bool PauseEncoding(void);
74 bool ResumeEncoding(void);
75
76 static QString StreamTypeDesc(int value);
77
78 protected:
79 // VBI
80 static bool OpenVBI(const QString& vbi_dev_name);
81 bool SetSlicedVBI(VBIMode::vbimode_t vbimode);
82
83 int GetExtControl(int request, const QString& ctrl_desc = "") const;
84 bool SetExtControl(int request, int value, const QString& ctrl_desc,
85 const QString& value_desc);
86 bool SetEncoderState(int mode, const QString& desc);
87 void SetDefaultOptions(DriverOption::Options& options);
88
89 static void bitmask_toString(QString& result, uint32_t flags,
90 uint32_t mask, const QString& desc);
91 static QString ctrlflags_toString(uint32_t flags);
92 static QString queryctrl_toString(int type);
93
94 void log_qctrl(struct v4l2_queryctrl& queryctrl, DriverOption& drv_opt,
95 QString& msg);
96 bool log_control(struct v4l2_queryctrl& qctrl, DriverOption& drv_opt,
97 QString& msg);
98 void log_controls(bool show_menus);
99
100 private:
101 int m_fd {-1};
102 int m_vbiFd {-1};
106 QString m_cardName;
107 int m_version {0};
108 uint32_t m_capabilities {0};
109 bool m_haveQueryExtCtrl {false};
110};
111
112#endif // V4L2_UTIL_H
QString m_deviceName
Definition: v4l2util.h:104
DriverOption::Options m_options
Definition: v4l2util.h:103
int FD(void) const
Definition: v4l2util.h:28
V4L2util(void)=default
void log_controls(bool show_menus)
bool operator!(void) const
Definition: v4l2util.h:30
QString DriverName(void) const
Definition: v4l2util.h:50
bool IsOpen(void) const
Definition: v4l2util.h:31
QString m_cardName
Definition: v4l2util.h:106
QString ProfileName(void) const
Definition: v4l2util.h:52
QString m_driverName
Definition: v4l2util.h:105
QString CardName(void) const
Definition: v4l2util.h:51
vbimode_t
Definition: tv.h:11
#define MTV_PUBLIC
Definition: mythtvexp.h:15
QMap< category_t, DriverOption > Options
Definition: driveroption.h:22
const std::array< const std::string, 8 > formats
Definition: vbilut.cpp:189
vbimode
Definition: vbilut.h:22