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: Do a set_interval after s_fmt
Author:  Hans de Goede <[email protected]>
Date:    Sun Jan 8 11:22:02 2012 +0100

s_fmt resets a device to its default interval, so if a specific
interval has been selected we should so a set_interval after a s_fmt to
make sure we actually get the specified interval.

Also don't enable the drop down if enum_interval returns a non discrete
interval, since we're not populating the drop down then.

Signed-off-by: Hans de Goede <[email protected]>
(cherry picked from commit 475a357bd36cda6862c42adad9dc0b2fbb16b4ec)

Signed-off-by: Gregor Jasny <[email protected]>

 utils/qv4l2/general-tab.cpp |   21 +++++++++++++++++----
 utils/qv4l2/general-tab.h   |    3 +++
 utils/qv4l2/qv4l2.cpp       |    3 +++
 3 files changed, 23 insertions(+), 4 deletions(-)

---

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

diff --git a/utils/qv4l2/general-tab.cpp b/utils/qv4l2/general-tab.cpp
index 4576863..21ed2d9 100644
--- a/utils/qv4l2/general-tab.cpp
+++ b/utils/qv4l2/general-tab.cpp
@@ -396,6 +396,7 @@ void GeneralTab::frameIntervalChanged(int idx)
        if (enum_frameintervals(frmival, m_pixelformat, m_width, m_height, idx)
            && frmival.type == V4L2_FRMIVAL_TYPE_DISCRETE) {
                set_interval(frmival.discrete);
+               m_interval = frmival.discrete;
        }
 }
 
@@ -676,16 +677,20 @@ void GeneralTab::updateFrameInterval()
        m_frameInterval->clear();
 
        ok = enum_frameintervals(frmival, m_pixelformat, m_width, m_height);
-       m_frameInterval->setEnabled(ok);
-       curr_ok = get_interval(curr);
-       if (ok && frmival.type == V4L2_FRMIVAL_TYPE_DISCRETE) {
+       m_has_interval = ok && frmival.type == V4L2_FRMIVAL_TYPE_DISCRETE;
+       m_frameInterval->setEnabled(m_has_interval);
+       if (m_has_interval) {
+               m_interval = frmival.discrete;
+               curr_ok = v4l2::get_interval(curr);
                do {
                        m_frameInterval->addItem(QString("%1 fps")
                                .arg((double)frmival.discrete.denominator / 
frmival.discrete.numerator));
                        if (curr_ok &&
                            frmival.discrete.numerator == curr.numerator &&
-                           frmival.discrete.denominator == curr.denominator)
+                           frmival.discrete.denominator == curr.denominator) {
                                m_frameInterval->setCurrentIndex(frmival.index);
+                               m_interval = frmival.discrete;
+                        }
                } while (enum_frameintervals(frmival));
        }
 }
@@ -706,3 +711,11 @@ void GeneralTab::updateVidOutFormat()
                return;
        m_vidCapFormats->setCurrentIndex(desc.index);
 }
+
+bool GeneralTab::get_interval(struct v4l2_fract &interval)
+{
+       if (m_has_interval)
+               interval = m_interval;
+
+       return m_has_interval;
+}
diff --git a/utils/qv4l2/general-tab.h b/utils/qv4l2/general-tab.h
index 61c2542..469ab8d 100644
--- a/utils/qv4l2/general-tab.h
+++ b/utils/qv4l2/general-tab.h
@@ -40,6 +40,7 @@ public:
        virtual ~GeneralTab() {}
 
        CapMethod capMethod();
+       bool get_interval(struct v4l2_fract &interval);
        int width() const { return m_width; }
        int height() const { return m_height; }
 
@@ -99,6 +100,8 @@ private:
        struct v4l2_capability m_querycap;
        __u32 m_pixelformat;
        __u32 m_width, m_height;
+       struct v4l2_fract m_interval;
+       bool m_has_interval;
 
        // General tab
        QComboBox *m_videoInput;
diff --git a/utils/qv4l2/qv4l2.cpp b/utils/qv4l2/qv4l2.cpp
index c24cd7d..c390de2 100644
--- a/utils/qv4l2/qv4l2.cpp
+++ b/utils/qv4l2/qv4l2.cpp
@@ -452,6 +452,7 @@ void ApplicationWindow::capStart(bool start)
                { 0, QImage::Format_Invalid }
        };
        QImage::Format dstFmt = QImage::Format_RGB888;
+       struct v4l2_fract interval;
 
        if (!start) {
                stopCapture();
@@ -466,6 +467,8 @@ void ApplicationWindow::capStart(bool start)
        m_capMethod = m_genTab->capMethod();
        g_fmt_cap(m_capSrcFormat);
        s_fmt(m_capSrcFormat);
+       if (m_genTab->get_interval(interval))
+               set_interval(interval);
 
        m_mustConvert = m_showFrames;
        if (m_showFrames) {

_______________________________________________
linuxtv-commits mailing list
[email protected]
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits

Reply via email to