From: "Niklas Söderlund" <niklas.soderlund@ragnatech.se>
To: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
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 v11 12/32] rcar-vin: fix handling of single field frames (top, bottom and alternate fields)
Date: Sat, 3 Mar 2018 17:23:39 +0100 [thread overview]
Message-ID: <20180303162339.GK12470@bigcity.dyn.berto.se> (raw)
In-Reply-To: <2141364.444NBPQ5qU@avalon>
Hi Laurent,
Thanks for your comments.
On 2018-03-02 12:48:55 +0200, Laurent Pinchart wrote:
> Hi Niklas,
>
> Thank you for the patch.
>
> On Friday, 2 March 2018 03:57:31 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
>
> s/filed/field/
>
> > 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>
> > ---
> > drivers/media/platform/rcar-vin/rcar-dma.c | 15 +----------
> > drivers/media/platform/rcar-vin/rcar-v4l2.c | 40 +++++++-------------------
> > 2 files changed, 10 insertions(+), 45 deletions(-)
> >
> > diff --git a/drivers/media/platform/rcar-vin/rcar-dma.c
> > b/drivers/media/platform/rcar-vin/rcar-dma.c index
> > fd14be20a6604d7a..c8831e189d362c8b 100644
> > --- a/drivers/media/platform/rcar-vin/rcar-dma.c
> > +++ b/drivers/media/platform/rcar-vin/rcar-dma.c
> > @@ -617,7 +617,6 @@ static int rvin_setup(struct rvin_dev *vin)
> > case V4L2_FIELD_INTERLACED_BT:
> > vnmc = VNMC_IM_FULL | VNMC_FOC;
> > break;
> > - case V4L2_FIELD_ALTERNATE:
>
> Just to make sure I understand things correctly, field will never be
> V4L2_FIELD_ALTERNATE after this patch, right ?
That is the intention, but as you noticed bellow it's not perfect until
4 patches later in the series, see bellow.
>
> > case V4L2_FIELD_NONE:
> > if (vin->continuous) {
> > vnmc = VNMC_IM_ODD_EVEN;
> > @@ -757,18 +756,6 @@ static int rvin_get_active_slot(struct rvin_dev *vin,
> > u32 vnms) return 0;
> > }
> >
> > -static enum v4l2_field rvin_get_active_field(struct rvin_dev *vin, u32
> > vnms)
> > -{
> > - if (vin->format.field == V4L2_FIELD_ALTERNATE) {
> > - /* If FS is set it's a Even field */
> > - if (vnms & VNMS_FS)
> > - return V4L2_FIELD_BOTTOM;
> > - return V4L2_FIELD_TOP;
> > - }
> > -
> > - return vin->format.field;
> > -}
> > -
> > static void rvin_set_slot_addr(struct rvin_dev *vin, int slot, dma_addr_t
> > addr) {
> > const struct rvin_video_format *fmt;
> > @@ -941,7 +928,7 @@ static irqreturn_t rvin_irq(int irq, void *data)
> > goto done;
> >
> > /* Capture frame */
> > - vin->queue_buf[slot]->field = rvin_get_active_field(vin, vnms);
> > + vin->queue_buf[slot]->field = vin->format.field;
> > vin->queue_buf[slot]->sequence = sequence;
> > vin->queue_buf[slot]->vb2_buf.timestamp = ktime_get_ns();
> > vb2_buffer_done(&vin->queue_buf[slot]->vb2_buf, VB2_BUF_STATE_DONE);
> > diff --git a/drivers/media/platform/rcar-vin/rcar-v4l2.c
> > b/drivers/media/platform/rcar-vin/rcar-v4l2.c index
> > ebcd78b1bb6e8cb6..cef9070884d93ba6 100644
> > --- a/drivers/media/platform/rcar-vin/rcar-v4l2.c
> > +++ b/drivers/media/platform/rcar-vin/rcar-v4l2.c
> > @@ -121,33 +121,6 @@ static int rvin_reset_format(struct rvin_dev *vin)
> > vin->format.colorspace = mf->colorspace;
> > vin->format.field = mf->field;
> >
> > - /*
> > - * 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 = RVIN_DEFAULT_FIELD;
> > - break;
> > - }
> > -
>
> I might be wrong, but if this function is called from S_STD or S_DV_TIMINGS
> and userspace calls G_FMT immediately after that, won't it get
> V4L2_FIELD_ALTERNATE (assuming that's what the sensor produces of course) ?
Yes you are correct, this is 'fixed' in 'rcar-vin: read subdevice format
for crop only when needed' where the format alignment rework is
completed.
I could add a specific hack which is removed 4 patches later or we can
we live with this problem until that time. Normally I would not hesitate
to fix this here, but since ALTERNATE is already broken before the
rework I wonder if the effort really is worth it. What would you
recommend?
None the less I'm impressed you found this, I wish to one day posses
your review skill!
>
> > rvin_reset_crop_compose(vin);
> >
> > vin->format.bytesperline = rvin_format_bytesperline(&vin->format);
> > @@ -233,15 +206,20 @@ static int __rvin_try_format(struct rvin_dev *vin,
> > switch (pix->field) {
> > case V4L2_FIELD_TOP:
> > case V4L2_FIELD_BOTTOM:
> > - case V4L2_FIELD_ALTERNATE:
> > - pix->height /= 2;
> > - source->height /= 2;
> > - break;
> > 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
>
> While at it, s/do/does/
>
> > + * userspace. It does support outputting INTERLACED so use
> > + * the VIN hardware to combine the two fields.
> > + */
> > + pix->field = V4L2_FIELD_INTERLACED;
> > + pix->height *= 2;
> > + break;
> > default:
> > pix->field = RVIN_DEFAULT_FIELD;
> > break;
>
> --
> Regards,
>
> Laurent Pinchart
>
--
Regards,
Niklas Söderlund
next prev parent reply other threads:[~2018-03-03 16:23 UTC|newest]
Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-03-02 1:57 [PATCH v11 00/32] rcar-vin: Add Gen3 with media controller Niklas Söderlund
2018-03-02 1:57 ` [PATCH v11 01/32] dt-bindings: media: rcar_vin: Reverse SoC part number list Niklas Söderlund
2018-03-02 9:27 ` Laurent Pinchart
2018-03-02 1:57 ` [PATCH v11 02/32] dt-bindings: media: rcar_vin: add device tree support for r8a774[35] Niklas Söderlund
2018-03-02 9:27 ` Laurent Pinchart
2018-03-02 1:57 ` [PATCH v11 03/32] rcar-vin: add Gen3 devicetree bindings documentation Niklas Söderlund
2018-03-02 1:57 ` [PATCH v11 04/32] rcar-vin: rename poorly named initialize and cleanup functions Niklas Söderlund
2018-03-02 1:57 ` [PATCH v11 05/32] rcar-vin: unregister video device on driver removal Niklas Söderlund
2018-03-02 1:57 ` [PATCH v11 06/32] rcar-vin: move subdevice handling to async callbacks Niklas Söderlund
2018-03-02 1:57 ` [PATCH v11 07/32] rcar-vin: move model information to own struct Niklas Söderlund
2018-03-02 1:57 ` [PATCH v11 08/32] rcar-vin: move max width and height information to chip information Niklas Söderlund
2018-03-02 1:57 ` [PATCH v11 09/32] rcar-vin: move functions regarding scaling Niklas Söderlund
2018-03-02 1:57 ` [PATCH v11 10/32] rcar-vin: all Gen2 boards can scale simplify logic Niklas Söderlund
2018-03-02 1:57 ` [PATCH v11 11/32] rcar-vin: set a default field to fallback on Niklas Söderlund
2018-03-02 9:29 ` Laurent Pinchart
2018-03-02 1:57 ` [PATCH v11 12/32] rcar-vin: fix handling of single field frames (top, bottom and alternate fields) Niklas Söderlund
2018-03-02 10:48 ` Laurent Pinchart
2018-03-03 16:23 ` Niklas Söderlund [this message]
2018-03-02 1:57 ` [PATCH v11 13/32] rcar-vin: update bytesperline and sizeimage calculation Niklas Söderlund
2018-03-02 9:44 ` Laurent Pinchart
2018-03-02 1:57 ` [PATCH v11 14/32] rcar-vin: align pixelformat check Niklas Söderlund
2018-03-02 1:57 ` [PATCH v11 15/32] rcar-vin: break out format alignment and checking Niklas Söderlund
2018-03-02 9:53 ` Laurent Pinchart
2018-03-03 16:11 ` Niklas Söderlund
2018-03-02 1:57 ` [PATCH v11 16/32] rcar-vin: read subdevice format for crop only when needed Niklas Söderlund
2018-03-02 11:06 ` Laurent Pinchart
2018-03-03 17:04 ` Niklas Söderlund
2018-03-02 1:57 ` [PATCH v11 17/32] rcar-vin: move media bus configuration to struct rvin_info Niklas Söderlund
2018-03-02 11:26 ` Laurent Pinchart
2018-03-03 13:57 ` Niklas Söderlund
2018-03-02 1:57 ` [PATCH v11 18/32] rcar-vin: enable Gen3 hardware configuration Niklas Söderlund
2018-03-02 1:57 ` [PATCH v11 19/32] rcar-vin: add function to manipulate Gen3 chsel value Niklas Söderlund
2018-03-02 11:31 ` Laurent Pinchart
2018-03-03 14:03 ` Niklas Söderlund
2018-03-02 1:57 ` [PATCH v11 20/32] rcar-vin: add flag to switch to media controller mode Niklas Söderlund
2018-03-02 1:57 ` [PATCH v11 21/32] rcar-vin: use different v4l2 operations in " Niklas Söderlund
2018-03-02 11:39 ` Laurent Pinchart
2018-03-02 1:57 ` [PATCH v11 22/32] rcar-vin: force default colorspace for media centric mode Niklas Söderlund
2018-03-02 9:59 ` Laurent Pinchart
2018-03-03 15:19 ` Niklas Söderlund
2018-03-02 1:57 ` [PATCH v11 23/32] rcar-vin: prepare for media controller mode initialization Niklas Söderlund
2018-03-02 1:57 ` [PATCH v11 24/32] rcar-vin: add group allocator functions Niklas Söderlund
2018-03-02 1:57 ` [PATCH v11 25/32] rcar-vin: change name of video device Niklas Söderlund
2018-03-02 1:57 ` [PATCH v11 26/32] rcar-vin: add chsel information to rvin_info Niklas Söderlund
2018-03-02 11:43 ` Laurent Pinchart
2018-03-02 1:57 ` [PATCH v11 27/32] rcar-vin: parse Gen3 OF and setup media graph Niklas Söderlund
2018-03-02 1:57 ` [PATCH v11 28/32] rcar-vin: add link notify for Gen3 Niklas Söderlund
2018-03-02 12:00 ` Laurent Pinchart
2018-03-03 15:49 ` Niklas Söderlund
2018-03-02 1:57 ` [PATCH v11 29/32] rcar-vin: extend {start,stop}_streaming to work with media controller Niklas Söderlund
2018-03-02 1:57 ` [PATCH v11 30/32] rcar-vin: enable support for r8a7795 Niklas Söderlund
2018-03-02 1:57 ` [PATCH v11 31/32] rcar-vin: enable support for r8a7796 Niklas Söderlund
2018-03-02 1:57 ` [PATCH v11 32/32] rcar-vin: enable support for r8a77970 Niklas Söderlund
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=20180303162339.GK12470@bigcity.dyn.berto.se \
--to=niklas.soderlund@ragnatech.se \
--cc=hverkuil@xs4all.nl \
--cc=kieran.bingham@ideasonboard.com \
--cc=laurent.pinchart@ideasonboard.com \
--cc=linux-media@vger.kernel.org \
--cc=linux-renesas-soc@vger.kernel.org \
--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;
as well as URLs for NNTP newsgroup(s).