This is an automatic generated email to let you know that the following patch 
were queued at the 
http://git.linuxtv.org/v4l-utils.git tree:

Subject: qv4l2: disable grabbed controls in the GUI
Author:  Hans Verkuil <hverk...@xs4all.nl>
Date:    Sat Apr 3 15:37:02 2010 +0200

Signed-off-by: Hans Verkuil <hverk...@xs4all.nl>

 utils/qv4l2/capture-win.h |    1 +
 utils/qv4l2/ctrl-tab.cpp  |   19 ++++++++++++++-----
 utils/qv4l2/qv4l2.cpp     |    3 +++
 utils/qv4l2/qv4l2.h       |    1 +
 4 files changed, 19 insertions(+), 5 deletions(-)

---

http://git.linuxtv.org/v4l-utils.git?a=commitdiff;h=981160f79b089458084a0b1dd66b9016ac4404e4

diff --git a/utils/qv4l2/capture-win.h b/utils/qv4l2/capture-win.h
index 25a1bac..5546056 100644
--- a/utils/qv4l2/capture-win.h
+++ b/utils/qv4l2/capture-win.h
@@ -36,6 +36,7 @@ public:
 
        void setImage(const QImage &image, bool init = false);
        void stop();
+       unsigned frame() const { return m_frame; }
 
 protected:
        virtual void closeEvent(QCloseEvent *event);
diff --git a/utils/qv4l2/ctrl-tab.cpp b/utils/qv4l2/ctrl-tab.cpp
index 13926ee..ee475ce 100644
--- a/utils/qv4l2/ctrl-tab.cpp
+++ b/utils/qv4l2/ctrl-tab.cpp
@@ -38,6 +38,8 @@
 #include <sys/ioctl.h>
 #include <errno.h>
 
+#define CTRL_FLAG_DISABLED (V4L2_CTRL_FLAG_READ_ONLY | V4L2_CTRL_FLAG_INACTIVE 
| V4L2_CTRL_FLAG_GRABBED)
+
 void ApplicationWindow::addWidget(QGridLayout *grid, QWidget *w, Qt::Alignment 
align)
 {
        grid->addWidget(w, m_row, m_col, align | Qt::AlignVCenter);
@@ -282,7 +284,7 @@ void ApplicationWindow::addCtrl(QGridLayout *grid, const 
v4l2_queryctrl &qctrl)
                return;
        }
        m_sigMapper->setMapping(m_widgetMap[qctrl.id], qctrl.id);
-       if (qctrl.flags & (V4L2_CTRL_FLAG_READ_ONLY | V4L2_CTRL_FLAG_INACTIVE))
+       if (qctrl.flags & CTRL_FLAG_DISABLED)
                m_widgetMap[qctrl.id]->setDisabled(true);
 }
 
@@ -334,7 +336,7 @@ void ApplicationWindow::ctrlAction(int id)
        for (unsigned i = 0; i < count; i++) {
                unsigned id = m_classMap[ctrl_class][i];
 
-               if (m_ctrlMap[id].flags & (V4L2_CTRL_FLAG_READ_ONLY | 
V4L2_CTRL_FLAG_INACTIVE))
+               if (m_ctrlMap[id].flags & CTRL_FLAG_DISABLED)
                        continue;
                c[idx].id = id;
                c[idx].size = 0;
@@ -455,7 +457,7 @@ void ApplicationWindow::updateCtrl(unsigned id)
        if (ctrl_class == V4L2_CID_PRIVATE_BASE)
                ctrl_class = V4L2_CTRL_CLASS_USER;
 
-       if (m_ctrlMap[id].flags & (V4L2_CTRL_FLAG_READ_ONLY | 
V4L2_CTRL_FLAG_INACTIVE))
+       if (m_ctrlMap[id].flags & CTRL_FLAG_DISABLED)
                return;
 
        if (!m_haveExtendedUserCtrls && ctrl_class == V4L2_CTRL_CLASS_USER) {
@@ -562,13 +564,18 @@ void ApplicationWindow::refresh(unsigned ctrl_class)
                        else
                                setVal(id, c[i].value);
                        queryctrl(m_ctrlMap[id]);
-                       m_widgetMap[id]->setDisabled(m_ctrlMap[id].flags &
-                               (V4L2_CTRL_FLAG_READ_ONLY | 
V4L2_CTRL_FLAG_INACTIVE));
+                       m_widgetMap[id]->setDisabled(m_ctrlMap[id].flags & 
CTRL_FLAG_DISABLED);
                }
        }
        delete [] c;
 }
 
+void ApplicationWindow::refresh()
+{
+       for (ClassMap::iterator iter = m_classMap.begin(); iter != 
m_classMap.end(); ++iter)
+               refresh(iter->first);
+}
+
 void ApplicationWindow::setWhat(QWidget *w, unsigned id, const QString &v)
 {
        const v4l2_queryctrl &qctrl = m_ctrlMap[id];
@@ -711,6 +718,8 @@ void ApplicationWindow::setDefaults(unsigned ctrl_class)
 
                if (m_ctrlMap[id].flags & V4L2_CTRL_FLAG_READ_ONLY)
                        continue;
+               if (m_ctrlMap[id].flags & V4L2_CTRL_FLAG_GRABBED)
+                       continue;
                if (m_ctrlMap[id].type == V4L2_CTRL_TYPE_INTEGER64)
                        setVal64(id, 0);
                else if (m_ctrlMap[id].type == V4L2_CTRL_TYPE_STRING)
diff --git a/utils/qv4l2/qv4l2.cpp b/utils/qv4l2/qv4l2.cpp
index afa80bf..61a7ab6 100644
--- a/utils/qv4l2/qv4l2.cpp
+++ b/utils/qv4l2/qv4l2.cpp
@@ -217,6 +217,8 @@ void ApplicationWindow::capFrame()
                break;
        }
        m_capture->setImage(*m_capImage);
+       if (m_capture->frame() == 1)
+               refresh();
 }
 
 bool ApplicationWindow::startCapture(unsigned buffer_size)
@@ -367,6 +369,7 @@ void ApplicationWindow::stopCapture()
        free(m_buffers);
        m_buffers = NULL;
        m_capture->stop();
+       refresh();
 }
 
 void ApplicationWindow::startOutput(unsigned)
diff --git a/utils/qv4l2/qv4l2.h b/utils/qv4l2/qv4l2.h
index b78eceb..0a3e5ef 100644
--- a/utils/qv4l2/qv4l2.h
+++ b/utils/qv4l2/qv4l2.h
@@ -125,6 +125,7 @@ private:
        void addCtrl(QGridLayout *grid, const struct v4l2_queryctrl &qctrl);
        void updateCtrl(unsigned id);
        void refresh(unsigned ctrl_class);
+       void refresh();
        void setDefaults(unsigned ctrl_class);
        int getVal(unsigned id);
        long long getVal64(unsigned id);

_______________________________________________
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits

Reply via email to