All of lore.kernel.org
 help / color / mirror / Atom feed
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Cc: linux-media@vger.kernel.org, sakari.ailus@linux.intel.com,
	Jacopo Mondi <jacopo+renesas@jmondi.org>,
	niklas.soderlund+renesas@ragnatech.se,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	Hans Verkuil <hverkuil-cisco@xs4all.nl>,
	Pratyush Yadav <p.yadav@ti.com>,
	Kishon Vijay Abraham <kishon@ti.com>,
	satish.nagireddy@getcruise.com, Tomasz Figa <tfiga@chromium.org>
Subject: Re: [PATCH v13 09/34] media: v4l2-dev: Add videodev wrappers for media pipelines
Date: Mon, 29 Aug 2022 19:34:15 +0300	[thread overview]
Message-ID: <YwzqhxmPp9WXvJ2i@pendragon.ideasonboard.com> (raw)
In-Reply-To: <20220810121122.3149086-10-tomi.valkeinen@ideasonboard.com>

Hi Tomi,

Thank you for the patch.

On Wed, Aug 10, 2022 at 03:10:57PM +0300, Tomi Valkeinen wrote:
> With the upcoming stream related improvements to the pipelines, the
> pipelines are moved from media entities to media pads. As the drivers
> currently use the pipelines with the entity based model, moving the
> pipelines to pads will cause changes to the drivers.
> 
> However, most of the uses of media pipelines are related to a video
> device (a DMA engine) with a single pad, and thus there's never a need
> to support multiple pads in these use cases. We can avoid pushing the
> complexities of the pad based model to the drivers by adding video
> device wrappers for the pipeline related functions.
> 
> This patch adds a number of wrappers to media_pipeline functions, all of
> which take a video_device as a parameter (instead of a media_entity),
> and verify that there's just one pad.
> 
> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
> ---
>  drivers/media/v4l2-core/v4l2-dev.c | 61 ++++++++++++++++++++
>  include/media/v4l2-dev.h           | 90 ++++++++++++++++++++++++++++++
>  2 files changed, 151 insertions(+)
> 
> diff --git a/drivers/media/v4l2-core/v4l2-dev.c b/drivers/media/v4l2-core/v4l2-dev.c
> index d00237ee4cae..7f933ff89fd4 100644
> --- a/drivers/media/v4l2-core/v4l2-dev.c
> +++ b/drivers/media/v4l2-core/v4l2-dev.c
> @@ -1095,6 +1095,67 @@ void video_unregister_device(struct video_device *vdev)
>  }
>  EXPORT_SYMBOL(video_unregister_device);
>  
> +#if defined(CONFIG_MEDIA_CONTROLLER)
> +
> +__must_check int video_device_pipeline_start(struct video_device *vdev,
> +					     struct media_pipeline *pipe)
> +{
> +	struct media_entity *entity = &vdev->entity;
> +
> +	if (entity->num_pads != 1)
> +		return -ENODEV;
> +
> +	return media_pipeline_start(entity, pipe);
> +}
> +EXPORT_SYMBOL_GPL(video_device_pipeline_start);
> +
> +__must_check int __video_device_pipeline_start(struct video_device *vdev,
> +					       struct media_pipeline *pipe)
> +{
> +	struct media_entity *entity = &vdev->entity;
> +
> +	if (entity->num_pads != 1)
> +		return -ENODEV;
> +
> +	return __media_pipeline_start(entity, pipe);
> +}
> +EXPORT_SYMBOL_GPL(__video_device_pipeline_start);
> +
> +void video_device_pipeline_stop(struct video_device *vdev)
> +{
> +	struct media_entity *entity = &vdev->entity;
> +
> +	if (WARN_ON(entity->num_pads != 1))
> +		return;
> +
> +	return media_pipeline_stop(entity);
> +}
> +EXPORT_SYMBOL_GPL(video_device_pipeline_stop);
> +
> +void __video_device_pipeline_stop(struct video_device *vdev)
> +{
> +	struct media_entity *entity = &vdev->entity;
> +
> +	if (WARN_ON(entity->num_pads != 1))
> +		return;
> +
> +	return __media_pipeline_stop(entity);
> +}
> +EXPORT_SYMBOL_GPL(__video_device_pipeline_stop);
> +
> +struct media_pipeline *video_device_pipeline(struct video_device *vdev)
> +{
> +	struct media_entity *entity = &vdev->entity;
> +
> +	if (WARN_ON(entity->num_pads != 1))
> +		return NULL;
> +
> +	return media_entity_pipeline(entity);
> +}
> +EXPORT_SYMBOL_GPL(video_device_pipeline);
> +
> +#endif /* CONFIG_MEDIA_CONTROLLER */
> +
>  /*
>   *	Initialise video for linux
>   */
> diff --git a/include/media/v4l2-dev.h b/include/media/v4l2-dev.h
> index 5cf1edefb822..4ccc24f5918a 100644
> --- a/include/media/v4l2-dev.h
> +++ b/include/media/v4l2-dev.h
> @@ -539,4 +539,94 @@ static inline int video_is_registered(struct video_device *vdev)
>  	return test_bit(V4L2_FL_REGISTERED, &vdev->flags);
>  }
>  
> +#if defined(CONFIG_MEDIA_CONTROLLER)
> +
> +/**
> + * video_device_pipeline_start - Mark a pipeline as streaming
> + * @vdev: Starting video device
> + * @pipe: Media pipeline to be assigned to all entities in the pipeline.
> + *
> + * Mark all entities connected to a given video device through enabled links,
> + * either directly or indirectly, as streaming. The given pipeline object is
> + * assigned to every entity in the pipeline and stored in the media_entity pipe
> + * field.
> + *
> + * Calls to this function can be nested, in which case the same number of
> + * video_device_pipeline_stop() calls will be required to stop streaming. The
> + * pipeline pointer must be identical for all nested calls to
> + * video_device_pipeline_start().
> + *
> + * The video device must contain a single pad.
> + *
> + * This is a convenience wrapper to media_pipeline_start().

s/wrapper to/wrapper around/ maybe. Same below.

> + */
> +__must_check int video_device_pipeline_start(struct video_device *vdev,
> +					     struct media_pipeline *pipe);
> +
> +/**
> + * __video_device_pipeline_start - Mark a pipeline as streaming
> + *

I'd drop the blank line as you don't have one for the previous function.
Same for stop.

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

> + * @vdev: Starting video device
> + * @pipe: Media pipeline to be assigned to all entities in the pipeline.
> + *
> + * ..note:: This is the non-locking version of video_device_pipeline_start()
> + *
> + * The video device must contain a single pad.
> + *
> + * This is a convenience wrapper to __media_pipeline_start().
> + */
> +__must_check int __video_device_pipeline_start(struct video_device *vdev,
> +					       struct media_pipeline *pipe);
> +
> +/**
> + * video_device_pipeline_stop - Mark a pipeline as not streaming
> + * @vdev: Starting video device
> + *
> + * Mark all entities connected to a given entity through enabled links, either
> + * directly or indirectly, as not streaming. The media_entity pipe field is
> + * reset to %NULL.
> + *
> + * If multiple calls to media_pipeline_start() have been made, the same
> + * number of calls to this function are required to mark the pipeline as not
> + * streaming.
> + *
> + * The video device must contain a single pad.
> + *
> + * This is a convenience wrapper to media_pipeline_stop().
> + */
> +void video_device_pipeline_stop(struct video_device *vdev);
> +
> +/**
> + * __video_device_pipeline_stop - Mark a pipeline as not streaming
> + *
> + * @vdev: Starting video device
> + *
> + * .. note:: This is the non-locking version of media_pipeline_stop()
> + *
> + * The video device must contain a single pad.
> + *
> + * This is a convenience wrapper to __media_pipeline_stop().
> + */
> +void __video_device_pipeline_stop(struct video_device *vdev);
> +
> +/**
> + * video_device_pipeline - Get the media pipeline a video device is part of
> + * @vdev: The video device
> + *
> + * This function returns the media pipeline that a video device has been
> + * associated with when constructing the pipeline with
> + * video_device_pipeline_start(). The pointer remains valid until
> + * video_device_pipeline_stop() is called.
> + *
> + * Return: The media_pipeline the video device is part of, or NULL if the video
> + * device is not part of any pipeline.
> + *
> + * The video device must contain a single pad.
> + *
> + * This is a convenience wrapper to media_entity_pipeline().
> + */
> +struct media_pipeline *video_device_pipeline(struct video_device *vdev);
> +
> +#endif /* CONFIG_MEDIA_CONTROLLER */
> +
>  #endif /* _V4L2_DEV_H */

