mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-06 02:24:14 +08:00
[media] pwc: Handle V4L2_CTRL_FLAG_NEXT_CTRL in queryctrl
Signed-off-by: Jean-François Moine <moinejf@free.fr> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
fd20650849
commit
6588687a60
@ -379,8 +379,27 @@ static int pwc_s_input(struct file *file, void *fh, unsigned int i)
|
|||||||
|
|
||||||
static int pwc_queryctrl(struct file *file, void *fh, struct v4l2_queryctrl *c)
|
static int pwc_queryctrl(struct file *file, void *fh, struct v4l2_queryctrl *c)
|
||||||
{
|
{
|
||||||
int i;
|
int i, idx;
|
||||||
|
u32 id;
|
||||||
|
|
||||||
|
id = c->id;
|
||||||
|
if (id & V4L2_CTRL_FLAG_NEXT_CTRL) {
|
||||||
|
id &= V4L2_CTRL_ID_MASK;
|
||||||
|
id++;
|
||||||
|
idx = -1;
|
||||||
|
for (i = 0; i < ARRAY_SIZE(pwc_controls); i++) {
|
||||||
|
if (pwc_controls[i].id < id)
|
||||||
|
continue;
|
||||||
|
if (idx >= 0
|
||||||
|
&& pwc_controls[i].id > pwc_controls[idx].id)
|
||||||
|
continue;
|
||||||
|
idx = i;
|
||||||
|
}
|
||||||
|
if (idx < 0)
|
||||||
|
return -EINVAL;
|
||||||
|
memcpy(c, &pwc_controls[idx], sizeof pwc_controls[0]);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
for (i = 0; i < sizeof(pwc_controls) / sizeof(struct v4l2_queryctrl); i++) {
|
for (i = 0; i < sizeof(pwc_controls) / sizeof(struct v4l2_queryctrl); i++) {
|
||||||
if (pwc_controls[i].id == c->id) {
|
if (pwc_controls[i].id == c->id) {
|
||||||
PWC_DEBUG_IOCTL("ioctl(VIDIOC_QUERYCTRL) found\n");
|
PWC_DEBUG_IOCTL("ioctl(VIDIOC_QUERYCTRL) found\n");
|
||||||
|
Loading…
Reference in New Issue
Block a user