qv4l2: make sure to reset bytesperline.
authorHans Verkuil <hans.verkuil@cisco.com>
Fri, 18 Nov 2011 13:48:07 +0000 (14:48 +0100)
committerHans Verkuil <hans.verkuil@cisco.com>
Mon, 21 Nov 2011 10:22:38 +0000 (11:22 +0100)
If bytesperline > width * bpp, then qv4l2 can't handle that situation correctly,
partially due to missing support for this in qv4l2, partially due to missing
support for this in libv4lconvert.

So before starting capturing, call s_fmt with bytesperline 0 and use whatever
the driver returns.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
utils/qv4l2/qv4l2.cpp
utils/qv4l2/v4l2-api.cpp

index bde1329..cdf6a50 100644 (file)
@@ -467,6 +467,7 @@ void ApplicationWindow::capStart(bool start)
        m_frame = m_lastFrame = m_fps = 0;
        m_capMethod = m_genTab->capMethod();
        g_fmt_cap(m_capSrcFormat);
+       s_fmt(m_capSrcFormat);
 
        m_mustConvert = m_showFrames;
        if (m_showFrames) {
index c2ec98f..074070a 100644 (file)
@@ -274,11 +274,13 @@ bool v4l2::g_fmt_out(v4l2_format &fmt)
 bool v4l2::try_fmt(v4l2_format &fmt)
 {
        fmt.fmt.pix.field = V4L2_FIELD_ANY;
+       fmt.fmt.pix.bytesperline = 0;
        return ioctl("Try Capture Format", VIDIOC_TRY_FMT, &fmt);
 }
 
 bool v4l2::s_fmt(v4l2_format &fmt)
 {
+       fmt.fmt.pix.bytesperline = 0;
        return ioctl("Set Capture Format", VIDIOC_S_FMT, &fmt);
 }