public inbox for linux-media@vger.kernel.org
 help / color / mirror / Atom feed
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: "Niklas Söderlund" <niklas.soderlund@ragnatech.se>
Cc: Hans Verkuil <hverkuil@xs4all.nl>,
	linux-media@vger.kernel.org, linux-renesas-soc@vger.kernel.org,
	tomoharu.fukawa.eb@renesas.com,
	Kieran Bingham <kieran.bingham@ideasonboard.com>
Subject: Re: [PATCH v10 10/30] rcar-vin: fix handling of single field frames (top, bottom and alternate fields)
Date: Wed, 14 Feb 2018 00:31:21 +0200	[thread overview]
Message-ID: <3791727.mLP5MD9T4p@avalon> (raw)
In-Reply-To: <20180213164704.GD18618@bigcity.dyn.berto.se>

Hi Niklas,

On Tuesday, 13 February 2018 18:47:04 EET Niklas Söderlund wrote:
> On 2018-02-13 18:26:34 +0200, Laurent Pinchart wrote:
> > On Monday, 29 January 2018 18:34:15 EET Niklas Söderlund wrote:
> >> There was never proper support in the VIN driver to deliver ALTERNATING
> >> field format to user-space, remove this field option. The problem is
> >> that ALTERNATING filed order requires the sequence numbers of buffers
> >> returned to userspace to reflect if fields where dropped or not,
> >> something which is not possible with the VIN drivers capture logic.
> >> 
> >> The VIN driver can still capture from a video source which delivers
> >> frames in ALTERNATING field order, but needs to combine them using the
> >> VIN hardware into INTERLACED field order. Before this change if a source
> >> was delivering fields using ALTERNATE the driver would default to
> >> combining them using this hardware feature. Only if the user explicitly
> >> requested ALTERNATE filed order would incorrect frames be delivered.
> >> 
> >> The height should not be cut in half for the format for TOP or BOTTOM
> >> fields settings. This was a mistake and it was made visible by the
> >> scaling refactoring. Correct behavior is that the user should request a
> >> frame size that fits the half height frame reflected in the field
> >> setting. If not the VIN will do its best to scale the top or bottom to
> >> the requested format and cropping and scaling do not work as expected.
> >> 
> >> Signed-off-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
> >> Reviewed-by: Hans Verkuil <hans.verkuil@cisco.com>
> >> ---
> >> 
> >>  drivers/media/platform/rcar-vin/rcar-dma.c  | 15 +-------
> >>  drivers/media/platform/rcar-vin/rcar-v4l2.c | 53 +++++++++++------------
> >>  2 files changed, 24 insertions(+), 44 deletions(-)

[snip]

