V4L/DVB (7948): videodev: add missing vidioc_try_fmt_sliced_vbi_output and VIDIOC_ENU...
authorHans Verkuil <hverkuil@xs4all.nl>
Wed, 28 May 2008 01:31:43 +0000 (22:31 -0300)
committerMauro Carvalho Chehab <mchehab@infradead.org>
Sun, 20 Jul 2008 10:07:27 +0000 (07:07 -0300)
There was no vidioc_try_fmt_sliced_vbi_output, instead vidioc_try_fmt_vbi_output
was reused.

The VIDIOC_ENUMOUTPUT handling was missing altogether, even though the callback
existed.

Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
drivers/media/video/videodev.c
include/media/v4l2-dev.h

index 4d58b55095d7e2164bf3bef91a8395862bb71ef4..83106bba100de2e509829f3a4868cbc74fc8e80b 100644 (file)
@@ -840,8 +840,8 @@ static int __video_do_ioctl(struct inode *inode, struct file *file,
                                ret=vfd->vidioc_enum_fmt_vbi(file, fh, f);
                        break;
                case V4L2_BUF_TYPE_SLICED_VBI_OUTPUT:
-                       if (vfd->vidioc_enum_fmt_vbi_output)
-                               ret=vfd->vidioc_enum_fmt_vbi_output(file,
+                       if (vfd->vidioc_enum_fmt_sliced_vbi_output)
+                               ret = vfd->vidioc_enum_fmt_sliced_vbi_output(file,
                                                                fh, f);
                        break;
                case V4L2_BUF_TYPE_SLICED_VBI_CAPTURE:
@@ -905,8 +905,8 @@ static int __video_do_ioctl(struct inode *inode, struct file *file,
                                ret=vfd->vidioc_g_fmt_vbi(file, fh, f);
                        break;
                case V4L2_BUF_TYPE_SLICED_VBI_OUTPUT:
-                       if (vfd->vidioc_g_fmt_vbi_output)
-                               ret=vfd->vidioc_g_fmt_vbi_output(file, fh, f);
+                       if (vfd->vidioc_g_fmt_sliced_vbi_output)
+                               ret = vfd->vidioc_g_fmt_sliced_vbi_output(file, fh, f);
                        break;
                case V4L2_BUF_TYPE_SLICED_VBI_CAPTURE:
                        if (vfd->vidioc_g_fmt_vbi_capture)
@@ -957,8 +957,8 @@ static int __video_do_ioctl(struct inode *inode, struct file *file,
                                ret=vfd->vidioc_s_fmt_vbi(file, fh, f);
                        break;
                case V4L2_BUF_TYPE_SLICED_VBI_OUTPUT:
-                       if (vfd->vidioc_s_fmt_vbi_output)
-                               ret=vfd->vidioc_s_fmt_vbi_output(file, fh, f);
+                       if (vfd->vidioc_s_fmt_sliced_vbi_output)
+                               ret = vfd->vidioc_s_fmt_sliced_vbi_output(file, fh, f);
                        break;
                case V4L2_BUF_TYPE_SLICED_VBI_CAPTURE:
                        if (vfd->vidioc_s_fmt_vbi_capture)
@@ -1009,8 +1009,8 @@ static int __video_do_ioctl(struct inode *inode, struct file *file,
                                ret=vfd->vidioc_try_fmt_vbi(file, fh, f);
                        break;
                case V4L2_BUF_TYPE_SLICED_VBI_OUTPUT:
-                       if (vfd->vidioc_try_fmt_vbi_output)
-                               ret=vfd->vidioc_try_fmt_vbi_output(file,
+                       if (vfd->vidioc_try_fmt_sliced_vbi_output)
+                               ret = vfd->vidioc_try_fmt_sliced_vbi_output(file,
                                                                fh, f);
                        break;
                case V4L2_BUF_TYPE_SLICED_VBI_CAPTURE:
@@ -1297,6 +1297,25 @@ static int __video_do_ioctl(struct inode *inode, struct file *file,
        }
 
        /* ------ output switching ---------- */
+       case VIDIOC_ENUMOUTPUT:
+       {
+               struct v4l2_output *p = arg;
+               int i = p->index;
+
+               if (!vfd->vidioc_enum_output)
+                       break;
+               memset(p, 0, sizeof(*p));
+               p->index = i;
+
+               ret = vfd->vidioc_enum_output(file, fh, p);
+               if (!ret)
+                       dbgarg(cmd, "index=%d, name=%s, type=%d, "
+                               "audioset=%d, "
+                               "modulator=%d, std=%08Lx\n",
+                               p->index, p->name, p->type, p->audioset,
+                               p->modulator, (unsigned long long)p->std);
+               break;
+       }
        case VIDIOC_G_OUTPUT:
        {
                unsigned int *i = arg;
index 8a40f481d8993c1a7cc12bf221232b68f27a9707..f14181fae6ce8a8f6c3a81382f4f82ce1107c67f 100644 (file)
@@ -132,6 +132,8 @@ struct video_device
                                            struct v4l2_fmtdesc *f);
        int (*vidioc_enum_fmt_vbi_output)  (struct file *file, void *fh,
                                            struct v4l2_fmtdesc *f);
+       int (*vidioc_enum_fmt_sliced_vbi_output)  (struct file *file, void *fh,
+                                           struct v4l2_fmtdesc *f);
        int (*vidioc_enum_fmt_type_private)(struct file *file, void *fh,
                                            struct v4l2_fmtdesc *f);
 
@@ -144,6 +146,8 @@ struct video_device
                                        struct v4l2_format *f);
        int (*vidioc_g_fmt_vbi_output) (struct file *file, void *fh,
                                        struct v4l2_format *f);
+       int (*vidioc_g_fmt_sliced_vbi_output) (struct file *file, void *fh,
+                                       struct v4l2_format *f);
        int (*vidioc_g_fmt_vbi_capture)(struct file *file, void *fh,
                                        struct v4l2_format *f);
        int (*vidioc_g_fmt_video_output)(struct file *file, void *fh,
@@ -163,6 +167,8 @@ struct video_device
                                        struct v4l2_format *f);
        int (*vidioc_s_fmt_vbi_output) (struct file *file, void *fh,
                                        struct v4l2_format *f);
+       int (*vidioc_s_fmt_sliced_vbi_output) (struct file *file, void *fh,
+                                       struct v4l2_format *f);
        int (*vidioc_s_fmt_vbi_capture)(struct file *file, void *fh,
                                        struct v4l2_format *f);
        int (*vidioc_s_fmt_video_output)(struct file *file, void *fh,
@@ -181,6 +187,8 @@ struct video_device
                                          struct v4l2_format *f);
        int (*vidioc_try_fmt_vbi_output) (struct file *file, void *fh,
                                          struct v4l2_format *f);
+       int (*vidioc_try_fmt_sliced_vbi_output) (struct file *file, void *fh,
+                                         struct v4l2_format *f);
        int (*vidioc_try_fmt_vbi_capture)(struct file *file, void *fh,
                                          struct v4l2_format *f);
        int (*vidioc_try_fmt_video_output)(struct file *file, void *fh,
@@ -225,7 +233,7 @@ struct video_device
        int (*vidioc_s_input)   (struct file *file, void *fh, unsigned int i);
 
                /* Output handling */
-       int (*vidioc_enumoutput) (struct file *file, void *fh,
+       int (*vidioc_enum_output) (struct file *file, void *fh,
                                  struct v4l2_output *a);
        int (*vidioc_g_output)   (struct file *file, void *fh, unsigned int *i);
        int (*vidioc_s_output)   (struct file *file, void *fh, unsigned int i);