Re: [PATCH 1/2 v3] v4l: add a media-bus API for configuring v4l2 subdev pixel and frame formats

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

 



On Wednesday 02 December 2009 13:32:35 Guennadi Liakhovetski wrote:
> Hi Hans
>
> On Wed, 2 Dec 2009, Hans Verkuil wrote:
> > On Tuesday 01 December 2009 16:22:55 Guennadi Liakhovetski wrote:
> > > On Tue, 1 Dec 2009, Hans Verkuil wrote:
> > > > On Monday 30 November 2009 14:49:07 Guennadi Liakhovetski wrote:
> > > > > Right, how about this:
> > > > >
> > > > > /*
> > > > >  * These pixel codes uniquely identify data formats on the media
> > > > > bus. Mostly * they correspond to similarly named V4L2_PIX_FMT_*
> > > > > formats, format 0 is * reserved, V4L2_MBUS_FMT_FIXED shall be used
> > > > > by host-client pairs, where the * data format is fixed.
> > > > > Additionally, "2X8" means that one pixel is transferred * in two
> > > > > 8-bit samples, "BE" or "LE" specify in which order those samples
> > > > > are * transferred over the bus: "LE" means that the least
> > > > > significant bits are * transferred first, "BE" means that the most
> > > > > significant bits are transferred * first, and "PADHI" and "PADLO"
> > > > > define which bits - low or high, in the * incomplete high byte, are
> > > > > filled with padding bits.
> > > > >  */
> > > > > enum v4l2_mbus_pixelcode {
> > > > > 	V4L2_MBUS_FMT_FIXED = 1,
> > > > > 	V4L2_MBUS_FMT_YUYV_2X8_LE,
> > > > > 	V4L2_MBUS_FMT_YVYU_2X8_LE,
> > > > > 	V4L2_MBUS_FMT_UYVY_2X8_LE,
> > > > > 	V4L2_MBUS_FMT_VYUY_2X8_LE,
> > > >
> > > > These possibly may need a comment saying that each Y/U/V sample is 8
> > > > bits wide. I'm not sure how far we want to go with systematic naming
> > > > schemes here. Adding a short comment if there is a possible ambiguity
> > > > is probably sufficient.
> > >
> > > Is there an ambiguity? Aren't these formats standardised?
> >
> > HDMI receivers/transmitters can do YUV with 8, 10 or 12 bits. So when you
> > say YUYV_2X8_LE do you mean that 10 bits are transported over two bytes,
> > or that a Y and a U (or V) are transferred one after another? From the
> > absence of a PADHI or PADLO I can infer that it is the latter, but it is
> > not exactly obvious.
> >
> > Actually, why not name these formats YUYV8, etc. and the order of the
> > bytes going over the bus is just the order of the text 'YUYV'. There is
> > not really any big or little endian issues since you just need to know
> > the sequence of Ys, Us and Vs.
>
> Ok, we could keep discussing these things for a while, but I don't think
> we have that time, and it's not _that_ important to me what these things
> will be called - will use whatever names there are.

I agree that this is dragging on a bit too long. The main reason is my busy 
schedule since normally we could hash this out quickly on irc. Apologies for 
that.

> Just to explain 2X8 - this notation comes from packing and means, to get
> one _pixel_ you need two 8-bit wide samples. With YUYV one pixel is
> defined as YU or YV, so, that gives you (at most) 8 bits per component.
>
> Ok, I'm planning to submit a version of this patch a bit later today with
> names like
>
> enum v4l2_mbus_pixelcode {
> 	V4L2_MBUS_FMT_FIXED = 1,
> 	V4L2_MBUS_FMT_YUYV8,
> 	V4L2_MBUS_FMT_YVYU8,
>
> according to your last suggestion.
>
> > > Do we then have
> > > to explain what rgb555 means etc?
> > >
> > > > > 	V4L2_MBUS_FMT_RGB555_2X8_PADHI_LE,
> > > > > 	V4L2_MBUS_FMT_RGB555X_2X8_PADHI_LE,
> > > >
> > > > Shouldn't this be: V4L2_MBUS_FMT_RGB555_2X8_PADHI_BE? Since the 555X
> > > > format is just the big-endian variant of the RGB555 if I am not
> > > > mistaken.
> > >
> > > No, don't think so. As an RGB555X format it is sent in LE order, if you
> > > send RGB555X in BE order you get RGB555 (without an "X"). In fact,
> > > you'll never have a RGB555X_BE format, because, that's just the
> > > RGB555_LE. So, you may only have BE variants for formats, whoch
> > > byte-swapped variants do not have an own name.
> >
> > RGB 5:5:5 consists of 16 bits arrrrrgg gggbbbbb ('a' is either padding or
> > an alpha bit).
>
> From what I read, RGB555 has high bit unused. With the alpha bit (or
> transparency bit) it's already RGBA or RGBT.
>
> > RGB 5:5:5 over an 8 bit data bus is either with the MSB byte first (big
> > endian aka RGB555X aka RGB555_2X8_PADHI_BE) or with the LSB byte first
> > (little endian aka RGB555 aka RGB555_2X8_PADHI_LE).
> >
> > The use of RGB555X in the pixel formats is a really ugly accident of
> > history. 'RGB555' is the name of the format, and _LE or _BE should define
> > what the order of the LSB and MSB over the data bus is.
>
> So, I'll make them
>
> 	V4L2_MBUS_FMT_RGB555_2X8_PADHI_LE,
> 	V4L2_MBUS_FMT_RGB555_2X8_PADHI_BE,
>
> and "555X" will just vanish?

Yup.

>
> > > > > 	V4L2_MBUS_FMT_RGB565_2X8_LE,
> > > > > 	V4L2_MBUS_FMT_RGB565X_2X8_LE,
> > > >
> > > > Ditto.
> > > >
> > > > > 	V4L2_MBUS_FMT_SBGGR8_1X8,
> > > > > 	V4L2_MBUS_FMT_SBGGR10_1X10,
> > > > > 	V4L2_MBUS_FMT_GREY_1X8,
> > > >
> > > > This is also 8 bits per sample, right? This might be renamed to
> > > > GREY8_1X8.
> > >
> > > I named it after V4L2_PIX_FMT_GREY. If we ever get GREY7 or similar, I
> > > think, we anyway will need a new fourcc code for it, then we'll call
> > > the MBUS_FMT similarly.
> >
> > Why not do it right from the start? Frankly, the PIX_FMT names aren't
> > that great. And since this will become a public API in the future I think
> > it is reasonable to spend some time on it (and it is the reason why I'm
> > so picky about it :-) ).
>
> The whole then becomes:
>
> /*
>  * These pixel codes uniquely identify data formats on the media bus.
> Mostly * they correspond to similarly named V4L2_PIX_FMT_* formats, format
> 0 is * reserved, V4L2_MBUS_FMT_FIXED shall be used by host-client pairs,
> where the * data format is fixed. Additionally, "2X8" means that one pixel
> is transferred * in two 8-bit samples, "BE" or "LE" specify in which order
> those samples are * transferred over the bus: "LE" means that the least
> significant bits are * transferred first, "BE" means that the most
> significant bits are transferred * first, and "PADHI" and "PADLO" define
> which bits - low or high, in the * incomplete high byte, are filled with
> padding bits.
>  */
> enum v4l2_mbus_pixelcode {
> 	V4L2_MBUS_FMT_FIXED = 1,
> 	V4L2_MBUS_FMT_YUYV8,
> 	V4L2_MBUS_FMT_YVYU8,
> 	V4L2_MBUS_FMT_UYVY8,
> 	V4L2_MBUS_FMT_VYUY8,
> 	V4L2_MBUS_FMT_RGB555_2X8_PADHI_LE,
> 	V4L2_MBUS_FMT_RGB555_2X8_PADHI_BE,
> 	V4L2_MBUS_FMT_RGB565_2X8_LE,
> 	V4L2_MBUS_FMT_RGB565_2X8_BE,
> 	V4L2_MBUS_FMT_SBGGR8_1X8,
> 	V4L2_MBUS_FMT_SBGGR10_1X10,
> 	V4L2_MBUS_FMT_GREY8_1X8,
> 	V4L2_MBUS_FMT_Y10_1X10,
> 	V4L2_MBUS_FMT_SBGGR10_2X8_PADHI_BE,
> 	V4L2_MBUS_FMT_SBGGR10_2X8_PADLO_BE,
> 	V4L2_MBUS_FMT_SBGGR10_2X8_PADHI_LE,
> 	V4L2_MBUS_FMT_SBGGR10_2X8_PADLO_LE,
> };
>
> Agree? Would be much appreciated if you could reply yet today.

Looking at this I propose that we drop the '_1X8' and '_1X10' suffixes. I 
think it is reasonable to assume that without that suffix all pins are used 
for each sample.

Either that or we need to add _1X8 to the four YUV formats at the start to be 
consistent, but I prefer to just drop it. I leave this up to you.

Regards,

	Hans

PS: I really appreciate the work you are doing. If I sometimes sound abrupt 
then that has everything to do with lack of time on my side and nothing to do 
with the great job you are doing.

>
> Thanks
> Guennadi
> ---
> Guennadi Liakhovetski, Ph.D.
> Freelance Open-Source Software Developer
> http://www.open-technology.de/

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[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