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
