From: <enl...@li...> - 2000-10-26 21:34:01
|
Enlightenment CVS committal Author : gilbertt Project : misc Module : camE Log Message: camE. It's an imlib2 webcam snapper, for v4l devices. Used to be the xawtv webcam app, but got a massive imlib2-sized facelift, adding the following features: o ttf fonts o blended transparent text o title text o options in ~/.camErc o message read from separate file (eg echo "having sex" > ~/.caminfo) o color the text as you like o text background any color/alpha value o scp support for uploading o proper logging to file o user defined actions to be run before and after shots, and after upload (use to play sounds, beep, run scripts, copy files, whatever) o file for stopping uploads temporarily (touch ~/BLOCKCAM to stop shooting, remove it to resume) o now a proper daemon that can run without X forever if wanted o image archiving (timestamped into a directory of your choice after upload) o lag reduction (for some cams, when mmaped, the image grabbed lags behind the cam by up to 20 seconds. I use lag_reduce 5 in my ~/.camErc for example. This takes 5 shots in a row, which clears the mmap buffers, and then keeps the last shot, lag-free). o Other stuff I can't remember. Status: Vendor Tag: came Release Tags: camE N misc/camE/webcam.c N misc/camE/videodev.h N misc/camE/ftp.c N misc/camE/ftp.h N misc/camE/parseconfig.c N misc/camE/parseconfig.h N misc/camE/Makefile N misc/camE/example.camErc No conflicts created by this import |
From: <enl...@li...> - 2000-10-27 03:18:47
|
Enlightenment CVS committal Author : gilbertt Project : misc Module : camE Modified Files: webcam.c Log Message: call strftime on title text too =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/webcam.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -3 -r1.1.1.1 -r1.2 --- webcam.c 2000/10/26 21:33:58 1.1.1.1 +++ webcam.c 2000/10/27 03:18:46 1.2 @@ -189,7 +189,7 @@ { time_t t; struct tm *tm; - char line[128]; + char line[255], title_line[255]; int len; char *msg; Imlib_Font title_fn, text_fn; @@ -197,7 +197,9 @@ time(&t); tm = localtime(&t); - strftime(line, 127, grab_text, tm); + strftime(line, 254, grab_text, tm); + if(title_text) + strftime(title_line, 254, title_text, tm); msg = get_message(); if (msg) @@ -216,13 +218,13 @@ if (title_fn) { imlib_context_set_font(title_fn); - imlib_get_text_size(title_text, &w, &h); + imlib_get_text_size(title_line, &w, &h); x = width - w - 2; y = 2; imlib_context_set_color(bg_r, bg_g, bg_b, bg_a); imlib_image_fill_rectangle(x - 2, y - 1, w + 4, h + 2); imlib_context_set_color(title_r, title_g, title_b, title_a); - imlib_text_draw(x, y, title_text); + imlib_text_draw(x, y, title_line); } } |
From: <enl...@li...> - 2000-10-27 04:17:59
|
Enlightenment CVS committal Author : gilbertt Project : misc Module : camE Modified Files: webcam.c Log Message: hush the logging when BLOCK'ed =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/webcam.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- webcam.c 2000/10/27 03:18:46 1.2 +++ webcam.c 2000/10/27 04:17:58 1.3 @@ -136,7 +136,8 @@ mmap(0, grab_size, PROT_READ | PROT_WRITE, MAP_SHARED, grab_fd, 0); } -Imlib_Image grab_one(int *width, int *height) +Imlib_Image +grab_one(int *width, int *height) { Imlib_Image im; int i = lag_reduce; @@ -198,8 +199,8 @@ time(&t); tm = localtime(&t); strftime(line, 254, grab_text, tm); - if(title_text) - strftime(title_line, 254, title_text, tm); + if (title_text) + strftime(title_line, 254, title_text, tm); msg = get_message(); if (msg) @@ -245,7 +246,8 @@ } } -Imlib_Image convert_rgb_to_imlib2(unsigned char *mem, int width, int height) +Imlib_Image +convert_rgb_to_imlib2(unsigned char *mem, int width, int height) { Imlib_Image im; DATA32 *data, *dest; @@ -525,12 +527,10 @@ log("running post upload action"); system(action_post_upload); } + log("sleeping"); } if (grab_delay > 0) - { - log("sleeping"); sleep(grab_delay); - } } return 0; } |
From: <enl...@li...> - 2000-10-27 12:59:42
|
Enlightenment CVS committal Author : gilbertt Project : misc Module : camE Modified Files: example.camErc Log Message: comments in the example rc file =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/example.camErc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -3 -r1.1.1.1 -r1.2 --- example.camErc 2000/10/26 21:34:00 1.1.1.1 +++ example.camErc 2000/10/27 12:59:42 1.2 @@ -3,40 +3,69 @@ user = giblet pass = NO_WAY_BUDDY dir = public_html/images/ +# where should the file end up? Also, this extension determines the file +# type the image is saved as. Try image.png for a png. file = webcam.jpg +# camE uploads to a temp file, and moves it across when done +# this way people don't view half-uploaded images tmp = uploading.jpg +# do passive ftp? passive = 1 +# ftp debugging? (noisy) debug = 0 +# Actually do the upload? If do = 0, just take and archive pics. do = 1 [grab] device = /dev/video0 +# store temp image on local machine temp_file = /tmp/webcam.jpg +# lag reduction, takes 5 shots, discards the first 4, thus clearing mmap +# buffers lag_reduce = 5 +# This goes at the bottom left, with the message from "infofile" appended. +# It is run through strftime, so date vars are expanded. text = %d/%m/%Y %H:%M GMT - width = 352 height = 288 +# delay between uploading one shot and starting the next delay = 10 +# where to log activity. comment out this line to disable logging logfile = /home/gilbertt/.camlog +# gets the message text from here. one line allowed only. means you can do +# stuff like echo "sleeping and stuff" > ~/.caminfo infofile = /home/gilbertt/.caminfo +# directory to archive pics in. They are datestamped and saved in here. archive = /opt/images/webcam +# jpeg quality (you can save as png etc too, but then quality does squat) quality = 80 input = 0 norm = 0 +# Goes in the top right. strftime() is run on this too, so put date stuff in +# if you like title_text = Giblet TV +# color/transparency of title text title_r = 255 title_g = 255 title_b = 0 title_a = 255 +# font for title text. fontname/size title_font = arial/8 +# color/transparency of message text text_r = 255 text_g = 255 text_b = 0 text_a = 255 +# font for message text. fontname/size text_font = arial/8 +# color/transparency of rectangle behind text +# make it 0,0,0,0 to disable. bg_a = 0 bg_b = 0 bg_g = 0 bg_a = 100 +# directory to look for ttf fonts in ttf_dir = /usr/X11R6/lib/X11/fonts/TrueType +# file to check for before shooting. while this file exists, no shots will +# be taken. blockfile = /home/gilbertt/BLOCKCAM |
From: <enl...@li...> - 2000-10-27 21:59:51
|
Enlightenment CVS committal Author : gilbertt Project : misc Module : camE Modified Files: Makefile example.camErc webcam.c Log Message: SHIT. leaking images. bad bad. =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/Makefile,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -3 -r1.1.1.1 -r1.2 --- Makefile 2000/10/26 21:34:00 1.1.1.1 +++ Makefile 2000/10/27 21:59:51 1.2 @@ -7,7 +7,7 @@ mandir=$(ROOT)${prefix}/man CC=gcc -CFLAGS=-O2 -Wall -I$(srcdir)/.. -I.. -D_GNU_SOURCE -I/usr/local/include -I/usr/X11R6/include +CFLAGS=-O3 -Wall -I$(srcdir)/.. -I.. -D_GNU_SOURCE -I/usr/local/include -I/usr/X11R6/include INSTALL=/usr/bin/install -c INSTALL_PROGRAM=${INSTALL} =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/example.camErc,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- example.camErc 2000/10/27 12:59:42 1.2 +++ example.camErc 2000/10/27 21:59:51 1.3 @@ -18,6 +18,9 @@ [grab] device = /dev/video0 +# close device between shots? (some v4l drivers suck cpu when the device is +# open) +close_dev = 0 # store temp image on local machine temp_file = /tmp/webcam.jpg # lag reduction, takes 5 shots, discards the first 4, thus clearing mmap =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/webcam.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- webcam.c 2000/10/27 04:17:58 1.3 +++ webcam.c 2000/10/27 21:59:51 1.4 @@ -19,16 +19,13 @@ #include <Imlib2.h> #include <asm/types.h> -#include "videodev.h" /* change this to "videodev2.h" for v4l2 */ +#include "videodev.h" #include "ftp.h" #include "parseconfig.h" void log(char *entry); -/* ---------------------------------------------------------------------- */ -/* configuration */ - char *ftp_host = "www"; char *ftp_user = "webcam"; char *ftp_pass = "xxxxxx"; @@ -64,6 +61,7 @@ int bg_g = 0; int bg_b = 0; int bg_a = 150; +int close_dev = 0; char *title_font = "arial/8"; char *ttf_dir = "/usr/X11R6/lib/X11/fonts/TrueType"; char *grab_archive = NULL; @@ -75,27 +73,27 @@ int grab_input = 0; int grab_norm = VIDEO_MODE_PAL; -/* ---------------------------------------------------------------------- */ - -Imlib_Image convert_rgb_to_imlib2(unsigned char *mem, int width, int height); - -/* ---------------------------------------------------------------------- */ -/* jpeg stuff */ - - -/* ---------------------------------------------------------------------- */ -/* capture stuff - old v4l (bttv) */ - -static struct video_capability grab_cap; static struct video_mmap grab_buf; -static struct video_channel grab_chan; -static int grab_fd, grab_size; +static int grab_fd = -1; +static int grab_size = 0; static unsigned char *grab_data = NULL; -static struct video_mbuf vid_mbuf; +Imlib_Image convert_rgb_to_imlib2(unsigned char *mem, int width, int height); + +void +close_device() +{ + close(grab_fd); + grab_fd = -1; + munmap(grab_data, grab_size); +} void grab_init() { + struct video_capability grab_cap; + struct video_channel grab_chan; + struct video_mbuf vid_mbuf; + if ((grab_fd = open(grab_device, O_RDWR)) == -1) { fprintf(stderr, "open %s: %s\n", grab_device, strerror(errno)); @@ -134,10 +132,15 @@ grab_size = vid_mbuf.size; grab_data = mmap(0, grab_size, PROT_READ | PROT_WRITE, MAP_SHARED, grab_fd, 0); + if (grab_data == NULL) + { + fprintf(stderr, + "couldn't mmap vidcam. your card doesn't support that?\n"); + exit(1); + } } -Imlib_Image -grab_one(int *width, int *height) +Imlib_Image grab_one(int *width, int *height) { Imlib_Image im; int i = lag_reduce; @@ -246,8 +249,7 @@ } } -Imlib_Image -convert_rgb_to_imlib2(unsigned char *mem, int width, int height) +Imlib_Image convert_rgb_to_imlib2(unsigned char *mem, int width, int height) { Imlib_Image im; DATA32 *data, *dest; @@ -443,8 +445,9 @@ bg_a = i; if (-1 != (i = cfg_get_int("grab", "lag_reduce"))) lag_reduce = i; + if (-1 != (i = cfg_get_int("grab", "close_dev"))) + close_dev = i; - /* print config */ fprintf(stderr, "camE v0.3 - (c) 1999, 2000 Gerd Knorr, Tom Gilbert\n"); fprintf(stderr, @@ -527,6 +530,8 @@ log("running post upload action"); system(action_post_upload); } + imlib_context_set_image(image); + imlib_free_image_and_decache(); log("sleeping"); } if (grab_delay > 0) |
From: <enl...@li...> - 2000-10-27 23:41:48
|
Enlightenment CVS committal Author : gilbertt Project : misc Module : camE Modified Files: example.camErc webcam.c Log Message: bah =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/example.camErc,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- example.camErc 2000/10/27 21:59:51 1.3 +++ example.camErc 2000/10/27 23:41:47 1.4 @@ -18,9 +18,6 @@ [grab] device = /dev/video0 -# close device between shots? (some v4l drivers suck cpu when the device is -# open) -close_dev = 0 # store temp image on local machine temp_file = /tmp/webcam.jpg # lag reduction, takes 5 shots, discards the first 4, thus clearing mmap =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/webcam.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- webcam.c 2000/10/27 21:59:51 1.4 +++ webcam.c 2000/10/27 23:41:47 1.5 @@ -35,7 +35,6 @@ char *temp_file = "/tmp/webcam.jpg"; int ftp_passive = 1; int ftp_do = 1; -int lag_reduce = 5; char *scp_target = NULL; char *grab_device = "/dev/video0"; char *grab_text = "webcam %Y-%m-%d %H:%M:%S"; /* strftime */ @@ -48,6 +47,7 @@ int grab_height = 240; int grab_delay = 3; int grab_quality = 75; +int lag_reduce = 5; int text_r = 255; int text_g = 255; int text_b = 255; @@ -82,9 +82,15 @@ void close_device() { - close(grab_fd); + if (munmap(grab_data, grab_size) != 0) + { + perror("munmap()"); + exit(1); + } + grab_data = NULL; + if (close(grab_fd)) + perror("close(grab_fd) "); grab_fd = -1; - munmap(grab_data, grab_size); } void @@ -140,26 +146,31 @@ } } -Imlib_Image grab_one(int *width, int *height) +Imlib_Image +grab_one(int *width, int *height) { Imlib_Image im; - int i = lag_reduce; + int i = 0; + int j = lag_reduce; - /* lag removal */ - while (i--) + while (j--) { + if (grab_fd == -1) + grab_init(); if (ioctl(grab_fd, VIDIOCMCAPTURE, &grab_buf) == -1) { perror("ioctl VIDIOCMCAPTURE"); return NULL; } - if (ioctl(grab_fd, VIDIOCSYNC, &grab_buf) == -1) + if (ioctl(grab_fd, VIDIOCSYNC, &i) == -1) { perror("ioctl VIDIOCSYNC"); return NULL; } } im = convert_rgb_to_imlib2(grab_data, grab_buf.width, grab_buf.height); + if (close_dev) + close_device(); if (im) { imlib_context_set_image(im); @@ -249,7 +260,8 @@ } } -Imlib_Image convert_rgb_to_imlib2(unsigned char *mem, int width, int height) +Imlib_Image +convert_rgb_to_imlib2(unsigned char *mem, int width, int height) { Imlib_Image im; DATA32 *data, *dest; @@ -443,13 +455,13 @@ bg_b = i; if (-1 != (i = cfg_get_int("grab", "bg_a"))) bg_a = i; - if (-1 != (i = cfg_get_int("grab", "lag_reduce"))) - lag_reduce = i; if (-1 != (i = cfg_get_int("grab", "close_dev"))) close_dev = i; + if (-1 != (i = cfg_get_int("grab", "lag_reduce"))) + lag_reduce = i; /* print config */ - fprintf(stderr, "camE v0.3 - (c) 1999, 2000 Gerd Knorr, Tom Gilbert\n"); + fprintf(stderr, "camE v0.5 - (c) 1999, 2000 Gerd Knorr, Tom Gilbert\n"); fprintf(stderr, "grabber config: size %dx%d, input %d, norm %d, " "jpeg quality %d\n", grab_width, grab_height, grab_input, |
From: <enl...@li...> - 2000-10-27 23:43:10
|
Enlightenment CVS committal Author : gilbertt Project : misc Module : camE Added Files: COPYING Log Message: copying |
From: <enl...@li...> - 2000-10-30 00:01:34
|
Enlightenment CVS committal Author : gilbertt Project : misc Module : camE Modified Files: webcam.c Log Message: *sigh =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/webcam.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -3 -r1.5 -r1.6 --- webcam.c 2000/10/27 23:41:47 1.5 +++ webcam.c 2000/10/30 00:01:33 1.6 @@ -311,6 +311,7 @@ time_t t; struct tm *tm; struct stat st; + char *tmp; if (grab_archive) { @@ -324,6 +325,9 @@ } while (stat(buffer, &st) == 0); imlib_context_set_image(im); + tmp = strrchr(buffer, '.'); + if (tmp) + imlib_image_set_format(tmp + 1); imlib_save_image(buffer); } } @@ -361,6 +365,7 @@ char filename[100]; int width, height, i; struct stat st; + char *tmp; /* read config */ sprintf(filename, "%s/%s", getenv("HOME"), ".camErc"); @@ -518,6 +523,9 @@ system(action_post_shot); } add_time_text(image, get_message(), width, height); + tmp = strrchr(temp_file, '.'); + if (tmp) + imlib_image_set_format(tmp + 1); imlib_save_image(temp_file); do_postprocess(temp_file); archive_jpeg(image); |
From: <enl...@li...> - 2000-11-06 16:31:11
|
Enlightenment CVS committal Author : gilbertt Project : misc Module : camE Modified Files: Makefile example.camErc webcam.c Added Files: camE_text.style camE_title.style geist_list.c geist_list.h imlib_wrap.c imlib_wrap.h Log Message: camE now does font styles. Specify the style files to load in the config. I should wrap the imlib2 wrapper and the fontstyle stuff into a separate lib. It's pretty handy I think. =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/Makefile,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- Makefile 2000/10/27 21:59:51 1.2 +++ Makefile 2000/11/06 16:31:09 1.3 @@ -16,7 +16,7 @@ PROGS=camE -OBJS=webcam.o ftp.o parseconfig.o +OBJS=webcam.o ftp.o parseconfig.o imlib_wrap.o geist_list.o ########################################################################## =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/example.camErc,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- example.camErc 2000/10/27 23:41:47 1.4 +++ example.camErc 2000/11/06 16:31:10 1.5 @@ -51,6 +51,8 @@ title_a = 255 # font for title text. fontname/size title_font = arial/8 +# fancy font styles +# title_style = /path/to/title.style # color/transparency of message text text_r = 255 text_g = 255 @@ -58,6 +60,8 @@ text_a = 255 # font for message text. fontname/size text_font = arial/8 +# fancy font styles +# text_style = /path/to/text.style # color/transparency of rectangle behind text # make it 0,0,0,0 to disable. bg_a = 0 =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/webcam.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -3 -r1.6 -r1.7 --- webcam.c 2000/10/30 00:01:33 1.6 +++ webcam.c 2000/11/06 16:31:10 1.7 @@ -17,6 +17,8 @@ #include <sys/ioctl.h> #include <X11/Xlib.h> #include <Imlib2.h> +#include "geist_list.h" +#include "imlib_wrap.h" #include <asm/types.h> #include "videodev.h" @@ -68,6 +70,10 @@ char *grab_blockfile = NULL; char *grab_postprocess = NULL; char *title_text = NULL; +font_style *title_style = NULL; +font_style *text_style = NULL; +char *title_style_file = NULL; +char *text_style_file = NULL; /* these work for v4l only, not v4l2 */ int grab_input = 0; @@ -226,20 +232,20 @@ if (line[len - 1] == '\n') line[--len] = '\0'; - imlib_context_set_image(image); if (title_text) { title_fn = imlib_load_font(title_font); if (title_fn) { - imlib_context_set_font(title_fn); - imlib_get_text_size(title_line, &w, &h); + imlib_wrap_get_text_size(title_fn, title_line, title_style, &w, &h, + IMLIB_TEXT_TO_RIGHT); x = width - w - 2; y = 2; - imlib_context_set_color(bg_r, bg_g, bg_b, bg_a); - imlib_image_fill_rectangle(x - 2, y - 1, w + 4, h + 2); - imlib_context_set_color(title_r, title_g, title_b, title_a); - imlib_text_draw(x, y, title_line); + imlib_wrap_image_fill_rectangle(image, x - 2, y - 1, w + 4, h + 2, + bg_r, bg_g, bg_b, bg_a); + imlib_wrap_text_draw(image, title_fn, title_style, x, y, title_line, + IMLIB_TEXT_TO_RIGHT, title_r, title_g, title_b, + title_a); } } @@ -248,14 +254,14 @@ text_fn = imlib_load_font(text_font); if (text_fn) { - imlib_context_set_font(text_fn); - imlib_get_text_size(line, &w, &h); + imlib_wrap_get_text_size(text_fn, line, text_style, &w, &h, IMLIB_TEXT_TO_RIGHT); x = 2; y = height - h - 2; - imlib_context_set_color(bg_r, bg_g, bg_b, bg_a); - imlib_image_fill_rectangle(x - 2, y - 1, w + 4, h + 2); - imlib_context_set_color(text_r, text_g, text_b, text_a); - imlib_text_draw(x, y, line); + imlib_wrap_image_fill_rectangle(image, x - 2, y - 1, w + 4, h + 2, + bg_r, bg_g, bg_b, bg_a); + imlib_wrap_text_draw(image, text_fn, text_style, x, y, line, + IMLIB_TEXT_TO_RIGHT, text_r, text_g, text_b, + text_a); } } } @@ -311,7 +317,6 @@ time_t t; struct tm *tm; struct stat st; - char *tmp; if (grab_archive) { @@ -324,11 +329,7 @@ grab_archive, date, num++); } while (stat(buffer, &st) == 0); - imlib_context_set_image(im); - tmp = strrchr(buffer, '.'); - if (tmp) - imlib_image_set_format(tmp + 1); - imlib_save_image(buffer); + imlib_wrap_save_image(im, buffer); } } @@ -365,7 +366,6 @@ char filename[100]; int width, height, i; struct stat st; - char *tmp; /* read config */ sprintf(filename, "%s/%s", getenv("HOME"), ".camErc"); @@ -424,6 +424,10 @@ text_font = val; if (NULL != (val = cfg_get_str("grab", "temp_file"))) temp_file = val; + if (NULL != (val = cfg_get_str("grab", "title_style"))) + title_style_file = val; + if (NULL != (val = cfg_get_str("grab", "text_style"))) + text_style_file = val; if (-1 != (i = cfg_get_int("grab", "width"))) grab_width = i; if (-1 != (i = cfg_get_int("grab", "height"))) @@ -482,6 +486,10 @@ imlib_add_path_to_font_path(ttf_dir); imlib_add_path_to_font_path("."); imlib_context_set_operation(IMLIB_OP_COPY); + if(title_style_file) + title_style = font_style_new_from_ascii(title_style_file); + if(text_style_file) + text_style = font_style_new_from_ascii(text_style_file); if (ftp_do) { @@ -523,10 +531,7 @@ system(action_post_shot); } add_time_text(image, get_message(), width, height); - tmp = strrchr(temp_file, '.'); - if (tmp) - imlib_image_set_format(tmp + 1); - imlib_save_image(temp_file); + imlib_wrap_save_image(image, temp_file); do_postprocess(temp_file); archive_jpeg(image); if (ftp_do) @@ -550,8 +555,7 @@ log("running post upload action"); system(action_post_upload); } - imlib_context_set_image(image); - imlib_free_image_and_decache(); + imlib_wrap_free_image_and_decache(image); log("sleeping"); } if (grab_delay > 0) |
From: <enl...@li...> - 2000-11-08 20:29:55
|
Enlightenment CVS committal Author : gilbertt Project : misc Module : camE Modified Files: webcam.c Log Message: better check for devices that can't be mmap()d =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/webcam.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -3 -r1.7 -r1.8 --- webcam.c 2000/11/06 16:31:10 1.7 +++ webcam.c 2000/11/08 20:29:54 1.8 @@ -144,7 +144,7 @@ grab_size = vid_mbuf.size; grab_data = mmap(0, grab_size, PROT_READ | PROT_WRITE, MAP_SHARED, grab_fd, 0); - if (grab_data == NULL) + if ((grab_data == NULL) || (-1 == (int)grab_data)) { fprintf(stderr, "couldn't mmap vidcam. your card doesn't support that?\n"); @@ -158,6 +158,7 @@ Imlib_Image im; int i = 0; int j = lag_reduce; + if (j == 0) j++; while (j--) { |
From: <enl...@li...> - 2000-11-09 12:50:05
|
Enlightenment CVS committal Author : gilbertt Project : misc Module : camE Modified Files: Makefile webcam.c Removed Files: geist_list.c geist_list.h imlib_wrap.c imlib_wrap.h Log Message: camE now uses giblib. Install it from misc/giblib. =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/Makefile,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- Makefile 2000/11/06 16:31:09 1.3 +++ Makefile 2000/11/09 12:50:04 1.4 @@ -7,7 +7,7 @@ mandir=$(ROOT)${prefix}/man CC=gcc -CFLAGS=-O3 -Wall -I$(srcdir)/.. -I.. -D_GNU_SOURCE -I/usr/local/include -I/usr/X11R6/include +CFLAGS=-O3 -Wall -I$(srcdir)/.. -I.. -D_GNU_SOURCE `giblib-config --cflags` INSTALL=/usr/bin/install -c INSTALL_PROGRAM=${INSTALL} @@ -16,14 +16,14 @@ PROGS=camE -OBJS=webcam.o ftp.o parseconfig.o imlib_wrap.o geist_list.o +OBJS=webcam.o ftp.o parseconfig.o ########################################################################## all build: $(PROGS) camE: $(OBJS) - $(CC) $(CFLAGS) -o $@ $(OBJS) -L/usr/local/lib -lImlib2 -lttf -lm -ldl -lXext -lXext -L/usr/X11R6/lib + $(CC) $(CFLAGS) -o $@ $(OBJS) `giblib-config --libs` install: all $(INSTALL_DIR) $(bindir) =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/webcam.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -3 -r1.8 -r1.9 --- webcam.c 2000/11/08 20:29:54 1.8 +++ webcam.c 2000/11/09 12:50:04 1.9 @@ -17,8 +17,7 @@ #include <sys/ioctl.h> #include <X11/Xlib.h> #include <Imlib2.h> -#include "geist_list.h" -#include "imlib_wrap.h" +#include <giblib.h> #include <asm/types.h> #include "videodev.h" @@ -70,8 +69,8 @@ char *grab_blockfile = NULL; char *grab_postprocess = NULL; char *title_text = NULL; -font_style *title_style = NULL; -font_style *text_style = NULL; +gib_style *title_style = NULL; +gib_style *text_style = NULL; char *title_style_file = NULL; char *text_style_file = NULL; @@ -238,13 +237,13 @@ title_fn = imlib_load_font(title_font); if (title_fn) { - imlib_wrap_get_text_size(title_fn, title_line, title_style, &w, &h, + gib_imlib_get_text_size(title_fn, title_line, title_style, &w, &h, IMLIB_TEXT_TO_RIGHT); x = width - w - 2; y = 2; - imlib_wrap_image_fill_rectangle(image, x - 2, y - 1, w + 4, h + 2, + gib_imlib_image_fill_rectangle(image, x - 2, y - 1, w + 4, h + 2, bg_r, bg_g, bg_b, bg_a); - imlib_wrap_text_draw(image, title_fn, title_style, x, y, title_line, + gib_imlib_text_draw(image, title_fn, title_style, x, y, title_line, IMLIB_TEXT_TO_RIGHT, title_r, title_g, title_b, title_a); } @@ -255,12 +254,12 @@ text_fn = imlib_load_font(text_font); if (text_fn) { - imlib_wrap_get_text_size(text_fn, line, text_style, &w, &h, IMLIB_TEXT_TO_RIGHT); + gib_imlib_get_text_size(text_fn, line, text_style, &w, &h, IMLIB_TEXT_TO_RIGHT); x = 2; y = height - h - 2; - imlib_wrap_image_fill_rectangle(image, x - 2, y - 1, w + 4, h + 2, + gib_imlib_image_fill_rectangle(image, x - 2, y - 1, w + 4, h + 2, bg_r, bg_g, bg_b, bg_a); - imlib_wrap_text_draw(image, text_fn, text_style, x, y, line, + gib_imlib_text_draw(image, text_fn, text_style, x, y, line, IMLIB_TEXT_TO_RIGHT, text_r, text_g, text_b, text_a); } @@ -330,7 +329,7 @@ grab_archive, date, num++); } while (stat(buffer, &st) == 0); - imlib_wrap_save_image(im, buffer); + gib_imlib_save_image(im, buffer); } } @@ -488,9 +487,9 @@ imlib_add_path_to_font_path("."); imlib_context_set_operation(IMLIB_OP_COPY); if(title_style_file) - title_style = font_style_new_from_ascii(title_style_file); + title_style = gib_style_new_from_ascii(title_style_file); if(text_style_file) - text_style = font_style_new_from_ascii(text_style_file); + text_style = gib_style_new_from_ascii(text_style_file); if (ftp_do) { @@ -532,7 +531,7 @@ system(action_post_shot); } add_time_text(image, get_message(), width, height); - imlib_wrap_save_image(image, temp_file); + gib_imlib_save_image(image, temp_file); do_postprocess(temp_file); archive_jpeg(image); if (ftp_do) @@ -556,7 +555,7 @@ log("running post upload action"); system(action_post_upload); } - imlib_wrap_free_image_and_decache(image); + gib_imlib_free_image_and_decache(image); log("sleeping"); } if (grab_delay > 0) |
From: <enl...@li...> - 2000-11-09 23:22:36
|
Enlightenment CVS committal Author : gilbertt Project : misc Module : camE Modified Files: example.camErc webcam.c Log Message: camE can now overlay an image on the shot =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/example.camErc,v retrieving revision 1.6 retrieving revision 1.7 diff -u -3 -r1.6 -r1.7 --- example.camErc 2000/11/08 18:42:22 1.6 +++ example.camErc 2000/11/09 23:22:35 1.7 @@ -74,3 +74,7 @@ # file to check for before shooting. while this file exists, no shots will # be taken. blockfile = /home/gilbertt/BLOCKCAM +# image to overlay +overlay_image = /home/gilbertt/.lb.png +overlay_x = 5 +overlay_y = 5 =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/webcam.c,v retrieving revision 1.9 retrieving revision 1.10 diff -u -3 -r1.9 -r1.10 --- webcam.c 2000/11/09 12:50:04 1.9 +++ webcam.c 2000/11/09 23:22:35 1.10 @@ -73,6 +73,9 @@ gib_style *text_style = NULL; char *title_style_file = NULL; char *text_style_file = NULL; +char *overlay_file = NULL; +Imlib_Image overlay_im = NULL; +int overlay_x = 0, overlay_y = 0; /* these work for v4l only, not v4l2 */ int grab_input = 0; @@ -143,7 +146,7 @@ grab_size = vid_mbuf.size; grab_data = mmap(0, grab_size, PROT_READ | PROT_WRITE, MAP_SHARED, grab_fd, 0); - if ((grab_data == NULL) || (-1 == (int)grab_data)) + if ((grab_data == NULL) || (-1 == (int) grab_data)) { fprintf(stderr, "couldn't mmap vidcam. your card doesn't support that?\n"); @@ -151,14 +154,15 @@ } } -Imlib_Image -grab_one(int *width, int *height) +Imlib_Image grab_one(int *width, int *height) { Imlib_Image im; int i = 0; int j = lag_reduce; - if (j == 0) j++; + if (j == 0) + j++; + while (j--) { if (grab_fd == -1) @@ -238,14 +242,14 @@ if (title_fn) { gib_imlib_get_text_size(title_fn, title_line, title_style, &w, &h, - IMLIB_TEXT_TO_RIGHT); + IMLIB_TEXT_TO_RIGHT); x = width - w - 2; y = 2; gib_imlib_image_fill_rectangle(image, x - 2, y - 1, w + 4, h + 2, - bg_r, bg_g, bg_b, bg_a); + bg_r, bg_g, bg_b, bg_a); gib_imlib_text_draw(image, title_fn, title_style, x, y, title_line, - IMLIB_TEXT_TO_RIGHT, title_r, title_g, title_b, - title_a); + IMLIB_TEXT_TO_RIGHT, title_r, title_g, title_b, + title_a); } } @@ -254,20 +258,20 @@ text_fn = imlib_load_font(text_font); if (text_fn) { - gib_imlib_get_text_size(text_fn, line, text_style, &w, &h, IMLIB_TEXT_TO_RIGHT); + gib_imlib_get_text_size(text_fn, line, text_style, &w, &h, + IMLIB_TEXT_TO_RIGHT); x = 2; y = height - h - 2; gib_imlib_image_fill_rectangle(image, x - 2, y - 1, w + 4, h + 2, - bg_r, bg_g, bg_b, bg_a); + bg_r, bg_g, bg_b, bg_a); gib_imlib_text_draw(image, text_fn, text_style, x, y, line, - IMLIB_TEXT_TO_RIGHT, text_r, text_g, text_b, - text_a); + IMLIB_TEXT_TO_RIGHT, text_r, text_g, text_b, + text_a); } } } -Imlib_Image -convert_rgb_to_imlib2(unsigned char *mem, int width, int height) +Imlib_Image convert_rgb_to_imlib2(unsigned char *mem, int width, int height) { Imlib_Image im; DATA32 *data, *dest; @@ -358,6 +362,18 @@ fclose(fp); } +void +draw_overlay(Imlib_Image image) +{ + int w, h; + + w = gib_imlib_image_get_width(overlay_im); + h = gib_imlib_image_get_height(overlay_im); + gib_imlib_blend_image_onto_image(image, overlay_im, 0, 0, 0, w, h, + overlay_x, overlay_y, w, h, 0, + gib_imlib_image_has_alpha(overlay_im), 0); +} + int main(int argc, char *argv[]) { @@ -428,6 +444,8 @@ title_style_file = val; if (NULL != (val = cfg_get_str("grab", "text_style"))) text_style_file = val; + if (NULL != (val = cfg_get_str("grab", "overlay_image"))) + overlay_file = val; if (-1 != (i = cfg_get_int("grab", "width"))) grab_width = i; if (-1 != (i = cfg_get_int("grab", "height"))) @@ -468,6 +486,10 @@ close_dev = i; if (-1 != (i = cfg_get_int("grab", "lag_reduce"))) lag_reduce = i; + if (-1 != (i = cfg_get_int("grab", "overlay_x"))) + overlay_x = i; + if (-1 != (i = cfg_get_int("grab", "overlay_y"))) + overlay_y = i; /* print config */ fprintf(stderr, "camE v0.5 - (c) 1999, 2000 Gerd Knorr, Tom Gilbert\n"); @@ -486,10 +508,12 @@ imlib_add_path_to_font_path(ttf_dir); imlib_add_path_to_font_path("."); imlib_context_set_operation(IMLIB_OP_COPY); - if(title_style_file) + if (title_style_file) title_style = gib_style_new_from_ascii(title_style_file); - if(text_style_file) + if (text_style_file) text_style = gib_style_new_from_ascii(text_style_file); + if (overlay_file) + overlay_im = imlib_load_image(overlay_file); if (ftp_do) { @@ -530,6 +554,8 @@ log("running post-shot action"); system(action_post_shot); } + if (overlay_im) + draw_overlay(image); add_time_text(image, get_message(), width, height); gib_imlib_save_image(image, temp_file); do_postprocess(temp_file); |
From: <enl...@li...> - 2000-11-09 23:27:24
|
Enlightenment CVS committal Author : gilbertt Project : misc Module : camE Added Files: .cvsignore Log Message: for silence |
From: <enl...@li...> - 2000-11-10 15:48:12
|
Enlightenment CVS committal Author : gilbertt Project : misc Module : camE Modified Files: example.camErc Log Message: comment other options =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/example.camErc,v retrieving revision 1.7 retrieving revision 1.8 diff -u -3 -r1.7 -r1.8 --- example.camErc 2000/11/09 23:22:35 1.7 +++ example.camErc 2000/11/10 15:47:56 1.8 @@ -78,3 +78,7 @@ overlay_image = /home/gilbertt/.lb.png overlay_x = 5 overlay_y = 5 +# do things. like play sounds or whatever. Each is a shell command. +#action_pre_shot +#action_post_shot +#action_post_upload |
From: <enl...@li...> - 2000-11-23 22:25:32
|
Enlightenment CVS committal Author : gilbertt Project : misc Module : camE Modified Files: webcam.c Log Message: fork and die =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/webcam.c,v retrieving revision 1.10 retrieving revision 1.11 diff -u -3 -r1.10 -r1.11 --- webcam.c 2000/11/09 23:22:35 1.10 +++ webcam.c 2000/11/23 22:25:31 1.11 @@ -154,7 +154,8 @@ } } -Imlib_Image grab_one(int *width, int *height) +Imlib_Image +grab_one(int *width, int *height) { Imlib_Image im; int i = 0; @@ -271,7 +272,8 @@ } } -Imlib_Image convert_rgb_to_imlib2(unsigned char *mem, int width, int height) +Imlib_Image +convert_rgb_to_imlib2(unsigned char *mem, int width, int height) { Imlib_Image im; DATA32 *data, *dest; @@ -382,6 +384,16 @@ char filename[100]; int width, height, i; struct stat st; + pid_t childpid; + + /* fork and die */ + if ((childpid = fork()) < 0) + { + fprintf(stderr, "fork (%s)\n", strerror(errno)); + return (2); + } + else if (childpid > 0) + exit(0); /* parent */ /* read config */ sprintf(filename, "%s/%s", getenv("HOME"), ".camErc"); |
From: <enl...@li...> - 2000-12-02 01:49:28
|
Enlightenment CVS committal Author : gilbertt Project : misc Module : camE Modified Files: webcam.c Log Message: Feck. Was leaking imlib_fonts and doing something else dumb I don't remember now. Oh yeah, reading the message from the file twice each time :-) I suck. =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/webcam.c,v retrieving revision 1.11 retrieving revision 1.12 diff -u -3 -r1.11 -r1.12 --- webcam.c 2000/11/23 22:25:31 1.11 +++ webcam.c 2000/12/02 01:49:20 1.12 @@ -76,6 +76,7 @@ char *overlay_file = NULL; Imlib_Image overlay_im = NULL; int overlay_x = 0, overlay_y = 0; +Imlib_Font title_fn, text_fn; /* these work for v4l only, not v4l2 */ int grab_input = 0; @@ -217,8 +218,6 @@ struct tm *tm; char line[255], title_line[255]; int len; - char *msg; - Imlib_Font title_fn, text_fn; int x, y, w, h; time(&t); @@ -227,9 +226,8 @@ if (title_text) strftime(title_line, 254, title_text, tm); - msg = get_message(); - if (msg) - strcat(line, msg); + if (message) + strcat(line, message); line[127] = '\0'; len = strlen(line); @@ -239,36 +237,28 @@ if (title_text) { - title_fn = imlib_load_font(title_font); - if (title_fn) - { - gib_imlib_get_text_size(title_fn, title_line, title_style, &w, &h, - IMLIB_TEXT_TO_RIGHT); - x = width - w - 2; - y = 2; - gib_imlib_image_fill_rectangle(image, x - 2, y - 1, w + 4, h + 2, - bg_r, bg_g, bg_b, bg_a); - gib_imlib_text_draw(image, title_fn, title_style, x, y, title_line, - IMLIB_TEXT_TO_RIGHT, title_r, title_g, title_b, - title_a); - } + gib_imlib_get_text_size(title_fn, title_line, title_style, &w, &h, + IMLIB_TEXT_TO_RIGHT); + x = width - w - 2; + y = 2; + gib_imlib_image_fill_rectangle(image, x - 2, y - 1, w + 4, h + 2, bg_r, + bg_g, bg_b, bg_a); + gib_imlib_text_draw(image, title_fn, title_style, x, y, title_line, + IMLIB_TEXT_TO_RIGHT, title_r, title_g, title_b, + title_a); } if (line) { - text_fn = imlib_load_font(text_font); - if (text_fn) - { - gib_imlib_get_text_size(text_fn, line, text_style, &w, &h, - IMLIB_TEXT_TO_RIGHT); - x = 2; - y = height - h - 2; - gib_imlib_image_fill_rectangle(image, x - 2, y - 1, w + 4, h + 2, - bg_r, bg_g, bg_b, bg_a); - gib_imlib_text_draw(image, text_fn, text_style, x, y, line, - IMLIB_TEXT_TO_RIGHT, text_r, text_g, text_b, - text_a); - } + gib_imlib_get_text_size(text_fn, line, text_style, &w, &h, + IMLIB_TEXT_TO_RIGHT); + x = 2; + y = height - h - 2; + gib_imlib_image_fill_rectangle(image, x - 2, y - 1, w + 4, h + 2, bg_r, + bg_g, bg_b, bg_a); + gib_imlib_text_draw(image, text_fn, text_style, x, y, line, + IMLIB_TEXT_TO_RIGHT, text_r, text_g, text_b, + text_a); } } @@ -526,6 +516,12 @@ text_style = gib_style_new_from_ascii(text_style_file); if (overlay_file) overlay_im = imlib_load_image(overlay_file); + title_fn = imlib_load_font(title_font); + if (!title_fn) + fprintf(stderr, "can't load font %s\n", title_font); + text_fn = imlib_load_font(text_font); + if (!text_fn) + fprintf(stderr, "can't load font %s\n", text_font); if (ftp_do) { |
From: <enl...@li...> - 2000-12-17 20:51:46
|
Enlightenment CVS committal Author : gilbertt Project : misc Module : camE Dir : misc/camE Modified Files: ftp.c webcam.c Log Message: fix for dev kernels =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/ftp.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -3 -r1.1.1.1 -r1.2 --- ftp.c 2000/10/26 21:34:00 1.1.1.1 +++ ftp.c 2000/12/17 20:51:46 1.2 @@ -48,8 +48,6 @@ { sprintf(pty_name, "/dev/pty%c%c", *p1, *p2); sprintf(tty_name, "/dev/tty%c%c", *p1, *p2); - if (-1 == access(tty_name, R_OK | W_OK)) - continue; if (-1 != (pty = open(pty_name, O_RDWR))) return pty; } =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/webcam.c,v retrieving revision 1.12 retrieving revision 1.13 diff -u -3 -r1.12 -r1.13 --- webcam.c 2000/12/02 01:49:20 1.12 +++ webcam.c 2000/12/17 20:51:46 1.13 @@ -494,7 +494,7 @@ overlay_y = i; /* print config */ - fprintf(stderr, "camE v0.5 - (c) 1999, 2000 Gerd Knorr, Tom Gilbert\n"); + fprintf(stderr, "camE v0.6 - (c) 1999, 2000 Gerd Knorr, Tom Gilbert\n"); fprintf(stderr, "grabber config: size %dx%d, input %d, norm %d, " "jpeg quality %d\n", grab_width, grab_height, grab_input, |
From: <enl...@li...> - 2000-12-18 22:48:33
|
Enlightenment CVS committal Author : gilbertt Project : misc Module : camE Dir : misc/camE Added Files: AUTHORS Log Message: that should shut him up |
From: <enl...@so...> - 2001-01-03 21:03:33
|
Enlightenment CVS committal Author : gilbertt Project : misc Module : camE Modified Files: Makefile example.camErc ftp.c webcam.c Log Message: quick fixups =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/Makefile,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- Makefile 2000/11/09 12:50:04 1.4 +++ Makefile 2001/01/03 21:03:34 1.5 @@ -7,7 +7,7 @@ mandir=$(ROOT)${prefix}/man CC=gcc -CFLAGS=-O3 -Wall -I$(srcdir)/.. -I.. -D_GNU_SOURCE `giblib-config --cflags` +CFLAGS=-O3 -g -Wall -I$(srcdir)/.. -I.. -D_GNU_SOURCE `giblib-config --cflags` INSTALL=/usr/bin/install -c INSTALL_PROGRAM=${INSTALL} =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/example.camErc,v retrieving revision 1.8 retrieving revision 1.9 diff -u -3 -r1.8 -r1.9 --- example.camErc 2000/11/10 15:47:56 1.8 +++ example.camErc 2001/01/03 21:03:34 1.9 @@ -25,7 +25,7 @@ lag_reduce = 5 # This goes at the bottom left, with the message from "infofile" appended. # It is run through strftime, so date vars are expanded. -text = %d/%m/%Y %H:%M GMT - +text = %d/%m/%Y %H:%M %Z - width = 352 height = 288 # delay between uploading one shot and starting the next =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/ftp.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- ftp.c 2000/12/17 20:51:46 1.2 +++ ftp.c 2001/01/03 21:03:34 1.3 @@ -248,8 +248,8 @@ /* initialisation */ ftp_send(1, "bin"); ftp_recv(); - ftp_send(1, "umask 022"); - ftp_recv(); +/* ftp_send(1, "umask 022"); + ftp_recv(); */ /* ok */ break; =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/webcam.c,v retrieving revision 1.13 retrieving revision 1.14 diff -u -3 -r1.13 -r1.14 --- webcam.c 2000/12/17 20:51:46 1.13 +++ webcam.c 2001/01/03 21:03:34 1.14 @@ -15,6 +15,7 @@ #include <sys/time.h> #include <sys/mman.h> #include <sys/ioctl.h> +#include <sys/stat.h> #include <X11/Xlib.h> #include <Imlib2.h> #include <giblib.h> @@ -235,7 +236,7 @@ if (line[len - 1] == '\n') line[--len] = '\0'; - if (title_text) + if (title_text && title_fn) { gib_imlib_get_text_size(title_fn, title_line, title_style, &w, &h, IMLIB_TEXT_TO_RIGHT); @@ -248,7 +249,7 @@ title_a); } - if (line) + if (line && text_fn) { gib_imlib_get_text_size(text_fn, line, text_style, &w, &h, IMLIB_TEXT_TO_RIGHT); |
From: <enl...@so...> - 2001-02-14 20:20:48
|
Enlightenment CVS committal Author : gilbertt Project : misc Module : camE Dir : misc/camE Modified Files: webcam.c Log Message: Patch from Alex Roberts <bs...@ba...> to make the archiving use a sane filename. Before the number it used would be reset when you started and stopped it on the same day, and that's not good. Now the filename has a full timestamp in it, and will always be unique. =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/webcam.c,v retrieving revision 1.14 retrieving revision 1.15 diff -u -3 -r1.14 -r1.15 --- webcam.c 2001/01/03 21:03:34 1.14 +++ webcam.c 2001/02/14 20:21:29 1.15 @@ -308,7 +308,6 @@ void archive_jpeg(Imlib_Image im) { - static int num = 0; char buffer[1028]; char date[128]; time_t t; @@ -319,11 +318,12 @@ { time(&t); tm = localtime(&t); - strftime(date, 127, "%Y-%m-%d", tm); + strftime(date, 127, "%Y-%m-%d_%H%M%S", tm); + do { - snprintf(buffer, sizeof(buffer), "%s/webcam_%s_%05d.jpg", - grab_archive, date, num++); + snprintf(buffer, sizeof(buffer), "%s/webcam_%s.jpg", + grab_archive, date); } while (stat(buffer, &st) == 0); gib_imlib_save_image(im, buffer); |
From: <enl...@so...> - 2001-02-17 04:04:11
|
Enlightenment CVS committal Author : gilbertt Project : misc Module : camE Dir : misc/camE Modified Files: Makefile webcam.c Removed Files: ftp.c ftp.h Log Message: now uses libcurl, you'll need it =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/Makefile,v retrieving revision 1.5 retrieving revision 1.6 diff -u -3 -r1.5 -r1.6 --- Makefile 2001/01/03 21:03:34 1.5 +++ Makefile 2001/02/17 04:05:00 1.6 @@ -7,7 +7,7 @@ mandir=$(ROOT)${prefix}/man CC=gcc -CFLAGS=-O3 -g -Wall -I$(srcdir)/.. -I.. -D_GNU_SOURCE `giblib-config --cflags` +CFLAGS=-O3 -g -Wall -I$(srcdir)/.. -I.. -D_GNU_SOURCE `giblib-config --cflags` -lcurl INSTALL=/usr/bin/install -c INSTALL_PROGRAM=${INSTALL} @@ -16,7 +16,7 @@ PROGS=camE -OBJS=webcam.o ftp.o parseconfig.o +OBJS=webcam.o parseconfig.o ########################################################################## =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/webcam.c,v retrieving revision 1.15 retrieving revision 1.16 diff -u -3 -r1.15 -r1.16 --- webcam.c 2001/02/14 20:21:29 1.15 +++ webcam.c 2001/02/17 04:05:00 1.16 @@ -19,11 +19,13 @@ #include <X11/Xlib.h> #include <Imlib2.h> #include <giblib.h> +#include <curl/types.h> +#include <curl/curl.h> +#include <curl/easy.h> #include <asm/types.h> #include "videodev.h" -#include "ftp.h" #include "parseconfig.h" void log(char *entry); @@ -34,6 +36,7 @@ char *ftp_dir = "public_html/images"; char *ftp_file = "webcam.jpeg"; char *ftp_tmp = "uploading.jpeg"; +int ftp_debug=0; char *temp_file = "/tmp/webcam.jpg"; int ftp_passive = 1; int ftp_do = 1; @@ -64,6 +67,7 @@ int bg_b = 0; int bg_a = 150; int close_dev = 0; +int ftp_timeout = 30; char *title_font = "arial/8"; char *ttf_dir = "/usr/X11R6/lib/X11/fonts/TrueType"; char *grab_archive = NULL; @@ -319,11 +323,11 @@ time(&t); tm = localtime(&t); strftime(date, 127, "%Y-%m-%d_%H%M%S", tm); - + do { - snprintf(buffer, sizeof(buffer), "%s/webcam_%s.jpg", - grab_archive, date); + snprintf(buffer, sizeof(buffer), "%s/webcam_%s.jpg", grab_archive, + date); } while (stat(buffer, &st) == 0); gib_imlib_save_image(im, buffer); @@ -367,6 +371,77 @@ gib_imlib_image_has_alpha(overlay_im), 0); } +/* upload local to tmp then MV to remote */ +void +ftp_upload1(char *local, char *remote, char *tmp) +{ + char buf[2096]; + FILE *infile; + CURLcode ret; + CURL *curl_handle; + struct stat st; + struct curl_slist *post_commands = NULL; + char *passwd_string, *url_string; + + infile = fopen(local, "r"); + + if (!infile) + { + fprintf(stderr, "camE: Couldn't open temp file to upload it\n"); + perror("ftp_upload(): "); + return; + } + fstat(fileno(infile), &st); + +/* snprintf(buf, sizeof(buf), "cwd %s", ftp_dir); + post_commands = curl_slist_append(post_commands, buf); */ + snprintf(buf, sizeof(buf), "rnfr %s", tmp); + post_commands = curl_slist_append(post_commands, buf); + snprintf(buf, sizeof(buf), "rnto %s", remote); + post_commands = curl_slist_append(post_commands, buf); + + /* init the curl session */ + curl_handle = curl_easy_init(); + + curl_easy_setopt(curl_handle, CURLOPT_INFILE, infile); + curl_easy_setopt(curl_handle, CURLOPT_INFILESIZE, st.st_size); + + passwd_string = gib_strjoin(":", ftp_user, ftp_pass, NULL); + curl_easy_setopt(curl_handle, CURLOPT_USERPWD, passwd_string); + + /* set URL to save to */ + url_string = gib_strjoin("/", "ftp:/", ftp_host, ftp_dir, tmp, NULL); + curl_easy_setopt(curl_handle, CURLOPT_URL, url_string); + + /* no progress meter please */ + curl_easy_setopt(curl_handle, CURLOPT_NOPROGRESS, 1); + + /* shut up completely */ + if(ftp_debug) + curl_easy_setopt(curl_handle, CURLOPT_VERBOSE, 1); + else + curl_easy_setopt(curl_handle, CURLOPT_MUTE, 1); + + curl_easy_setopt(curl_handle, CURLOPT_POSTQUOTE, post_commands); + + curl_easy_setopt(curl_handle, CURLOPT_UPLOAD, 1); + + /* get it! */ + ret = curl_easy_perform(curl_handle); + /* TODO check error */ + if (ret) + { + fprintf(stderr, "\ncamE: error sending via ftp, error %d\n", ret); + } + + /* cleanup curl stuff */ + curl_easy_cleanup(curl_handle); + curl_slist_free_all(post_commands); + free(url_string); + free(passwd_string); + fclose(infile); +} + int main(int argc, char *argv[]) { @@ -409,6 +484,8 @@ ftp_debug = i; if (-1 != (i = cfg_get_int("ftp", "do"))) ftp_do = i; + if (-1 != (i = cfg_get_int("ftp", "timeout"))) + ftp_timeout = i; if (NULL != (val = cfg_get_str("scp", "target"))) scp_target = val; @@ -524,23 +601,11 @@ if (!text_fn) fprintf(stderr, "can't load font %s\n", text_font); - if (ftp_do) - { - log("connecting to ftp"); - ftp_init(ftp_passive); - ftp_connect(ftp_host, ftp_user, ftp_pass, ftp_dir); - } - /* go! */ for (;;) { if (grab_blockfile && (stat(grab_blockfile, &st) == -1)) { - if (ftp_do && !ftp_connected) - { - log("reconnecting ftp"); - ftp_connect(ftp_host, ftp_user, ftp_pass, ftp_dir); - } if (action_pre_shot) { log("running pre-shot action"); @@ -572,7 +637,7 @@ if (ftp_do) { log("*** uploading via ftp"); - ftp_upload(temp_file, ftp_file, ftp_tmp); + ftp_upload1(temp_file, ftp_file, ftp_tmp); } else if (scp_target) { |
From: <enl...@so...> - 2001-02-18 00:53:47
|
Enlightenment CVS committal Author : gilbertt Project : misc Module : camE Dir : misc/camE Modified Files: example.camErc webcam.c Log Message: FINALLY got around to patching in some code from technos (Jim Tuck <te...@cr...>) which adds two groovy features. One is the "correct" .camErc option which times an upload and corrects the time until the next shot accordingly, meaning more consistant refreshes. The other is "percent", which determines a threshold by which to reduce image resolution if the upload is _really_ taking too long, it's a nice dynamic algo, and works well. These options are commented in the example.camErc. =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/example.camErc,v retrieving revision 1.9 retrieving revision 1.10 diff -u -3 -r1.9 -r1.10 --- example.camErc 2001/01/03 21:03:34 1.9 +++ example.camErc 2001/02/18 00:54:08 1.10 @@ -30,6 +30,13 @@ height = 288 # delay between uploading one shot and starting the next delay = 10 +# do we want to correct the delay for a slow connect? +# (keeps the perpetually updating clients in sync) +correct = 1 +# scale image resolution dynamically based on bandwidth? +# percentage of the delay to spend uploading the image, +# 100 disables, useful values are < 40 +percent = 100 # where to log activity. comment out this line to disable logging logfile = /home/gilbertt/.camlog # gets the message text from here. one line allowed only. means you can do @@ -82,3 +89,4 @@ #action_pre_shot #action_post_shot #action_post_upload + =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/webcam.c,v retrieving revision 1.16 retrieving revision 1.17 diff -u -3 -r1.16 -r1.17 --- webcam.c 2001/02/17 04:05:00 1.16 +++ webcam.c 2001/02/18 00:54:08 1.17 @@ -2,6 +2,7 @@ * (c) 1998-2000 Gerd Knorr * * capture a image, compress as jpeg and upload to the webserver + * q * using ftp the ftp utility * */ @@ -36,7 +37,7 @@ char *ftp_dir = "public_html/images"; char *ftp_file = "webcam.jpeg"; char *ftp_tmp = "uploading.jpeg"; -int ftp_debug=0; +int ftp_debug = 0; char *temp_file = "/tmp/webcam.jpg"; int ftp_passive = 1; int ftp_do = 1; @@ -83,6 +84,14 @@ int overlay_x = 0, overlay_y = 0; Imlib_Font title_fn, text_fn; +int v_width[5] = { 128, 160, 176, 320, 640 }; +int v_height[5] = { 96, 120, 144, 240, 480 }; +int v_curr = -1; +int v_force = 0; +int bw_percent = 100; +int delay_correct = 0; +int reinit_device = 0; + /* these work for v4l only, not v4l2 */ int grab_input = 0; int grab_norm = VIDEO_MODE_PAL; @@ -369,8 +378,62 @@ gib_imlib_blend_image_onto_image(image, overlay_im, 0, 0, 0, w, h, overlay_x, overlay_y, w, h, 0, gib_imlib_image_has_alpha(overlay_im), 0); +}; + +void +bw_res_change(int diff) +{ + int temp = 0; + + if (!diff) + return; + + if (v_curr == -1) + { + + while (temp < 5) + { + if (grab_buf.height == v_height[temp]) + v_curr = temp; + temp++; + } + if (v_curr == -1) + { + bw_percent = 100; + fprintf(stderr, + "You don't appear to be running any of the resolutions\n"); + fprintf(stderr, + "req'd by the bandwidth limiter. It has been deactivated.\n"); + log("method bw_percent killed, not at support'd res"); + } + } + + if (diff > (grab_delay * bw_percent) / 100) + { + log("bw_res_change Not enough bandwidth.\n"); + if (v_force < -1 && v_curr > 0) + { + log("bw_res_change Reducing image resolution.\n"); + grab_buf.height = v_height[--v_curr]; + grab_buf.width = v_width[v_curr]; + } + v_force--; + } + else if (diff < (grab_delay * bw_percent) / 200) + { + if (v_force > 1 && v_curr < 5) + { + log("bw_res_change Increasing image resolution."); + grab_buf.height = v_height[++v_curr]; + grab_buf.width = v_width[v_curr]; + } + v_force++; + } + else + v_force = 0; } + /* upload local to tmp then MV to remote */ void ftp_upload1(char *local, char *remote, char *tmp) @@ -393,8 +456,6 @@ } fstat(fileno(infile), &st); -/* snprintf(buf, sizeof(buf), "cwd %s", ftp_dir); - post_commands = curl_slist_append(post_commands, buf); */ snprintf(buf, sizeof(buf), "rnfr %s", tmp); post_commands = curl_slist_append(post_commands, buf); snprintf(buf, sizeof(buf), "rnto %s", remote); @@ -417,7 +478,7 @@ curl_easy_setopt(curl_handle, CURLOPT_NOPROGRESS, 1); /* shut up completely */ - if(ftp_debug) + if (ftp_debug) curl_easy_setopt(curl_handle, CURLOPT_VERBOSE, 1); else curl_easy_setopt(curl_handle, CURLOPT_MUTE, 1); @@ -451,6 +512,10 @@ int width, height, i; struct stat st; pid_t childpid; + time_t start_shot; + time_t end_shot; + int just_shot = 0; + int new_delay; /* fork and die */ if ((childpid = fork()) < 0) @@ -532,6 +597,10 @@ grab_height = i; if (-1 != (i = cfg_get_int("grab", "delay"))) grab_delay = i; + if (-1 != (i = cfg_get_int("grab", "correct"))) + delay_correct = 1; + if (-1 != (i = cfg_get_int("grab", "percent"))) + bw_percent = i; if (-1 != (i = cfg_get_int("grab", "quality"))) grab_quality = i; if (-1 != (i = cfg_get_int("grab", "input"))) @@ -604,8 +673,12 @@ /* go! */ for (;;) { + just_shot = 0; + end_shot = 0; + start_shot = 0; if (grab_blockfile && (stat(grab_blockfile, &st) == -1)) { + time(&start_shot); if (action_pre_shot) { log("running pre-shot action"); @@ -656,10 +729,34 @@ system(action_post_upload); } gib_imlib_free_image_and_decache(image); - log("sleeping"); + just_shot = 1; + time(&end_shot); + } + new_delay = grab_delay; + if (just_shot) + { + end_shot = end_shot - start_shot; + if (bw_percent < 100) + bw_res_change(end_shot); + if (delay_correct && end_shot) + { + char buf[256]; + new_delay -= end_shot; + if(new_delay < 0) + new_delay = 0; + snprintf(buf, sizeof(buf), "Sleeping %d secs (corrected)", + new_delay); + log(buf); + } + else + { + char buf[256]; + snprintf(buf, sizeof(buf), "Sleeping %d secs", grab_delay); + log(buf); + } } - if (grab_delay > 0) - sleep(grab_delay); + if (new_delay > 0) + sleep(new_delay); } return 0; } |
From: <enl...@so...> - 2001-02-19 23:50:26
|
Enlightenment CVS committal Author : gilbertt Project : misc Module : camE Dir : misc/camE Modified Files: webcam.c Log Message: better error reporting =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/webcam.c,v retrieving revision 1.17 retrieving revision 1.18 diff -u -3 -r1.17 -r1.18 --- webcam.c 2001/02/18 00:54:08 1.17 +++ webcam.c 2001/02/19 23:51:23 1.18 @@ -492,7 +492,85 @@ /* TODO check error */ if (ret) { - fprintf(stderr, "\ncamE: error sending via ftp, error %d\n", ret); + fprintf(stderr, "\ncamE: error sending via ftp: "); + switch (ret) + { + case CURLE_URL_MALFORMAT: + fprintf(stderr, "Badly formatted ftp host or directory\n"); + break; + case CURLE_URL_MALFORMAT_USER: + fprintf(stderr, "Badly formatted ftp username\n"); + break; + case CURLE_COULDNT_RESOLVE_PROXY: + fprintf(stderr, "Couldn't resolve proxy\n"); + break; + case CURLE_COULDNT_RESOLVE_HOST: + fprintf(stderr, "Unable to resolve ftp host\n"); + break; + case CURLE_COULDNT_CONNECT: + fprintf(stderr, "Unable to connect to ftp host\n"); + break; + case CURLE_FTP_WEIRD_SERVER_REPLY: + fprintf(stderr, "Wierd server reply detected\n"); + break; + case CURLE_FTP_ACCESS_DENIED: + fprintf(stderr, "Access denied to ftp upload\n"); + break; + case CURLE_FTP_USER_PASSWORD_INCORRECT: + fprintf(stderr, "Incorrect password for ftp login\n"); + break; + case CURLE_FTP_WEIRD_PASS_REPLY: + fprintf(stderr, "Wierd password reply from server\n"); + break; + case CURLE_FTP_WEIRD_USER_REPLY: + fprintf(stderr, "Wierd user reply from server\n"); + break; + case CURLE_FTP_WEIRD_PASV_REPLY: + fprintf(stderr, "Wierd passive reply from server\n"); + break; + case CURLE_FTP_CANT_GET_HOST: + fprintf(stderr, "No route to host\n"); + break; + case CURLE_FTP_COULDNT_SET_BINARY: + fprintf(stderr, "Couldn't set binary mode\n"); + break; + case CURLE_PARTIAL_FILE: + fprintf(stderr, "Only partial file uploaded\n"); + break; + case CURLE_FTP_WRITE_ERROR: + fprintf(stderr, "Write error\n"); + break; + case CURLE_FTP_QUOTE_ERROR: + fprintf(stderr, "Misquoted ftp command - check ftp config\n"); + break; + case CURLE_WRITE_ERROR: + fprintf(stderr, "Write error\n"); + break; + case CURLE_MALFORMAT_USER: /* the user name is illegally specified */ + fprintf(stderr, "Malformatted username\n"); + break; + case CURLE_FTP_COULDNT_STOR_FILE: /* failed FTP upload */ + fprintf(stderr, "Couldn't STOR the file\n"); + break; + case CURLE_READ_ERROR: /* could open/read from file */ + fprintf(stderr, "Couldn't open temp file\n"); + break; + case CURLE_OUT_OF_MEMORY: + fprintf(stderr, "Out of memory\n"); + break; + case CURLE_OPERATION_TIMEOUTED: /* the timeout time was reached */ + fprintf(stderr, "Upload timed out\n"); + break; + case CURLE_FTP_PORT_FAILED: /* FTP PORT operation failed */ + fprintf(stderr, "ftp PORT failed\n"); + break; + case CURLE_FILE_COULDNT_READ_FILE: + fprintf(stderr, "Couldn't read temp file\n"); + break; + default: + fprintf(stderr, "unknown error, attempting to continue\n"); + break; + } } /* cleanup curl stuff */ @@ -741,8 +819,9 @@ if (delay_correct && end_shot) { char buf[256]; + new_delay -= end_shot; - if(new_delay < 0) + if (new_delay < 0) new_delay = 0; snprintf(buf, sizeof(buf), "Sleeping %d secs (corrected)", new_delay); @@ -751,11 +830,12 @@ else { char buf[256]; + snprintf(buf, sizeof(buf), "Sleeping %d secs", grab_delay); log(buf); } } - if (new_delay > 0) + if (new_delay > 0) sleep(new_delay); } return 0; |
From: <enl...@so...> - 2001-02-19 23:55:40
|
Enlightenment CVS committal Author : gilbertt Project : misc Module : camE Dir : misc/camE Modified Files: webcam.c Log Message: log the error too =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/webcam.c,v retrieving revision 1.18 retrieving revision 1.19 diff -u -3 -r1.18 -r1.19 --- webcam.c 2001/02/19 23:51:23 1.18 +++ webcam.c 2001/02/19 23:56:36 1.19 @@ -493,82 +493,108 @@ if (ret) { fprintf(stderr, "\ncamE: error sending via ftp: "); + log("EEEE error:"); switch (ret) { case CURLE_URL_MALFORMAT: fprintf(stderr, "Badly formatted ftp host or directory\n"); + log("Badly formatted ftp host or directory"); break; case CURLE_URL_MALFORMAT_USER: fprintf(stderr, "Badly formatted ftp username\n"); + log("Badly formatted ftp username"); break; case CURLE_COULDNT_RESOLVE_PROXY: fprintf(stderr, "Couldn't resolve proxy\n"); + log("Couldn't resolve proxy"); break; case CURLE_COULDNT_RESOLVE_HOST: fprintf(stderr, "Unable to resolve ftp host\n"); + log("Unable to resolve ftp host"); break; case CURLE_COULDNT_CONNECT: fprintf(stderr, "Unable to connect to ftp host\n"); + log("Unable to connect to ftp host"); break; case CURLE_FTP_WEIRD_SERVER_REPLY: fprintf(stderr, "Wierd server reply detected\n"); + log("Wierd server reply detected"); break; case CURLE_FTP_ACCESS_DENIED: fprintf(stderr, "Access denied to ftp upload\n"); + log("Access denied to ftp upload"); break; case CURLE_FTP_USER_PASSWORD_INCORRECT: fprintf(stderr, "Incorrect password for ftp login\n"); + log("Incorrect password for ftp login"); break; case CURLE_FTP_WEIRD_PASS_REPLY: fprintf(stderr, "Wierd password reply from server\n"); + log("Wierd password reply from server"); break; case CURLE_FTP_WEIRD_USER_REPLY: fprintf(stderr, "Wierd user reply from server\n"); + log("Wierd user reply from server"); break; case CURLE_FTP_WEIRD_PASV_REPLY: fprintf(stderr, "Wierd passive reply from server\n"); + log("Wierd passive reply from server"); break; case CURLE_FTP_CANT_GET_HOST: fprintf(stderr, "No route to host\n"); + log("No route to host"); break; case CURLE_FTP_COULDNT_SET_BINARY: fprintf(stderr, "Couldn't set binary mode\n"); + log("Couldn't set binary mode"); break; case CURLE_PARTIAL_FILE: fprintf(stderr, "Only partial file uploaded\n"); + log("Only partial file uploaded"); break; case CURLE_FTP_WRITE_ERROR: fprintf(stderr, "Write error\n"); + log("Write error"); break; case CURLE_FTP_QUOTE_ERROR: fprintf(stderr, "Misquoted ftp command - check ftp config\n"); + log("Misquoted ftp command - check ftp config"); break; case CURLE_WRITE_ERROR: fprintf(stderr, "Write error\n"); + log("Write error"); break; case CURLE_MALFORMAT_USER: /* the user name is illegally specified */ fprintf(stderr, "Malformatted username\n"); + log("Malformatted username"); break; case CURLE_FTP_COULDNT_STOR_FILE: /* failed FTP upload */ fprintf(stderr, "Couldn't STOR the file\n"); + log("Couldn't STOR the file"); break; case CURLE_READ_ERROR: /* could open/read from file */ fprintf(stderr, "Couldn't open temp file\n"); + log("Couldn't open temp file"); break; case CURLE_OUT_OF_MEMORY: fprintf(stderr, "Out of memory\n"); + log("Out of memory"); break; case CURLE_OPERATION_TIMEOUTED: /* the timeout time was reached */ fprintf(stderr, "Upload timed out\n"); + log("Upload timed out"); break; case CURLE_FTP_PORT_FAILED: /* FTP PORT operation failed */ fprintf(stderr, "ftp PORT failed\n"); + log("ftp PORT failed"); break; case CURLE_FILE_COULDNT_READ_FILE: fprintf(stderr, "Couldn't read temp file\n"); + log("Couldn't read temp file"); break; default: fprintf(stderr, "unknown error, attempting to continue\n"); + log("unknown error, attempting to continue"); break; } } |
From: <enl...@so...> - 2001-02-22 12:07:16
|
Enlightenment CVS committal Author : gilbertt Project : misc Module : camE Dir : misc/camE Modified Files: webcam.c Log Message: time.h =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/webcam.c,v retrieving revision 1.19 retrieving revision 1.20 diff -u -3 -r1.19 -r1.20 --- webcam.c 2001/02/19 23:56:36 1.19 +++ webcam.c 2001/02/22 12:08:19 1.20 @@ -13,6 +13,7 @@ #include <unistd.h> #include <errno.h> #include <fcntl.h> +#include <time.h> #include <sys/time.h> #include <sys/mman.h> #include <sys/ioctl.h> |