-- 
Regards,

Laurent Pinchart

  reply	other threads:[~2022-08-29 16:34 UTC|newest]

Thread overview: 60+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-10 12:10 [PATCH v13 00/34] v4l: routing and streams support Tomi Valkeinen
2022-08-10 12:10 ` [PATCH v13 01/34] media: Documentation: mc: add definitions for stream and pipeline Tomi Valkeinen
2022-08-29 15:51   ` Laurent Pinchart
2022-08-10 12:10 ` [PATCH v13 02/34] media: media-entity.h: add include for min() Tomi Valkeinen
2022-08-29 16:06   ` Laurent Pinchart
2022-08-10 12:10 ` [PATCH v13 03/34] media: subdev: increase V4L2_FRAME_DESC_ENTRY_MAX to 8 Tomi Valkeinen
2022-08-10 12:10 ` [PATCH v13 04/34] media: mc: entity: Rename streaming_count -> start_count Tomi Valkeinen
2022-08-29 16:08   ` Laurent Pinchart
2022-08-10 12:10 ` [PATCH v13 05/34] media: mc: entity: Add iterator helper for entity pads Tomi Valkeinen
2022-08-10 12:10 ` [PATCH v13 06/34] media: mc: entity: Merge media_entity_enum_init and __media_entity_enum_init Tomi Valkeinen
2022-08-10 12:10 ` [PATCH v13 07/34] media: mc: entity: Move media_entity_get_fwnode_pad() out of graph walk section Tomi Valkeinen
2022-08-10 12:10 ` [PATCH v13 08/34] media: mc: entity: Add media_entity_pipeline() to access the media pipeline Tomi Valkeinen
2022-08-10 12:10 ` [PATCH v13 09/34] media: v4l2-dev: Add videodev wrappers for media pipelines Tomi Valkeinen
2022-08-29 16:34   ` Laurent Pinchart [this message]
2022-08-30 10:58     ` Tomi Valkeinen
2022-08-10 12:10 ` [PATCH v13 10/34] media: drivers: use video device pipeline start/stop Tomi Valkeinen
2022-08-29 16:41   ` Laurent Pinchart
2022-08-10 12:10 ` [PATCH v13 11/34] media: drivers: use video_device_pipeline() Tomi Valkeinen
2022-08-29 16:48   ` Laurent Pinchart
2022-08-10 12:11 ` [PATCH v13 12/34] media: mc: entity: add alloc variant of pipeline_start Tomi Valkeinen
2022-08-29 16:57   ` Laurent Pinchart
2022-08-30 11:08     ` Tomi Valkeinen
2022-08-30 11:42       ` Laurent Pinchart
2022-08-10 12:11 ` [PATCH v13 13/34] media: drivers: use video_device_pipeline_alloc_start() Tomi Valkeinen
2022-08-29 17:00   ` Laurent Pinchart
2022-08-30 11:20     ` Tomi Valkeinen
2022-08-30 11:46       ` Laurent Pinchart
2022-08-10 12:11 ` [PATCH v13 14/34] media: mc: entity: Rewrite media_pipeline_start() Tomi Valkeinen
2022-08-29 17:18   ` Laurent Pinchart
2022-08-30 11:44     ` Tomi Valkeinen
2022-08-30 12:40       ` Tomi Valkeinen
2022-09-06  8:48         ` Laurent Pinchart
2022-09-06  9:22           ` Tomi Valkeinen
2022-08-31 14:21     ` Tomi Valkeinen
2022-09-06  8:44       ` Laurent Pinchart
2022-09-06  9:19         ` Tomi Valkeinen
2022-09-06 12:58           ` Sakari Ailus
2022-09-06 13:51             ` Laurent Pinchart
2022-08-10 12:11 ` [PATCH v13 15/34] media: mc: entity: Add has_pad_interdep entity operation Tomi Valkeinen
2022-08-10 12:11 ` [PATCH v13 16/34] media: mc: convert pipeline funcs to take media_pad Tomi Valkeinen
2022-08-29 17:21   ` Laurent Pinchart
2022-08-30 12:05     ` Tomi Valkeinen
2022-08-10 12:11 ` [PATCH v13 17/34] media: add V4L2_SUBDEV_FL_STREAMS Tomi Valkeinen
2022-08-10 12:11 ` [PATCH v13 18/34] media: add V4L2_SUBDEV_CAP_STREAMS Tomi Valkeinen
2022-08-10 12:11 ` [PATCH v13 19/34] media: Documentation: Add GS_ROUTING documentation Tomi Valkeinen
2022-08-10 12:11 ` [PATCH v13 20/34] media: subdev: Add [GS]_ROUTING subdev ioctls and operations Tomi Valkeinen
2022-08-10 12:11 ` [PATCH v13 21/34] media: subdev: add v4l2_subdev_has_pad_interdep() Tomi Valkeinen
2022-08-10 12:11 ` [PATCH v13 22/34] media: subdev: add v4l2_subdev_set_routing helper() Tomi Valkeinen
2022-08-10 12:11 ` [PATCH v13 23/34] media: subdev: Add for_each_active_route() macro Tomi Valkeinen
2022-08-10 12:11 ` [PATCH v13 24/34] media: Documentation: add multiplexed streams documentation Tomi Valkeinen
2022-08-10 12:11 ` [PATCH v13 25/34] media: subdev: add stream based configuration Tomi Valkeinen
2022-08-10 12:11 ` [PATCH v13 26/34] media: subdev: use streams in v4l2_subdev_link_validate() Tomi Valkeinen
2022-08-10 12:11 ` [PATCH v13 27/34] media: subdev: add "opposite" stream helper funcs Tomi Valkeinen
2022-08-10 12:11 ` [PATCH v13 28/34] media: subdev: add streams to v4l2_subdev_get_fmt() helper function Tomi Valkeinen
2022-08-10 12:11 ` [PATCH v13 29/34] media: subdev: add v4l2_subdev_set_routing_with_fmt() helper Tomi Valkeinen
2022-08-10 12:11 ` [PATCH v13 30/34] media: subdev: add v4l2_subdev_routing_validate() helper Tomi Valkeinen
2022-08-10 12:11 ` [PATCH v13 31/34] media: v4l2-subdev: Add v4l2_subdev_state_xlate_streams() helper Tomi Valkeinen
2022-08-10 12:11 ` [PATCH v13 32/34] media: v4l2-subdev: Add subdev .(enable|disable)_streams() operations Tomi Valkeinen
2022-08-10 12:11 ` [PATCH v13 33/34] media: v4l2-subdev: Add v4l2_subdev_s_stream_helper() function Tomi Valkeinen
2022-08-10 12:11 ` [PATCH v13 34/34] media: Add stream to frame descriptor Tomi Valkeinen

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=YwzqhxmPp9WXvJ2i@pendragon.ideasonboard.com \
    --to=laurent.pinchart@ideasonboard.com \
    --cc=hverkuil-cisco@xs4all.nl \
    --cc=jacopo+renesas@jmondi.org \
    --cc=kishon@ti.com \
    --cc=linux-media@vger.kernel.org \
    --cc=mchehab@kernel.org \
    --cc=niklas.soderlund+renesas@ragnatech.se \
    --cc=p.yadav@ti.com \
    --cc=sakari.ailus@linux.intel.com \
    --cc=satish.nagireddy@getcruise.com \
    --cc=tfiga@chromium.org \
    --cc=tomi.valkeinen@ideasonboard.com \
    /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.