From eca851302e73a9b4a4d3609c14ade3efe90c8441 Mon Sep 17 00:00:00 2001 From: Antonio Ospite Date: Fri, 24 Aug 2018 12:50:54 +0200 Subject: [PATCH] Initial import --- .gitignore | 3 + 90-projector.rules | 3 + Makefile | 87 +++++++ README.md | 83 +++++++ TODO | 7 + contrib/99-cyclabile.rules | 6 + contrib/libusb-udev.supp | 28 +++ cyclabile.c | 565 +++++++++++++++++++++++++++++++++++++++++++++ cyclabile.service.in | 13 ++ fps-meter.h | 96 ++++++++ images/Makefile | 12 + images/bike_lane.png | Bin 0 -> 84901 bytes images/bike_lane.svg | 159 +++++++++++++ images/bumpy_road.png | Bin 0 -> 139675 bytes images/bumpy_road.svg | 146 ++++++++++++ projective_split.c | 247 ++++++++++++++++++++ projective_split.h | 50 ++++ 17 files changed, 1505 insertions(+) create mode 100644 .gitignore create mode 100644 90-projector.rules create mode 100644 Makefile create mode 100644 README.md create mode 100644 TODO create mode 100644 contrib/99-cyclabile.rules create mode 100644 contrib/libusb-udev.supp create mode 100644 cyclabile.c create mode 100644 cyclabile.service.in create mode 100644 fps-meter.h create mode 100644 images/Makefile create mode 100644 images/bike_lane.png create mode 100644 images/bike_lane.svg create mode 100644 images/bumpy_road.png create mode 100644 images/bumpy_road.svg create mode 100644 projective_split.c create mode 100644 projective_split.h diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e7fc10e --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +*.o +cyclabile +cyclabile.service diff --git a/90-projector.rules b/90-projector.rules new file mode 100644 index 0000000..2176b13 --- /dev/null +++ b/90-projector.rules @@ -0,0 +1,3 @@ +# Add a /dev/projector alias for the Acer C110 in display mode. +# This makes it easier to execute systemd units when the device shows up. +ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="1de1", ATTRS{idProduct}=="c101", TAG+="systemd", ENV{SYSTEMD_ALIAS}="/dev/projector" diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..6118bcc --- /dev/null +++ b/Makefile @@ -0,0 +1,87 @@ +CFLAGS = -std=c99 -pedantic -pedantic-errors -Wall -g3 -O2 -D_ANSI_SOURCE_ +CFLAGS += -fno-common \ + -Wall \ + -Wdeclaration-after-statement \ + -Wextra \ + -Wformat=2 \ + -Winit-self \ + -Winline \ + -Wpacked \ + -Wp,-D_FORTIFY_SOURCE=2 \ + -Wpointer-arith \ + -Wlarger-than-65500 \ + -Wmissing-declarations \ + -Wmissing-format-attribute \ + -Wmissing-noreturn \ + -Wmissing-prototypes \ + -Wnested-externs \ + -Wold-style-definition \ + -Wredundant-decls \ + -Wsign-compare \ + -Wstrict-aliasing=2 \ + -Wstrict-prototypes \ + -Wundef \ + -Wunreachable-code \ + -Wunsafe-loop-optimizations \ + -Wunused-but-set-variable \ + -Wwrite-strings + +LDLIBS = -llept -lturbojpeg -lam7xxx + +# For clock_nanosleep() +CFLAGS += -D_POSIX_C_SOURCE=200112L + +# for clock_gettime() +LDLIBS += -lrt + +# Some compiler optimizations +CFLAGS += -O3 \ + -fno-strict-aliasing \ + -ftree-vectorize \ + -ffast-math \ + -funroll-loops \ + -funsafe-math-optimizations \ + -fsingle-precision-constant + +# NEON optimizations +ifeq ($(NEON), 1) + CFLAGS += -march=armv7-a \ + -mtune=cortex-a8 \ + -mfpu=neon \ + -mfloat-abi=hard \ + -DUSE_NEON +endif + +# Use the BBB eQEP unit +ifeq ($(EQEP), 1) + CFLAGS += -DUSE_EQEP +endif + + +cyclabile: cyclabile.o projective_split.o + +clean: + rm -rf *~ *.o cyclabile cyclabile.service + +run: + ./cyclabile -P 2 -f images/bike_lane.png -e /dev/input/event1 + +install_service: + cp 90-projector.rules $(DESTDIR)/lib/udev/rules.d/ + sed -e 's!@@CYCLABILE_SOURCE_PATH@@!$(shell pwd)!' < cyclabile.service.in > cyclabile.service + cp cyclabile.service $(DESTIR)/lib/systemd/system/ + +uninstall_service: + systemctl enable cyclabile.service + rm $(DESTIR)/lib/systemd/system/cyclabile.service + rm $(DESTDIR)/lib/udev/rules.d/90-projector.rules + udevadm control --reload + +enable_service: install_service + udevadm control --reload + systemctl enable cyclabile.service + +test: cyclabile + valgrind --suppressions=contrib/libusb-udev.supp \ + --leak-check=full --show-reachable=yes \ + ./cyclabile -f images/bumpy_road.png -e /dev/input/event1 diff --git a/README.md b/README.md new file mode 100644 index 0000000..91a991d --- /dev/null +++ b/README.md @@ -0,0 +1,83 @@ +# Cyclabile, a light augmented bike lane emitter + +Cyclabile is an experiment about projecting a moving bike lane on the road: the +lane moves when the bike moves, producing the effect of riding on an actual bike +lane, even when there isn't one. + +Dependencies: + +* `libam7xxx0.1` - a library to use USB pico-projector based on the am7xxx chip. +* `libturbojpeg0` - a library for fast JPEG encoding +* `liblept5` - a library for image processing, used to calculate a perspective + projection. + +## Limitations + +The effectiveness of projecting on the paving instead of signaling the presence +with a traditional light can be argued. + +For now the project purpose is more about making a statement (there should be +more bike lanes) than to build an actual product. + +## Instruction + +The prototype has been developed on a BeagleBone Black. + +A keypad is needed to adjust the perspective projection parameters, see +http://ao2.it/137 for instructions about how a device-tree overlay can be used +for that. + +A precise rotary encoder is needed to detect movement at very low speed, +something like the one at https://ao2.it/135 can be used. + +The instructions at https://ao2.it/138 show an example of how to build a support +to mount a magnet ring on the front wheel of the bike. + +The device-tree overlay at https://git.ao2.it/experiments/bbb-eqep2b-ao2.git/ +enables the BBB hardware support for rotary encoders. + +To build the project for the BeagleBone Black execute the following command: + + $ make NEON=1 EQEP=1 + +And install the systemd unit to launch the program automatically when the USB +projector gets connected: + + $ sudo make enable_service + +The software can also be tested on a normal desktop PC, emulating the encoder +with the mouse wheel, with the following command: + + $ make && sudo make run + + +## Similar projects + +### Safety First + +"*Safety First*" is an art installation by Vladimír Turner and Ondřej Mladý very +much in the spirit of Cyclabile. + +* +* + +The difference is that Cyclabile is more portable and more interactive, the bike +lane moves depending on the bike movement while "*Safety First*" used a video +recording in a fixed loop. + + +### Bike Projector Headlight + +This is more generic, it's used to display info on the road, not specifically +a bike lane. + +* +* +* + + +### Lightlane + +A laser bike lane, it projects a static image. + +* diff --git a/TODO b/TODO new file mode 100644 index 0000000..a29000b --- /dev/null +++ b/TODO @@ -0,0 +1,7 @@ +- Initialize the output device before the input image and derive the viewport + height from the output device native resolution. + +- Check if the image height is at least two times the viewport height. + +- For width, check if the image width less than or equal to the viewport + width. diff --git a/contrib/99-cyclabile.rules b/contrib/99-cyclabile.rules new file mode 100644 index 0000000..8e92b25 --- /dev/null +++ b/contrib/99-cyclabile.rules @@ -0,0 +1,6 @@ +# NOTE: this script is provided just as a template for systems without systemd. + +# Execute cyclabile when the projector is plugged in, +ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="1de1", ATTRS{idProduct}=="c101", MODE="0660", GROUP="plugdev", RUN+="/usr/bin/make -C /home/debian/cyclabile run" +# Kill it when the projector is unplugged. +ACTION=="remove", SUBSYSTEM=="usb", ENV{ID_VENDOR_ID}=="1de1", ENV{ID_MODEL_ID}=="c101", RUN+="killall cyclabile" diff --git a/contrib/libusb-udev.supp b/contrib/libusb-udev.supp new file mode 100644 index 0000000..a1e43c6 --- /dev/null +++ b/contrib/libusb-udev.supp @@ -0,0 +1,28 @@ +{ + Suppress a false positive about the udev allocation cache, see https://github.com/libusb/libusb/issues/231 + Memcheck:Leak + match-leak-kinds: reachable + fun:malloc + obj:/lib/x86_64-linux-gnu/libudev.so.1.6.* + obj:/lib/x86_64-linux-gnu/libudev.so.1.6.* + obj:/lib/x86_64-linux-gnu/libusb-1.0.so.0.1.* + obj:/lib/x86_64-linux-gnu/libusb-1.0.so.0.1.* + fun:libusb_init +} + +{ + Suppress a false positive about the udev allocation cache, see https://github.com/libusb/libusb/issues/231 + Memcheck:Leak + match-leak-kinds: reachable + fun:malloc + obj:/lib/x86_64-linux-gnu/libudev.so.1.6.* + obj:/lib/x86_64-linux-gnu/libudev.so.1.6.* + obj:/lib/x86_64-linux-gnu/libudev.so.1.6.* + obj:/lib/x86_64-linux-gnu/libudev.so.1.6.* + obj:/lib/x86_64-linux-gnu/libudev.so.1.6.* + obj:/lib/x86_64-linux-gnu/libudev.so.1.6.* + fun:udev_enumerate_scan_devices + obj:/lib/x86_64-linux-gnu/libusb-1.0.so.0.1.* + obj:/lib/x86_64-linux-gnu/libusb-1.0.so.0.1.* + fun:libusb_init +} diff --git a/cyclabile.c b/cyclabile.c new file mode 100644 index 0000000..e52d9f3 --- /dev/null +++ b/cyclabile.c @@ -0,0 +1,565 @@ +/* + * cyclabile - CYC Light Augmented Bike Light Emitter + * + * Copyright (C) 2018 Antonio Ospite + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "projective_split.h" + +#include "fps-meter.h" + +#define M_PI 3.14159265358979323846 /* pi */ + +/* Rotary encoder properties. */ +#define PULSES_PER_REVOLUTION 120 + +/* Video projector property. */ +#define HEIGHT_IN_PIXELS 480 + +/* Bike setup properties */ +#define WHEEL_RADIUS_IN_METERS 0.33 +#define HEIGHT_IN_METERS 0.92 + +#define PIXELS_PER_METER (HEIGHT_IN_PIXELS / HEIGHT_IN_METERS) + + +static unsigned int run = 1; + +static struct { + char *image_file; + char *event_device; + unsigned int width; + unsigned int height; + unsigned int x_correction; + unsigned int y_correction; + unsigned int zoom_mode; + unsigned int power_mode; +} config = { + .image_file = NULL, + .event_device = NULL, + .width = 800, + .height = 480, + .x_correction = 200, + .y_correction = 0, + .zoom_mode = AM7XXX_ZOOM_ORIGINAL, + .power_mode = AM7XXX_POWER_LOW, +}; + +#ifdef USE_EQEP +#define POSITION_FILE "/sys/devices/platform/ocp/48304000.epwmss/48304180.eqep/position" +static int read_position(int *position) +{ + FILE *file; + int ret = 0; + + file = fopen(POSITION_FILE, "r"); + if (file == NULL) { + fprintf(stderr, "Cannot open %s\n", POSITION_FILE); + return -errno; + } + + ret = fscanf(file, "%d", position); + if (ret != 1) + ret = -EINVAL; + else + ret = 0; + + fclose(file); + return ret; +} +#else +static int read_position(int *position) +{ + (void)position; + return 0; +} +#endif + +static int mod(int a, int b) +{ + int c = a % b; + return (c < 0) ? c + b : c; +} + +static int projector_device_init(am7xxx_context **ctx, am7xxx_device **dev, unsigned int device_index) +{ + int log_level = AM7XXX_LOG_INFO; + int ret; + + ret = am7xxx_init(ctx); + if (ret < 0) { + perror("am7xxx_init"); + goto err; + } + + am7xxx_set_log_level(*ctx, log_level); + + ret = am7xxx_open_device(*ctx, dev, device_index); + if (ret < 0) { + perror("am7xxx_open_device"); + goto err; + } + + ret = am7xxx_set_zoom_mode(*dev, config.zoom_mode); + if (ret < 0) { + perror("am7xxx_set_zoom_mode"); + goto err_close_device; + } + + ret = am7xxx_set_power_mode(*dev, config.power_mode); + if (ret < 0) { + perror("am7xxx_set_power_mode"); + goto err_close_device; + } + + return 0; + +err_close_device: + am7xxx_close_device(*dev); +err: + am7xxx_shutdown(*ctx); + return ret; +} + +static void unset_run(int signo) +{ + (void) signo; + run = 0; +} + +static int set_signal_handler(int signum, void (*signal_handler)(int)) +{ + struct sigaction new_action; + struct sigaction old_action; + int ret; + + new_action.sa_handler = signal_handler; + sigemptyset(&new_action.sa_mask); + new_action.sa_flags = 0; + + ret = sigaction(signum, NULL, &old_action); + if (ret < 0) { + perror("sigaction on old_action"); + goto out; + } + + if (old_action.sa_handler != SIG_IGN) { + ret = sigaction(signum, &new_action, NULL); + if (ret < 0) { + perror("sigaction on new_action"); + goto out; + } + } + +out: + return ret; +} + +static struct p *calc_perspective_map(void) +{ + PTA *src; + PTA *dst; + BOX *viewport; + l_float32 *transform_coeffs; + struct p *perspective_map = NULL; + int ret; + + src = ptaCreate(4); + if (src == NULL) + return NULL; + + ptaAddPt(src, 0, 0); + ptaAddPt(src, config.width, 0); + ptaAddPt(src, config.width, config.height); + ptaAddPt(src, 0, config.height); + + dst = ptaCreate(4); + if (dst == NULL) + goto out_destroy_pta_src; + + ptaAddPt(dst, config.x_correction, config.y_correction); + ptaAddPt(dst, config.width - config.x_correction, config.y_correction); + ptaAddPt(dst, config.width, config.height); + ptaAddPt(dst, 0, config.height); + + transform_coeffs = NULL; + ret = getProjectiveXformCoeffs(dst, src, &transform_coeffs); + if (ret != 0) + goto out_destroy_pta_dst; + + viewport = boxCreateValid(0, 0, config.width, config.height); + if (viewport == NULL) + goto out_free_transform_coeffs; + + perspective_map = _pixProjectiveSampled_precalc_map(viewport, transform_coeffs); + + boxDestroy(&viewport); + +out_free_transform_coeffs: + LEPT_FREE(transform_coeffs); +out_destroy_pta_dst: + ptaDestroy(&dst); +out_destroy_pta_src: + ptaDestroy(&src); + + return perspective_map; +} + +static void usage(char *name) +{ + printf("usage: %s [OPTIONS]\n\n", name); + printf("OPTIONS:\n"); + printf("\t-f \t\tthe image file to upload\n"); + printf("\t-e \t\tthe event device to get input from\n"); + printf("\t-x \t\tthe perspective correction in the X direction, in pixels (default 200)\n"); + printf("\t-y \t\tthe perspective correction in the Y direction, in pixels (default 50)\n"); + printf("\t-Z \t\tthe display zoom mode, between %d (original) and %d (test)\n", + AM7XXX_ZOOM_ORIGINAL, AM7XXX_ZOOM_TEST); + printf("\t-h \t\t\tthis help message\n"); + printf("\n\nEXAMPLES OF USE:\n"); + printf("\t%s -f road.png -e /dev/input/event5\n", name); + printf("\t%s -f narrow-road.png -e /dev/input/event0 -x 130 -Z 1\n", name); +} + +int main(int argc, char *argv[]) +{ + PIX *image; + PIX *transformed_image; + BOX *viewport; + struct p *perspective_map; + + tjhandle jpeg_compressor; + unsigned char *out_buf; + unsigned long out_buf_size; + + am7xxx_context *projector_ctx = NULL; + am7xxx_device *projector_dev = NULL; + + int input_fd; + struct input_event ev[64]; + unsigned int i; + + int position = 0; + int old_position = 0; + int position_delta; + float distance; + + struct fps_meter_stats fps_stats; + + int y = 0; + int lastframe_limit; + + int ret; + int opt; + + while ((opt = getopt(argc, argv, "e:f:x:y:P:Z:h")) != -1) { + switch (opt) { + case 'e': + if (config.event_device != NULL) + fprintf(stderr, "Warning: event device already specified\n"); + config.event_device = optarg; + break; + case 'f': + if (config.image_file != NULL) + fprintf(stderr, "Warning: image file already specified\n"); + config.image_file = optarg; + break; + case 'x': + config.x_correction = atoi(optarg); /* atoi() is as nasty as it is easy */ + break; + case 'y': + config.y_correction = atoi(optarg); /* atoi() is as nasty as it is easy */ + break; + case 'Z': + config.zoom_mode = atoi(optarg); /* atoi() is as nasty as it is easy */ + switch(config.zoom_mode) { + case AM7XXX_ZOOM_ORIGINAL: + case AM7XXX_ZOOM_H: + case AM7XXX_ZOOM_H_V: + case AM7XXX_ZOOM_TEST: + break; + default: + fprintf(stderr, "Invalid zoom mode value, must be between %d and %d\n", + AM7XXX_ZOOM_ORIGINAL, AM7XXX_ZOOM_TEST); + ret = -EINVAL; + goto out; + } + break; + case 'P': + config.power_mode = atoi(optarg); /* atoi() is as nasty as it is easy */ + switch(config.power_mode) { + case AM7XXX_POWER_OFF: + case AM7XXX_POWER_LOW: + case AM7XXX_POWER_MIDDLE: + case AM7XXX_POWER_HIGH: + case AM7XXX_POWER_TURBO: + break; + default: + fprintf(stderr, "Invalid power mode value, must be between %d and %d\n", + AM7XXX_POWER_OFF, AM7XXX_POWER_TURBO); + ret = -EINVAL; + goto out; + } + break; + case 'h': + usage(argv[0]); + ret = 0; + goto out; + default: /* '?' */ + usage(argv[0]); + ret = -EINVAL; + goto out; + } + } + + if (config.image_file == NULL) { + fprintf(stderr, "An image file MUST be specified with the -f option.\n\n"); + usage(argv[0]); + ret = -EINVAL; + goto out; + } + + if (config.event_device == NULL) { + fprintf(stderr, "An event device MUST be specified with the -e option.\n\n"); + usage(argv[0]); + ret = -EINVAL; + goto out; + } + + ret = set_signal_handler(SIGINT, unset_run); + if (ret < 0) { + perror("setting SIGINT"); + goto out; + } + + ret = set_signal_handler(SIGTERM, unset_run); + if (ret < 0) { + perror("setting SIGTERM"); + goto out; + } + + image = pixRead(config.image_file); + if (image == NULL) { + fprintf(stderr, "Cannot load image\n"); + ret = -EINVAL; + goto out; + } + lastframe_limit = (pixGetHeight(image) - config.height); + + config.width = pixGetWidth(image); + + transformed_image = pixCreate(config.width, config.height, pixGetDepth(image)); + if (transformed_image == NULL) { + fprintf(stderr, "Cannot create image\n"); + ret = -EINVAL; + goto out_destroy_image; + } + + /* Transform only a part of the whole image */ + viewport = boxCreateValid(0, y, config.width, config.height); + if (viewport == NULL) { + ret = -EINVAL; + goto out_destroy_transformed_image; + } + + perspective_map = calc_perspective_map(); + if (perspective_map == NULL) { + ret = -ENOMEM; + goto out_destroy_viewport; + } + + /* jpeg encoder init */ + jpeg_compressor = tjInitCompress(); + if (jpeg_compressor == NULL) { + fprintf(stderr, "tjInitCompress failed: %s\n", tjGetErrorStr()); + ret = -ENOMEM; + goto out_free_perspective_map; + } + + out_buf_size = tjBufSize(config.width, config.height, TJSAMP_420); + ret = (int) out_buf_size; + if (ret < 0) { + fprintf(stderr, "tjBufSize failed: %s\n", tjGetErrorStr()); + goto out_jpeg_destroy; + } + out_buf = malloc(out_buf_size); + if (out_buf == NULL) { + ret = -ENOMEM; + goto out_jpeg_destroy; + } + + /* output init */ + ret = projector_device_init(&projector_ctx, &projector_dev, 0); + if (ret < 0) + goto out_free_out_buf; + + /* input event init */ + input_fd = open(config.event_device, O_RDONLY | O_NONBLOCK); + if (input_fd < 0) { + perror("open"); + ret = input_fd; + goto out_am7xxx_shutdown; + } + + ret = read_position(&old_position); + if (ret < 0) + goto out_cleanup; + + + fps_meter_init(&fps_stats); + while (run) { + + fps_meter_update(&fps_stats); + + errno = 0; + ret = read(input_fd, ev, sizeof(ev)); + if (ret < (int)sizeof(ev[0]) && errno != EAGAIN && errno != EWOULDBLOCK) { + perror("read"); + ret = -errno; + goto out_cleanup; + } + + /* + * Handle keypad input to adjust the perspective map. + * This can go in a preliminar "setup" stage instead of the + * main loop. + */ + if (ret >= (int)sizeof(ev[0])) { + for (i = 0; i < ret / sizeof(ev[0]); i++) { + /* + * This is for testing the software with the + * mouse wheel... + */ + if (ev[i].type == EV_REL && ev[i].code == REL_WHEEL) { + position += ev[i].value; + } + else if (ev[i].type == EV_KEY && ev[i].value > 0) { + switch(ev[i].code) { + case KEY_UP: + if (config.y_correction < config.height) + config.y_correction += 1; + break; + case KEY_DOWN: + if (config.y_correction > 0) + config.y_correction -= 1; + break; + case KEY_LEFT: + if (config.x_correction > 0) + config.x_correction -= 1; + break; + case KEY_RIGHT: + if (config.x_correction < config.width) + config.x_correction += 1; + break; + default: + break; + + } + free(perspective_map); + perspective_map = calc_perspective_map(); + if (perspective_map == NULL) { + ret = -ENOMEM; + goto out_cleanup; + } + pixClearAll(transformed_image); + break; + } + } + } + + ret = read_position(&position); + if (ret < 0) + break; + position_delta = old_position - position; + old_position = position; + + /* distance in meters */ + distance = 2 * WHEEL_RADIUS_IN_METERS * M_PI / PULSES_PER_REVOLUTION * position_delta; +#ifdef DEBUG + fprintf(stderr, "position_delta: %d distance: %f pixels: %d\n", position_delta, distance, (int) (distance * PIXELS_PER_METER)); +#endif + + /* convert distance to pixels */ + y += distance * PIXELS_PER_METER; + y = mod(y, lastframe_limit); + + boxSetGeometry(viewport, -1, y, -1, -1); + + /* Apply the perspective transformation */ + transformed_image = _pixProjectiveSampled_apply_map_dest_roi(image, + perspective_map, + L_BRING_IN_BLACK, + transformed_image, + viewport); + ret = tjCompress2(jpeg_compressor, (unsigned char *)pixGetData(transformed_image), + config.width, 0, config.height, TJPF_XBGR, &out_buf, &out_buf_size, + TJSAMP_420, 70, TJFLAG_NOREALLOC | TJFLAG_FASTDCT); + if (ret < 0) { + tjGetErrorStr(); + fprintf(stderr, "tjCompress2 failed: %s\n", tjGetErrorStr()); + break; + } + + ret = am7xxx_send_image_async(projector_dev, + AM7XXX_IMAGE_FORMAT_JPEG, + config.width, + config.height, + out_buf, + out_buf_size); + + if (ret < 0) { + perror("am7xxx_send_image"); + break; + } + + } + + ret = 0; + +out_cleanup: + close(input_fd); +out_am7xxx_shutdown: + am7xxx_set_zoom_mode(projector_dev, AM7XXX_ZOOM_TEST); + am7xxx_set_power_mode(projector_dev, AM7XXX_POWER_OFF); + am7xxx_close_device(projector_dev); + am7xxx_shutdown(projector_ctx); +out_free_out_buf: + free(out_buf); +out_jpeg_destroy: + tjDestroy(jpeg_compressor); +out_free_perspective_map: + free(perspective_map); +out_destroy_viewport: + boxDestroy(&viewport); +out_destroy_transformed_image: + pixDestroy(&transformed_image); +out_destroy_image: + pixDestroy(&image); +out: + return ret; +} diff --git a/cyclabile.service.in b/cyclabile.service.in new file mode 100644 index 0000000..3b79918 --- /dev/null +++ b/cyclabile.service.in @@ -0,0 +1,13 @@ +[Unit] +Description=Start CYCLABILE + +BindsTo=dev-projector.device +After=dev-projector.device + +[Service] +# For the time being run the program from its source directory +ExecStart=/usr/bin/make -C "@@CYCLABILE_SOURCE_PATH@@" run + +[Install] +# This ensures that the unit is run when the device shows up +WantedBy=dev-projector.device diff --git a/fps-meter.h b/fps-meter.h new file mode 100644 index 0000000..a669b9d --- /dev/null +++ b/fps-meter.h @@ -0,0 +1,96 @@ +/* + * fps-meter - Example program about how to measure frames per seconds + * + * Copyright (C) 2013 Antonio Ospite + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef FPS_METER_H +#define FPS_METER_H + +#include +#include +#include + +#ifdef DEBUG +#define dbg(...) \ + do { \ + printf(__VA_ARGS__); \ + printf("\n"); \ + fflush(stdout); \ + } while(0) +#else +#define dbg(...) do {} while(0) +#endif + +#define NSEC_PER_SEC 1000000000 + +#define timespecsub(a, b, result) \ + do { \ + (result)->tv_sec = (a)->tv_sec - (b)->tv_sec; \ + (result)->tv_nsec = (a)->tv_nsec - (b)->tv_nsec; \ + if ((result)->tv_nsec < 0) { \ + --(result)->tv_sec; \ + (result)->tv_nsec += 1000000000; \ + } \ + } while(0) + +struct fps_meter_stats { + struct timespec time_start; + struct timespec time_end; + + unsigned int frames; + double nsecs; +}; + +static void fps_meter_init(struct fps_meter_stats *stats) +{ + memset(stats, 0, sizeof(*stats)); + + clock_gettime(CLOCK_MONOTONIC, &stats->time_start); + dbg("Init time: s: %ld, ns: %ld", stats->time_start.tv_sec, stats->time_start.tv_nsec); +} + +static void fps_meter_update(struct fps_meter_stats *stats) +{ + struct timespec elapsed; + + dbg("Start time: s: %ld, ns: %ld", stats->time_start.tv_sec, stats->time_start.tv_nsec); + + clock_gettime(CLOCK_MONOTONIC, &stats->time_end); + dbg("End time: s: %ld, ns: %ld", stats->time_end.tv_sec, stats->time_end.tv_nsec); + + timespecsub(&stats->time_end, &stats->time_start, &elapsed); + dbg("Elapsed s: %ld ns: %ld", elapsed.tv_sec, elapsed.tv_nsec); + + stats->frames++; + stats->nsecs += (elapsed.tv_sec * NSEC_PER_SEC + elapsed.tv_nsec); + if (stats->nsecs >= NSEC_PER_SEC) { + /* + * if we were garanteed that each frame took less than + * a second, then just printing 'frames' would be enough here, + * but if we want to cover the case when a frame may take more + * than a second, some calculations have to be done. + */ + float fps = stats->frames / (stats->nsecs / NSEC_PER_SEC); + printf("(frames: %d, nsecs: %f) FPS: %.2f\n", stats->frames, stats->nsecs, fps); + stats->nsecs -= NSEC_PER_SEC; + stats->frames = 0; + } + + /* update the stats for the next iteration */ + clock_gettime(CLOCK_MONOTONIC, &stats->time_start); +} +#endif /* FPS_METER_H */ diff --git a/images/Makefile b/images/Makefile new file mode 100644 index 0000000..9729051 --- /dev/null +++ b/images/Makefile @@ -0,0 +1,12 @@ +WIDTH ?= 800 + +SOURCES := $(wildcard *.svg) +IMAGE_FILES := $(SOURCES:.svg=.png) + +all: $(IMAGE_FILES) + +clean: + rm -f $(IMAGE_FILES) + +%.png: %.svg + inkscape --export-png=$@ --export-width=$(WIDTH) $< diff --git a/images/bike_lane.png b/images/bike_lane.png new file mode 100644 index 0000000000000000000000000000000000000000..d82fdd09086f7dc03e2bccc3fe4cfc9bed853355 GIT binary patch literal 84901 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 literal 0 HcmV?d00001 diff --git a/images/bike_lane.svg b/images/bike_lane.svg new file mode 100644 index 0000000..da92b08 --- /dev/null +++ b/images/bike_lane.svg @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + diff --git a/images/bumpy_road.png b/images/bumpy_road.png new file mode 100644 index 0000000000000000000000000000000000000000..21fe586b430514dab8791807291815ba62e6a6a0 GIT binary patch literal 139675 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 + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/projective_split.c b/projective_split.c new file mode 100644 index 0000000..b20a418 --- /dev/null +++ b/projective_split.c @@ -0,0 +1,247 @@ +/* + * Separate calculating projected coordinates and transforming the pixels. + * + * Copyright (C) 2018 Antonio Ospite + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * The idea behind these functions is that in some use cases the perspective + * deformation does not change, it's only the projected data which changes, so + * there's no need to recalculate the projection parameters every time. + * + * It is enough to apply the pre-calculated projection to the new data, + * possibly using a region-of-interest, to avoid clipping the image in case + * it's larger than the viewport. + */ + +#include "projective_split.h" + +/* + * Pre-calculate the transformation map. + * + * This can be useful if the transform mapping does not change but we want to + * apply the same transform to different data. + */ +struct p * +_pixProjectiveSampled_precalc_map(BOX *viewport, + l_float32 *vc) +{ + l_int32 i, j, x, y; + struct p *map; + + if (!vc) + return (struct p *)ERROR_PTR("vc not defined", __func__, NULL); + + map = malloc(viewport->w * viewport->h * sizeof(*map)); + if (map == NULL) + return (struct p *)ERROR_PTR("cannot allocate map", __func__, NULL); + + for (i = 0; i < viewport->h; i++) { + for (j = 0; j < viewport->w; j++) { + /* XXX: transform i and j by considering the viewport origin */ + projectiveXformSampledPt(vc, j, i, &x, &y); + + /* XXX: This is a hack to avoid conditionals when + * applying the map. + * Basically we set all out of bound pixels to be the same + * as the pixel at 0,0. + * + * When applying the map make sure that the pixel at + * 0,0 is set to the desired "background" color. + */ + if (x < 0 || y < 0 || x >= viewport->w || y >= viewport->h) { + x = 0; + y = 0; + } + + map[i * viewport->w + j].x = x; + map[i * viewport->w + j].y = y; + } + } + + return map; +} + +#ifdef USE_NEON + +#include + +/* + * Apply the map pre-calculated transformation map to an image, but only to + * a region of interest. + * + * This is a NEON optimized version, however the speedup is not that + * impressive because moving pixels around always means accessing uncontiguous + * memory. + */ +PIX * +_pixProjectiveSampled_apply_map_dest_roi(PIX *pixs, + struct p *map, + l_int32 incolor, + PIX *pixd, + BOX *roi) +{ + int32_t i, j, w, h, d, wpls, wpld; + uint32_t *datas, *datad, *lined; + l_uint32 pixel0; + + uint32_t stride; + uint32x4x2_t point; + uint32x4_t lines; + uint32x4_t roi_x; + uint32x4_t roi_y; + uint32x4_t x_offset; + uint32x4_t y_offset; + uint32x4_t wpls_v; + + PROCNAME("pixProjectiveSampled_neon"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (!map) + return (PIX *)ERROR_PTR("map not defined", procName, NULL); + if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) + return (PIX *)ERROR_PTR("invalid incolor", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 32) + return (PIX *)ERROR_PTR("depth not 32", procName, NULL); + if (!pixd) + return (PIX *)ERROR_PTR("pixd not defined", procName, NULL); + + /* Scan over the dest pixels */ + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + + roi_x = vmovq_n_u32(roi->x); + roi_y = vmovq_n_u32(roi->y); + wpls_v = vmovq_n_u32(wpls); + + /* + * Save the value of the pixel at 0,0 in the destination image, + * and set it to black, because the map uses the pixel at 0,0 for out + * of bounds pixels. + */ + pixGetPixel(pixs, roi->x, roi->y, &pixel0); + pixSetPixel(pixs, roi->x, roi->y, 0); + + for (i = 0; i < roi->h; i++) { + lined = datad + i * wpld; + stride = i * roi->w; + for (j = 0; j < roi->w; j += 4) { + unsigned int map_index = stride + j; + + point = vld2q_u32((uint32_t *)(map + map_index)); + + x_offset = vaddq_u32(point.val[0], roi_x); + + y_offset = vaddq_u32(point.val[1], roi_y); + + lines = vmlaq_u32(x_offset, y_offset, wpls_v); + + lined[j + 0] = *(datas + lines[0]); + lined[j + 1] = *(datas + lines[1]); + lined[j + 2] = *(datas + lines[2]); + lined[j + 3] = *(datas + lines[3]); + } + } + + /* restore the previous value */ + pixSetPixel(pixs, roi->x, roi->y, pixel0); + + return pixd; +} + +#else + +/* + * Apply the map pre-calculated transformation map to an image, but only to + * a region of interest. + */ +PIX * +_pixProjectiveSampled_apply_map_dest_roi(PIX *pixs, + struct p *map, + l_int32 incolor, + PIX *pixd, + BOX *roi) +{ + l_int32 i, j, w, h, d, wpls, wpld; + l_uint32 *datas, *datad, *lined; + l_uint32 datas_offset; + l_uint32 stride; + l_uint32 pixel0; + struct p *point; + + PROCNAME("pixProjectiveSampled"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (!map) + return (PIX *)ERROR_PTR("map not defined", procName, NULL); + if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) + return (PIX *)ERROR_PTR("invalid incolor", procName, NULL); + + pixGetDimensions(pixs, &w, &h, &d); + if (d != 32) + return (PIX *)ERROR_PTR("depth not 32", procName, NULL); + if (!pixd) + return (PIX *)ERROR_PTR("pixd not defined", procName, NULL); + + /* Scan over the dest pixels */ + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + + /* + * Save the value of the pixel at 0,0 in the destination image, + * and set it to black, because the map uses the pixel at 0,0 for out + * of bounds pixels. + * + * This is just a dirty trick to avoid a conditional deep in the loop + * below. + * + * A more general algorithm would check for out of bounds explicitly, + * with something like: + * + * if (point->x >= 0 && point->y >= 0 && point->x < roi->w && point->y < roi->h) { + * datas_offset = (point->x + roi->x) + (point->y + roi->y) * wpls; + * *(lined + j) = *(datas + datas_offset); + * } + */ + pixGetPixel(pixs, roi->x, roi->y, &pixel0); + pixSetPixel(pixs, roi->x, roi->y, 0); + + for (i = 0; i < roi->h; i++) { + lined = datad + i * wpld; + stride = i * roi->w; + for (j = 0; j < roi->w; j++) { + point = map + stride + j; + + datas_offset = (point->x + roi->x) + (point->y + roi->y) * wpls; + *(lined + j) = *(datas + datas_offset); + } + } + + /* restore the previous value */ + pixSetPixel(pixs, roi->x, roi->y, pixel0); + + return pixd; +} + + +#endif diff --git a/projective_split.h b/projective_split.h new file mode 100644 index 0000000..261220c --- /dev/null +++ b/projective_split.h @@ -0,0 +1,50 @@ +/* + * Separate calculating projected coordinates and transforming the pixels. + * + * Copyright (C) 2018 Antonio Ospite + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef PROJECTIVE_SPLIT_H +#define PROJECTIVE_SPLIT_H + +#include + +struct p { + l_int32 x; + l_int32 y; +}; + +struct p * +_pixProjectiveSampled_precalc_map(BOX *viewport, + l_float32 *vc); + +PIX * +_pixProjectiveSampled_apply_map_dest_roi(PIX *pixs, + struct p *map, + l_int32 incolor, + PIX *pixd, + BOX *roi); + +#ifdef USE_NEON +PIX * +_pixProjectiveSampled_apply_map_dest_roi_neon(PIX *pixs, + struct p *map, + l_int32 incolor, + PIX *pixd, + BOX *roi); +#endif + +#endif /* PROJECTIVE_SPLIT_H */ -- 2.1.4