All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
To: Hans Verkuil <hverkuil@xs4all.nl>
Cc: linux-media@vger.kernel.org, Hans Verkuil <hans.verkuil@cisco.com>
Subject: Re: [PATCHv18 17/35] videobuf2-v4l2: move __fill_v4l2_buffer() function
Date: Tue, 14 Aug 2018 16:36:19 -0300	[thread overview]
Message-ID: <20180814163619.4b273322@coco.lan> (raw)
In-Reply-To: <20180814142047.93856-18-hverkuil@xs4all.nl>

Em Tue, 14 Aug 2018 16:20:29 +0200
Hans Verkuil <hverkuil@xs4all.nl> escreveu:

> From: Hans Verkuil <hans.verkuil@cisco.com>
> 
> Move the __fill_v4l2_buffer() to before the vb2_queue_or_prepare_buf()
> function to prepare for the next two patches.
> 
> No other changes.
> 
> Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Reviewed-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>

> ---
>  .../media/common/videobuf2/videobuf2-v4l2.c   | 264 +++++++++---------
>  1 file changed, 132 insertions(+), 132 deletions(-)
> 
> diff --git a/drivers/media/common/videobuf2/videobuf2-v4l2.c b/drivers/media/common/videobuf2/videobuf2-v4l2.c
> index 886a2d8d5c6c..408fd7ce9c09 100644
> --- a/drivers/media/common/videobuf2/videobuf2-v4l2.c
> +++ b/drivers/media/common/videobuf2/videobuf2-v4l2.c
> @@ -154,138 +154,6 @@ static void vb2_warn_zero_bytesused(struct vb2_buffer *vb)
>  		pr_warn("use the actual size instead.\n");
>  }
>  
> -static int vb2_queue_or_prepare_buf(struct vb2_queue *q, struct v4l2_buffer *b,
> -				    const char *opname)
> -{
> -	if (b->type != q->type) {
> -		dprintk(1, "%s: invalid buffer type\n", opname);
> -		return -EINVAL;
> -	}
> -
> -	if (b->index >= q->num_buffers) {
> -		dprintk(1, "%s: buffer index out of range\n", opname);
> -		return -EINVAL;
> -	}
> -
> -	if (q->bufs[b->index] == NULL) {
> -		/* Should never happen */
> -		dprintk(1, "%s: buffer is NULL\n", opname);
> -		return -EINVAL;
> -	}
> -
> -	if (b->memory != q->memory) {
> -		dprintk(1, "%s: invalid memory type\n", opname);
> -		return -EINVAL;
> -	}
> -
> -	return __verify_planes_array(q->bufs[b->index], b);
> -}
> -
> -/*
> - * __fill_v4l2_buffer() - fill in a struct v4l2_buffer with information to be
> - * returned to userspace
> - */
> -static void __fill_v4l2_buffer(struct vb2_buffer *vb, void *pb)
> -{
> -	struct v4l2_buffer *b = pb;
> -	struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
> -	struct vb2_queue *q = vb->vb2_queue;
> -	unsigned int plane;
> -
> -	/* Copy back data such as timestamp, flags, etc. */
> -	b->index = vb->index;
> -	b->type = vb->type;
> -	b->memory = vb->memory;
> -	b->bytesused = 0;
> -
> -	b->flags = vbuf->flags;
> -	b->field = vbuf->field;
> -	b->timestamp = ns_to_timeval(vb->timestamp);
> -	b->timecode = vbuf->timecode;
> -	b->sequence = vbuf->sequence;
> -	b->reserved2 = 0;
> -	b->reserved = 0;
> -
> -	if (q->is_multiplanar) {
> -		/*
> -		 * Fill in plane-related data if userspace provided an array
> -		 * for it. The caller has already verified memory and size.
> -		 */
> -		b->length = vb->num_planes;
> -		for (plane = 0; plane < vb->num_planes; ++plane) {
> -			struct v4l2_plane *pdst = &b->m.planes[plane];
> -			struct vb2_plane *psrc = &vb->planes[plane];
> -
> -			pdst->bytesused = psrc->bytesused;
> -			pdst->length = psrc->length;
> -			if (q->memory == VB2_MEMORY_MMAP)
> -				pdst->m.mem_offset = psrc->m.offset;
> -			else if (q->memory == VB2_MEMORY_USERPTR)
> -				pdst->m.userptr = psrc->m.userptr;
> -			else if (q->memory == VB2_MEMORY_DMABUF)
> -				pdst->m.fd = psrc->m.fd;
> -			pdst->data_offset = psrc->data_offset;
> -			memset(pdst->reserved, 0, sizeof(pdst->reserved));
> -		}
> -	} else {
> -		/*
> -		 * We use length and offset in v4l2_planes array even for
> -		 * single-planar buffers, but userspace does not.
> -		 */
> -		b->length = vb->planes[0].length;
> -		b->bytesused = vb->planes[0].bytesused;
> -		if (q->memory == VB2_MEMORY_MMAP)
> -			b->m.offset = vb->planes[0].m.offset;
> -		else if (q->memory == VB2_MEMORY_USERPTR)
> -			b->m.userptr = vb->planes[0].m.userptr;
> -		else if (q->memory == VB2_MEMORY_DMABUF)
> -			b->m.fd = vb->planes[0].m.fd;
> -	}
> -
> -	/*
> -	 * Clear any buffer state related flags.
> -	 */
> -	b->flags &= ~V4L2_BUFFER_MASK_FLAGS;
> -	b->flags |= q->timestamp_flags & V4L2_BUF_FLAG_TIMESTAMP_MASK;
> -	if (!q->copy_timestamp) {
> -		/*
> -		 * For non-COPY timestamps, drop timestamp source bits
> -		 * and obtain the timestamp source from the queue.
> -		 */
> -		b->flags &= ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
> -		b->flags |= q->timestamp_flags & V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
> -	}
> -
> -	switch (vb->state) {
> -	case VB2_BUF_STATE_QUEUED:
> -	case VB2_BUF_STATE_ACTIVE:
> -		b->flags |= V4L2_BUF_FLAG_QUEUED;
> -		break;
> -	case VB2_BUF_STATE_ERROR:
> -		b->flags |= V4L2_BUF_FLAG_ERROR;
> -		/* fall through */
> -	case VB2_BUF_STATE_DONE:
> -		b->flags |= V4L2_BUF_FLAG_DONE;
> -		break;
> -	case VB2_BUF_STATE_PREPARED:
> -		b->flags |= V4L2_BUF_FLAG_PREPARED;
> -		break;
> -	case VB2_BUF_STATE_PREPARING:
> -	case VB2_BUF_STATE_DEQUEUED:
> -	case VB2_BUF_STATE_REQUEUEING:
> -		/* nothing */
> -		break;
> -	}
> -
> -	if (vb2_buffer_in_use(q, vb))
> -		b->flags |= V4L2_BUF_FLAG_MAPPED;
> -
> -	if (!q->is_output &&
> -		b->flags & V4L2_BUF_FLAG_DONE &&
> -		b->flags & V4L2_BUF_FLAG_LAST)
> -		q->last_buffer_dequeued = true;
> -}
> -
>  /*
>   * __fill_vb2_buffer() - fill a vb2_buffer with information provided in a
>   * v4l2_buffer by the userspace. It also verifies that struct
> @@ -441,6 +309,138 @@ static int __fill_vb2_buffer(struct vb2_buffer *vb,
>  	return 0;
>  }
>  
> +static int vb2_queue_or_prepare_buf(struct vb2_queue *q, struct v4l2_buffer *b,
> +				    const char *opname)
> +{
> +	if (b->type != q->type) {
> +		dprintk(1, "%s: invalid buffer type\n", opname);
> +		return -EINVAL;
> +	}
> +
> +	if (b->index >= q->num_buffers) {
> +		dprintk(1, "%s: buffer index out of range\n", opname);
> +		return -EINVAL;
> +	}
> +
> +	if (q->bufs[b->index] == NULL) {
> +		/* Should never happen */
> +		dprintk(1, "%s: buffer is NULL\n", opname);
> +		return -EINVAL;
> +	}
> +
> +	if (b->memory != q->memory) {
> +		dprintk(1, "%s: invalid memory type\n", opname);
> +		return -EINVAL;
> +	}
> +
> +	return __verify_planes_array(q->bufs[b->index], b);
> +}
> +
> +/*
> + * __fill_v4l2_buffer() - fill in a struct v4l2_buffer with information to be
> + * returned to userspace
> + */
> +static void __fill_v4l2_buffer(struct vb2_buffer *vb, void *pb)
> +{
> +	struct v4l2_buffer *b = pb;
> +	struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
> +	struct vb2_queue *q = vb->vb2_queue;
> +	unsigned int plane;
> +
> +	/* Copy back data such as timestamp, flags, etc. */
> +	b->index = vb->index;
> +	b->type = vb->type;
> +	b->memory = vb->memory;
> +	b->bytesused = 0;
> +
> +	b->flags = vbuf->flags;
> +	b->field = vbuf->field;
> +	b->timestamp = ns_to_timeval(vb->timestamp);
> +	b->timecode = vbuf->timecode;
> +	b->sequence = vbuf->sequence;
> +	b->reserved2 = 0;
> +	b->reserved = 0;
> +
> +	if (q->is_multiplanar) {
> +		/*
> +		 * Fill in plane-related data if userspace provided an array
> +		 * for it. The caller has already verified memory and size.
> +		 */
> +		b->length = vb->num_planes;
> +		for (plane = 0; plane < vb->num_planes; ++plane) {
> +			struct v4l2_plane *pdst = &b->m.planes[plane];
> +			struct vb2_plane *psrc = &vb->planes[plane];
> +
> +			pdst->bytesused = psrc->bytesused;
> +			pdst->length = psrc->length;
> +			if (q->memory == VB2_MEMORY_MMAP)
> +				pdst->m.mem_offset = psrc->m.offset;
> +			else if (q->memory == VB2_MEMORY_USERPTR)
> +				pdst->m.userptr = psrc->m.userptr;
> +			else if (q->memory == VB2_MEMORY_DMABUF)
> +				pdst->m.fd = psrc->m.fd;
> +			pdst->data_offset = psrc->data_offset;
> +			memset(pdst->reserved, 0, sizeof(pdst->reserved));
> +		}
> +	} else {
> +		/*
> +		 * We use length and offset in v4l2_planes array even for
> +		 * single-planar buffers, but userspace does not.
> +		 */
> +		b->length = vb->planes[0].length;
> +		b->bytesused = vb->planes[0].bytesused;
> +		if (q->memory == VB2_MEMORY_MMAP)
> +			b->m.offset = vb->planes[0].m.offset;
> +		else if (q->memory == VB2_MEMORY_USERPTR)
> +			b->m.userptr = vb->planes[0].m.userptr;
> +		else if (q->memory == VB2_MEMORY_DMABUF)
> +			b->m.fd = vb->planes[0].m.fd;
> +	}
> +
> +	/*
> +	 * Clear any buffer state related flags.
> +	 */
> +	b->flags &= ~V4L2_BUFFER_MASK_FLAGS;
> +	b->flags |= q->timestamp_flags & V4L2_BUF_FLAG_TIMESTAMP_MASK;
> +	if (!q->copy_timestamp) {
> +		/*
> +		 * For non-COPY timestamps, drop timestamp source bits
> +		 * and obtain the timestamp source from the queue.
> +		 */
> +		b->flags &= ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
> +		b->flags |= q->timestamp_flags & V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
> +	}
> +
> +	switch (vb->state) {
> +	case VB2_BUF_STATE_QUEUED:
> +	case VB2_BUF_STATE_ACTIVE:
> +		b->flags |= V4L2_BUF_FLAG_QUEUED;
> +		break;
> +	case VB2_BUF_STATE_ERROR:
> +		b->flags |= V4L2_BUF_FLAG_ERROR;
> +		/* fall through */
> +	case VB2_BUF_STATE_DONE:
> +		b->flags |= V4L2_BUF_FLAG_DONE;
> +		break;
> +	case VB2_BUF_STATE_PREPARED:
> +		b->flags |= V4L2_BUF_FLAG_PREPARED;
> +		break;
> +	case VB2_BUF_STATE_PREPARING:
> +	case VB2_BUF_STATE_DEQUEUED:
> +	case VB2_BUF_STATE_REQUEUEING:
> +		/* nothing */
> +		break;
> +	}
> +
> +	if (vb2_buffer_in_use(q, vb))
> +		b->flags |= V4L2_BUF_FLAG_MAPPED;
> +
> +	if (!q->is_output &&
> +		b->flags & V4L2_BUF_FLAG_DONE &&
> +		b->flags & V4L2_BUF_FLAG_LAST)
> +		q->last_buffer_dequeued = true;
> +}
> +
>  static const struct vb2_buf_ops v4l2_buf_ops = {
>  	.verify_planes_array	= __verify_planes_array_core,
>  	.fill_user_buffer	= __fill_v4l2_buffer,



Thanks,
Mauro

  reply	other threads:[~2018-08-14 22:25 UTC|newest]

Thread overview: 71+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-08-14 14:20 [PATCHv18 00/35] Request API Hans Verkuil
2018-08-14 14:20 ` [PATCHv18 01/35] Documentation: v4l: document request API Hans Verkuil
2018-08-14 19:16   ` Mauro Carvalho Chehab
2018-08-15 16:14   ` Laurent Pinchart
2018-08-16  9:58     ` Hans Verkuil
2018-08-16 10:16       ` Hans Verkuil
2018-08-16 10:28       ` Mauro Carvalho Chehab
2018-11-12 19:06   ` Thomas Gleixner
2018-11-18 13:52     ` Mauro Carvalho Chehab
2018-11-23  9:51       ` Mauro Carvalho Chehab
2018-11-23 10:38         ` Thomas Gleixner
2018-11-23 12:29           ` Mauro Carvalho Chehab
2018-11-23 12:44             ` Thomas Gleixner
2018-11-27 18:54               ` Mauro Carvalho Chehab
2018-11-26  3:27             ` Tomasz Figa
2018-08-14 14:20 ` [PATCHv18 02/35] uapi/linux/media.h: add " Hans Verkuil
2018-08-14 19:17   ` Mauro Carvalho Chehab
2018-08-14 14:20 ` [PATCHv18 03/35] media-request: implement media requests Hans Verkuil
2018-08-14 19:20   ` Mauro Carvalho Chehab
2018-08-14 14:20 ` [PATCHv18 04/35] media: doc: Add media-request.h header to documentation build Hans Verkuil
2018-08-14 14:20 ` [PATCHv18 05/35] media-request: add media_request_get_by_fd Hans Verkuil
2018-08-14 14:20 ` [PATCHv18 06/35] media-request: add media_request_object_find Hans Verkuil
2018-08-14 14:20 ` [PATCHv18 07/35] v4l2-device.h: add v4l2_device_supports_requests() helper Hans Verkuil
2018-08-24 10:21   ` Sakari Ailus
2018-08-14 14:20 ` [PATCHv18 08/35] v4l2-dev: lock req_queue_mutex Hans Verkuil
2018-08-14 19:22   ` Mauro Carvalho Chehab
2018-08-14 14:20 ` [PATCHv18 09/35] videodev2.h: add request_fd field to v4l2_ext_controls Hans Verkuil
2018-08-14 14:20 ` [PATCHv18 10/35] v4l2-ctrls: v4l2_ctrl_add_handler: add from_other_dev Hans Verkuil
2018-08-14 14:20 ` [PATCHv18 11/35] v4l2-ctrls: prepare internal structs for request API Hans Verkuil
2018-08-14 14:20 ` [PATCHv18 12/35] v4l2-ctrls: alloc memory for p_req Hans Verkuil
2018-08-14 14:20 ` [PATCHv18 13/35] v4l2-ctrls: use ref in helper instead of ctrl Hans Verkuil
2018-08-14 14:20 ` [PATCHv18 14/35] v4l2-ctrls: add core request support Hans Verkuil
2018-08-14 19:27   ` Mauro Carvalho Chehab
2018-08-14 14:20 ` [PATCHv18 15/35] v4l2-ctrls: support g/s_ext_ctrls for requests Hans Verkuil
2018-08-14 19:33   ` Mauro Carvalho Chehab
2018-08-14 14:20 ` [PATCHv18 16/35] v4l2-ctrls: add v4l2_ctrl_request_hdl_find/put/ctrl_find functions Hans Verkuil
2018-08-14 19:34   ` Mauro Carvalho Chehab
2018-08-14 14:20 ` [PATCHv18 17/35] videobuf2-v4l2: move __fill_v4l2_buffer() function Hans Verkuil
2018-08-14 19:36   ` Mauro Carvalho Chehab [this message]
2018-08-14 14:20 ` [PATCHv18 18/35] videobuf2-v4l2: replace if by switch in __fill_vb2_buffer() Hans Verkuil
2018-08-15 11:51   ` Mauro Carvalho Chehab
2018-08-14 14:20 ` [PATCHv18 19/35] vb2: store userspace data in vb2_v4l2_buffer Hans Verkuil
2018-08-14 19:47   ` Mauro Carvalho Chehab
2018-08-15 11:54     ` Hans Verkuil
2018-08-15 12:28       ` Mauro Carvalho Chehab
2018-08-15 12:33         ` Hans Verkuil
2018-08-14 14:20 ` [PATCHv18 20/35] davinci_vpfe: remove bogus vb2->state check Hans Verkuil
2018-08-14 14:20 ` [PATCHv18 21/35] vb2: drop VB2_BUF_STATE_PREPARED, use bool prepared/synced instead Hans Verkuil
2018-08-14 19:50   ` Mauro Carvalho Chehab
2018-08-14 14:20 ` [PATCHv18 22/35] videodev2.h: Add request_fd field to v4l2_buffer Hans Verkuil
2018-08-25 12:58   ` Sakari Ailus
2018-08-14 14:20 ` [PATCHv18 23/35] vb2: add init_buffer buffer op Hans Verkuil
2018-08-25 12:58   ` Sakari Ailus
2018-08-14 14:20 ` [PATCHv18 24/35] videobuf2-core: embed media_request_object Hans Verkuil
2018-08-14 19:53   ` Mauro Carvalho Chehab
2018-08-25 13:01   ` Sakari Ailus
2018-08-14 14:20 ` [PATCHv18 25/35] videobuf2-core: integrate with media requests Hans Verkuil
2018-08-14 14:20 ` [PATCHv18 26/35] videobuf2-v4l2: " Hans Verkuil
2018-08-14 14:20 ` [PATCHv18 27/35] videobuf2-core: add request helper functions Hans Verkuil
2018-08-14 14:20 ` [PATCHv18 28/35] videobuf2-v4l2: add vb2_request_queue/validate helpers Hans Verkuil
2018-08-14 19:54   ` Mauro Carvalho Chehab
2018-08-14 14:20 ` [PATCHv18 29/35] videobuf2-core: add uses_requests/qbuf flags Hans Verkuil
2018-08-14 14:20 ` [PATCHv18 30/35] videobuf2-v4l2: refuse qbuf if queue uses requests or vv Hans Verkuil
2018-08-14 14:20 ` [PATCHv18 31/35] v4l2-mem2mem: add vb2_m2m_request_queue Hans Verkuil
2018-08-14 19:56   ` Mauro Carvalho Chehab
2018-08-14 14:20 ` [PATCHv18 32/35] vim2m: use workqueue Hans Verkuil
2018-08-14 14:20 ` [PATCHv18 33/35] vim2m: support requests Hans Verkuil
2018-08-14 14:20 ` [PATCHv18 34/35] vivid: add mc Hans Verkuil
2018-08-14 14:20 ` [PATCHv18 35/35] vivid: add request support Hans Verkuil
2018-08-14 20:01 ` [PATCHv18 00/35] Request API Mauro Carvalho Chehab
2018-08-14 20:04   ` Mauro Carvalho Chehab

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180814163619.4b273322@coco.lan \
    --to=mchehab+samsung@kernel.org \
    --cc=hans.verkuil@cisco.com \
    --cc=hverkuil@xs4all.nl \
    --cc=linux-media@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.