def set_controls(fd, input_or_output): # first we get the controls through enumeration queryctrls = list(get_device_controls_by_class(fd, class_)) control_array = (v4l2.v4l2_ext_control * len(queryctrls))() for index, queryctrl in enumerate(queryctrls): control_array[index].id = queryctrl.id ext_controls = v4l2.v4l2_ext_controls(class_, len(queryctrls)) ext_controls.controls = control_array # we store the original values so we can set them back later try: ioctl(fd, v4l2.VIDIOC_G_EXT_CTRLS, ext_controls) except IOError, e: assert e.errno == errno.EINVAL assert not queryctrls return
def get_controls(fd, input_or_output): # first we get the controls through enumeration # note, currently not distinguishing by disabled flag. queryctrls = list(get_device_controls_by_class(fd, class_)) control_array = (v4l2.v4l2_ext_control * len(queryctrls))() for index, queryctrl in enumerate(queryctrls): control_array[index].id = queryctrl.id ext_controls = v4l2.v4l2_ext_controls(class_, len(queryctrls)) ext_controls.controls = control_array try: ioctl(fd, v4l2.VIDIOC_G_EXT_CTRLS, ext_controls) except IOError, e: assert e.errno == errno.EINVAL assert not queryctrls return
def try_controls(fd, input_or_output): # first we get the controls through enumeration queryctrls = list(get_device_controls_by_class(fd, class_)) # try sane values control_array = (v4l2.v4l2_ext_control * len(queryctrls))() for index, queryctrl in enumerate(queryctrls): control_array[index].id = queryctrl.id control_array[index].value = queryctrl.default ext_controls = v4l2.v4l2_ext_controls(class_, len(queryctrls)) ext_controls.controls = control_array try: ioctl(fd, v4l2.VIDIOC_TRY_EXT_CTRLS, ext_controls) except IOError, e: # driver may raise EINVAL if the control array has a # length of zero assert e.errno == errno.EINVAL assert not queryctrls return
def set_controls(fd, input_or_output): # first we get the controls through enumeration queryctrls = list(get_device_controls_by_class(fd, class_)) control_array = (v4l2.v4l2_ext_control * len(queryctrls))() for index, queryctrl in enumerate(queryctrls): control_array[index].id = queryctrl.id ext_controls = v4l2.v4l2_ext_controls(class_, len(queryctrls)) ext_controls.controls = control_array # we store the original values so we can set them back later try: ioctl(fd, v4l2.VIDIOC_G_EXT_CTRLS, ext_controls) except IOError as e: assert e.errno == errno.EINVAL assert not queryctrls return original_values = [(c.value, c.value64) for c in control_array] # set to minimum value for index, control in enumerate(control_array): control.value = queryctrls[index].minimum control.value64 = queryctrls[index].minimum ioctl(fd, v4l2.VIDIOC_S_EXT_CTRLS, ext_controls) # test invalid control if queryctrls: control_array[-1].value = 1 << 31 control_array[-1].value64 = 1 << 32 try: ioctl(fd, v4l2.VIDIOC_S_EXT_CTRLS, ext_controls) except IOError as e: # the driver may either prune the value or raise # ERANGE if control value is out of bounds assert e.errno == errno.ERANGE assert ext_controls.error_idx == len(control_array) - 1 # set back original values for index, control in enumerate(control_array): control.value = original_values[index][0] control.value64 = original_values[index][1] ioctl(fd, v4l2.VIDIOC_S_EXT_CTRLS, ext_controls)
def get_controls(fd, input_or_output): # first we get the controls through enumeration # note, currently not distinguishing by disabled flag. queryctrls = list(get_device_controls_by_class(fd, class_)) control_array = (v4l2.v4l2_ext_control * len(queryctrls))() for index, queryctrl in enumerate(queryctrls): control_array[index].id = queryctrl.id ext_controls = v4l2.v4l2_ext_controls(class_, len(queryctrls)) ext_controls.controls = control_array try: ioctl(fd, v4l2.VIDIOC_G_EXT_CTRLS, ext_controls) except IOError as e: assert e.errno == errno.EINVAL assert not queryctrls return assert ext_controls.error_idx == 0 assert ext_controls.reserved[0] == 0 assert ext_controls.reserved[1] == 0 for index, control in enumerate(control_array): assert control.value >= queryctrls[index].minimum assert control.value <= queryctrls[index].maximum