Re: [PATCH v13 16/34] media: mc: convert pipeline funcs to take media_pad

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

 



Hi Tomi,

Thank you for the patch.

On Wed, Aug 10, 2022 at 03:11:04PM +0300, Tomi Valkeinen wrote:
> Now that the pipeline is stored into pads instead of entities, we can
> change the relevant functions to take pads instead of entities.
> 
> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@xxxxxxxxxxxxxxxx>
> ---
>  drivers/media/mc/mc-entity.c                  | 40 ++++++++-----------
>  .../samsung/s3c-camif/camif-capture.c         |  6 +--
>  drivers/media/usb/au0828/au0828-core.c        |  8 ++--
>  drivers/media/v4l2-core/v4l2-dev.c            | 12 +++---
>  drivers/staging/media/imx/imx-media-utils.c   |  6 +--
>  include/media/media-entity.h                  | 28 ++++++-------
>  6 files changed, 46 insertions(+), 54 deletions(-)
> 
> diff --git a/drivers/media/mc/mc-entity.c b/drivers/media/mc/mc-entity.c
> index c89dc782840a..ce72ee749fe6 100644
> --- a/drivers/media/mc/mc-entity.c
> +++ b/drivers/media/mc/mc-entity.c
> @@ -699,29 +699,21 @@ static int media_pipeline_populate(struct media_pipeline *pipe,
>  	return ret;
>  }
>  
> -__must_check int __media_pipeline_start(struct media_entity *entity,
> +__must_check int __media_pipeline_start(struct media_pad *pad,
>  					struct media_pipeline *pipe)
>  {
> -	struct media_device *mdev = entity->graph_obj.mdev;
> +	struct media_device *mdev = pad->entity->graph_obj.mdev;
>  	struct media_pipeline_pad *err_ppad;
>  	struct media_pipeline_pad *ppad;
>  	int ret;
>  
>  	lockdep_assert_held(&mdev->graph_mutex);
>  
> -	/*
> -	 * media_pipeline_start(entity) only makes sense with entities that have
> -	 * a single pad.
> -	 */
> -
> -	if (WARN_ON(entity->num_pads != 1))
> -		return -EINVAL;
> -
>  	/*
>  	 * If the entity is already part of a pipeline, that pipeline must
>  	 * be the same as the pipe given to media_pipeline_start().
>  	 */
> -	if (WARN_ON(entity->pads->pipe && entity->pads->pipe != pipe))
> +	if (WARN_ON(pad->pipe && pad->pipe != pipe))
>  		return -EINVAL;
>  
>  	/*
> @@ -738,7 +730,7 @@ __must_check int __media_pipeline_start(struct media_entity *entity,
>  	 * with media_pipeline_pad instances for each pad found during graph
>  	 * walk.
>  	 */
> -	ret = media_pipeline_populate(pipe, entity->pads);
> +	ret = media_pipeline_populate(pipe, pad);
>  	if (ret)
>  		return ret;
>  
> @@ -855,22 +847,22 @@ __must_check int __media_pipeline_start(struct media_entity *entity,
>  }
>  EXPORT_SYMBOL_GPL(__media_pipeline_start);
>  
> -__must_check int media_pipeline_start(struct media_entity *entity,
> +__must_check int media_pipeline_start(struct media_pad *pad,
>  				      struct media_pipeline *pipe)
>  {
> -	struct media_device *mdev = entity->graph_obj.mdev;
> +	struct media_device *mdev = pad->entity->graph_obj.mdev;
>  	int ret;
>  
>  	mutex_lock(&mdev->graph_mutex);
> -	ret = __media_pipeline_start(entity, pipe);
> +	ret = __media_pipeline_start(pad, pipe);
>  	mutex_unlock(&mdev->graph_mutex);
>  	return ret;
>  }
>  EXPORT_SYMBOL_GPL(media_pipeline_start);
>  
> -void __media_pipeline_stop(struct media_entity *entity)
> +void __media_pipeline_stop(struct media_pad *pad)
>  {
> -	struct media_pipeline *pipe = entity->pads->pipe;
> +	struct media_pipeline *pipe = pad->pipe;
>  	struct media_pipeline_pad *ppad;
>  
>  	/*
> @@ -893,19 +885,19 @@ void __media_pipeline_stop(struct media_entity *entity)
>  }
>  EXPORT_SYMBOL_GPL(__media_pipeline_stop);
>  
> -void media_pipeline_stop(struct media_entity *entity)
> +void media_pipeline_stop(struct media_pad *pad)
>  {
> -	struct media_device *mdev = entity->graph_obj.mdev;
> +	struct media_device *mdev = pad->entity->graph_obj.mdev;
>  
>  	mutex_lock(&mdev->graph_mutex);
> -	__media_pipeline_stop(entity);
> +	__media_pipeline_stop(pad);
>  	mutex_unlock(&mdev->graph_mutex);
>  }
>  EXPORT_SYMBOL_GPL(media_pipeline_stop);
>  
> -__must_check int media_pipeline_alloc_start(struct media_entity *entity)
> +__must_check int media_pipeline_alloc_start(struct media_pad *pad)
>  {
> -	struct media_device *mdev = entity->graph_obj.mdev;
> +	struct media_device *mdev = pad->entity->graph_obj.mdev;
>  	struct media_pipeline *pipe;
>  	int ret;
>  	bool new_pipe = false;
> @@ -916,7 +908,7 @@ __must_check int media_pipeline_alloc_start(struct media_entity *entity)
>  	 * Is the entity already part of a pipeline? If not, we need to allocate
>  	 * a pipe.
>  	 */
> -	pipe = media_entity_pipeline(entity);
> +	pipe = media_pad_pipeline(pad);
>  	if (!pipe) {
>  		pipe = kzalloc(sizeof(*pipe), GFP_KERNEL);
>  
> @@ -929,7 +921,7 @@ __must_check int media_pipeline_alloc_start(struct media_entity *entity)
>  		pipe->allocated = true;
>  	}
>  
> -	ret = __media_pipeline_start(entity, pipe);
> +	ret = __media_pipeline_start(pad, pipe);
>  	if (ret) {
>  		if (new_pipe)
>  			kfree(pipe);
> diff --git a/drivers/media/platform/samsung/s3c-camif/camif-capture.c b/drivers/media/platform/samsung/s3c-camif/camif-capture.c
> index 140854ab4dd8..0189b8a33032 100644
> --- a/drivers/media/platform/samsung/s3c-camif/camif-capture.c
> +++ b/drivers/media/platform/samsung/s3c-camif/camif-capture.c
> @@ -848,13 +848,13 @@ static int s3c_camif_streamon(struct file *file, void *priv,
>  	if (s3c_vp_active(vp))
>  		return 0;
>  
> -	ret = media_pipeline_start(sensor, camif->m_pipeline);
> +	ret = media_pipeline_start(sensor->pads, camif->m_pipeline);
>  	if (ret < 0)
>  		return ret;
>  
>  	ret = camif_pipeline_validate(camif);
>  	if (ret < 0) {
> -		media_pipeline_stop(sensor);
> +		media_pipeline_stop(sensor->pads);
>  		return ret;
>  	}
>  
> @@ -878,7 +878,7 @@ static int s3c_camif_streamoff(struct file *file, void *priv,
>  
>  	ret = vb2_streamoff(&vp->vb_queue, type);
>  	if (ret == 0)
> -		media_pipeline_stop(&camif->sensor.sd->entity);
> +		media_pipeline_stop(camif->sensor.sd->entity.pads);
>  	return ret;
>  }
>  
> diff --git a/drivers/media/usb/au0828/au0828-core.c b/drivers/media/usb/au0828/au0828-core.c
> index caefac07af92..877e85a451cb 100644
> --- a/drivers/media/usb/au0828/au0828-core.c
> +++ b/drivers/media/usb/au0828/au0828-core.c
> @@ -410,7 +410,7 @@ static int au0828_enable_source(struct media_entity *entity,
>  		goto end;
>  	}
>  
> -	ret = __media_pipeline_start(entity, pipe);
> +	ret = __media_pipeline_start(entity->pads, pipe);
>  	if (ret) {
>  		pr_err("Start Pipeline: %s->%s Error %d\n",
>  			source->name, entity->name, ret);
> @@ -501,12 +501,12 @@ static void au0828_disable_source(struct media_entity *entity)
>  				return;
>  
>  			/* stop pipeline */
> -			__media_pipeline_stop(dev->active_link_owner);
> +			__media_pipeline_stop(dev->active_link_owner->pads);
>  			pr_debug("Pipeline stop for %s\n",
>  				dev->active_link_owner->name);
>  
>  			ret = __media_pipeline_start(
> -					dev->active_link_user,
> +					dev->active_link_user->pads,
>  					dev->active_link_user_pipe);
>  			if (ret) {
>  				pr_err("Start Pipeline: %s->%s %d\n",
> @@ -532,7 +532,7 @@ static void au0828_disable_source(struct media_entity *entity)
>  			return;
>  
>  		/* stop pipeline */
> -		__media_pipeline_stop(dev->active_link_owner);
> +		__media_pipeline_stop(dev->active_link_owner->pads);
>  		pr_debug("Pipeline stop for %s\n",
>  			dev->active_link_owner->name);
>  
> diff --git a/drivers/media/v4l2-core/v4l2-dev.c b/drivers/media/v4l2-core/v4l2-dev.c
> index 945bb867a4c1..397d553177fa 100644
> --- a/drivers/media/v4l2-core/v4l2-dev.c
> +++ b/drivers/media/v4l2-core/v4l2-dev.c
> @@ -1105,7 +1105,7 @@ __must_check int video_device_pipeline_start(struct video_device *vdev,
>  	if (entity->num_pads != 1)
>  		return -ENODEV;
>  
> -	return media_pipeline_start(entity, pipe);
> +	return media_pipeline_start(&entity->pads[0], pipe);
>  }
>  EXPORT_SYMBOL_GPL(video_device_pipeline_start);
>  
> @@ -1117,7 +1117,7 @@ __must_check int __video_device_pipeline_start(struct video_device *vdev,
>  	if (entity->num_pads != 1)
>  		return -ENODEV;
>  
> -	return __media_pipeline_start(entity, pipe);
> +	return __media_pipeline_start(&entity->pads[0], pipe);
>  }
>  EXPORT_SYMBOL_GPL(__video_device_pipeline_start);
>  
> @@ -1128,7 +1128,7 @@ void video_device_pipeline_stop(struct video_device *vdev)
>  	if (WARN_ON(entity->num_pads != 1))
>  		return;
>  
> -	return media_pipeline_stop(entity);
> +	return media_pipeline_stop(&entity->pads[0]);
>  }
>  EXPORT_SYMBOL_GPL(video_device_pipeline_stop);
>  
> @@ -1139,7 +1139,7 @@ void __video_device_pipeline_stop(struct video_device *vdev)
>  	if (WARN_ON(entity->num_pads != 1))
>  		return;
>  
> -	return __media_pipeline_stop(entity);
> +	return __media_pipeline_stop(&entity->pads[0]);
>  }
>  EXPORT_SYMBOL_GPL(__video_device_pipeline_stop);
>  
> @@ -1150,7 +1150,7 @@ __must_check int video_device_pipeline_alloc_start(struct video_device *vdev)
>  	if (entity->num_pads != 1)
>  		return -ENODEV;
>  
> -	return media_pipeline_alloc_start(entity);
> +	return media_pipeline_alloc_start(&entity->pads[0]);
>  }
>  EXPORT_SYMBOL_GPL(video_device_pipeline_alloc_start);
>  
> @@ -1161,7 +1161,7 @@ struct media_pipeline *video_device_pipeline(struct video_device *vdev)
>  	if (WARN_ON(entity->num_pads != 1))
>  		return NULL;
>  
> -	return media_entity_pipeline(entity);
> +	return media_pad_pipeline(&entity->pads[0]);
>  }
>  EXPORT_SYMBOL_GPL(video_device_pipeline);
>  
> diff --git a/drivers/staging/media/imx/imx-media-utils.c b/drivers/staging/media/imx/imx-media-utils.c
> index 5d9c6fc6f2e0..3d785b4e8fe7 100644
> --- a/drivers/staging/media/imx/imx-media-utils.c
> +++ b/drivers/staging/media/imx/imx-media-utils.c
> @@ -863,16 +863,16 @@ int imx_media_pipeline_set_stream(struct imx_media_dev *imxmd,
>  	mutex_lock(&imxmd->md.graph_mutex);
>  
>  	if (on) {
> -		ret = __media_pipeline_start(entity, &imxmd->pipe);
> +		ret = __media_pipeline_start(entity->pads, &imxmd->pipe);
>  		if (ret)
>  			goto out;
>  		ret = v4l2_subdev_call(sd, video, s_stream, 1);
>  		if (ret)
> -			__media_pipeline_stop(entity);
> +			__media_pipeline_stop(entity->pads);
>  	} else {
>  		v4l2_subdev_call(sd, video, s_stream, 0);
>  		if (media_entity_pipeline(entity))
> -			__media_pipeline_stop(entity);
> +			__media_pipeline_stop(entity->pads);
>  	}
>  
>  out:
> diff --git a/include/media/media-entity.h b/include/media/media-entity.h
> index beea3f6f12b8..f738d0d81194 100644
> --- a/include/media/media-entity.h
> +++ b/include/media/media-entity.h
> @@ -1048,10 +1048,10 @@ struct media_entity *media_graph_walk_next(struct media_graph *graph);
>  
>  /**
>   * media_pipeline_start - Mark a pipeline as streaming
> - * @entity: Starting entity
> - * @pipe: Media pipeline to be assigned to all entities in the pipeline.
> + * @pad: Starting pad
> + * @pipe: Media pipeline to be assigned to all pads in the pipeline.
>   *
> - * Mark all entities connected to a given entity through enabled links, either
> + * Mark all pads connected to a given pad 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.

s/entity/pad/

>   *
> @@ -1060,24 +1060,24 @@ struct media_entity *media_graph_walk_next(struct media_graph *graph);
>   * pipeline pointer must be identical for all nested calls to
>   * media_pipeline_start().
>   */
> -__must_check int media_pipeline_start(struct media_entity *entity,
> +__must_check int media_pipeline_start(struct media_pad *pad,
>  				      struct media_pipeline *pipe);
>  /**
>   * __media_pipeline_start - Mark a pipeline as streaming
>   *
> - * @entity: Starting entity
> - * @pipe: Media pipeline to be assigned to all entities in the pipeline.
> + * @pad: Starting pad
> + * @pipe: Media pipeline to be assigned to all pads in the pipeline.
>   *
>   * ..note:: This is the non-locking version of media_pipeline_start()
>   */
> -__must_check int __media_pipeline_start(struct media_entity *entity,
> +__must_check int __media_pipeline_start(struct media_pad *pad,
>  					struct media_pipeline *pipe);
>  
>  /**
>   * media_pipeline_stop - Mark a pipeline as not streaming
> - * @entity: Starting entity
> + * @pad: Starting pad
>   *
> - * Mark all entities connected to a given entity through enabled links, either
> + * Mark all pads connected to a given pads through enabled links, either
>   * directly or indirectly, as not streaming. The media_entity pipe field is

This needs to be updated too. Please check the other functions to verify
there's no leftover.

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

>   * reset to %NULL.
>   *
> @@ -1085,20 +1085,20 @@ __must_check int __media_pipeline_start(struct media_entity *entity,
>   * number of calls to this function are required to mark the pipeline as not
>   * streaming.
>   */
> -void media_pipeline_stop(struct media_entity *entity);
> +void media_pipeline_stop(struct media_pad *pad);
>  
>  /**
>   * __media_pipeline_stop - Mark a pipeline as not streaming
>   *
> - * @entity: Starting entity
> + * @pad: Starting pad
>   *
>   * .. note:: This is the non-locking version of media_pipeline_stop()
>   */
> -void __media_pipeline_stop(struct media_entity *entity);
> +void __media_pipeline_stop(struct media_pad *pad);
>  
>  /**
>   * media_pipeline_alloc_start - Mark a pipeline as streaming
> - * @entity: Starting entity
> + * @pad: Starting pad
>   *
>   * media_pipeline_alloc_start() is similar to media_pipeline_start() but instead
>   * of working on a given pipeline the function will use an existing pipeline if
> @@ -1107,7 +1107,7 @@ void __media_pipeline_stop(struct media_entity *entity);
>   * Calls to media_pipeline_alloc_start() must be matched with
>   * media_pipeline_stop().
>   */
> -__must_check int media_pipeline_alloc_start(struct media_entity *entity);
> +__must_check int media_pipeline_alloc_start(struct media_pad *pad);
>  
>  /**
>   * media_devnode_create() - creates and initializes a device node interface

-- 
Regards,

Laurent Pinchart



[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