Re: [RFCv11 PATCH 22/29] videobuf2-v4l2: add vb2_request_queue helper

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Apr 9, 2018 at 11:20 PM Hans Verkuil <hverkuil@xxxxxxxxx> wrote:

> From: Hans Verkuil <hans.verkuil@xxxxxxxxx>

> Generic helper function that checks if there are buffers in
> the request and if so, prepares and queues all objects in the
> request.

> Signed-off-by: Hans Verkuil <hans.verkuil@xxxxxxxxx>
> ---
>   drivers/media/common/videobuf2/videobuf2-v4l2.c | 39
+++++++++++++++++++++++++
>   include/media/videobuf2-v4l2.h                  |  3 ++
>   2 files changed, 42 insertions(+)

> diff --git a/drivers/media/common/videobuf2/videobuf2-v4l2.c
b/drivers/media/common/videobuf2/videobuf2-v4l2.c
> index 73c1fd4da58a..3d0c74bb4220 100644
> --- a/drivers/media/common/videobuf2/videobuf2-v4l2.c
> +++ b/drivers/media/common/videobuf2/videobuf2-v4l2.c
> @@ -1061,6 +1061,45 @@ void vb2_ops_wait_finish(struct vb2_queue *vq)
>   }
>   EXPORT_SYMBOL_GPL(vb2_ops_wait_finish);

> +int vb2_request_queue(struct media_request *req)
> +{
> +       struct media_request_object *obj;
> +       struct media_request_object *failed_obj = NULL;
> +       int ret = 0;
> +
> +       if (!vb2_core_request_has_buffers(req))
> +               return -ENOENT;
> +
> +       list_for_each_entry(obj, &req->objects, list) {
> +               if (!obj->ops->prepare)
> +                       continue;
> +
> +               ret = obj->ops->prepare(obj);
> +
> +               if (ret) {
> +                       failed_obj = obj;
> +                       break;
> +               }
> +       }
> +
> +       if (ret) {
> +               list_for_each_entry(obj, &req->objects, list) {
> +                       if (obj == failed_obj)
> +                               break;

nit: If we use list_for_each_entry_continue_reverse() here, we wouldn't
need failed_obj.

Best regards,
Tomasz



[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux