Re: [question] v4l read() operation

2012-02-27 Thread Ezequiel García
Hi Dave,

2012/2/25 Dave Hylands dhyla...@gmail.com:

 I'm not all that familiar with v4l, but based on what you've posted,
 you need to populate the read routine in your v4l2_fops structure to
 support read.


My bad! You are totally right: I forgot about my webcam.
When I did:

$ cat /dev/video0

I was actually getting data from my webcam (which supports read),
and not from the easycap device, which is /dev/video1.

So, everything makes sense now:

$ cat /dev/video1

...
open(/dev/video1, O_RDONLY|O_LARGEFILE) = 3
...
read(3, 0x8835000, 32768)   = -1 EINVAL (Invalid argument)

This is clearly shown by the piece of code mentioned before.

Thanks and sorry for the noise,
Ezequiel.
--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [question] v4l read() operation

2012-02-25 Thread Dave Hylands
Hi Ezequiel

2012/2/25 Ezequiel García elezegar...@gmail.com:
 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;
 }

I'm not all that familiar with v4l, but based on what you've posted,
you need to populate the read routine in your v4l2_fops structure to
support read.

-- 
Dave Hylands
Shuswap, BC, Canada
http://www.davehylands.com
--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [question] v4l read() operation

2012-02-25 Thread Andy Walls
Ezequiel García elezegar...@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 majord...@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
--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html