From f26688071cd6fa3e09625f4cfe323386cd590ed5 Mon Sep 17 00:00:00 2001 From: Hans Verkuil Date: Fri, 15 Feb 2013 13:44:02 +0100 Subject: [PATCH] qv4l2: don't show "Query Standard" button if QUERYSTD isn't supported. Signed-off-by: Hans Verkuil --- utils/qv4l2/general-tab.cpp | 18 ++++++++++++------ utils/qv4l2/v4l2-api.cpp | 11 +++++++++++ utils/qv4l2/v4l2-api.h | 1 + 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/utils/qv4l2/general-tab.cpp b/utils/qv4l2/general-tab.cpp index 892bd35..5bd4f93 100644 --- a/utils/qv4l2/general-tab.cpp +++ b/utils/qv4l2/general-tab.cpp @@ -138,15 +138,19 @@ GeneralTab::GeneralTab(const QString &device, v4l2 &fd, int n, QWidget *parent) } if (needsStd) { + v4l2_std_id tmp; + addLabel("TV Standard"); m_tvStandard = new QComboBox(parent); addWidget(m_tvStandard); connect(m_tvStandard, SIGNAL(activated(int)), SLOT(standardChanged(int))); refreshStandards(); - addLabel(""); - m_qryStandard = new QPushButton("Query Standard", parent); - addWidget(m_qryStandard); - connect(m_qryStandard, SIGNAL(clicked()), SLOT(qryStdClicked())); + if (ioctl_exists(VIDIOC_QUERYSTD, &tmp)) { + addLabel(""); + m_qryStandard = new QPushButton("Query Standard", parent); + addWidget(m_qryStandard); + connect(m_qryStandard, SIGNAL(clicked()), SLOT(qryStdClicked())); + } } if (needsPreset) { @@ -633,7 +637,8 @@ void GeneralTab::updateVideoInput() refreshStandards(); updateStandard(); m_tvStandard->setEnabled(in.capabilities & V4L2_IN_CAP_STD); - m_qryStandard->setEnabled(in.capabilities & V4L2_IN_CAP_STD); + if (m_qryStandard) + m_qryStandard->setEnabled(in.capabilities & V4L2_IN_CAP_STD); } if (m_videoPreset) { refreshPresets(); @@ -660,7 +665,8 @@ void GeneralTab::updateVideoOutput() m_videoOutput->setCurrentIndex(output); if (m_tvStandard) { m_tvStandard->setEnabled(out.capabilities & V4L2_OUT_CAP_STD); - m_qryStandard->setEnabled(out.capabilities & V4L2_OUT_CAP_STD); + if (m_qryStandard) + m_qryStandard->setEnabled(out.capabilities & V4L2_OUT_CAP_STD); } if (m_videoPreset) { m_videoPreset->setEnabled(out.capabilities & V4L2_OUT_CAP_PRESETS); diff --git a/utils/qv4l2/v4l2-api.cpp b/utils/qv4l2/v4l2-api.cpp index ec0d0cb..2b3741b 100644 --- a/utils/qv4l2/v4l2-api.cpp +++ b/utils/qv4l2/v4l2-api.cpp @@ -80,6 +80,17 @@ bool v4l2::ioctl(const QString &descr, unsigned cmd, void *arg) return err >= 0; } +bool v4l2::ioctl_exists(unsigned cmd, void *arg) +{ + int err; + + if (useWrapper()) + err = v4l2_ioctl(m_fd, cmd, arg); + else + err = ::ioctl(m_fd, cmd, arg); + return !err || errno != ENOTTY; +} + int v4l2::read(unsigned char *p, int size) { if (useWrapper()) diff --git a/utils/qv4l2/v4l2-api.h b/utils/qv4l2/v4l2-api.h index 353cd51..600c2bc 100644 --- a/utils/qv4l2/v4l2-api.h +++ b/utils/qv4l2/v4l2-api.h @@ -40,6 +40,7 @@ public: int read(unsigned char *p, int size); int ioctl(unsigned cmd, void *arg); bool ioctl(const QString &descr, unsigned cmd, void *arg); + bool ioctl_exists(unsigned cmd, void *arg); void *mmap(size_t length, int64_t offset); int munmap(void *_start, size_t length); -- 2.7.4