Message ID | 1380894598-11242-1-git-send-email-ricardo.ribalda@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Hi Ricardo, On 10/04/2013 03:49 PM, Ricardo Ribalda Delgado wrote: > A video device opened and streaming in io emulator mode can only stop > streamming if its file descriptor is closed. > > There are some parameters that can only be changed if the device is not > streaming. Also, the power consumption of a device streaming could be > different than one not streaming. > > With this patch a video device opened in io emulator can be stopped on > demand. Why would you want this? If you can call STREAMOFF, why not use stream I/O all the way? That's much more efficient than read() anyway. Unless there is a very good use-case, I don't see a good reason for mixing file I/O with streaming I/O ioctls. Regards, Hans > > Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com> > --- > drivers/media/v4l2-core/videobuf2-core.c | 11 ++++++----- > 1 file changed, 6 insertions(+), 5 deletions(-) > > diff --git a/drivers/media/v4l2-core/videobuf2-core.c b/drivers/media/v4l2-core/videobuf2-core.c > index 9fc4bab..097fba8 100644 > --- a/drivers/media/v4l2-core/videobuf2-core.c > +++ b/drivers/media/v4l2-core/videobuf2-core.c > @@ -1686,6 +1686,7 @@ int vb2_streamon(struct vb2_queue *q, enum v4l2_buf_type type) > } > EXPORT_SYMBOL_GPL(vb2_streamon); > > +static int __vb2_cleanup_fileio(struct vb2_queue *q); > > /** > * vb2_streamoff - stop streaming > @@ -1704,11 +1705,6 @@ EXPORT_SYMBOL_GPL(vb2_streamon); > */ > int vb2_streamoff(struct vb2_queue *q, enum v4l2_buf_type type) > { > - if (q->fileio) { > - dprintk(1, "streamoff: file io in progress\n"); > - return -EBUSY; > - } > - > if (type != q->type) { > dprintk(1, "streamoff: invalid stream type\n"); > return -EINVAL; > @@ -1719,6 +1715,11 @@ int vb2_streamoff(struct vb2_queue *q, enum v4l2_buf_type type) > return -EINVAL; > } > > + if (q->fileio) { > + __vb2_cleanup_fileio(q); > + return 0; > + } > + > /* > * Cancel will pause streaming and remove all buffers from the driver > * and videobuf, effectively returning control over them to userspace. > -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Hello Hans I am implementing a test application for our camera, think of v4l2-compliance but for testing the hardware (average of pixels, rotation...) . I am implementing it using python (because of numpy and matplotlib). I dont really care about perferomance, I only care about the data correctness, so the fileio fits perfectly my needs. On the fileio api we dont have a way to tell the camera to stop, this was an attempt to solve this "issue". But if it is only an issue for me we can forget about it :). BTW, do you know about a complete v4l2 library for python? I am using https://pypi.python.org/pypi/v4l2 , but it is quite old. Thanks! On Fri, Oct 4, 2013 at 4:09 PM, Hans Verkuil <hverkuil@xs4all.nl> wrote: > Hi Ricardo, > > On 10/04/2013 03:49 PM, Ricardo Ribalda Delgado wrote: >> A video device opened and streaming in io emulator mode can only stop >> streamming if its file descriptor is closed. >> >> There are some parameters that can only be changed if the device is not >> streaming. Also, the power consumption of a device streaming could be >> different than one not streaming. >> >> With this patch a video device opened in io emulator can be stopped on >> demand. > > Why would you want this? If you can call STREAMOFF, why not use stream I/O > all the way? That's much more efficient than read() anyway. > > Unless there is a very good use-case, I don't see a good reason for mixing > file I/O with streaming I/O ioctls. > > Regards, > > Hans > >> >> Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com> >> --- >> drivers/media/v4l2-core/videobuf2-core.c | 11 ++++++----- >> 1 file changed, 6 insertions(+), 5 deletions(-) >> >> diff --git a/drivers/media/v4l2-core/videobuf2-core.c b/drivers/media/v4l2-core/videobuf2-core.c >> index 9fc4bab..097fba8 100644 >> --- a/drivers/media/v4l2-core/videobuf2-core.c >> +++ b/drivers/media/v4l2-core/videobuf2-core.c >> @@ -1686,6 +1686,7 @@ int vb2_streamon(struct vb2_queue *q, enum v4l2_buf_type type) >> } >> EXPORT_SYMBOL_GPL(vb2_streamon); >> >> +static int __vb2_cleanup_fileio(struct vb2_queue *q); >> >> /** >> * vb2_streamoff - stop streaming >> @@ -1704,11 +1705,6 @@ EXPORT_SYMBOL_GPL(vb2_streamon); >> */ >> int vb2_streamoff(struct vb2_queue *q, enum v4l2_buf_type type) >> { >> - if (q->fileio) { >> - dprintk(1, "streamoff: file io in progress\n"); >> - return -EBUSY; >> - } >> - >> if (type != q->type) { >> dprintk(1, "streamoff: invalid stream type\n"); >> return -EINVAL; >> @@ -1719,6 +1715,11 @@ int vb2_streamoff(struct vb2_queue *q, enum v4l2_buf_type type) >> return -EINVAL; >> } >> >> + if (q->fileio) { >> + __vb2_cleanup_fileio(q); >> + return 0; >> + } >> + >> /* >> * Cancel will pause streaming and remove all buffers from the driver >> * and videobuf, effectively returning control over them to userspace. >> >
Hello, On 2013-10-04 15:49, Ricardo Ribalda Delgado wrote: > A video device opened and streaming in io emulator mode can only stop > streamming if its file descriptor is closed. > > There are some parameters that can only be changed if the device is not > streaming. Also, the power consumption of a device streaming could be > different than one not streaming. > > With this patch a video device opened in io emulator can be stopped on > demand. > > Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com> Read/write-based io mode must not be mixed with ioctrl-based IO, so I really cannot accept this patch. Check V4L2 documentation for more details. > --- > drivers/media/v4l2-core/videobuf2-core.c | 11 ++++++----- > 1 file changed, 6 insertions(+), 5 deletions(-) > > diff --git a/drivers/media/v4l2-core/videobuf2-core.c b/drivers/media/v4l2-core/videobuf2-core.c > index 9fc4bab..097fba8 100644 > --- a/drivers/media/v4l2-core/videobuf2-core.c > +++ b/drivers/media/v4l2-core/videobuf2-core.c > @@ -1686,6 +1686,7 @@ int vb2_streamon(struct vb2_queue *q, enum v4l2_buf_type type) > } > EXPORT_SYMBOL_GPL(vb2_streamon); > > +static int __vb2_cleanup_fileio(struct vb2_queue *q); > > /** > * vb2_streamoff - stop streaming > @@ -1704,11 +1705,6 @@ EXPORT_SYMBOL_GPL(vb2_streamon); > */ > int vb2_streamoff(struct vb2_queue *q, enum v4l2_buf_type type) > { > - if (q->fileio) { > - dprintk(1, "streamoff: file io in progress\n"); > - return -EBUSY; > - } > - > if (type != q->type) { > dprintk(1, "streamoff: invalid stream type\n"); > return -EINVAL; > @@ -1719,6 +1715,11 @@ int vb2_streamoff(struct vb2_queue *q, enum v4l2_buf_type type) > return -EINVAL; > } > > + if (q->fileio) { > + __vb2_cleanup_fileio(q); > + return 0; > + } > + > /* > * Cancel will pause streaming and remove all buffers from the driver > * and videobuf, effectively returning control over them to userspace. Best regards
Hi Marek Thanks for your comments. I was just trying to find a way to stop streaming while in read/write mode without having to close the descriptor. I thought reusing streamoff was more clever than creating a new ioctl. Thanks! On Tue, Oct 8, 2013 at 9:22 AM, Marek Szyprowski <m.szyprowski@samsung.com> wrote: > Hello, > > > On 2013-10-04 15:49, Ricardo Ribalda Delgado wrote: >> >> A video device opened and streaming in io emulator mode can only stop >> streamming if its file descriptor is closed. >> >> There are some parameters that can only be changed if the device is not >> streaming. Also, the power consumption of a device streaming could be >> different than one not streaming. >> >> With this patch a video device opened in io emulator can be stopped on >> demand. >> >> Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com> > > > Read/write-based io mode must not be mixed with ioctrl-based IO, so I really > cannot accept this patch. Check V4L2 documentation for more details. > > >> --- >> drivers/media/v4l2-core/videobuf2-core.c | 11 ++++++----- >> 1 file changed, 6 insertions(+), 5 deletions(-) >> >> diff --git a/drivers/media/v4l2-core/videobuf2-core.c >> b/drivers/media/v4l2-core/videobuf2-core.c >> index 9fc4bab..097fba8 100644 >> --- a/drivers/media/v4l2-core/videobuf2-core.c >> +++ b/drivers/media/v4l2-core/videobuf2-core.c >> @@ -1686,6 +1686,7 @@ int vb2_streamon(struct vb2_queue *q, enum >> v4l2_buf_type type) >> } >> EXPORT_SYMBOL_GPL(vb2_streamon); >> +static int __vb2_cleanup_fileio(struct vb2_queue *q); >> /** >> * vb2_streamoff - stop streaming >> @@ -1704,11 +1705,6 @@ EXPORT_SYMBOL_GPL(vb2_streamon); >> */ >> int vb2_streamoff(struct vb2_queue *q, enum v4l2_buf_type type) >> { >> - if (q->fileio) { >> - dprintk(1, "streamoff: file io in progress\n"); >> - return -EBUSY; >> - } >> - >> if (type != q->type) { >> dprintk(1, "streamoff: invalid stream type\n"); >> return -EINVAL; >> @@ -1719,6 +1715,11 @@ int vb2_streamoff(struct vb2_queue *q, enum >> v4l2_buf_type type) >> return -EINVAL; >> } >> + if (q->fileio) { >> + __vb2_cleanup_fileio(q); >> + return 0; >> + } >> + >> /* >> * Cancel will pause streaming and remove all buffers from the >> driver >> * and videobuf, effectively returning control over them to >> userspace. > > > Best regards > -- > Marek Szyprowski > Samsung R&D Institute Poland >
Hi Racardo, On 2013-10-08 09:58, Ricardo Ribalda Delgado wrote: > Hi Marek > > Thanks for your comments. I was just trying to find a way to stop > streaming while in read/write mode without having to close the > descriptor. I thought reusing streamoff was more clever than creating > a new ioctl. Read()/write() mode is mainly designed for old and legacy applications. Those applications assume that the only reliable way to stop streaming is to close the fd. New tools should use libv4l and ioctl-based api. Best regards
diff --git a/drivers/media/v4l2-core/videobuf2-core.c b/drivers/media/v4l2-core/videobuf2-core.c index 9fc4bab..097fba8 100644 --- a/drivers/media/v4l2-core/videobuf2-core.c +++ b/drivers/media/v4l2-core/videobuf2-core.c @@ -1686,6 +1686,7 @@ int vb2_streamon(struct vb2_queue *q, enum v4l2_buf_type type) } EXPORT_SYMBOL_GPL(vb2_streamon); +static int __vb2_cleanup_fileio(struct vb2_queue *q); /** * vb2_streamoff - stop streaming @@ -1704,11 +1705,6 @@ EXPORT_SYMBOL_GPL(vb2_streamon); */ int vb2_streamoff(struct vb2_queue *q, enum v4l2_buf_type type) { - if (q->fileio) { - dprintk(1, "streamoff: file io in progress\n"); - return -EBUSY; - } - if (type != q->type) { dprintk(1, "streamoff: invalid stream type\n"); return -EINVAL; @@ -1719,6 +1715,11 @@ int vb2_streamoff(struct vb2_queue *q, enum v4l2_buf_type type) return -EINVAL; } + if (q->fileio) { + __vb2_cleanup_fileio(q); + return 0; + } + /* * Cancel will pause streaming and remove all buffers from the driver * and videobuf, effectively returning control over them to userspace.
A video device opened and streaming in io emulator mode can only stop streamming if its file descriptor is closed. There are some parameters that can only be changed if the device is not streaming. Also, the power consumption of a device streaming could be different than one not streaming. With this patch a video device opened in io emulator can be stopped on demand. Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com> --- drivers/media/v4l2-core/videobuf2-core.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-)