Example #1
0
        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
Example #2
0
        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
Example #3
0
        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
Example #4
0
        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)
Example #5
0
        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