public inbox for linux-media@vger.kernel.org
 help / color / mirror / Atom feed
From: Hans de Goede <hdegoede@redhat.com>
To: kilgota@banach.math.auburn.edu
Cc: Hans Verkuil <hverkuil@xs4all.nl>,
	Adam Baker <linux@baker-net.org.uk>,
	linux-media@vger.kernel.org,
	Jean-Francois Moine <moinejf@free.fr>,
	Olivier Lorin <o.lorin@laposte.net>
Subject: Re: Adding a control for Sensor Orientation
Date: Sun, 15 Feb 2009 10:08:04 +0100	[thread overview]
Message-ID: <4997DB74.6000108@redhat.com> (raw)
In-Reply-To: <alpine.LNX.2.00.0902141624410.315@banach.math.auburn.edu>



kilgota@banach.math.auburn.edu wrote:
> 
> 
> On Sat, 14 Feb 2009, Hans Verkuil wrote:
> 
>> On Saturday 14 February 2009 22:55:39 Hans de Goede wrote:
>>> Adam Baker wrote:
>>>> Hi all,
>>>>
>>>> Hans Verkuil put forward a convincing argument that sensor orientation
>>>> shouldn't be part of the buffer flags as then it would be unavailable
>>>> to clients that use read()
>>>
>>> Yes and this is a bogus argument, clients using read also do not get
>>> things like timestamps, and vital information like which field is in the
>>> read buffer when dealing with interleaved sources. read() is a simple
>>> interface for simple applications. Given that the only user of these
>>> flags will likely be libv4l I *strongly* object to having this info in
>>> some control, it is not a control, it is a per frame (on some cams)
>>> information about how to interpret that frame, the buffer flags is a 
>>> very
>>> logical place, *the* logical place even for this!
>>>
>>> The fact that there is no way to transport metadata about a frame like
>>> flags, but also timestamp and field! Is a problem with the read 
>>> interface
>>> in general, iow read() is broken wrt to this. If people care add some
>>> ioctl or something which users of read() can use to get the buffer
>>> metadata from the last read() buffer, stuffing buffer metadata in a
>>> control (barf), because of read() brokenness is a very *bad* idea, and
>>> won't work in general due to synchronization problems.
>>>
>>> Doing this as a control will be a pain to implement both at the driver
>>> level, see the discussion this is causing, and in libv4l. For libv4l 
>>> this
>>> will basicly mean polling the control. And hello polling is lame and
>>> something from the 1980-ies.
>>>
>>> Please just make this a buffer flag.
>>
>> OK, make it a buffer flag. I've got to agree that it makes more sense 
>> to do
>> it that way.
>>
>> Regards,
>>
>>     Hans
>>
>> -- 
>> Hans Verkuil - video4linux developer - sponsored by TANDBERG
>>
> 
> Let me take a moment to remind everyone what the problem is that brought 
> this discussion up. Adam Baker and I are working on a driver for a 
> certain camera. Or, better stated, for a set of various cameras, which 
> all have the same USB Vendor:Product number. Various cameras which all 
> have this ID have different capabilities and need different treatment of 
> the frame data.
> 
> The most particular problem is that some of the cameras require byte 
> reversal of the frame data string, which would rotate the image 180 
> degrees around its center. Others of these cameras require reversal of 
> the horizontal lines in the image (vertical 180 degree rotation of the 
> image across a horizontal axis).
> 
> The point is, one can not tell from the Vendor:Product number which of 
> these actions is required. However, one *is* able to tell immediately 
> after the camera is initialized, which of these actions is required. 
> Namely, one reads and parses the response to the first USB command sent 
> to the camera.
> 
> So, for us (Adam and me) the question is simply to know how everyone 
> will agree that the information about the image orientation can be sent 
> from the module to V4L. When this issue is resolved, we can finish 
> writing the sq905 camera driver. From this rather narrow point of view, 
> the issue is not which method ought to be adopted. Rather, the issue is 
> that no method has been adopted. It is rather difficult to write module 
> code which will obey a non-existent standard.
> 

Ack, but the problem later was extended by the fact that it turns out some cams 
have a rotation detection (gravity direction) switch, which means you can flip 
the cam on its socket while streaming, and then the cam will tell you its 
rotation has changed, that makes this a per frame property rather then a static 
property of the cam. Which lead to this discussion, but we (the 2 Hans 's) 
agree now that using the flags field in the buffer struct is the best way 
forward. So there is a standard now, simply add 2 buffer flags to videodev2.h, 
one for content is h-flipped and one for content is v-flipped and you are done.

Regards,

Hans

  reply	other threads:[~2009-02-15  9:03 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-02-14 20:48 Adding a control for Sensor Orientation Adam Baker
2009-02-14 21:04 ` Hans Verkuil
2009-02-14 21:55 ` Hans de Goede
2009-02-14 21:59   ` Hans Verkuil
2009-02-14 22:44     ` kilgota
2009-02-15  9:08       ` Hans de Goede [this message]
2009-02-15  9:19         ` Hans Verkuil
2009-02-15  9:29           ` Hans de Goede
2009-02-15 13:03             ` Trent Piepho
2009-02-15 13:46               ` Hans de Goede
2009-02-15 23:09                 ` Trent Piepho
2009-02-16  1:46                   ` kilgota
2009-02-16  3:47                     ` hermann pitton
2009-02-16  3:55                     ` Trent Piepho
2009-02-16  8:30                     ` Hans de Goede
2009-02-16  2:26             ` Mauro Carvalho Chehab
2009-02-16  4:04               ` Trent Piepho
2009-02-16  7:44                 ` Hans Verkuil
2009-02-16  8:37                   ` Hans de Goede
  -- strict thread matches above, loose matches on Subject: below --
2009-02-16  8:33 Hans Verkuil
2009-02-16 22:36 ` Adam Baker
2009-02-17  2:00   ` kilgota
2009-02-17  7:27     ` Hans Verkuil
2009-02-17 22:29       ` Adam Baker
2009-02-16  8:57 Hans Verkuil
2009-02-16  9:07 Hans Verkuil
2009-02-16  9:44 ` Hans de Goede
2009-02-16 11:11   ` Mauro Carvalho Chehab
2009-02-16 12:19     ` Hans de Goede
2009-02-16 14:20       ` Mauro Carvalho Chehab
2009-02-16 15:00       ` Mauro Carvalho Chehab
2009-02-16 15:24         ` Hans de Goede
2009-02-16 11:01 Hans Verkuil
2009-02-16 11:12 ` Jean-Francois Moine
2009-02-16 12:07 ` Hans de Goede
2009-02-16 12:02 Hans Verkuil
2009-02-16 14:00 Hans Verkuil
2009-02-16 14:25 ` Hans de Goede
2009-02-16 16:09 ` Trent Piepho

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=4997DB74.6000108@redhat.com \
    --to=hdegoede@redhat.com \
    --cc=hverkuil@xs4all.nl \
    --cc=kilgota@banach.math.auburn.edu \
    --cc=linux-media@vger.kernel.org \
    --cc=linux@baker-net.org.uk \
    --cc=moinejf@free.fr \
    --cc=o.lorin@laposte.net \
    /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