The patch number 9578 was added via Mauro Carvalho Chehab <[EMAIL PROTECTED]>
to http://linuxtv.org/hg/v4l-dvb master development tree.

Kernel patches in this development tree may be modified to be backward
compatible with older kernels. Compatibility modifications will be
removed before inclusion into the mainstream Kernel

If anyone has any objections, please let us know by sending a message to:
        [EMAIL PROTECTED]

------

From: Mauro Carvalho Chehab  <[EMAIL PROTECTED]>
v4l core: add support for enumerating frame sizes and intervals


video_ioctl2 lacks implementation of those two ioctls:
        - VIDIOC_ENUM_FRAMESIZES and VIDIOC_ENUM_FRAMEINTERVALS

Adds implementation for those.

Priority: normal

Signed-off-by: Mauro Carvalho Chehab <[EMAIL PROTECTED]>


---

 linux/drivers/media/video/v4l2-ioctl.c |   67 +++++++++++++++++++++++++
 linux/include/media/v4l2-ioctl.h       |    6 ++
 2 files changed, 73 insertions(+)

diff -r 598777dd0e80 -r c604baf93b60 linux/drivers/media/video/v4l2-ioctl.c
--- a/linux/drivers/media/video/v4l2-ioctl.c    Tue Nov 11 09:50:02 2008 -0200
+++ b/linux/drivers/media/video/v4l2-ioctl.c    Tue Nov 11 22:13:47 2008 -0200
@@ -1748,6 +1748,73 @@ static int __video_do_ioctl(struct file 
                ret = ops->vidioc_s_hw_freq_seek(file, fh, p);
                break;
        }
+       case VIDIOC_ENUM_FRAMESIZES:
+       {
+               struct v4l2_frmsizeenum *p = arg;
+
+               if (!ops->vidioc_enum_framesizes)
+                       break;
+
+               memset(p, 0, sizeof(*p));
+
+               ret = ops->vidioc_enum_framesizes(file, fh, p);
+               dbgarg(cmd,
+                       "index=%d, pixelformat=%d, type=%d ",
+                       p->index, p->pixel_format, p->type);
+               switch (p->type) {
+               case V4L2_FRMSIZE_TYPE_DISCRETE:
+                       dbgarg2("width = %d, height=%d\n",
+                               p->discrete.width, p->discrete.height);
+                       break;
+               case V4L2_FRMSIZE_TYPE_STEPWISE:
+                       dbgarg2("min %dx%d, max %dx%d, step %dx%d\n",
+                               p->stepwise.min_width,  p->stepwise.min_height,
+                               p->stepwise.step_width, p->stepwise.step_height,
+                               p->stepwise.max_width,  p->stepwise.max_height);
+                       break;
+               case V4L2_FRMSIZE_TYPE_CONTINUOUS:
+                       dbgarg2("continuous\n");
+                       break;
+               default:
+                       dbgarg2("- Unknown type!\n");
+               }
+
+               break;
+       }
+       case VIDIOC_ENUM_FRAMEINTERVALS:
+       {
+               struct v4l2_frmivalenum *p = arg;
+
+               if (!ops->vidioc_enum_frameintervals)
+                       break;
+
+               memset(p, 0, sizeof(*p));
+
+               ret = ops->vidioc_enum_frameintervals(file, fh, p);
+               dbgarg(cmd,
+                       "index=%d, pixelformat=%d, width=%d, height=%d, type=%d 
",
+                       p->index, p->pixel_format,
+                       p->width, p->height, p->type);
+               switch (p->type) {
+               case V4L2_FRMIVAL_TYPE_DISCRETE:
+                       dbgarg2("fps=%d/%d\n",
+                               p->discrete.numerator,
+                               p->discrete.denominator);
+                       break;
+               case V4L2_FRMIVAL_TYPE_STEPWISE:
+                       dbgarg2("min=%d, max=%d, step=%d\n",
+                               p->stepwise.min, p->stepwise.max,
+                               p->stepwise.step);
+                       break;
+               case V4L2_FRMIVAL_TYPE_CONTINUOUS:
+                       dbgarg2("continuous\n");
+                       break;
+               default:
+                       dbgarg2("- Unknown type!\n");
+               }
+               break;
+       }
+
        default:
        {
                if (!ops->vidioc_default)
diff -r 598777dd0e80 -r c604baf93b60 linux/include/media/v4l2-ioctl.h
--- a/linux/include/media/v4l2-ioctl.h  Tue Nov 11 09:50:02 2008 -0200
+++ b/linux/include/media/v4l2-ioctl.h  Tue Nov 11 22:13:47 2008 -0200
@@ -232,6 +232,12 @@ struct v4l2_ioctl_ops {
        int (*vidioc_g_chip_ident)     (struct file *file, void *fh,
                                        struct v4l2_chip_ident *chip);
 
+       int (*vidioc_enum_framesizes)   (struct file *file, void *fh,
+                                        struct v4l2_frmsizeenum *fsize);
+
+       int (*vidioc_enum_frameintervals) (struct file *file, void *fh,
+                                          struct v4l2_frmivalenum *fival);
+
        /* For other private ioctls */
        int (*vidioc_default)          (struct file *file, void *fh,
                                        int cmd, void *arg);


---

Patch is available at: 
http://linuxtv.org/hg/v4l-dvb/rev/c604baf93b60fee00709a7eec494bb1300282268

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

Reply via email to