Re: Adding a control for Sensor Orientation

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

 



On Monday 16 February 2009 05:04:40 Trent Piepho wrote:
> On Sun, 15 Feb 2009, Mauro Carvalho Chehab wrote:
> > On Sun, 15 Feb 2009 10:29:03 +0100
> >
> > Hans de Goede <hdegoede@xxxxxxxxxx> wrote:
> > > > I think we should also be able to detect 90 and 270 degree
> > > > rotations. Or at the very least prepare for it. It's a safe bet to
> > > > assume that webcams will arrive that can detect portrait vs
> > > > landscape orientation.
> > >
> > > Handling those (esp on the fly) will be rather hard as width and
> > > height then get swapped. So lets worry about those when we need to.
> > > We will need an additional flag for those cases anyways.
> >
> > The camera rotation is something that is already needed, at least on
> > some embedded devices, like those cellular phones whose display changes
> > when you rotate the device.
> >
> > By looking at the v4l2_buffer struct, we currently have 4 reserved
> > bytes. It has also one flags field, with several bits not used. I can
> > see 2 possibilities to extend the API:
> >
> > 1) adding V4L2_BUF_FLAG_HFLIP and V4L2_BUF_FLAG_VFLIP flags. This would
> > work for 90, 180 and 270 rotation;
>
> HFLIP and VFLIP are only good for 0 and 180 degrees.  90 and 270 isn't
> the same as flipping.
>
> The problem I'm seeing here is that as people are using v4l2 for digital
> cameras instead of tv capture there is more and more meta-data available.
> Things like shutter speed, aperture, focus distance, and so on.  Just
> look at all the EXIF data a digital camera provides.  Four bytes and two
> flags are going to run out very quickly at this rate.
>
> It's a shame there are not 8 bytes left, as then they could be used for a
> pointer to an extended meta-data structure.

I think we have to distinguish between two separate types of data: fixed 
('the sensor is mounted upside-down', or 'the sensor always requires a 
hflip/vflip') and dynamic ('the user pivoted the camera 270 degrees').

The first is static data and I think we can just reuse the existing 
HFLIP/VFLIP controls: just make them READONLY to tell libv4l that libv4l 
needs to do the flipping.

The second is dynamic data and should be passed through v4l2_buffer since 
this can change on a per-frame basis. In this case add two bits to the 
v4l2_buffer's flags field:

V4L2_BUF_FLAG_ROTATION_MSK	0x0c00
V4L2_BUF_FLAG_ROTATION_0	0x0000
V4L2_BUF_FLAG_ROTATION_90	0x0400
V4L2_BUF_FLAG_ROTATION_180	0x0800
V4L2_BUF_FLAG_ROTATION_270	0x0c00

No need to use the reserved field.

This makes a lot more sense to me: static (or rarely changing) data does not 
belong to v4l2_buffer, that's what controls are for. And something dynamic 
like pivoting belongs to v4l2_buffer. This seems like a much cleaner API to 
me.

Regards,

	Hans

-- 
Hans Verkuil - video4linux developer - sponsored by TANDBERG
--
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