int main(int ac, char **av) { t_fract e; if (ac == 2 && (e.fract = check_fract(av[1]))) { var_init(&e); e.mlx = mlx_init(); e.win = mlx_new_window(e.mlx, WIDTH, HEIGHT, "fractol"); mlx_expose_hook(e.win, draw, &e); mlx_mouse_hook(e.win, zoom, &e); mlx_key_hook(e.win, key, &e); mlx_hook(e.win, 6, (1L << 6), mouse, &e); mlx_loop(e.mlx); } else display_params(); return (0); }
static int testEnumFrameIntervals(struct node *node, __u32 pixfmt, __u32 w, __u32 h, bool valid) { struct v4l2_frmivalenum frmival; struct v4l2_frmival_stepwise *sw = &frmival.stepwise; bool found_stepwise = false; unsigned f = 0; int ret; for (;;) { memset(&frmival, 0xff, sizeof(frmival)); frmival.index = f; frmival.pixel_format = pixfmt; frmival.width = w; frmival.height = h; ret = doioctl(node, VIDIOC_ENUM_FRAMEINTERVALS, &frmival); if (ret == ENOTTY) return ret; if (f == 0 && ret == EINVAL) { if (valid) warn("found framesize %dx%d, but no frame intervals\n", w, h); return ENOTTY; } if (ret == EINVAL) break; if (ret) return fail("expected EINVAL, but got %d when enumerating frameinterval %d\n", ret, f); ret = check_0(frmival.reserved, sizeof(frmival.reserved)); if (ret) return fail("frmival.reserved not zeroed\n"); if (frmival.pixel_format != pixfmt || frmival.index != f || frmival.width != w || frmival.height != h) return fail("frmival.pixel_format, index, width or height changed\n"); switch (frmival.type) { case V4L2_FRMIVAL_TYPE_DISCRETE: ret = check_fract(&frmival.discrete); if (found_stepwise) return fail("mixing discrete and stepwise is not allowed\n"); break; case V4L2_FRMIVAL_TYPE_CONTINUOUS: if (sw->step.numerator != 1 || sw->step.denominator != 1) return fail("invalid step for continuous frameinterval\n"); /* fallthrough */ case V4L2_FRMIVAL_TYPE_STEPWISE: if (frmival.index) return fail("index must be 0 for stepwise/continuous frameintervals\n"); found_stepwise = true; ret = check_fract(&sw->min); if (ret == 0) ret = check_fract(&sw->max); if (ret == 0) ret = check_fract(&sw->step); if (ret) return fail("invalid min, max or step for frameinterval %d\n", f); if (fract2f(&sw->min) > fract2f(&sw->max)) return fail("min > max\n"); if (fract2f(&sw->step) > fract2f(&sw->max) - fract2f(&sw->min)) return fail("step > (max - min)\n"); break; default: return fail("frmival.type is invalid\n"); } f++; } if (!valid) return fail("found frame intervals for invalid size %dx%d\n", w, h); info("found %d frameintervals for pixel format %08x and size %dx%d\n", f, pixfmt, w, h); return 0; }