> >> diff --git a/drivers/media/platform/rcar-vin/rcar-v4l2.c
> >> b/drivers/media/platform/rcar-vin/rcar-v4l2.c index
> >> 4d5be2d0c79c9c9a..9f7902d29c62e205 100644
> >> --- a/drivers/media/platform/rcar-vin/rcar-v4l2.c
> >> +++ b/drivers/media/platform/rcar-vin/rcar-v4l2.c
> >> @@ -103,6 +103,28 @@ static int rvin_get_source_format(struct rvin_dev
> >> *vin,
> >>  	if (ret)
> >>  		return ret;
> >> 
> >> +	switch (fmt.format.field) {
> >> +	case V4L2_FIELD_TOP:
> >> +	case V4L2_FIELD_BOTTOM:
> >> +	case V4L2_FIELD_NONE:
> >> +	case V4L2_FIELD_INTERLACED_TB:
> >> +	case V4L2_FIELD_INTERLACED_BT:
> >> +	case V4L2_FIELD_INTERLACED:
> >> +		break;
> >> +	case V4L2_FIELD_ALTERNATE:
> >> +		/*
> >> +		 * Driver do not (yet) support outputting ALTERNATE to a
> >> +		 * userspace. It dose support outputting INTERLACED so use
> > 
> > s/dose/does/
> > 
> >> +		 * the VIN hardware to combine the two fields.
> >> +		 */
> >> +		fmt.format.field = V4L2_FIELD_INTERLACED;
> >> +		fmt.format.height *= 2;
> >> +		break;
> > 
> > I don't like this much. The rvin_get_source_format() function is supposed
> > to return the media bus format for the bus between the source and the
> > VIN. It's the caller that should take the field limitations into account,
> > otherwise you end up with a mix of source and VIN data in the same
> > structure.
> 
> When I read your comments I understand your argument better. And I
> understand this function is perhaps poorly named. Maybe it should be
> renamed to rvin_get_vin_format_from_source().

If you add a comment above the function I could live with that. Would it make 
sense to pass a v4l2_pix_format structure instead of a v4l2_mbus_framefmt ?

> The source format is fetched at s_stream() time in order to do format
> validation. At this time the field is also taken into account once more
> to validate that the VIN format (calculated here) still is valid. It
> also handles the question you ask later at s_stream() time, see bellow.
> 
> >> +	default:
> >> +		vin->format.field = V4L2_FIELD_NONE;
> >> +		break;
> >> +	}
> >> +
> >>  	memcpy(mbus_fmt, &fmt.format, sizeof(*mbus_fmt));
> >>  	
> >>  	return 0;
> >> @@ -139,33 +161,6 @@ static int rvin_reset_format(struct rvin_dev *vin)
> >> 
> >>  	v4l2_fill_pix_format(&vin->format, &source_fmt);
> >> 
> >> -	/*
> >> -	 * If the subdevice uses ALTERNATE field mode and G_STD is
> >> -	 * implemented use the VIN HW to combine the two fields to
> >> -	 * one INTERLACED frame. The ALTERNATE field mode can still
> >> -	 * be requested in S_FMT and be respected, this is just the
> >> -	 * default which is applied at probing or when S_STD is called.
> >> -	 */
> >> -	if (vin->format.field == V4L2_FIELD_ALTERNATE &&
> >> -	    v4l2_subdev_has_op(vin_to_source(vin), video, g_std))
> >> -		vin->format.field = V4L2_FIELD_INTERLACED;
> >> -
> >> -	switch (vin->format.field) {
> >> -	case V4L2_FIELD_TOP:
> >> -	case V4L2_FIELD_BOTTOM:
> >> -	case V4L2_FIELD_ALTERNATE:
> >> -		vin->format.height /= 2;
> >> -		break;
> >> -	case V4L2_FIELD_NONE:
> >> -	case V4L2_FIELD_INTERLACED_TB:
> >> -	case V4L2_FIELD_INTERLACED_BT:
> >> -	case V4L2_FIELD_INTERLACED:
> >> -		break;
> >> -	default:
> >> -		vin->format.field = V4L2_FIELD_NONE;
> >> -		break;
> >> -	}
> >> -
> >>  	ret = rvin_reset_crop_compose(vin);
> >>  	if (ret)
> >>  		return ret;
> >> @@ -243,12 +238,10 @@ static int __rvin_try_format(struct rvin_dev *vin,
> >>  	if (ret)
> >>  		return ret;
> >> 
> >> +	/* Reject ALTERNATE  until support is added to the driver */
> >>  	switch (pix->field) {
> >>  	case V4L2_FIELD_TOP:
> >>  	case V4L2_FIELD_BOTTOM:
> >> -	case V4L2_FIELD_ALTERNATE:
> >> -		pix->height /= 2;
> >> -		break;
> >>  	case V4L2_FIELD_NONE:
> >>  	case V4L2_FIELD_INTERLACED_TB:
> >>  	case V4L2_FIELD_INTERLACED_BT:
> > 
> > You will then set the field to V4L2_FIELD_NONE, but the source will still
> > provide V4L2_FIELD_ALTERNATE. What will happen in the VIN, what will it
> > produce ?
> 
> As stated above this is just the format produced from the VIN to
> user-space. The source field is validated at s_stream() time, if it is
> V4L2_FIELD_ALTERNATE the driver will handle it and possibly interlace it
> depending on how the user wants to consume it, which is what is
> specified here.

That was clearer when I read the patch that implemented .start_streaming() 
support for the MC mode. Defaulting to V4L2_FIELD_NONE seems fine to me.

-- 
Regards,

Laurent Pinchart

  reply	other threads:[~2018-02-13 22:30 UTC|newest]

Thread overview: 61+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-01-29 16:34 [PATCH v10 00/30] rcar-vin: Add Gen3 with media controller Niklas Söderlund
2018-01-29 16:34 ` [PATCH v10 01/30] rcar-vin: add Gen3 devicetree bindings documentation Niklas Söderlund
2018-02-13 15:24   ` Laurent Pinchart
2018-01-29 16:34 ` [PATCH v10 02/30] rcar-vin: rename poorly named initialize and cleanup functions Niklas Söderlund
2018-01-29 16:34 ` [PATCH v10 03/30] rcar-vin: unregister video device on driver removal Niklas Söderlund
2018-01-29 16:34 ` [PATCH v10 04/30] rcar-vin: move subdevice handling to async callbacks Niklas Söderlund
2018-02-13 15:47   ` Laurent Pinchart
2018-01-29 16:34 ` [PATCH v10 05/30] rcar-vin: move model information to own struct Niklas Söderlund
2018-01-29 16:34 ` [PATCH v10 06/30] rcar-vin: move max width and height information to chip information Niklas Söderlund
2018-01-29 16:34 ` [PATCH v10 07/30] rcar-vin: move functions regarding scaling Niklas Söderlund
2018-01-29 16:34 ` [PATCH v10 08/30] rcar-vin: all Gen2 boards can scale simplify logic Niklas Söderlund
2018-01-29 16:34 ` [PATCH v10 09/30] rcar-vin: read subdevice format for crop only when needed Niklas Söderlund
2018-02-13 16:14   ` Laurent Pinchart
2018-01-29 16:34 ` [PATCH v10 10/30] rcar-vin: fix handling of single field frames (top, bottom and alternate fields) Niklas Söderlund
2018-02-13 16:26   ` Laurent Pinchart
2018-02-13 16:47     ` Niklas Söderlund
2018-02-13 22:31       ` Laurent Pinchart [this message]
2018-02-13 23:12         ` Niklas Söderlund
2018-02-13 23:28           ` Laurent Pinchart
2018-01-29 16:34 ` [PATCH v10 11/30] rcar-vin: move media bus configuration to struct rvin_info Niklas Söderlund
2018-02-13 16:37   ` Laurent Pinchart
2018-01-29 16:34 ` [PATCH v10 12/30] rcar-vin: enable Gen3 hardware configuration Niklas Söderlund
2018-01-29 16:34 ` [PATCH v10 13/30] rcar-vin: add function to manipulate Gen3 chsel value Niklas Söderlund
2018-02-13 16:41   ` Laurent Pinchart
2018-02-13 16:58     ` Niklas Söderlund
2018-02-13 17:02       ` Laurent Pinchart
2018-02-13 17:11         ` Niklas Söderlund
2018-01-29 16:34 ` [PATCH v10 14/30] rcar-vin: add flag to switch to media controller mode Niklas Söderlund
2018-01-29 16:34 ` [PATCH v10 15/30] rcar-vin: break out format alignment and checking Niklas Söderlund
2018-02-13 16:56   ` Laurent Pinchart
2018-01-29 16:34 ` [PATCH v10 16/30] rcar-vin: update bytesperline and sizeimage calculation Niklas Söderlund
2018-02-13 16:58   ` Laurent Pinchart
2018-01-29 16:34 ` [PATCH v10 17/30] rcar-vin: update pixelformat check for M1 Niklas Söderlund
2018-02-13 17:03   ` Laurent Pinchart
2018-01-29 16:34 ` [PATCH v10 18/30] rcar-vin: add check for colorspace Niklas Söderlund
2018-02-13 17:08   ` Laurent Pinchart
2018-01-29 16:34 ` [PATCH v10 19/30] rcar-vin: set a default field to fallback on Niklas Söderlund
2018-02-13 17:51   ` Laurent Pinchart
2018-01-29 16:34 ` [PATCH v10 20/30] rcar-vin: use different v4l2 operations in media controller mode Niklas Söderlund
2018-02-13 19:42   ` Laurent Pinchart
2018-01-29 16:34 ` [PATCH v10 21/30] rcar-vin: prepare for media controller mode initialization Niklas Söderlund
2018-02-13 19:47   ` Laurent Pinchart
2018-01-29 16:34 ` [PATCH v10 22/30] rcar-vin: add group allocator functions Niklas Söderlund
2018-02-13 20:09   ` Laurent Pinchart
2018-01-29 16:34 ` [PATCH v10 23/30] rcar-vin: change name of video device Niklas Söderlund
2018-02-13 20:10   ` Laurent Pinchart
2018-01-29 16:34 ` [PATCH v10 24/30] rcar-vin: add chsel information to rvin_info Niklas Söderlund
2018-02-13 20:19   ` Laurent Pinchart
2018-01-29 16:34 ` [PATCH v10 25/30] rcar-vin: parse Gen3 OF and setup media graph Niklas Söderlund
2018-02-13 21:01   ` Laurent Pinchart
2018-01-29 16:34 ` [PATCH v10 26/30] rcar-vin: add link notify for Gen3 Niklas Söderlund
2018-02-13 21:17   ` Laurent Pinchart
2018-01-29 16:34 ` [PATCH v10 27/30] rcar-vin: extend {start,stop}_streaming to work with media controller Niklas Söderlund
2018-02-13 21:31   ` Laurent Pinchart
2018-01-29 16:34 ` [PATCH v10 28/30] rcar-vin: enable support for r8a7795 Niklas Söderlund
2018-02-13 21:52   ` Laurent Pinchart
2018-01-29 16:34 ` [PATCH v10 29/30] rcar-vin: enable support for r8a7796 Niklas Söderlund
2018-02-13 21:54   ` Laurent Pinchart
2018-02-13 21:55     ` Laurent Pinchart
2018-01-29 16:34 ` [PATCH v10 30/30] rcar-vin: enable support for r8a77970 Niklas Söderlund
2018-02-13 21:56   ` Laurent Pinchart

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=3791727.mLP5MD9T4p@avalon \
    --to=laurent.pinchart@ideasonboard.com \
    --cc=hverkuil@xs4all.nl \
    --cc=kieran.bingham@ideasonboard.com \
    --cc=linux-media@vger.kernel.org \
    --cc=linux-renesas-soc@vger.kernel.org \
    --cc=niklas.soderlund@ragnatech.se \
    --cc=tomoharu.fukawa.eb@renesas.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox