[question] v4l read() operation

Andy Walls awalls at md.metrocast.net
Sun Feb 26 00:17:51 UTC 2012


"Ezequiel García" <elezegarcia at gmail.com> wrote:

>Hi,
>
>If I register a video device with this fops:
>
>static const struct v4l2_file_operations v4l2_fops = {
>        .owner      = THIS_MODULE,
>        .open        = xxx_open,
>        .unlocked_ioctl = xxx_unlocked_ioctl,
>        .poll           = xxx_poll,
>        .mmap      = xxx_mmap,
>};
>
>then if I "cat" the device
>
>$ cat /dev/video0
>
>Who is supporting read() ?
>
>I thought it could be v4l2_read(),
>however this function seems to return EINVAL:
>
>static ssize_t v4l2_read(struct file *filp, char __user *buf,
>                size_t sz, loff_t *off)
>{
>        struct video_device *vdev = video_devdata(filp);
>        int ret = -ENODEV;
>
>        if (!vdev->fops->read)
>                return -EINVAL;
>        if (vdev->lock && mutex_lock_interruptible(vdev->lock))
>                return -ERESTARTSYS;
>        if (video_is_registered(vdev))
>                ret = vdev->fops->read(filp, buf, sz, off);
>        if (vdev->lock)
>                mutex_unlock(vdev->lock);
>        return ret;
>}
>
>Thanks,
>Ezequiel.
>--
>To unsubscribe from this list: send the line "unsubscribe linux-media"
>in
>the body of a message to majordomo at vger.kernel.org
>More majordomo info at  http://vger.kernel.org/majordomo-info.html

Please read the v4l2 specification.  Drivers can support the read/write methods or streaming IO methods (using mmap) or both.

Often it is the case that drivers for MPEG encoders or other chips that produce container formats use read/write.  Drivers for chips the provide raw frames often use streaming IO.

Note that the videobuf2 framework can provide read/write method emulation for a driver IIRC.

- Andy



More information about the devel mailing list