V4L/DVB: V4L2: Replace loops for finding max buffers in VIDIOC_REQBUFS callbacks
authorAndreas Bombe <aeb@debian.org>
Sun, 21 Mar 2010 19:02:45 +0000 (16:02 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Wed, 19 May 2010 15:57:13 +0000 (12:57 -0300)
Due to obvious copy and paste coding a number of video capture drivers
which implement a limit on the buffer memory decremented the user
supplied buffer count in a while loop until it reaches an acceptable
value.

This is a silly thing to do when the maximum value can be directly
computed.

Signed-off-by: Andreas Bombe <aeb@debian.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/bt8xx/bttv-driver.c
drivers/media/video/cx23885/cx23885-video.c
drivers/media/video/cx88/cx88-video.c
drivers/media/video/mx1_camera.c
drivers/media/video/omap24xxcam.c
drivers/media/video/pxa_camera.c
drivers/media/video/s2255drv.c
drivers/media/video/sh_mobile_ceu_camera.c
drivers/media/video/vivi.c
drivers/media/video/zr364xx.c
drivers/staging/cx25821/cx25821-video.c

index f4860f03dfc369d6478d7b132b1d456653b32d99..350e7af7588467a26afd18f9aadd90f2a18a66c2 100644 (file)
@@ -1806,8 +1806,8 @@ buffer_setup(struct videobuf_queue *q, unsigned int *count, unsigned int *size)
        *size = fh->fmt->depth*fh->width*fh->height >> 3;
        if (0 == *count)
                *count = gbuffers;
-       while (*size * *count > gbuffers * gbufsize)
-               (*count)--;
+       if (*size * *count > gbuffers * gbufsize)
+               *count = (gbuffers * gbufsize) / *size;
        return 0;
 }
 
index 2d3ac8b83dc31aa34f19009d5345090361a066d7..543b854f6a620498e37e1d9dbf3b081cfddf309b 100644 (file)
@@ -514,8 +514,8 @@ static int buffer_setup(struct videobuf_queue *q, unsigned int *count,
        *size = fh->fmt->depth*fh->width*fh->height >> 3;
        if (0 == *count)
                *count = 32;
-       while (*size * *count > vid_limit * 1024 * 1024)
-               (*count)--;
+       if (*size * *count > vid_limit * 1024 * 1024)
+               *count = (vid_limit * 1024 * 1024) / *size;
        return 0;
 }
 
index 8e414f7aa76e5b5c695230eec008198060dcfe3a..0a3849c710f877fe0a0f8e778c5c2d50f1c7578b 100644 (file)
@@ -561,8 +561,8 @@ buffer_setup(struct videobuf_queue *q, unsigned int *count, unsigned int *size)
        *size = fh->fmt->depth*fh->width*fh->height >> 3;
        if (0 == *count)
                *count = 32;
-       while (*size * *count > vid_limit * 1024 * 1024)
-               (*count)--;
+       if (*size * *count > vid_limit * 1024 * 1024)
+               *count = (vid_limit * 1024 * 1024) / *size;
        return 0;
 }
 
