On Fri, 4 Dec 2009, Hans Verkuil wrote:
> > diff --git a/include/media/v4l2-mediabus.h b/include/media/v4l2-mediabus.h
> > new file mode 100644
> > index 0000000..5cf2a6d
> > --- /dev/null
> > +++ b/include/media/v4l2-mediabus.h
> > @@ -0,0 +1,61 @@
> > +/*
> > + * Media Bus API header
> > + *
> > + * Copyright (C) 2009, Guennadi Liakhovetski <[email protected]>
> > + *
> > + * This program is free software; you can redistribute it and/or modify
> > + * it under the terms of the GNU General Public License version 2 as
> > + * published by the Free Software Foundation.
> > + */
> > +
> > +#ifndef V4L2_MEDIABUS_H
> > +#define V4L2_MEDIABUS_H
> > +
> > +/*
> > + * 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_2X8,
> > + V4L2_MBUS_FMT_YVYU8_2X8,
> > + V4L2_MBUS_FMT_UYVY8_2X8,
> > + V4L2_MBUS_FMT_VYUY8_2X8,
>
> Darn, I was so hoping that I could sign off on it, but this makes no sense
> now.
>
> Either it is:
>
> V4L2_MBUS_FMT_YUYV8_1X8,
> V4L2_MBUS_FMT_YVYU8_1X8,
> V4L2_MBUS_FMT_UYVY8_1X8,
> V4L2_MBUS_FMT_VYUY8_1X8
>
> where the 'YUYV' code tells you the order of the Y, U and V samples over the
> bus, or it is:
>
> V4L2_MBUS_FMT_YUYV8_2X8_BE,
> V4L2_MBUS_FMT_YUYV8_2X8_LE,
> V4L2_MBUS_FMT_YVYU8_2X8_BE,
> V4L2_MBUS_FMT_YVYU8_2X8_LE,
>
> Where the BE or LE suffix tells you the order in which the YU/YV pairs are
> arriving.
No. In nXk n is the number of k-bit wide _electrical_ samples of the bus
to get (an equivalent of) one _pixel_. So, for 16-bit formats on 8-bit bus
it's _definitely_ 2X8.
And no, BE and LE is the order of _samples_ within one _pixel_, not the
order of pixels within one megapixel ("YU/YV pairs are arriving"), but
that's also what you meant above, judging by the names.
So, I'll go with the 2X8_[LB]E variant, where
YUYV8_2X8_LE == YUYV with LE packing
YUYV8_2X8_BE == UYVY with LE packing
YVYU8_2X8_LE == YVYU with LE packing
YVYU8_2X8_BE == VYUY with LE packing
> Personally I prefer the first (1X8) representation.
> Just pick one of these two and you can send it again and add my signed-off-by:
>
> Signed-off-by: Hans Verkuil <[email protected]>
I'll make it an "Acked-by." You can only put an Sob, if you forward a
patch. Otherwise you can only add an Acked-by or a Reviewed-by.
Thanks
Guennadi
>
> Regards,
>
> Hans
>
> > + 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_LE,
> > + V4L2_MBUS_FMT_SBGGR10_2X8_PADLO_LE,
> > + V4L2_MBUS_FMT_SBGGR10_2X8_PADHI_BE,
> > + V4L2_MBUS_FMT_SBGGR10_2X8_PADLO_BE,
> > +};
> > +
> > +/**
> > + * struct v4l2_mbus_framefmt - frame format on the media bus
> > + * @width: frame width
> > + * @height: frame height
> > + * @code: data format code
> > + * @field: used interlacing type
> > + * @colorspace: colorspace of the data
> > + */
> > +struct v4l2_mbus_framefmt {
> > + __u32 width;
> > + __u32 height;
> > + enum v4l2_mbus_pixelcode code;
> > + enum v4l2_field field;
> > + enum v4l2_colorspace colorspace;
> > +};
> > +
> > +#endif
> > diff --git a/include/media/v4l2-subdev.h b/include/media/v4l2-subdev.h
> > index 544ce87..c53d462 100644
> > --- a/include/media/v4l2-subdev.h
> > +++ b/include/media/v4l2-subdev.h
> > @@ -22,6 +22,7 @@
> > #define _V4L2_SUBDEV_H
> >
> > #include <media/v4l2-common.h>
> > +#include <media/v4l2-mediabus.h>
> >
> > /* generic v4l2_device notify callback notification values */
> > #define V4L2_SUBDEV_IR_RX_NOTIFY _IOW('v', 0, u32)
> > @@ -207,7 +208,7 @@ struct v4l2_subdev_audio_ops {
> > s_std_output: set v4l2_std_id for video OUTPUT devices. This is ignored
> > by
> > video input devices.
> >
> > - s_crystal_freq: sets the frequency of the crystal used to generate the
> > + s_crystal_freq: sets the frequency of the crystal used to generate the
> > clocks in Hz. An extra flags field allows device specific configuration
> > regarding clock frequency dividers, etc. If not used, then set flags
> > to 0. If the frequency is not supported, then -EINVAL is returned.
> > @@ -217,6 +218,14 @@ struct v4l2_subdev_audio_ops {
> >
> > s_routing: see s_routing in audio_ops, except this version is for video
> > devices.
> > +
> > + enum_mbus_fmt: enumerate pixel formats, provided by a video data source
> > +
> > + g_mbus_fmt: get the current pixel format, provided by a video data
> > source
> > +
> > + try_mbus_fmt: try to set a pixel format on a video data source
> > +
> > + s_mbus_fmt: set a pixel format on a video data source
> > */
> > struct v4l2_subdev_video_ops {
> > int (*s_routing)(struct v4l2_subdev *sd, u32 input, u32 output, u32
> > config);
> > @@ -240,6 +249,14 @@ struct v4l2_subdev_video_ops {
> > int (*s_parm)(struct v4l2_subdev *sd, struct v4l2_streamparm *param);
> > int (*enum_framesizes)(struct v4l2_subdev *sd, struct v4l2_frmsizeenum
> > *fsize);
> > int (*enum_frameintervals)(struct v4l2_subdev *sd, struct
> > v4l2_frmivalenum *fival);
> > + int (*enum_mbus_fmt)(struct v4l2_subdev *sd, int index,
> > + enum v4l2_mbus_pixelcode *code);
> > + int (*g_mbus_fmt)(struct v4l2_subdev *sd,
> > + struct v4l2_mbus_framefmt *fmt);
> > + int (*try_mbus_fmt)(struct v4l2_subdev *sd,
> > + struct v4l2_mbus_framefmt *fmt);
> > + int (*s_mbus_fmt)(struct v4l2_subdev *sd,
> > + struct v4l2_mbus_framefmt *fmt);
> > };
> >
> > /**
> > --
> > 1.6.2.4
> >
> >
>
---
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 [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html