From ea90facf4674046e0a58969a6e0eb23054c550de Mon Sep 17 00:00:00 2001 From: Nicolas Schodet Date: Wed, 13 Nov 2019 22:35:11 +0100 Subject: Use GLib for command line too --- main.c | 87 ++++++------------------------------------------------------------ 1 file changed, 8 insertions(+), 79 deletions(-) (limited to 'main.c') diff --git a/main.c b/main.c index 9ffd6f2..2abeeda 100644 --- a/main.c +++ b/main.c @@ -20,88 +20,17 @@ * Web: http://ni.fr.eu.org/ * Email: */ -#define _GNU_SOURCE -#include -#include -#include -#include +#include -#include "device.h" -#include "gui.h" -#include "options.h" -#include "utils.h" - -void -cli_read_images(libusb_context *usb, struct device *device, int count, - const char *out) -{ - device_start(device); - for (int i = 0; i < count;) { - const struct device_image *device_image = device_read(device); - if (device_image) { - char *name = NULL; - if (asprintf(&name, out, i) < 0) - utils_fatal("can not prepare file name"); - utils_info("write %s", name); - png_image image; - memset(&image, 0, sizeof(image)); - image.version = PNG_IMAGE_VERSION; - image.width = device_image->width; - image.height = device_image->height; - image.format = PNG_FORMAT_BGRA; - int r = png_image_write_to_file(&image, name, 0, - device_image->pixels, device_image->stride, NULL); - if (r == 0) - utils_fatal("can not write image: %s", image.message); - free(name); - i++; - } else { - libusb_handle_events(usb); - } - } - device_stop(device); -} - -int -cli_run(struct options *options) -{ - libusb_context *usb; - int r = libusb_init(&usb); - if (r) - utils_fatal("unable to initialize libusb: %s", libusb_strerror(r)); - struct device *device = device_open(usb); - if (!device) - utils_fatal("unable to find device"); - const struct device_info *info = device_get_info(device); - if (options->exposure_ms > 0.0) - device_set_exposure(device, options->exposure_ms); - if (options->gain > 0.0) - device_set_gain(device, options->gain); - int width = -1, height = -1; - for (int i = 0; width == -1 && i < info->resolutions; i++) { - const struct device_info_resolution *ir = &info->resolution[i]; - if ((options->width == -1 || options->width == ir->width) - && (options->height == -1 || options->height == ir->height)) { - width = ir->width; - height = ir->height; - } - } - if (width == -1) - utils_fatal("no matching resolution"); - device_set_resolution(device, width, height, 0); - cli_read_images(usb, device, options->count, options->out); - device_close(device); - libusb_exit(usb); - return EXIT_SUCCESS; -} +#include "gui_app.h" int main(int argc, char **argv) { - struct options options; - options_parse(argc, argv, &options); - if (!options.count) - return gui_run(argc, argv); - else - return cli_run(&options); + int status; + GuiApp *app; + app = gui_app_new(); + status = g_application_run(G_APPLICATION(app), argc, argv); + g_object_unref(app); + return status; } -- cgit v1.2.3