V4l2 input (#825)

This commit is contained in:
Paulchen Panther
2020-06-17 20:55:57 +02:00
committed by GitHub
parent 423a59fa34
commit 756247aa1e
18 changed files with 252 additions and 77 deletions

View File

@@ -9,6 +9,7 @@
#include <QSocketNotifier>
#include <QRectF>
#include <QMap>
#include <QMultiMap>
// util includes
#include <utils/PixelFormat.h>
@@ -43,15 +44,17 @@ class V4L2Grabber : public Grabber
public:
struct DeviceProperties
{
QString name = QString();
QStringList resolutions = QStringList();
QStringList framerates = QStringList();
QString name = QString();
QMultiMap<QString, int> inputs = QMultiMap<QString, int>();
QStringList resolutions = QStringList();
QStringList framerates = QStringList();
};
V4L2Grabber(const QString & device,
const unsigned width,
const unsigned height,
const unsigned fps,
const unsigned input,
VideoStandard videoStandard,
PixelFormat pixelFormat,
int pixelDecimation
@@ -103,13 +106,18 @@ public:
///
/// @brief overwrite Grabber.h implementation
///
bool setFramerate(int fps) override;
bool setInput(int input) override;
///
/// @brief overwrite Grabber.h implementation
///
bool setWidthHeight(int width, int height) override;
///
/// @brief overwrite Grabber.h implementation
///
bool setFramerate(int fps) override;
///
/// @brief overwrite Grabber.h implementation
///
@@ -120,6 +128,11 @@ public:
///
QString getV4L2deviceName(QString devicePath) override;
///
/// @brief overwrite Grabber.h implementation
///
QMultiMap<QString, int> getV4L2deviceInputs(QString devicePath) override;
///
/// @brief overwrite Grabber.h implementation
///
@@ -159,7 +172,7 @@ private:
void init_userp(unsigned int buffer_size);
void init_device(VideoStandard videoStandard, int input);
void init_device(VideoStandard videoStandard);
void uninit_device();
@@ -230,7 +243,6 @@ private:
QString _deviceName;
std::map<QString, QString> _v4lDevices;
QMap<QString, V4L2Grabber::DeviceProperties> _deviceProperties;
int _input;
VideoStandard _videoStandard;
io_method _ioMethod;
int _fileDescriptor;

View File

@@ -12,6 +12,7 @@ public:
const unsigned grabWidth,
const unsigned grabHeight,
const unsigned fps,
const unsigned input,
VideoStandard videoStandard,
PixelFormat pixelFormat,
int pixelDecimation );

View File

@@ -11,6 +11,8 @@
#include <utils/Logger.h>
#include <utils/Components.h>
#include <QMultiMap>
///
/// @brief The Grabber class is responsible to apply image resizes (with or without ImageResampler)
/// Overwrite the videoMode with setVideoMode()
@@ -34,6 +36,12 @@ public:
///
virtual void setCropping(unsigned cropLeft, unsigned cropRight, unsigned cropTop, unsigned cropBottom);
///
/// @brief Apply new video input (used from v4l)
/// @param input device input
///
virtual bool setInput(int input);
///
/// @brief Apply new width/height values, on errors (collide with cropping) reject the values
/// @return True on success else false
@@ -116,6 +124,13 @@ public:
///
virtual QString getV4L2deviceName(QString devicePath) { return QString(); }
///
/// @brief Get a name/index pair of supported device inputs
/// @param devicePath The device path
/// @return multi pair of name/index on success else empty pair
///
virtual QMultiMap<QString, int> getV4L2deviceInputs(QString devicePath) { return QMultiMap<QString, int>(); }
///
/// @brief Get a list of supported device resolutions
/// @param devicePath The device path
@@ -144,9 +159,13 @@ protected:
/// Height of the captured snapshot [pixels]
int _height;
/// frame per second
int _fps;
// number of pixels to crop after capturing
/// device input
int _input;
/// number of pixels to crop after capturing
int _cropLeft, _cropRight, _cropTop, _cropBottom;
bool _enabled;

View File

@@ -5,6 +5,7 @@
#include <QJsonArray>
#include <QString>
#include <QStringList>
#include <QMultiMap>
#include <utils/Logger.h>
#include <utils/Components.h>
@@ -63,6 +64,13 @@ public:
///
virtual QString getV4L2deviceName(QString devicePath);
///
/// @brief Get a name/index pair of supported device inputs
/// @param devicePath The device path
/// @return multi pair of name/index on success else empty pair
///
virtual QMultiMap<QString, int> getV4L2deviceInputs(QString devicePath);
///
/// @brief Get a list of supported device resolutions
/// @param devicePath The device path