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: use req.count for userptr capture as well.
Author:  Hans Verkuil <hverk...@xs4all.nl>
Date:    Mon Aug 2 10:50:56 2010 +0200

For some reason req.count was ignored when capturing in userptr mode.
Instead it was hardcoded to 4.

The clean up is also improved to work around the broken videobuf REQBUFS
handling.

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

 utils/qv4l2/qv4l2.cpp |   16 +++++++++-------
 1 files changed, 9 insertions(+), 7 deletions(-)

---

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

diff --git a/utils/qv4l2/qv4l2.cpp b/utils/qv4l2/qv4l2.cpp
index 835c00c..82fd691 100644
--- a/utils/qv4l2/qv4l2.cpp
+++ b/utils/qv4l2/qv4l2.cpp
@@ -239,7 +239,7 @@ bool ApplicationWindow::startCapture(unsigned buffer_size)
                        break;
                }
 
-               if (req.count < 2) {
+               if (req.count < 3) {
                        error("Too few buffers");
                        reqbufs_mmap_cap(req);
                        break;
@@ -288,25 +288,25 @@ bool ApplicationWindow::startCapture(unsigned buffer_size)
                return true;
 
        case methodUser:
-               if (!reqbufs_user_cap(req, 4)) {
+               if (!reqbufs_user_cap(req, 3)) {
                        error("Cannot capture");
                        break;
                }
 
-               if (req.count < 4) {
+               if (req.count < 3) {
                        error("Too few buffers");
                        reqbufs_user_cap(req);
                        break;
                }
 
-               m_buffers = (buffer *)calloc(4, sizeof(*m_buffers));
+               m_buffers = (buffer *)calloc(req.count, sizeof(*m_buffers));
 
                if (!m_buffers) {
                        error("Out of memory");
                        break;
                }
 
-               for (m_nbuffers = 0; m_nbuffers < 4; ++m_nbuffers) {
+               for (m_nbuffers = 0; m_nbuffers < req.count; ++m_nbuffers) {
                        m_buffers[m_nbuffers].length = buffer_size;
                        m_buffers[m_nbuffers].start = malloc(buffer_size);
 
@@ -354,16 +354,18 @@ void ApplicationWindow::stopCapture()
                        if (-1 == munmap(m_buffers[i].start, 
m_buffers[i].length))
                                perror("munmap");
                // Free all buffers.
+               reqbufs_mmap_cap(reqbufs, 1);  // videobuf workaround
                reqbufs_mmap_cap(reqbufs, 0);
                break;
 
        case methodUser:
                if (!streamoff_cap())
                        perror("VIDIOC_STREAMOFF");
-               for (i = 0; i < m_nbuffers; ++i)
-                       free(m_buffers[i].start);
                // Free all buffers.
+               reqbufs_user_cap(reqbufs, 1);  // videobuf workaround
                reqbufs_user_cap(reqbufs, 0);
+               for (i = 0; i < m_nbuffers; ++i)
+                       free(m_buffers[i].start);
                break;
        }
        free(m_buffers);

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

Reply via email to