Re: [PATCH v13 13/34] media: drivers: use video_device_pipeline_alloc_start()

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

 



Hi Tomi,

On Tue, Aug 30, 2022 at 02:20:21PM +0300, Tomi Valkeinen wrote:
> On 29/08/2022 20:00, Laurent Pinchart wrote:
> > On Wed, Aug 10, 2022 at 03:11:01PM +0300, Tomi Valkeinen wrote:
> >> Use video_device_pipeline_alloc_start() instead of manually
> >> allocating/managing the media pipeline storage.
> >>
> >> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@xxxxxxxxxxxxxxxx>
> >> ---
> >>   drivers/media/platform/renesas/rcar-vin/rcar-dma.c | 14 +-------------
> >>   drivers/media/platform/sunxi/sun4i-csi/sun4i_dma.c |  2 +-
> >>   .../media/platform/sunxi/sun6i-csi/sun6i_video.c   |  2 +-
> >>   drivers/media/platform/ti/cal/cal-video.c          |  2 +-
> >>   drivers/media/platform/ti/cal/cal.h                |  1 -
> >>   5 files changed, 4 insertions(+), 17 deletions(-)
> >>
> >> diff --git a/drivers/media/platform/renesas/rcar-vin/rcar-dma.c b/drivers/media/platform/renesas/rcar-vin/rcar-dma.c
> >> index 548067f19576..884875600231 100644
> >> --- a/drivers/media/platform/renesas/rcar-vin/rcar-dma.c
> >> +++ b/drivers/media/platform/renesas/rcar-vin/rcar-dma.c
> >> @@ -1244,8 +1244,6 @@ static int rvin_mc_validate_format(struct rvin_dev *vin, struct v4l2_subdev *sd,
> >>   
> >>   static int rvin_set_stream(struct rvin_dev *vin, int on)
> >>   {
> >> -	struct media_pipeline *pipe;
> >> -	struct media_device *mdev;
> >>   	struct v4l2_subdev *sd;
> >>   	struct media_pad *pad;
> >>   	int ret;
> >> @@ -1273,17 +1271,7 @@ static int rvin_set_stream(struct rvin_dev *vin, int on)
> >>   	if (ret)
> >>   		return ret;
> >>   
> >> -	/*
> >> -	 * The graph lock needs to be taken to protect concurrent
> >> -	 * starts of multiple VIN instances as they might share
> >> -	 * a common subdevice down the line and then should use
> >> -	 * the same pipe.
> >> -	 */
> >> -	mdev = vin->vdev.entity.graph_obj.mdev;
> >> -	mutex_lock(&mdev->graph_mutex);
> >> -	pipe = media_entity_pipeline(&sd->entity) ? : &vin->vdev.pipe;
> >> -	ret = __video_device_pipeline_start(&vin->vdev, pipe);
> >> -	mutex_unlock(&mdev->graph_mutex);
> >> +	ret = video_device_pipeline_alloc_start(&vin->vdev);
> > 
> > This doesn't look right, it will use different pipeline instances for
> > difference video devices, that's a change in behaviour.
> 
> I hope not, but it's a bit difficult to be sure without having the board 
> and testing.
> 
> Afaics, the previous code uses the existing pipeline if such exists in 
> the first subdev (i.e. if media_pipeline_start has been called earlier 
> for another vdev), or if not, uses pipeline specific to the vdev.
> 
> This behavior should match the new one, although the operation 
> underneath is slightly different.

I think you're right. I'd probably feel better if we could test it :-)

> It's perhaps the name, video_device_pipeline_alloc_start, that confuses. 
> It doesn't indicate that it possibly uses an existing pipeline. But I 
> don't have any good idea for a better name. 
> video_device_pipeline_find_or_alloc_start? =) Well, it's not really 
> "finding" anything either...

Yes, I think the new threw me off, but I can't really think of a better
one right now.

> >>   	if (ret)
> >>   		return ret;
> >>   
> >> diff --git a/drivers/media/platform/sunxi/sun4i-csi/sun4i_dma.c b/drivers/media/platform/sunxi/sun4i-csi/sun4i_dma.c
> >> index 17ad9a3caaa5..a3e826a755fc 100644
> >> --- a/drivers/media/platform/sunxi/sun4i-csi/sun4i_dma.c
> >> +++ b/drivers/media/platform/sunxi/sun4i-csi/sun4i_dma.c
> >> @@ -266,7 +266,7 @@ static int sun4i_csi_start_streaming(struct vb2_queue *vq, unsigned int count)
> >>   		goto err_clear_dma_queue;
> >>   	}
> >>   
> >> -	ret = video_device_pipeline_start(&csi->vdev, &csi->vdev.pipe);
> > 
> > What ? There is a pipe embedded in video_device ? Oh my, I didn't
> > realize how messed up the V4L2 core had become :-(
> 
> That's what the current Renesas driver earlier in this patch also uses. 
> Didn't you write that code? =)

As a matter of fact, no, I didn't :-)

-- 
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