qv4l2: don't show "Query Standard" button if QUERYSTD isn't supported.
authorHans Verkuil <hans.verkuil@cisco.com>
Fri, 15 Feb 2013 12:44:02 +0000 (13:44 +0100)
committerHans Verkuil <hans.verkuil@cisco.com>
Fri, 15 Feb 2013 12:44:02 +0000 (13:44 +0100)
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
utils/qv4l2/general-tab.cpp
utils/qv4l2/v4l2-api.cpp
utils/qv4l2/v4l2-api.h

index 892bd35..5bd4f93 100644 (file)
@@ -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);
index ec0d0cb..2b3741b 100644 (file)
@@ -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())
index 353cd51..600c2bc 100644 (file)
@@ -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);