linux/drivers/media
Hans Verkuil eb5b16efb2 [media] v4l2-ctrls: improve discovery of controls of the same cluster
The implementation of VIDIOC_G/S/TRY_EXT_CTRLS in the control framework has
to figure out which controls in the control list belong to the same cluster.
Since controls belonging to the same cluster need to be handled as a unit,
this is important information.

It did that by going over the controls in the list and for each control that
belonged to a multi-control cluster it would walk the remainder of the list
to try and find controls that belong to that same cluster.

This approach has two disadvantages:

1) it was a potentially quadratic algorithm (although highly unlikely that
it would ever be that bad in practice).
2) it took place with the control handler's lock held.

Since we want to make it possible in the future to change control values
from interrupt context, doing a lot of work while holding a lock is not a
good idea.

In the new code the algorithm is no longer quadratic but linear in the
number of controls in the list. Also, it now can be done beforehand.

Another change that was made was to so the try and set at the same time.
Before when S_TRY_EXT_CTRLS was called it would 'try' the controls first,
and then it would 'set' them. The idea was that any 'try' errors would
prevent the 'set' from happening, thus avoiding having partially set
control lists.

However, this caused more problems than it solved because between the 'try'
and the 'set' changes might have happened, so it had to try a second time,
and since actual controls with a try_ctrl op are very rare (and those that
we have just adjust values and do not return an error), I've decided to
drop that two-stage approach and just combine try and set.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
2011-07-27 17:53:31 -03:00
..
common [media] xc4000: make checkpatch.pl happy 2011-07-27 17:52:40 -03:00
dvb [media] drxd, siano: Remove unused include linux/version.h 2011-07-27 17:53:12 -03:00
radio [media] v4l2-ctrls: fix and improve volatile control handling 2011-07-27 17:53:17 -03:00
rc [media] rc-core: lirc use unsigned int 2011-07-27 17:52:59 -03:00
video [media] v4l2-ctrls: improve discovery of controls of the same cluster 2011-07-27 17:53:31 -03:00
Kconfig [media] DVB: dvb-net, make the kconfig text helpful 2011-07-27 17:53:09 -03:00
Makefile [media] media: Entities, pads and links 2011-03-22 04:53:10 -03:00
media-device.c [media] media: Links setup 2011-03-22 04:53:16 -03:00
media-devnode.c [media] media: Fix media device minor registration 2011-06-01 13:24:23 -03:00
media-entity.c [media] media: Properly handle link flags in link setup, link notify callback 2011-04-17 07:43:32 -03:00