From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Philipp Zabel <p.zabel@pengutronix.de>
Cc: linux-media@vger.kernel.org,
Mauro Carvalho Chehab <m.chehab@samsung.com>,
Hans Verkuil <hans.verkuil@cisco.com>,
kernel@pengutronix.de,
Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Subject: Re: [RFC v2] [media] v4l2: add V4L2 pixel format array and helper functions
Date: Thu, 28 Aug 2014 14:24:49 +0200 [thread overview]
Message-ID: <2323863.aLBeKZnVsL@avalon> (raw)
In-Reply-To: <1409131814.3623.40.camel@paszta.hi.pengutronix.de>
Hi Philipp,
On Wednesday 27 August 2014 11:30:14 Philipp Zabel wrote:
> Am Dienstag, den 26.08.2014, 12:01 +0200 schrieb Laurent Pinchart:
> [...]
>
> > > +};
> > > +
> > > +const struct v4l2_pixfmt *v4l2_pixfmt_by_fourcc(u32 fourcc)
> > > +{
> > > + int i;
> >
> > The loop counter is always positive, it can be an unsigned int.
>
> I'll change that.
>
> > > + for (i = 0; i < ARRAY_SIZE(v4l2_pixfmts); i++) {
> > > + if (v4l2_pixfmts[i].pixelformat == fourcc)
> > > + return v4l2_pixfmts + i;
> > > + }
> >
> > We currently have 123 pixel formats defined, and that number will keep
> > increasing. I wonder if something more efficient than an O(n) array lookup
> > would be worth it.
>
> How about a function similar to soc_mbus_find_fmtdesc that uses an array
> provided by the driver:
>
> const struct v4l2_pixfmt_info *v4l2_find_pixfmt(u32 pixelformat,
> const struct v4l2_pixfmt_info *array, unsigned int len)
> {
> unsigned int i;
>
> for (i = 0; i < len; i++) {
> if (pixelformat == array[i].pixelformat)
> return array + i;
> }
>
> return NULL;
> }
>
> And a function to fill this driver specific array from the global array
> once:
>
> void v4l2_init_pixfmt_array(struct v4l2_pixfmt_info *array, int len)
> {
> unsigned int i;
>
> for (i = 0; i < len; i++)
> array[i] = *v4l2_pixfmt_by_fourcc(array[i].pixelformat);
> }
>
> A driver could then do the following:
>
> static struct v4l2_pixfmt_info driver_formats[] = {
> { .pixelformat = V4L2_PIX_FMT_YUYV },
> { .pixelformat = V4L2_PIX_FMT_YUV420 },
> };
>
> int driver_probe(...)
> {
> ...
> v4l2_init_pixfmt_array(driver_formats,
> ARRAY_SIZE(driver_formats));
> ...
> }
Good question. This option consumes more memory, and prevents the driver-
specific format info arrays to be const, which bothers me a bit. On the other
hand it allows drivers to override some of the default values for odd cases. I
won't nack this approach, but I'm wondering whether a better solution wouldn't
be possible. Hans, Mauro, Guennadi, any opinion ?
> [...]
>
> > > +unsigned int v4l2_sizeimage(const struct v4l2_pixfmt *fmt, unsigned int
> > > width,
> > > + unsigned int height)
> > > +{
> >
> > A small comment would be useful here to explain why we don't round up in
> > the second case.
>
> Agreed, I think the YUV410 case is a good example for this.
>
> [...]
>
> > > +/**
> > > + * struct v4l2_pixfmt - internal V4L2 pixel format description
> >
> > Maybe struct v4l2_pixfmt_info ?
>
> That's fine with me.
--
Regards,
Laurent Pinchart
next prev parent reply other threads:[~2014-08-28 12:23 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-08-26 9:00 [RFC v2] [media] v4l2: add V4L2 pixel format array and helper functions Philipp Zabel
2014-08-26 10:01 ` Laurent Pinchart
2014-08-27 9:30 ` Philipp Zabel
2014-08-28 12:24 ` Laurent Pinchart [this message]
2014-08-28 16:09 ` Philipp Zabel
2014-08-28 16:25 ` Laurent Pinchart
2014-08-28 16:40 ` Hans Verkuil
2014-08-28 17:18 ` Mauro Carvalho Chehab
2014-08-28 17:32 ` Hans Verkuil
2014-08-28 17:41 ` Hans Verkuil
2014-09-02 10:00 ` Philipp Zabel
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=2323863.aLBeKZnVsL@avalon \
--to=laurent.pinchart@ideasonboard.com \
--cc=g.liakhovetski@gmx.de \
--cc=hans.verkuil@cisco.com \
--cc=kernel@pengutronix.de \
--cc=linux-media@vger.kernel.org \
--cc=m.chehab@samsung.com \
--cc=p.zabel@pengutronix.de \
/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.