From bea3ec8fec09418f31f6a8492294b23c7bd63acf Mon Sep 17 00:00:00 2001 From: HylkeV Date: Thu, 8 Dec 2016 19:50:30 +0100 Subject: [PATCH] Added support for different pixelformats. --- C/Server/main.c | 10 ++++------ C/Server/pixelvloed | Bin 0 -> 13895 bytes C/Server/screenbuffer.c | 39 ++++++++++++++++++--------------------- C/Server/screenbuffer.h | 2 +- 4 files changed, 23 insertions(+), 28 deletions(-) create mode 100755 C/Server/pixelvloed diff --git a/C/Server/main.c b/C/Server/main.c index 0a26214..8a6eaa1 100644 --- a/C/Server/main.c +++ b/C/Server/main.c @@ -68,11 +68,9 @@ int main(int argc, char* argv[]) // draw... int x, y; uint8_t r, g, b, a; - int pixeloffset = 2; + int pixeloffset = 1; int pixellength = 0; - - while( (packet_size = get_udp_packet(sock_fd, packet, sizeof(packet))) >= 0 ) { if((uint8_t)packet[0] == 1){ pixellength = 8; @@ -90,11 +88,11 @@ int main(int argc, char* argv[]) i+=pixellength){ x = (uint8_t)packet[i ] + (((uint8_t)packet[i+1])<<8); y = (uint8_t)packet[i+2] + (((uint8_t)packet[i+3])<<8); - r = packet[i+6]; + r = packet[i+4]; g = packet[i+5]; - b = packet[i+4]; + b = packet[i+6]; a = 0; - //printf("%d %d %d %d %d %d\n", x, y, packet[i ], packet[i+1], packet[i+2], packet[i+3]); + //printf("%d %d %d %d %d %d\n", x, y, r, g, b, a); // Write pixel to screen write_pixel_to_screen(x, y, r, g, b, a); } diff --git a/C/Server/pixelvloed b/C/Server/pixelvloed new file mode 100755 index 0000000000000000000000000000000000000000..6ec012e25ebeb31d5886957fe27a582a077ded80 GIT binary patch literal 13895 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 literal 0 HcmV?d00001 diff --git a/C/Server/screenbuffer.c b/C/Server/screenbuffer.c index 1ad7786..c69e14e 100644 --- a/C/Server/screenbuffer.c +++ b/C/Server/screenbuffer.c @@ -10,7 +10,6 @@ #include int fbfd = 0; -struct fb_var_screeninfo orig_vinfo; struct fb_var_screeninfo vinfo; struct fb_fix_screeninfo finfo; long int screensize = 0; @@ -32,19 +31,9 @@ int8_t init_frame_buffer(void) printf("Error reading variable information.\n"); return 0; } - printf("Original %dx%d, %dbpp\n", vinfo.xres, vinfo.yres, + printf("Screen info %dx%d, %dbpp\n", vinfo.xres, vinfo.yres, vinfo.bits_per_pixel ); - // Store for reset (copy vinfo to vinfo_orig) - memcpy(&orig_vinfo, &vinfo, sizeof(struct fb_var_screeninfo)); - - // Change variable info - vinfo.bits_per_pixel = 24; - if (ioctl(fbfd, FBIOPUT_VSCREENINFO, &vinfo)) { - printf("Error setting variable information.\n"); - return 0; - } - // Get fixed screen information if (ioctl(fbfd, FBIOGET_FSCREENINFO, &finfo)) { printf("Error reading fixed information.\n"); @@ -72,19 +61,27 @@ void deinit_frame_buffer(void) { // cleanup munmap((void *)fbp, screensize); - if (ioctl(fbfd, FBIOPUT_VSCREENINFO, &orig_vinfo)) { - printf("Error re-setting variable information.\n"); - } close(fbfd); } -void write_pixel_to_screen(uint16_t x, uint16_t y, uint16_t r, uint16_t g, uint16_t b, uint8_t a){ - unsigned int pix_offset; - unsigned bpp = vinfo.bits_per_pixel / 8; +void write_pixel_to_screen(uint16_t x, uint16_t y, uint8_t r, uint8_t g, uint8_t b, uint8_t a){ + uint32_t pix_offset; + uint8_t bpp = vinfo.bits_per_pixel / 8; + union { + uint32_t pixel32; + uint8_t pixel8[4]; + } pixel; + uint8_t i; + if(x < vinfo.xres && y < vinfo.yres){ + pixel.pixel32 = 0; + pixel.pixel32 |= ((uint32_t)r >> (8 - vinfo.red.length)) << vinfo.red.offset; + pixel.pixel32 |= ((uint32_t)g >> (8 - vinfo.green.length)) << vinfo.green.offset; + pixel.pixel32 |= ((uint32_t)b >> (8 - vinfo.blue.length)) << vinfo.blue.offset; + pix_offset = bpp * x + y * finfo.line_length; - fbp[pix_offset++] = r; - fbp[pix_offset++] = g; - fbp[pix_offset] = b; + for (i=0; i