index 34a66019190ef0feef198cddc7c3a471d1db208f..5c17f9ec3d7c641583f95235f96f28df356f163f 100644 (file)
@@ -139,8 +139,8 @@ static int mx1_videobuf_setup(struct videobuf_queue *vq, unsigned int *count,
        if (!*count)
                *count = 32;
 
-       while (*size * *count > MAX_VIDEO_MEM * 1024 * 1024)
-               (*count)--;
+       if (*size * *count > MAX_VIDEO_MEM * 1024 * 1024)
+               *count = (MAX_VIDEO_MEM * 1024 * 1024) / *size;
 
        dev_dbg(icd->dev.parent, "count=%d, size=%d\n", *count, *size);
 
index ce76d952e1613682b1948762d6be26caffee21b4..f85b2ed8a2d888d661c4df567fc2a4c4638bd5ee 100644 (file)
@@ -452,8 +452,8 @@ static int omap24xxcam_vbq_setup(struct videobuf_queue *vbq, unsigned int *cnt,
        *size = fh->pix.sizeimage;
 
        /* accessing fh->cam->capture_mem is ok, it's constant */
-       while (*size * *cnt > fh->cam->capture_mem)
-               (*cnt)--;
+       if (*size * *cnt > fh->cam->capture_mem)
+               *cnt = fh->cam->capture_mem / *size;
 
        return 0;
 }
index 04bf5c11308d4318fc105d8245a847d6a9031cb9..7fe70e7186565deb9155f592d30eae7284603771 100644 (file)
@@ -253,8 +253,8 @@ static int pxa_videobuf_setup(struct videobuf_queue *vq, unsigned int *count,
 
        if (0 == *count)
                *count = 32;
-       while (*size * *count > vid_limit * 1024 * 1024)
-               (*count)--;
+       if (*size * *count > vid_limit * 1024 * 1024)
+               *count = (vid_limit * 1024 * 1024) / *size;
 
        return 0;
 }
index 0092ff52bb2772d203188c7c2a8aa5559187bdf4..5ecd41b3bf3e1314d44bc3b6150481de785eea02 100644 (file)
@@ -702,8 +702,8 @@ static int buffer_setup(struct videobuf_queue *vq, unsigned int *count,
        if (0 == *count)
                *count = S2255_DEF_BUFS;
 
-       while (*size * (*count) > vid_limit * 1024 * 1024)
-               (*count)--;
+       if (*size * *count > vid_limit * 1024 * 1024)
+               *count = (vid_limit * 1024 * 1024) / *size;
 
        return 0;
 }
index 7a229ebe69237f86aecad14a0a0c44c42b7dae7d..9a46f0a0c1bb4b19d1c0052fcf96b54e9d1208cd 100644 (file)
@@ -213,8 +213,8 @@ static int sh_mobile_ceu_videobuf_setup(struct videobuf_queue *vq,
                *count = 2;
 
        if (pcdev->video_limit) {
-               while (PAGE_ALIGN(*size) * *count > pcdev->video_limit)
-                       (*count)--;
+               if (PAGE_ALIGN(*size) * *count > pcdev->video_limit)
+                       *count = pcdev->video_limit / PAGE_ALIGN(*size);
        }
 
        dev_dbg(icd->dev.parent, "count=%d, size=%d\n", *count, *size);
index cdbe70385c12aff749d18f955674b0e4274be2a0..5a736b8a5a33f50aa72ad151ed193f02b0a4519a 100644 (file)
@@ -749,8 +749,8 @@ buffer_setup(struct videobuf_queue *vq, unsigned int *count, unsigned int *size)
        if (0 == *count)
                *count = 32;
 
-       while (*size * *count > vid_limit * 1024 * 1024)
-               (*count)--;
+       if (*size * *count > vid_limit * 1024 * 1024)
+               *count = (vid_limit * 1024 * 1024) / *size;
 
        dprintk(dev, 1, "%s, count=%d, size=%d\n", __func__,
                *count, *size);
index 3d4bac2529021e08de42675c8431647a14e85f45..a82b5bd18d26c65994f9231b5ceba003c7e88daa 100644 (file)
@@ -376,8 +376,8 @@ static int buffer_setup(struct videobuf_queue *vq, unsigned int *count,
        if (*count == 0)
                *count = ZR364XX_DEF_BUFS;
 
-       while (*size * (*count) > ZR364XX_DEF_BUFS * 1024 * 1024)
-               (*count)--;
+       if (*size * *count > ZR364XX_DEF_BUFS * 1024 * 1024)
+               *count = (ZR364XX_DEF_BUFS * 1024 * 1024) / *size;
 
        return 0;
 }
index 91e0db2e37f9d25c71a8c8f8f69e0fec81ec67c4..a3bea2739cefb159224a474386c7be724c1c65bf 100644 (file)
@@ -516,8 +516,8 @@ int cx25821_buffer_setup(struct videobuf_queue *q, unsigned int *count,
        if (0 == *count)
                *count = 32;
 
-       while (*size * *count > vid_limit * 1024 * 1024)
-               (*count)--;
+       if (*size * *count > vid_limit * 1024 * 1024)
+               *count = (vid_limit * 1024 * 1024) / *size;
 
        return 0;
 }