diff options
Diffstat (limited to 'pixelflut.c')
-rw-r--r-- | pixelflut.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/pixelflut.c b/pixelflut.c index 15dcc55..60d76ef 100644 --- a/pixelflut.c +++ b/pixelflut.c @@ -9,6 +9,17 @@ #include <unistd.h> #include <errno.h> +static uint8_t *images[2048] = { 0 }; +static int image_count = 0; + +int store_image(const uint8_t *img, int w, int h) { + if (image_count >= sizeof(images)/sizeof(images[0])) + return -1; + images[image_count] = malloc(w*h*4); + memcpy(images[image_count], img, w*h*4); + return image_count++; +} + #define PIXEL_FORMAT "PX %zd %zd %02x%02x%02x\n" int cct(const char *target, int port) { printf("Reconnecting %s:%d\n", target, port); @@ -35,7 +46,7 @@ int cct(const char *target, int port) { return sockfd; } -int sendframe(int fd, uint8_t *img, int w, int h, int ox, int oy) { +int sendframe(int fd, int idx, int w, int h, int ox, int oy) { static unsigned long fcnt=0; printf("frame %lu %dx%d @pos %dx%d\n", fcnt++, w, h, ox, oy); int fmtlen = snprintf(NULL, 0, PIXEL_FORMAT, (size_t)1000, (size_t)1000, 0xff, 0xff, 0xff); @@ -47,7 +58,7 @@ int sendframe(int fd, uint8_t *img, int w, int h, int ox, int oy) { char *p = out; for (size_t x=0; x<w; x++) { for (size_t y=0; y<h; y++) { - uint8_t *px = img + (y*w + x)*4; + uint8_t *px = images[idx] + (y*w + x)*4; uint8_t r = px[0], g = px[1], b = px[2], a = px[3]; if (a != 255) continue; |