From: Tomasz Stanislawski <t.stanislaws@samsung.com>
To: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>,
Hans Verkuil <hverkuil@xs4all.nl>,
Sakari Ailus <sakari.ailus@iki.fi>,
Sylwester Nawrocki <sylvester.nawrocki@gmail.com>,
linux-media <linux-media@vger.kernel.org>
Subject: Re: [RFC v3] [RFC] v4l2: Support for multiple selections
Date: Thu, 24 Oct 2013 12:31:48 +0200 [thread overview]
Message-ID: <5268F714.3090004@samsung.com> (raw)
In-Reply-To: <1380623614-26265-1-git-send-email-ricardo.ribalda@gmail.com>
Hi Ricardo,
I am the designer of selection API. I hope I can help you a little.
I think that there are two issues mixed in 'Mulitple selections' topic.
Firstly, you described that you program a piece of hardware that is
capable of selecting 8 areas for scanning. Now you
are looking for userspace API to support such a feature.
The feature of posting multiple rectangle was proposed in this RFC.
Secondly, You introduced struct v4l2_ext_rect which is a future-proof
version of v4l2_rect.
I think that both issues should be solved in two separate patchsets.
Ad 1.
The selection of multiple scanning areas is a very driver-specific
feature, isn't it? I think that you do not need to introduce any abstract
interface. What would be other applications of the proposed interface?
Do you know other drivers that may need it? Sakari mentioned introduction
of private targets for selections. I like this idea. Just define:
#define V4L2_SEL_TGT_PRIVATE 0x80000000
All targets that are >= V4L2_SEL_TGT_PRIVATE are driver-specific.
Generic applications must not use them. Non-generic application
must check out the driver of video node before using selections
from private set. If some target becomes more useful and accepted
by more then one driver then it can be moved to generic API.
The good thing about private target is that enums from different
drivers can collide so the target space is not going to be trashed.
But how to deal with multiple rectangles?
I have an auxiliary question. Do you have to set all rectangles
at once? can you set up them one by one?
Anyway, first try to define something like this:
#define V4L2_SEL_TGT_XXX_SCANOUT0 V4L2_SEL_TGT_PRIVATE
#define V4L2_SEL_TGT_XXX_SCANOUT0_DEFAULT (V4L2_SEL_TGT_XXX_SCANOUT0 + 1)
#define V4L2_SEL_TGT_XXX_SCANOUT0_BOUNDS (V4L2_SEL_TGT_XXX_SCANOUT0 + 2)
#define V4L2_SEL_TGT_XXX_SCANOUT0 (V4L2_SEL_TGT_PRIVATE + 16)
...
-- OR-- parametrized macros similar to one below:
#define V4L2_SEL_TGT_XXX_SCANOUT(n) (V4L2_SEL_TGT_PRIVATE + 16 * (n))
The application could setup all scanout areas one-by-one.
By default V4L2_SEL_TGT_XXX_SCANOUT0 would be equal to the whole array.
The height of all consecutive area would be 0. This means disabling
them effectively.
The change of V4L2_SEL_TGT_XXX_SCANOUT0 would influence all consequtive
rectangle by shifting them down or resetting them to height 0.
Notice that as long as targets are driver specific you are free do define
interaction between the targets.
I hope that proposed solution is satisfactory.
BTW. I think that the HW trick you described is not cropping.
By cropping you select which part of sensor area is going
to be processed into compose rectangle in a buffer.
So technicaly you still insert the whole sensor area into the buffer.
Only part of the buffer is actually updated. So there is no cropping
(cropping area is equal to the whole array).
Notice, that every 'cropping' area goes to different part of a buffer.
So you would need also muliple targets for composing (!!!) and very long
chapter in V4L2 doc describing interactions between muliple-rectangle
crops and compositions. Good luck !!! :).
Currently it is a hell to understand and define interaction between
single crop, and compose and unfamous VIDIOC_S_FMT and m2m madness.
I strongly recommend to use private selections.
It will be much simpler to define, implement, and modify if needed.
BTW2. I think that the mulitple scanout areas can be modelled using
media device API. Sakari may know how to do this.
Ad 2. Extended rectangles.
It is a good idea because v4l2_rect lacks any place for extensions.
But before adding it to V4L2 API, I would like to know the examples
of actual applications. Please, point drivers that actually need it.
Other thing worth mentioning is reservation of few bits from
v4l2_selection::flags to describe the type of data used for
rectangle, v4l2_rect or v4l2_ext_rect. This way one can avoid
introducting v4l2_selection::rectangles field.
I hope you find this comments useful.
Regards,
Tomasz Stanislawski
next prev parent reply other threads:[~2013-10-24 10:31 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-01 10:33 [RFC v3] [RFC] v4l2: Support for multiple selections Ricardo Ribalda Delgado
2013-10-13 9:29 ` Ricardo Ribalda Delgado
2013-10-24 10:31 ` Tomasz Stanislawski [this message]
2013-10-28 22:46 ` Ricardo Ribalda Delgado
2013-11-12 14:54 ` Tomasz Stanislawski
2013-11-14 10:18 ` Hans Verkuil
2013-11-14 15:40 ` Tomasz Stanislawski
2013-12-10 9:46 ` Ricardo Ribalda Delgado
2013-12-19 12:34 ` Tomasz Stanislawski
2013-12-19 13:17 ` Ricardo Ribalda Delgado
2013-12-10 8:37 ` Ricardo Ribalda Delgado
2013-12-19 11:09 ` Tomasz Stanislawski
2013-12-19 11:45 ` Hans Verkuil
2013-12-19 11:59 ` Hans Verkuil
2013-12-19 13:30 ` Tomasz Stanislawski
2013-12-19 13:37 ` Hans Verkuil
2013-12-19 11:57 ` Ricardo Ribalda Delgado
2013-10-29 22:15 ` Sakari Ailus
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=5268F714.3090004@samsung.com \
--to=t.stanislaws@samsung.com \
--cc=hverkuil@xs4all.nl \
--cc=linux-media@vger.kernel.org \
--cc=ricardo.ribalda@gmail.com \
--cc=sakari.ailus@iki.fi \
--cc=sylvester.nawrocki@gmail.com \
/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.