[media] v4l2-ctrls: always send an event if a control changed implicitly
authorHans Verkuil <hans.verkuil@cisco.com>
Tue, 5 Jul 2011 10:09:26 +0000 (07:09 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Wed, 27 Jul 2011 20:55:38 +0000 (17:55 -0300)
By default no control events are sent to the application that caused the
control value or flags change (i.e. the control(s) passed to VIDIOC_S_CTRL
or VIDIOC_S_EXT_CTRLS). But if a change in one control causes a change in
another control that was not part of the control(s) in VIDIOC_S_CTRL or
S_EXT_CTRLS, then the application should be notified.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/v4l2-ctrls.c

index 1f84b96..0e8a28f 100644 (file)
@@ -712,10 +712,15 @@ static void new_to_cur(struct v4l2_fh *fh, struct v4l2_ctrl *ctrl,
                if (!is_cur_manual(ctrl->cluster[0]))
                        ctrl->flags |= V4L2_CTRL_FLAG_INACTIVE;
        }
-       if (changed || update_inactive)
+       if (changed || update_inactive) {
+               /* If a control was changed that was not one of the controls
+                  modified by the application, then send the event to all. */
+               if (!ctrl->is_new)
+                       fh = NULL;
                send_event(fh, ctrl,
                        (changed ? V4L2_EVENT_CTRL_CH_VALUE : 0) |
                        (update_inactive ? V4L2_EVENT_CTRL_CH_FLAGS : 0));
+       }
 }
 
 /* Copy the current value to the new value */