From: <enl...@li...> - 2001-03-02 10:06:34
|
Enlightenment CVS committal Author : gilbertt Project : misc Module : camE Dir : misc/camE Modified Files: example.camErc webcam.c Log Message: Cool patch from richlowe to all a BLOCKUPLOAD file to let camE take snaps but not upload them for a while. Also fixed some logging stuffs. Neato. =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/example.camErc,v retrieving revision 1.10 retrieving revision 1.11 diff -u -3 -r1.10 -r1.11 --- example.camErc 2001/02/18 00:54:08 1.10 +++ example.camErc 2001/03/02 10:08:01 1.11 @@ -81,6 +81,9 @@ # file to check for before shooting. while this file exists, no shots will # be taken. blockfile = /home/gilbertt/BLOCKCAM +# File to check before shotting, while this file exists, shots will be taken. +# but not uploaded. +uploadblockfile = /home/gilbertt/BLOCKUPLOAD # image to overlay overlay_image = /home/gilbertt/.lb.png overlay_x = 5 =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/webcam.c,v retrieving revision 1.20 retrieving revision 1.21 diff -u -3 -r1.20 -r1.21 --- webcam.c 2001/02/22 12:08:19 1.20 +++ webcam.c 2001/03/02 10:08:01 1.21 @@ -11,6 +11,7 @@ #include <stdlib.h> #include <string.h> #include <unistd.h> +#include <stdarg.h> #include <errno.h> #include <fcntl.h> #include <time.h> @@ -30,7 +31,7 @@ #include "parseconfig.h" -void log(char *entry); +void log(char *fmt, ...); char *ftp_host = "www"; char *ftp_user = "webcam"; @@ -74,6 +75,7 @@ char *ttf_dir = "/usr/X11R6/lib/X11/fonts/TrueType"; char *grab_archive = NULL; char *grab_blockfile = NULL; +char *upload_blockfile = NULL; char *grab_postprocess = NULL; char *title_text = NULL; gib_style *title_style = NULL; @@ -313,7 +315,7 @@ { char buf[4096]; - log("executing postprocessing"); + log("executing postprocessing\n"); snprintf(buf, sizeof(buf), "%s %s", grab_postprocess, filename); system(buf); } @@ -345,8 +347,9 @@ } void -log(char *entry) +log(char *fmt, ...) { + va_list args; time_t t; struct tm *tm; char date[128]; @@ -365,7 +368,10 @@ time(&t); tm = localtime(&t); strftime(date, 127, "%d/%m %H:%M:%S", tm); - fprintf(fp, "%s %s\n", date, entry); + fprintf(fp, "%s ", date); + va_start(args, fmt); + vfprintf(fp, fmt, args); + va_end(args); fclose(fp); } @@ -405,7 +411,7 @@ "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"); + log("method bw_percent killed, not at support'd res\n"); } } @@ -424,7 +430,7 @@ { if (v_force > 1 && v_curr < 5) { - log("bw_res_change Increasing image resolution."); + log("bw_res_change Increasing image resolution.\n"); grab_buf.height = v_height[++v_curr]; grab_buf.width = v_width[v_curr]; } @@ -494,108 +500,108 @@ if (ret) { fprintf(stderr, "\ncamE: error sending via ftp: "); - log("EEEE error:"); + 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"); + log("Badly formatted ftp host or directory\n"); break; case CURLE_URL_MALFORMAT_USER: fprintf(stderr, "Badly formatted ftp username\n"); - log("Badly formatted ftp username"); + log("Badly formatted ftp username\n"); break; case CURLE_COULDNT_RESOLVE_PROXY: fprintf(stderr, "Couldn't resolve proxy\n"); - log("Couldn't resolve proxy"); + log("Couldn't resolve proxy\n"); break; case CURLE_COULDNT_RESOLVE_HOST: fprintf(stderr, "Unable to resolve ftp host\n"); - log("Unable to resolve ftp host"); + log("Unable to resolve ftp host\n"); break; case CURLE_COULDNT_CONNECT: fprintf(stderr, "Unable to connect to ftp host\n"); - log("Unable to connect to ftp host"); + log("Unable to connect to ftp host\n"); break; case CURLE_FTP_WEIRD_SERVER_REPLY: fprintf(stderr, "Wierd server reply detected\n"); - log("Wierd server reply detected"); + log("Wierd server reply detected\n"); break; case CURLE_FTP_ACCESS_DENIED: fprintf(stderr, "Access denied to ftp upload\n"); - log("Access denied to ftp upload"); + log("Access denied to ftp upload\n"); break; case CURLE_FTP_USER_PASSWORD_INCORRECT: fprintf(stderr, "Incorrect password for ftp login\n"); - log("Incorrect password for ftp login"); + log("Incorrect password for ftp login\n"); break; case CURLE_FTP_WEIRD_PASS_REPLY: fprintf(stderr, "Wierd password reply from server\n"); - log("Wierd password reply from server"); + log("Wierd password reply from server\n"); break; case CURLE_FTP_WEIRD_USER_REPLY: fprintf(stderr, "Wierd user reply from server\n"); - log("Wierd user reply from server"); + log("Wierd user reply from server\n"); break; case CURLE_FTP_WEIRD_PASV_REPLY: fprintf(stderr, "Wierd passive reply from server\n"); - log("Wierd passive reply from server"); + log("Wierd passive reply from server\n"); break; case CURLE_FTP_CANT_GET_HOST: fprintf(stderr, "No route to host\n"); - log("No route to host"); + log("No route to host\n"); break; case CURLE_FTP_COULDNT_SET_BINARY: fprintf(stderr, "Couldn't set binary mode\n"); - log("Couldn't set binary mode"); + log("Couldn't set binary mode\n"); break; case CURLE_PARTIAL_FILE: fprintf(stderr, "Only partial file uploaded\n"); - log("Only partial file uploaded"); + log("Only partial file uploaded\n"); break; case CURLE_FTP_WRITE_ERROR: fprintf(stderr, "Write error\n"); - log("Write error"); + log("Write error\n"); break; case CURLE_FTP_QUOTE_ERROR: fprintf(stderr, "Misquoted ftp command - check ftp config\n"); - log("Misquoted ftp command - check ftp config"); + log("Misquoted ftp command - check ftp config\n"); break; case CURLE_WRITE_ERROR: fprintf(stderr, "Write error\n"); - log("Write error"); + log("Write error\n"); break; case CURLE_MALFORMAT_USER: /* the user name is illegally specified */ fprintf(stderr, "Malformatted username\n"); - log("Malformatted username"); + log("Malformatted username\n"); break; case CURLE_FTP_COULDNT_STOR_FILE: /* failed FTP upload */ fprintf(stderr, "Couldn't STOR the file\n"); - log("Couldn't STOR the file"); + log("Couldn't STOR the file\n"); break; case CURLE_READ_ERROR: /* could open/read from file */ fprintf(stderr, "Couldn't open temp file\n"); - log("Couldn't open temp file"); + log("Couldn't open temp file\n"); break; case CURLE_OUT_OF_MEMORY: fprintf(stderr, "Out of memory\n"); - log("Out of memory"); + log("Out of memory\n"); break; case CURLE_OPERATION_TIMEOUTED: /* the timeout time was reached */ fprintf(stderr, "Upload timed out\n"); - log("Upload timed out"); + log("Upload timed out\n"); break; case CURLE_FTP_PORT_FAILED: /* FTP PORT operation failed */ fprintf(stderr, "ftp PORT failed\n"); - log("ftp PORT failed"); + log("ftp PORT failed\n"); break; case CURLE_FILE_COULDNT_READ_FILE: fprintf(stderr, "Couldn't read temp file\n"); - log("Couldn't read temp file"); + log("Couldn't read temp file\n"); break; default: fprintf(stderr, "unknown error, attempting to continue\n"); - log("unknown error, attempting to continue"); + log("unknown error, attempting to continue\n"); break; } } @@ -676,6 +682,8 @@ grab_archive = val; if (NULL != (val = cfg_get_str("grab", "blockfile"))) grab_blockfile = val; + if (NULL != (val = cfg_get_str("grab", "uploadblockfile"))) + upload_blockfile = val; if (NULL != (val = cfg_get_str("grab", "postprocess"))) grab_postprocess = val; if (NULL != (val = cfg_get_str("grab", "title_text"))) @@ -786,11 +794,11 @@ time(&start_shot); if (action_pre_shot) { - log("running pre-shot action"); + log("running pre-shot action\n"); system(action_pre_shot); } - log("* taking shot"); + log("* taking shot\n"); /* Prevent camera lag... */ image = grab_one(&width, &height); imlib_context_set_image(image); @@ -800,10 +808,10 @@ exit(2); } - log("** shot taken"); + log("** shot taken\n"); if (action_post_shot) { - log("running post-shot action"); + log("running post-shot action\n"); system(action_post_shot); } if (overlay_im) @@ -814,25 +822,36 @@ archive_jpeg(image); if (ftp_do) { - log("*** uploading via ftp"); - ftp_upload1(temp_file, ftp_file, ftp_tmp); + if (upload_blockfile && (stat(upload_blockfile, &st) == -1)) + { + log("*** uploading via ftp\n"); + ftp_upload1(temp_file, ftp_file, ftp_tmp); + log("shot uploaded\n"); + if (action_post_upload) + { + log("running post upload action\n"); + system(action_post_upload); + } + } } else if (scp_target) { char buf[4096]; - log("uploading via scp"); - snprintf(buf, sizeof(buf), "scp -BCq %s %s", temp_file, - scp_target); - system(buf); + if (upload_blockfile && (stat(upload_blockfile, &st) == -1)) + { + log("uploading via scp\n"); + snprintf(buf, sizeof(buf), "scp -BCq %s %s", temp_file, + scp_target); + system(buf); + log("shot uploaded\n"); + if (action_post_upload) + { + log("running post upload action\n"); + system(action_post_upload); + } + } } - if (ftp_do || scp_target) - log("shot uploaded"); - if (action_post_upload) - { - log("running post upload action"); - system(action_post_upload); - } gib_imlib_free_image_and_decache(image); just_shot = 1; time(&end_shot); @@ -845,21 +864,14 @@ 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); + log("Sleeping %d secs (corrected)\n", new_delay); } else { - char buf[256]; - - snprintf(buf, sizeof(buf), "Sleeping %d secs", grab_delay); - log(buf); + log("Sleeping %d secs\n", grab_delay); } } if (new_delay > 0) |
From: <enl...@li...> - 2001-03-03 20:13:38
|
Enlightenment CVS committal Author : gilbertt Project : misc Module : camE Dir : misc/camE Modified Files: webcam.c Log Message: still take shots if no blockfiles are defined at all =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/webcam.c,v retrieving revision 1.21 retrieving revision 1.22 diff -u -3 -r1.21 -r1.22 --- webcam.c 2001/03/02 10:08:01 1.21 +++ webcam.c 2001/03/03 20:15:08 1.22 @@ -789,13 +789,15 @@ just_shot = 0; end_shot = 0; start_shot = 0; - if (grab_blockfile && (stat(grab_blockfile, &st) == -1)) + if ((grab_blockfile && (stat(grab_blockfile, &st) == -1)) + || !grab_blockfile) { time(&start_shot); if (action_pre_shot) { log("running pre-shot action\n"); system(action_pre_shot); + log("pre-shot action done\n"); } log("* taking shot\n"); @@ -813,6 +815,7 @@ { log("running post-shot action\n"); system(action_post_shot); + log("post-shot action done\n"); } if (overlay_im) draw_overlay(image); @@ -822,7 +825,8 @@ archive_jpeg(image); if (ftp_do) { - if (upload_blockfile && (stat(upload_blockfile, &st) == -1)) + if ((upload_blockfile && (stat(upload_blockfile, &st) == -1)) + || !upload_blockfile) { log("*** uploading via ftp\n"); ftp_upload1(temp_file, ftp_file, ftp_tmp); @@ -831,6 +835,7 @@ { log("running post upload action\n"); system(action_post_upload); + log("post upload action done\n"); } } } @@ -838,7 +843,8 @@ { char buf[4096]; - if (upload_blockfile && (stat(upload_blockfile, &st) == -1)) + if ((upload_blockfile && (stat(upload_blockfile, &st) == -1)) + || !upload_blockfile) { log("uploading via scp\n"); snprintf(buf, sizeof(buf), "scp -BCq %s %s", temp_file, @@ -849,6 +855,7 @@ { log("running post upload action\n"); system(action_post_upload); + log("post upload action done\n"); } } } |
From: <enl...@li...> - 2001-03-03 22:32:10
|
Enlightenment CVS committal Author : gilbertt Project : misc Module : camE Dir : misc/camE Modified Files: Makefile example.camErc webcam.c Log Message: chasing memleak, added archive filetype option =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/Makefile,v retrieving revision 1.6 retrieving revision 1.7 diff -u -3 -r1.6 -r1.7 --- Makefile 2001/02/17 04:05:00 1.6 +++ Makefile 2001/03/03 22:33:12 1.7 @@ -27,7 +27,7 @@ install: all $(INSTALL_DIR) $(bindir) - $(INSTALL_PROGRAM) -s camE $(bindir) + $(INSTALL_PROGRAM) camE $(bindir) clean: -rm -f $(OBJS) *.moc *~ core* *.bak TAGS camE =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/example.camErc,v retrieving revision 1.11 retrieving revision 1.12 diff -u -3 -r1.11 -r1.12 --- example.camErc 2001/03/02 10:08:01 1.11 +++ example.camErc 2001/03/03 22:33:12 1.12 @@ -44,6 +44,8 @@ infofile = /home/gilbertt/.caminfo # directory to archive pics in. They are datestamped and saved in here. archive = /opt/images/webcam +# extension (determines type) of archived images. +archive_ext = jpg # jpeg quality (you can save as png etc too, but then quality does squat) quality = 80 input = 0 =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/webcam.c,v retrieving revision 1.22 retrieving revision 1.23 diff -u -3 -r1.22 -r1.23 --- webcam.c 2001/03/03 20:15:08 1.22 +++ webcam.c 2001/03/03 22:33:12 1.23 @@ -73,6 +73,7 @@ int ftp_timeout = 30; char *title_font = "arial/8"; char *ttf_dir = "/usr/X11R6/lib/X11/fonts/TrueType"; +char *archive_ext = "jpg"; char *grab_archive = NULL; char *grab_blockfile = NULL; char *upload_blockfile = NULL; @@ -184,8 +185,6 @@ while (j--) { - if (grab_fd == -1) - grab_init(); if (ioctl(grab_fd, VIDIOCMCAPTURE, &grab_buf) == -1) { perror("ioctl VIDIOCMCAPTURE"); @@ -338,7 +337,7 @@ do { - snprintf(buffer, sizeof(buffer), "%s/webcam_%s.jpg", grab_archive, + snprintf(buffer, sizeof(buffer), "%s/webcam_%s.%s", archive_ext, grab_archive, date); } while (stat(buffer, &st) == 0); @@ -628,14 +627,21 @@ int just_shot = 0; int new_delay; - /* fork and die */ - if ((childpid = fork()) < 0) + if ((argc >= 2) && (!strcmp(argv[1], "-f"))) { - fprintf(stderr, "fork (%s)\n", strerror(errno)); - return (2); + /* don't fork */ } - else if (childpid > 0) - exit(0); /* parent */ + else + { + /* 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"); @@ -688,6 +694,8 @@ grab_postprocess = val; if (NULL != (val = cfg_get_str("grab", "title_text"))) title_text = val; + if (NULL != (val = cfg_get_str("grab", "archive_ext"))) + archive_ext = val; if (NULL != (val = cfg_get_str("grab", "logfile"))) logfile = val; if (NULL != (val = cfg_get_str("grab", "ttf_dir"))) |
From: <enl...@li...> - 2001-03-13 23:20:06
|
Enlightenment CVS committal Author : gilbertt Project : misc Module : camE Dir : misc/camE Modified Files: example.camErc webcam.c Log Message: Patch from Alex roberts, make scp upload work without needing a second ssh command post_shot to copy the file, and fixes a bug I just introduced with archiving :) =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/example.camErc,v retrieving revision 1.12 retrieving revision 1.13 diff -u -3 -r1.12 -r1.13 --- example.camErc 2001/03/03 22:33:12 1.12 +++ example.camErc 2001/03/13 23:22:07 1.13 @@ -16,6 +16,12 @@ # Actually do the upload? If do = 0, just take and archive pics. do = 1 +# you can set ftp->do to 0 above and use scp instead - you still need +# the dir, file and tmp settings in the ftp section for this to work. + +[scp] +# target = user@host + [grab] device = /dev/video0 # store temp image on local machine =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/webcam.c,v retrieving revision 1.23 retrieving revision 1.24 diff -u -3 -r1.23 -r1.24 --- webcam.c 2001/03/03 22:33:12 1.23 +++ webcam.c 2001/03/13 23:22:07 1.24 @@ -337,8 +337,8 @@ do { - snprintf(buffer, sizeof(buffer), "%s/webcam_%s.%s", archive_ext, grab_archive, - date); + snprintf(buffer, sizeof(buffer), "%s/webcam_%s.%s", grab_archive, + date, archive_ext); } while (stat(buffer, &st) == 0); gib_imlib_save_image(im, buffer); @@ -855,8 +855,11 @@ || !upload_blockfile) { log("uploading via scp\n"); - snprintf(buf, sizeof(buf), "scp -BCq %s %s", temp_file, - scp_target); + snprintf(buf, sizeof(buf), "scp -BCq %s %s:%s/%s", temp_file, + scp_target, ftp_dir, ftp_tmp); + system(buf); + snprintf (buf, sizeof(buf), "ssh -nq %s 'mv %s/%s %s/%s'", + scp_target, ftp_dir, ftp_tmp, ftp_dir, ftp_file); system(buf); log("shot uploaded\n"); if (action_post_upload) |
From: <enl...@li...> - 2001-03-14 07:40:48
|
Enlightenment CVS committal Author : gilbertt Project : misc Module : camE Dir : misc/camE Modified Files: webcam.c Log Message: grrrrr =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/webcam.c,v retrieving revision 1.24 retrieving revision 1.25 diff -u -3 -r1.24 -r1.25 --- webcam.c 2001/03/13 23:22:07 1.24 +++ webcam.c 2001/03/14 07:42:50 1.25 @@ -858,7 +858,7 @@ snprintf(buf, sizeof(buf), "scp -BCq %s %s:%s/%s", temp_file, scp_target, ftp_dir, ftp_tmp); system(buf); - snprintf (buf, sizeof(buf), "ssh -nq %s 'mv %s/%s %s/%s'", + snprintf (buf, sizeof(buf), "ssh -n -q %s 'mv %s/%s %s/%s'", scp_target, ftp_dir, ftp_tmp, ftp_dir, ftp_file); system(buf); log("shot uploaded\n"); |
From: <enl...@li...> - 2001-04-12 22:54:02
|
Enlightenment CVS committal Author : gilbertt Project : misc Module : camE Dir : misc/camE Modified Files: webcam.c Added Files: example.camErc.ssh Log Message: scp example =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/webcam.c,v retrieving revision 1.25 retrieving revision 1.26 diff -u -3 -r1.25 -r1.26 --- webcam.c 2001/03/14 07:42:50 1.25 +++ webcam.c 2001/04/12 22:54:01 1.26 @@ -762,7 +762,7 @@ overlay_y = i; /* print config */ - fprintf(stderr, "camE v0.6 - (c) 1999, 2000 Gerd Knorr, Tom Gilbert\n"); + fprintf(stderr, "camE v0.7 - (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...> - 2001-04-15 23:31:24
|
Enlightenment CVS committal Author : gilbertt Project : misc Module : camE Dir : misc/camE Modified Files: webcam.c Log Message: grrrrr =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/webcam.c,v retrieving revision 1.26 retrieving revision 1.27 diff -u -3 -r1.26 -r1.27 --- webcam.c 2001/04/12 22:54:01 1.26 +++ webcam.c 2001/04/15 23:31:24 1.27 @@ -778,6 +778,7 @@ imlib_add_path_to_font_path(ttf_dir); imlib_add_path_to_font_path("."); imlib_context_set_operation(IMLIB_OP_COPY); + imlib_set_cache_size(0); if (title_style_file) title_style = gib_style_new_from_ascii(title_style_file); if (text_style_file) |
From: <enl...@li...> - 2001-04-23 22:40:53
|
Enlightenment CVS committal Author : gilbertt Project : misc Module : camE Dir : misc/camE Modified Files: AUTHORS webcam.c Log Message: patch from Brian Martin =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/AUTHORS,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- AUTHORS 2000/12/18 22:48:33 1.1 +++ AUTHORS 2001/04/23 22:40:52 1.2 @@ -3,3 +3,6 @@ Ng (Chris Jones) <ch...@li...> Bitching about a bug. For 3 months. + +Brian Martin <in...@me...> + Passive mode support with libcurl =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/webcam.c,v retrieving revision 1.27 retrieving revision 1.28 diff -u -3 -r1.27 -r1.28 --- webcam.c 2001/04/15 23:31:24 1.27 +++ webcam.c 2001/04/23 22:40:52 1.28 @@ -493,6 +493,9 @@ curl_easy_setopt(curl_handle, CURLOPT_UPLOAD, 1); + if (!ftp_passive) + curl_easy_setopt(curl_handle, CURLOPT_FTPPORT, ftp_pasvmode); + /* get it! */ ret = curl_easy_perform(curl_handle); /* TODO check error */ @@ -668,6 +671,8 @@ ftp_do = i; if (-1 != (i = cfg_get_int("ftp", "timeout"))) ftp_timeout = i; + if (NULL != (val = cfg_get_str("ftp", "pasvmode"))) + ftp_pasvmode = val; if (NULL != (val = cfg_get_str("scp", "target"))) scp_target = val; |
From: <enl...@li...> - 2001-04-24 07:37:37
|
Enlightenment CVS committal Author : gilbertt Project : misc Module : camE Dir : misc/camE Modified Files: webcam.c Log Message: oops :) =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/webcam.c,v retrieving revision 1.28 retrieving revision 1.29 diff -u -3 -r1.28 -r1.29 --- webcam.c 2001/04/23 22:40:52 1.28 +++ webcam.c 2001/04/24 07:37:36 1.29 @@ -87,6 +87,7 @@ Imlib_Image overlay_im = NULL; int overlay_x = 0, overlay_y = 0; Imlib_Font title_fn, text_fn; +char *ftp_pasvmode = "-"; int v_width[5] = { 128, 160, 176, 320, 640 }; int v_height[5] = { 96, 120, 144, 240, 480 }; |
From: <enl...@li...> - 2001-05-08 18:45:16
|
Enlightenment CVS committal Author : gilbertt Project : misc Module : camE Dir : misc/camE Modified Files: webcam.c Removed Files: videodev.h Log Message: Patch from Ian Eure <ie...@in...>, removes evil includes that were there from the original "webcam" app. =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/webcam.c,v retrieving revision 1.29 retrieving revision 1.30 diff -u -3 -r1.29 -r1.30 --- webcam.c 2001/04/24 07:37:36 1.29 +++ webcam.c 2001/05/08 18:45:16 1.30 @@ -26,8 +26,8 @@ #include <curl/curl.h> #include <curl/easy.h> -#include <asm/types.h> -#include "videodev.h" +#include <sys/types.h> +#include <linux/videodev.h> #include "parseconfig.h" @@ -768,7 +768,7 @@ overlay_y = i; /* print config */ - fprintf(stderr, "camE v0.7 - (c) 1999, 2000 Gerd Knorr, Tom Gilbert\n"); + fprintf(stderr, "camE v0.8 - (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...> - 2001-05-16 22:45:34
|
Enlightenment CVS committal Author : gilbertt Project : misc Module : camE Dir : misc/camE Modified Files: Makefile example.camErc example.camErc.ssh webcam.c Log Message: no more nasty system() calls. BAD system()! =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/Makefile,v retrieving revision 1.7 retrieving revision 1.8 diff -u -3 -r1.7 -r1.8 --- Makefile 2001/03/03 22:33:12 1.7 +++ Makefile 2001/05/16 22:45:34 1.8 @@ -32,7 +32,4 @@ clean: -rm -f $(OBJS) *.moc *~ core* *.bak TAGS camE -realclean distclean: clean - -rm -f $(PROGS) Makefile - dep depend install: =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/example.camErc,v retrieving revision 1.13 retrieving revision 1.14 diff -u -3 -r1.13 -r1.14 --- example.camErc 2001/03/13 23:22:07 1.13 +++ example.camErc 2001/05/16 22:45:34 1.14 @@ -2,7 +2,7 @@ host = cam.super.tasty.men.com user = giblet pass = NO_WAY_BUDDY -dir = public_html/images/ +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 =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/example.camErc.ssh,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- example.camErc.ssh 2001/04/12 22:54:01 1.1 +++ example.camErc.ssh 2001/05/16 22:45:34 1.2 @@ -1,6 +1,6 @@ # still need these filenames for scp usage [ftp] -dir = public_html/images/ +dir = public_html/images file = webcam.jpg tmp = uploading.jpg do = 0 =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/webcam.c,v retrieving revision 1.30 retrieving revision 1.31 diff -u -3 -r1.30 -r1.31 --- webcam.c 2001/05/08 18:45:16 1.30 +++ webcam.c 2001/05/16 22:45:34 1.31 @@ -19,6 +19,8 @@ #include <sys/mman.h> #include <sys/ioctl.h> #include <sys/stat.h> +#include <sys/types.h> +#include <sys/wait.h> #include <X11/Xlib.h> #include <Imlib2.h> #include <giblib.h> @@ -56,6 +58,7 @@ int grab_delay = 3; int grab_quality = 75; int lag_reduce = 5; +int scp_timeout = 30; int text_r = 255; int text_g = 255; int text_b = 255; @@ -106,6 +109,7 @@ static int grab_size = 0; static unsigned char *grab_data = NULL; Imlib_Image convert_rgb_to_imlib2(unsigned char *mem, int width, int height); +int execvp_with_timeout(int timeout, char *file, char **argv); void close_device() @@ -630,6 +634,7 @@ time_t end_shot; int just_shot = 0; int new_delay; + FILE *fp; if ((argc >= 2) && (!strcmp(argv[1], "-f"))) { @@ -677,6 +682,8 @@ if (NULL != (val = cfg_get_str("scp", "target"))) scp_target = val; + if (-1 != (i = cfg_get_int("scp", "timeout"))) + scp_timeout = i; if (NULL != (val = cfg_get_str("grab", "device"))) grab_device = val; @@ -776,6 +783,10 @@ if (ftp_do) fprintf(stderr, "ftp config:\n %s@%s:%s\n %s => %s\n", ftp_user, ftp_host, ftp_dir, ftp_tmp, ftp_file); + + /* clear logfile */ + fp = fopen(logfile, "w"); + fclose(fp); /* init everything */ grab_init(); @@ -856,24 +867,41 @@ } else if (scp_target) { - char buf[4096]; + char target_buf[2048]; + char cmd_buf[4096]; + char *args[20]; if ((upload_blockfile && (stat(upload_blockfile, &st) == -1)) || !upload_blockfile) { log("uploading via scp\n"); - snprintf(buf, sizeof(buf), "scp -BCq %s %s:%s/%s", temp_file, - scp_target, ftp_dir, ftp_tmp); - system(buf); - snprintf (buf, sizeof(buf), "ssh -n -q %s 'mv %s/%s %s/%s'", - scp_target, ftp_dir, ftp_tmp, ftp_dir, ftp_file); - system(buf); - log("shot uploaded\n"); - if (action_post_upload) + snprintf(target_buf, sizeof(target_buf), "%s:%s/%s", + scp_target, ftp_dir, ftp_tmp); + snprintf(cmd_buf, sizeof(cmd_buf), "mv %s/%s %s/%s", ftp_dir, ftp_tmp, ftp_dir, ftp_file); + args[0] = "scp"; + args[1] = "-BCq"; + args[2] = temp_file; + args[3] = target_buf; + args[4] = NULL; + if(execvp_with_timeout(scp_timeout, "scp", args)) { - log("running post upload action\n"); - system(action_post_upload); - log("post upload action done\n"); + args[0] = "ssh"; + args[1] = "-n"; + args[2] = "-q"; + args[3] = scp_target; + args[4] = cmd_buf; + args[5] = NULL; + if(execvp_with_timeout(scp_timeout, "ssh", args)) + { + log("shot uploaded\n"); + + if (action_post_upload) + { + log("running post upload action\n"); + system(action_post_upload); + log("post upload action done\n"); + } + } } } } @@ -903,4 +931,32 @@ sleep(new_delay); } return 0; +} + +int execvp_with_timeout(int timeout, char *file, char **argv) +{ + pid_t pid; + int status; + + if ((pid = fork()) < 0) + { + fprintf(stderr, "fork (%s)\n", strerror(errno)); + exit (2); + } + else if (pid == 0) + { + /* child */ + execvp(file, argv); + } + else if (pid > 0) + { + /* parent */ + waitpid(pid, &status, 0); + if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) + { + log("exec failed for %s\n", file); + return 0; + } + } + return 1; } |
From: <enl...@li...> - 2001-05-16 22:53:31
|
Enlightenment CVS committal Author : gilbertt Project : misc Module : camE Dir : misc/camE Modified Files: example.camErc.ssh webcam.c Log Message: fooooooooooo bar =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/example.camErc.ssh,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- example.camErc.ssh 2001/05/16 22:45:34 1.2 +++ example.camErc.ssh 2001/05/16 22:53:31 1.3 @@ -7,6 +7,7 @@ [scp] target = user@host +timeout = 30 [grab] device = /dev/video0 =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/webcam.c,v retrieving revision 1.31 retrieving revision 1.32 diff -u -3 -r1.31 -r1.32 --- webcam.c 2001/05/16 22:45:34 1.31 +++ webcam.c 2001/05/16 22:53:31 1.32 @@ -947,6 +947,7 @@ { /* child */ execvp(file, argv); + exit(2); } else if (pid > 0) { |
From: <enl...@li...> - 2001-05-16 22:54:59
|
Enlightenment CVS committal Author : gilbertt Project : misc Module : camE Dir : misc/camE Modified Files: webcam.c Log Message: oh, okay then =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/webcam.c,v retrieving revision 1.32 retrieving revision 1.33 diff -u -3 -r1.32 -r1.33 --- webcam.c 2001/05/16 22:53:31 1.32 +++ webcam.c 2001/05/16 22:54:59 1.33 @@ -947,6 +947,7 @@ { /* child */ execvp(file, argv); + fprintf(stderr, "execvp %s (%s)\n", file, strerror(errno)); exit(2); } else if (pid > 0) |
From: <enl...@li...> - 2001-05-21 21:22:55
|
Enlightenment CVS committal Author : gilbertt Project : misc Module : camE Dir : misc/camE Modified Files: webcam.c Log Message: implemented scp timeout option =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/webcam.c,v retrieving revision 1.33 retrieving revision 1.34 diff -u -3 -r1.33 -r1.34 --- webcam.c 2001/05/16 22:54:59 1.33 +++ webcam.c 2001/05/21 21:22:51 1.34 @@ -21,6 +21,7 @@ #include <sys/stat.h> #include <sys/types.h> #include <sys/wait.h> +#include <signal.h> #include <X11/Xlib.h> #include <Imlib2.h> #include <giblib.h> @@ -43,6 +44,7 @@ char *ftp_tmp = "uploading.jpeg"; int ftp_debug = 0; char *temp_file = "/tmp/webcam.jpg"; +pid_t childpid = 0; int ftp_passive = 1; int ftp_do = 1; char *scp_target = NULL; @@ -110,6 +112,7 @@ static unsigned char *grab_data = NULL; Imlib_Image convert_rgb_to_imlib2(unsigned char *mem, int width, int height); int execvp_with_timeout(int timeout, char *file, char **argv); +void alarm_handler(int sig); void close_device() @@ -632,7 +635,7 @@ pid_t childpid; time_t start_shot; time_t end_shot; - int just_shot = 0; + int just_shot = 0, upload_successful = 0; int new_delay; FILE *fp; @@ -813,6 +816,7 @@ for (;;) { just_shot = 0; + upload_successful = 0; end_shot = 0; start_shot = 0; if ((grab_blockfile && (stat(grab_blockfile, &st) == -1)) @@ -883,7 +887,7 @@ args[2] = temp_file; args[3] = target_buf; args[4] = NULL; - if(execvp_with_timeout(scp_timeout, "scp", args)) + if((upload_successful = execvp_with_timeout(scp_timeout, "scp", args))) { args[0] = "ssh"; args[1] = "-n"; @@ -891,7 +895,7 @@ args[3] = scp_target; args[4] = cmd_buf; args[5] = NULL; - if(execvp_with_timeout(scp_timeout, "ssh", args)) + if((upload_successful = execvp_with_timeout(scp_timeout, "ssh", args))) { log("shot uploaded\n"); @@ -910,7 +914,7 @@ time(&end_shot); } new_delay = grab_delay; - if (just_shot) + if (just_shot && upload_successful) { end_shot = end_shot - start_shot; if (bw_percent < 100) @@ -927,7 +931,7 @@ log("Sleeping %d secs\n", grab_delay); } } - if (new_delay > 0) + if (upload_successful && (new_delay > 0)) sleep(new_delay); } return 0; @@ -935,25 +939,29 @@ int execvp_with_timeout(int timeout, char *file, char **argv) { - pid_t pid; - int status; + int status, ret; - if ((pid = fork()) < 0) + signal(SIGALRM, alarm_handler); + alarm(timeout); + + if ((childpid = fork()) < 0) { fprintf(stderr, "fork (%s)\n", strerror(errno)); exit (2); } - else if (pid == 0) + else if (childpid == 0) { /* child */ execvp(file, argv); fprintf(stderr, "execvp %s (%s)\n", file, strerror(errno)); exit(2); } - else if (pid > 0) + else if (childpid > 0) { /* parent */ - waitpid(pid, &status, 0); + ret = waitpid(childpid, &status, 0); + alarm(0); + childpid = 0; if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) { log("exec failed for %s\n", file); @@ -961,4 +969,12 @@ } } return 1; +} + +void alarm_handler(int sig) +{ + signal(sig, SIG_IGN); + log("timeout reached, abandoning\n"); + if(childpid) + kill(childpid, SIGTERM); } |
From: <enl...@li...> - 2001-05-22 23:45:43
|
Enlightenment CVS committal Author : gilbertt Project : misc Module : camE Dir : misc/camE Modified Files: webcam.c Log Message: don't spin if BLOCKCAM is there, I broke that with the timeout thing, now fixed =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/webcam.c,v retrieving revision 1.34 retrieving revision 1.35 diff -u -3 -r1.34 -r1.35 --- webcam.c 2001/05/21 21:22:51 1.34 +++ webcam.c 2001/05/22 23:45:41 1.35 @@ -635,7 +635,7 @@ pid_t childpid; time_t start_shot; time_t end_shot; - int just_shot = 0, upload_successful = 0; + int just_shot = 0, upload_successful = 1; int new_delay; FILE *fp; @@ -816,7 +816,7 @@ for (;;) { just_shot = 0; - upload_successful = 0; + upload_successful = 1; end_shot = 0; start_shot = 0; if ((grab_blockfile && (stat(grab_blockfile, &st) == -1)) @@ -976,5 +976,7 @@ signal(sig, SIG_IGN); log("timeout reached, abandoning\n"); if(childpid) + { kill(childpid, SIGTERM); + } } |
From: <enl...@li...> - 2001-05-28 16:26:18
|
Enlightenment CVS committal Author : gilbertt Project : misc Module : camE Dir : misc/camE Modified Files: webcam.c Log Message: ooops! memleak when using ssh :( =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/webcam.c,v retrieving revision 1.35 retrieving revision 1.36 diff -u -3 -r1.35 -r1.36 --- webcam.c 2001/05/22 23:45:41 1.35 +++ webcam.c 2001/05/28 16:26:16 1.36 @@ -873,7 +873,8 @@ { char target_buf[2048]; char cmd_buf[4096]; - char *args[20]; + char *scp_args[5] = { "scp", "-BCq", NULL, NULL, NULL }; + char *ssh_args[20] = { "ssh", "-n", "-q", NULL, NULL, NULL }; if ((upload_blockfile && (stat(upload_blockfile, &st) == -1)) || !upload_blockfile) @@ -882,20 +883,13 @@ snprintf(target_buf, sizeof(target_buf), "%s:%s/%s", scp_target, ftp_dir, ftp_tmp); snprintf(cmd_buf, sizeof(cmd_buf), "mv %s/%s %s/%s", ftp_dir, ftp_tmp, ftp_dir, ftp_file); - args[0] = "scp"; - args[1] = "-BCq"; - args[2] = temp_file; - args[3] = target_buf; - args[4] = NULL; - if((upload_successful = execvp_with_timeout(scp_timeout, "scp", args))) + scp_args[2] = temp_file; + scp_args[3] = target_buf; + if((upload_successful = execvp_with_timeout(scp_timeout, "scp", scp_args))) { - args[0] = "ssh"; - args[1] = "-n"; - args[2] = "-q"; - args[3] = scp_target; - args[4] = cmd_buf; - args[5] = NULL; - if((upload_successful = execvp_with_timeout(scp_timeout, "ssh", args))) + ssh_args[3] = scp_target; + ssh_args[4] = cmd_buf; + if((upload_successful = execvp_with_timeout(scp_timeout, "ssh", ssh_args))) { log("shot uploaded\n"); |
From: <enl...@li...> - 2001-06-15 13:42:53
|
Enlightenment CVS committal Author : gilbertt Project : misc Module : camE Dir : misc/camE Modified Files: webcam.c Log Message: I suck =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/webcam.c,v retrieving revision 1.37 retrieving revision 1.38 diff -u -3 -r1.37 -r1.38 --- webcam.c 2001/06/04 20:29:43 1.37 +++ webcam.c 2001/06/15 13:42:52 1.38 @@ -778,7 +778,7 @@ overlay_y = i; /* print config */ - fprintf(stderr, "camE v0.8 - (c) 1999, 2000 Gerd Knorr, Tom Gilbert\n"); + fprintf(stderr, "camE v0.9 - (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, @@ -788,8 +788,12 @@ ftp_host, ftp_dir, ftp_tmp, ftp_file); /* clear logfile */ - fp = fopen(logfile, "w"); - fclose(fp); + if(logfile) + { + fp = fopen(logfile, "w"); + if(fp) + fclose(fp); + } /* init everything */ grab_init(); @@ -853,6 +857,7 @@ gib_imlib_save_image(image, temp_file); do_postprocess(temp_file); archive_jpeg(image); + gib_imlib_free_image_and_decache(image); if (ftp_do) { if ((upload_blockfile && (stat(upload_blockfile, &st) == -1)) @@ -903,7 +908,6 @@ } } } - gib_imlib_free_image_and_decache(image); just_shot = 1; time(&end_shot); } |
From: <enl...@li...> - 2001-06-21 18:03:13
|
Enlightenment CVS committal Author : gilbertt Project : misc Module : camE Dir : misc/camE Modified Files: parseconfig.c Log Message: Patch from bma, who seems to have something against using '#' for comments :) =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/parseconfig.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -3 -r1.1.1.1 -r1.2 --- parseconfig.c 2000/10/26 21:34:00 1.1.1.1 +++ parseconfig.c 2001/06/21 18:03:12 1.2 @@ -118,7 +118,7 @@ nr = 0; while (NULL != fgets(line,255,fp)) { nr++; - if (line[0] == '\n' || line[0] == '#' || line[0] == '%') + if (line[0] == '\n' || line[0] == '#' || line[0] == '%' || line[0] ==';') continue; if (1 == sscanf(line,"[%99[^]]]",value)) { /* section */ |
From: <enl...@li...> - 2001-06-21 18:03:50
|
Enlightenment CVS committal Author : gilbertt Project : misc Module : camE Dir : misc/camE Added Files: xvcam.c Log Message: from richlowe - this is way cool, and I think may be the start of an interactive version of camE |
From: <enl...@li...> - 2001-07-06 19:07:14
|
Enlightenment CVS committal Author : gilbertt Project : misc Module : camE Dir : misc/camE Modified Files: AUTHORS example.camErc example.camErc.ssh webcam.c Log Message: patch from Brian Martin to allow the watching of an interface, and better pasv mode option name =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/AUTHORS,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- AUTHORS 2001/04/23 22:40:52 1.2 +++ AUTHORS 2001/07/06 19:06:53 1.3 @@ -6,3 +6,4 @@ Brian Martin <in...@me...> Passive mode support with libcurl + watch-interface option =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/example.camErc,v retrieving revision 1.14 retrieving revision 1.15 diff -u -3 -r1.14 -r1.15 --- example.camErc 2001/05/16 22:45:34 1.14 +++ example.camErc 2001/07/06 19:06:53 1.15 @@ -11,6 +11,9 @@ tmp = uploading.jpg # do passive ftp? passive = 1 +#an interface to use for non-passive ftp. use "-" to let libcurl choose, or +#use a real interface name. (libcurl often chooses incorrectly) +interface = - # ftp debugging? (noisy) debug = 0 # Actually do the upload? If do = 0, just take and archive pics. @@ -92,6 +95,8 @@ # File to check before shotting, while this file exists, shots will be taken. # but not uploaded. uploadblockfile = /home/gilbertt/BLOCKUPLOAD +# Shots will only be taken/uploaded if the specified interface is active. +#watch_interface = ppp0 # image to overlay overlay_image = /home/gilbertt/.lb.png overlay_x = 5 =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/example.camErc.ssh,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- example.camErc.ssh 2001/05/16 22:53:31 1.3 +++ example.camErc.ssh 2001/07/06 19:06:53 1.4 @@ -79,6 +79,8 @@ # File to check before shotting, while this file exists, shots will be taken. # but not uploaded. uploadblockfile = /home/gilbertt/BLOCKUPLOAD +# Shots will only be taken/uploaded if the specified interface is active. +#watch_interface = ppp0 # image to overlay overlay_image = /home/gilbertt/.lb.png overlay_x = 5 =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/webcam.c,v retrieving revision 1.38 retrieving revision 1.39 diff -u -3 -r1.38 -r1.39 --- webcam.c 2001/06/15 13:42:52 1.38 +++ webcam.c 2001/07/06 19:06:53 1.39 @@ -32,6 +32,8 @@ #include <sys/types.h> #include <linux/videodev.h> +#include <net/if.h> + #include "parseconfig.h" void log(char *fmt, ...); @@ -92,7 +94,9 @@ Imlib_Image overlay_im = NULL; int overlay_x = 0, overlay_y = 0; Imlib_Font title_fn, text_fn; -char *ftp_pasvmode = "-"; +char *ftp_interface = "-"; +char *watch_interface = NULL; +int interface_active = 0; int v_width[5] = { 128, 160, 176, 320, 640 }; int v_height[5] = { 96, 120, 144, 240, 480 }; @@ -502,7 +506,7 @@ curl_easy_setopt(curl_handle, CURLOPT_UPLOAD, 1); if (!ftp_passive) - curl_easy_setopt(curl_handle, CURLOPT_FTPPORT, ftp_pasvmode); + curl_easy_setopt(curl_handle, CURLOPT_FTPPORT, ftp_interface); /* get it! */ ret = curl_easy_perform(curl_handle); @@ -625,6 +629,14 @@ } int +check_interface(char *watch_interface) +{ + if (watch_interface == NULL) + return 1; + return if_nametoindex(watch_interface); +} + +int main(int argc, char *argv[]) { unsigned char *val; @@ -680,8 +692,8 @@ ftp_do = i; if (-1 != (i = cfg_get_int("ftp", "timeout"))) ftp_timeout = i; - if (NULL != (val = cfg_get_str("ftp", "pasvmode"))) - ftp_pasvmode = val; + if (NULL != (val = cfg_get_str("ftp", "interface"))) + ftp_interface = val; if (NULL != (val = cfg_get_str("scp", "target"))) scp_target = val; @@ -728,6 +740,8 @@ text_style_file = val; if (NULL != (val = cfg_get_str("grab", "overlay_image"))) overlay_file = val; + if (NULL != (val = cfg_get_str("grab", "watch_interface"))) + watch_interface = val; if (-1 != (i = cfg_get_int("grab", "width"))) grab_width = i; if (-1 != (i = cfg_get_int("grab", "height"))) @@ -823,8 +837,10 @@ upload_successful = 1; end_shot = 0; start_shot = 0; - if ((grab_blockfile && (stat(grab_blockfile, &st) == -1)) - || !grab_blockfile) + + + if (((grab_blockfile && (stat(grab_blockfile, &st) == -1)) + || !grab_blockfile) && check_interface(watch_interface)) { time(&start_shot); if (action_pre_shot) |
From: <enl...@li...> - 2001-07-09 22:31:35
|
Enlightenment CVS committal Author : gilbertt Project : misc Module : camE Dir : misc/camE Modified Files: webcam.c Log Message: added YUV420i support :)) =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/webcam.c,v retrieving revision 1.39 retrieving revision 1.40 diff -u -3 -r1.39 -r1.40 --- webcam.c 2001/07/06 19:06:53 1.39 +++ webcam.c 2001/07/09 22:31:32 1.40 @@ -114,7 +114,7 @@ static int grab_fd = -1; static int grab_size = 0; static unsigned char *grab_data = NULL; -Imlib_Image convert_rgb_to_imlib2(unsigned char *mem, int width, int height); +Imlib_Image convert_yuv_to_imlib2(unsigned char *mem, int width, int height); int execvp_with_timeout(int timeout, char *file, char **argv); void alarm_handler(int sig); @@ -166,7 +166,7 @@ } /* try to setup mmap-based capture */ - grab_buf.format = VIDEO_PALETTE_RGB24; + grab_buf.format = VIDEO_PALETTE_YUV420; grab_buf.frame = 0; grab_buf.width = grab_width; grab_buf.height = grab_height; @@ -185,6 +185,92 @@ } } +/** + \brief convert YUV 4:2:0 data into RGB + \param width Width of yuv data, in pixels + \param height Height of yuv data, in pixels + \param src beginning of YUV data + \param dst beginning of RGB data, \b including the initial offset into the viewport + + This is a really simplistic approach. Speedups are welcomed. +*/ +Imlib_Image convert_yuv_to_imlib2(unsigned char *src, int width, int height) +{ + int line, col, linewidth; + int y, u, v, yy, vr = 0, ug = 0, vg = 0, ub = 0; + int r, g, b; + unsigned char *sy, *su, *sv; + Imlib_Image im; + DATA32 *data, *dest; + + im = imlib_create_image(width, height); + imlib_context_set_image(im); + data = imlib_image_get_data(); + dest = data; + + linewidth = width + (width >> 1); + sy = src; + su = sy + 4; + sv = su + linewidth; + + /* The biggest problem is the interlaced data, and the fact that odd + add even lines have V and U data, resp. + */ + for (line = 0; line < height; line++) { + for (col = 0; col < width; col++) { + y = *sy++; + yy = y << 8; + if ((col & 1) == 0) { + /* only at even colums we update the u/v data */ + u = *su - 128; + ug = 88 * u; + ub = 454 * u; + v = *sv - 128; + vg = 183 * v; + vr = 359 * v; + + su++; + sv++; + } + if ((col & 3) == 3) { + sy += 2; /* skip u/v */ + su += 4; /* skip y */ + sv += 4; /* skip y */ + } + + r = (yy + vr) >> 8; + g = (yy - ug - vg) >> 8; + b = (yy + ub ) >> 8; + /* At moments like this, you crave for MMX instructions with saturation */ + if (r < 0) r = 0; + if (r > 255) r = 255; + if (g < 0) g = 0; + if (g > 255) g = 255; + if (b < 0) b = 0; + if (b > 255) b = 255; + +/* *dst++ = r; + *dst++ = g; + *dst++ = b; + */ + *dest = (r << 16) | (g << 8) | b | 0xff000000; + dest++; + + } /* ..for col */ + if (line & 1) { /* odd line: go to next band */ + su += linewidth; + sv += linewidth; + } + else { /* rewind u/v pointers */ + su -= linewidth; + sv -= linewidth; + } + } /* ..for line */ + imlib_image_put_back_data(data); + return im; +} + + Imlib_Image grab_one(int *width, int *height) { @@ -208,7 +294,7 @@ return NULL; } } - im = convert_rgb_to_imlib2(grab_data, grab_buf.width, grab_buf.height); + im = convert_yuv_to_imlib2(grab_data, grab_buf.width, grab_buf.height); if (close_dev) close_device(); if (im) @@ -291,7 +377,7 @@ } Imlib_Image -convert_rgb_to_imlib2(unsigned char *mem, int width, int height) +old_convert_yuv_to_imlib2(unsigned char *mem, int width, int height) { Imlib_Image im; DATA32 *data, *dest; @@ -894,8 +980,8 @@ { char target_buf[2048]; char cmd_buf[4096]; - char *scp_args[5] = { "scp", "-BCq", NULL, NULL, NULL }; - char *ssh_args[20] = { "ssh", "-n", "-q", NULL, NULL, NULL }; + char *scp_args[] = { "scp", "-BCq", NULL, NULL, NULL }; + char *ssh_args[] = { "ssh", "-n", "-q", NULL, NULL, NULL }; if ((upload_blockfile && (stat(upload_blockfile, &st) == -1)) || !upload_blockfile) |
From: <enl...@li...> - 2001-07-09 23:48:01
|
Enlightenment CVS committal Author : gilbertt Project : misc Module : camE Dir : misc/camE Modified Files: webcam.c Log Message: *cough, now it's YUV420P, as it should be =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/webcam.c,v retrieving revision 1.40 retrieving revision 1.41 diff -u -3 -r1.40 -r1.41 --- webcam.c 2001/07/09 22:31:32 1.40 +++ webcam.c 2001/07/09 23:48:00 1.41 @@ -51,7 +51,7 @@ int ftp_do = 1; char *scp_target = NULL; char *grab_device = "/dev/video0"; -char *grab_text = ""; /* strftime */ +char *grab_text = ""; /* strftime */ char *action_pre_shot = NULL; char *action_post_shot = NULL; char *action_post_upload = NULL; @@ -166,7 +166,7 @@ } /* try to setup mmap-based capture */ - grab_buf.format = VIDEO_PALETTE_YUV420; + grab_buf.format = VIDEO_PALETTE_YUV420P; grab_buf.frame = 0; grab_buf.width = grab_width; grab_buf.height = grab_height; @@ -194,78 +194,70 @@ This is a really simplistic approach. Speedups are welcomed. */ -Imlib_Image convert_yuv_to_imlib2(unsigned char *src, int width, int height) +Imlib_Image +convert_yuv_to_imlib2(unsigned char *src, int width, int height) { - int line, col, linewidth; - int y, u, v, yy, vr = 0, ug = 0, vg = 0, ub = 0; - int r, g, b; - unsigned char *sy, *su, *sv; - Imlib_Image im; - DATA32 *data, *dest; - - im = imlib_create_image(width, height); - imlib_context_set_image(im); - data = imlib_image_get_data(); - dest = data; - - linewidth = width + (width >> 1); - sy = src; - su = sy + 4; - sv = su + linewidth; - - /* The biggest problem is the interlaced data, and the fact that odd - add even lines have V and U data, resp. - */ - for (line = 0; line < height; line++) { - for (col = 0; col < width; col++) { - y = *sy++; - yy = y << 8; - if ((col & 1) == 0) { - /* only at even colums we update the u/v data */ - u = *su - 128; - ug = 88 * u; - ub = 454 * u; - v = *sv - 128; - vg = 183 * v; - vr = 359 * v; + int line, col; + int y, u, v, yy, vr = 0, ug = 0, vg = 0, ub = 0; + int r, g, b; + unsigned char *sy, *su, *sv; + Imlib_Image im; + DATA32 *data, *dest; - su++; - sv++; - } - if ((col & 3) == 3) { - sy += 2; /* skip u/v */ - su += 4; /* skip y */ - sv += 4; /* skip y */ - } + im = imlib_create_image(width, height); + imlib_context_set_image(im); + data = imlib_image_get_data(); + dest = data; + + sy = src; + su = sy + (width * height); + sv = su + (width * height / 4); + + for (line = 0; line < height; line++) + { + for (col = 0; col < width; col++) + { + y = *sy++; + yy = y << 8; + u = *su - 128; + ug = 88 * u; + ub = 454 * u; + v = *sv - 128; + vg = 183 * v; + vr = 359 * v; + + if ((col & 1) == 0) + { + su++; + sv++; + } + + r = (yy + vr) >> 8; + g = (yy - ug - vg) >> 8; + b = (yy + ub) >> 8; + + if (r < 0) + r = 0; + if (r > 255) + r = 255; + if (g < 0) + g = 0; + if (g > 255) + g = 255; + if (b < 0) + b = 0; + if (b > 255) + b = 255; - r = (yy + vr) >> 8; - g = (yy - ug - vg) >> 8; - b = (yy + ub ) >> 8; - /* At moments like this, you crave for MMX instructions with saturation */ - if (r < 0) r = 0; - if (r > 255) r = 255; - if (g < 0) g = 0; - if (g > 255) g = 255; - if (b < 0) b = 0; - if (b > 255) b = 255; - -/* *dst++ = r; - *dst++ = g; - *dst++ = b; - */ - *dest = (r << 16) | (g << 8) | b | 0xff000000; - dest++; - - } /* ..for col */ - if (line & 1) { /* odd line: go to next band */ - su += linewidth; - sv += linewidth; - } - else { /* rewind u/v pointers */ - su -= linewidth; - sv -= linewidth; - } - } /* ..for line */ + *dest = (r << 16) | (g << 8) | b | 0xff000000; + dest++; + } + if ((line & 1) == 0) + { + su -= width / 2; + sv -= width / 2; + } + } imlib_image_put_back_data(data); return im; } @@ -878,7 +870,7 @@ overlay_y = i; /* print config */ - fprintf(stderr, "camE v0.9 - (c) 1999, 2000 Gerd Knorr, Tom Gilbert\n"); + fprintf(stderr, "camE v1.0 - (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, @@ -886,13 +878,13 @@ if (ftp_do) fprintf(stderr, "ftp config:\n %s@%s:%s\n %s => %s\n", ftp_user, ftp_host, ftp_dir, ftp_tmp, ftp_file); - + /* clear logfile */ - if(logfile) + if (logfile) { - fp = fopen(logfile, "w"); - if(fp) - fclose(fp); + fp = fopen(logfile, "w"); + if (fp) + fclose(fp); } /* init everything */ @@ -923,10 +915,10 @@ upload_successful = 1; end_shot = 0; start_shot = 0; - - + + if (((grab_blockfile && (stat(grab_blockfile, &st) == -1)) - || !grab_blockfile) && check_interface(watch_interface)) + || !grab_blockfile) && check_interface(watch_interface)) { time(&start_shot); if (action_pre_shot) @@ -988,25 +980,28 @@ { log("uploading via scp\n"); snprintf(target_buf, sizeof(target_buf), "%s:%s/%s", - scp_target, ftp_dir, ftp_tmp); - snprintf(cmd_buf, sizeof(cmd_buf), "mv %s/%s %s/%s", ftp_dir, ftp_tmp, ftp_dir, ftp_file); + scp_target, ftp_dir, ftp_tmp); + snprintf(cmd_buf, sizeof(cmd_buf), "mv %s/%s %s/%s", ftp_dir, + ftp_tmp, ftp_dir, ftp_file); scp_args[2] = temp_file; scp_args[3] = target_buf; - if((upload_successful = execvp_with_timeout(scp_timeout, "scp", scp_args))) + if ((upload_successful = + execvp_with_timeout(scp_timeout, "scp", scp_args))) { - ssh_args[3] = scp_target; - ssh_args[4] = cmd_buf; - if((upload_successful = execvp_with_timeout(scp_timeout, "ssh", ssh_args))) - { - log("shot uploaded\n"); - - if (action_post_upload) - { - log("running post upload action\n"); - system(action_post_upload); - log("post upload action done\n"); - } - } + ssh_args[3] = scp_target; + ssh_args[4] = cmd_buf; + if ((upload_successful = + execvp_with_timeout(scp_timeout, "ssh", ssh_args))) + { + log("shot uploaded\n"); + + if (action_post_upload) + { + log("running post upload action\n"); + system(action_post_upload); + log("post upload action done\n"); + } + } } } } @@ -1037,17 +1032,18 @@ return 0; } -int execvp_with_timeout(int timeout, char *file, char **argv) +int +execvp_with_timeout(int timeout, char *file, char **argv) { int status, ret; - + signal(SIGALRM, alarm_handler); alarm(timeout); if ((childpid = fork()) < 0) { fprintf(stderr, "fork (%s)\n", strerror(errno)); - exit (2); + exit(2); } else if (childpid == 0) { @@ -1071,12 +1067,13 @@ return 1; } -void alarm_handler(int sig) +void +alarm_handler(int sig) { - signal(sig, SIG_IGN); - log("timeout reached, abandoning\n"); - if(childpid) - { - kill(childpid, SIGTERM); - } + signal(sig, SIG_IGN); + log("timeout reached, abandoning\n"); + if (childpid) + { + kill(childpid, SIGTERM); + } } |
From: <enl...@li...> - 2001-07-10 19:30:50
|
Enlightenment CVS committal Author : gilbertt Project : misc Module : camE Dir : misc/camE Modified Files: example.camErc example.camErc.ssh webcam.c Added Files: pwc-ioctl.h Log Message: new features, contrast, colour, brightness, gamma, etc, plus framerate and snapshot modes for philip cams, plus more format conversion routines in order to support other cams. =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/example.camErc,v retrieving revision 1.15 retrieving revision 1.16 diff -u -3 -r1.15 -r1.16 --- example.camErc 2001/07/06 19:06:53 1.15 +++ example.camErc 2001/07/10 19:30:50 1.16 @@ -46,6 +46,14 @@ # percentage of the delay to spend uploading the image, # 100 disables, useful values are < 40 percent = 100 +# only for philps cams right now +framerate = 5 +# image settings +colour = 50 +brightness = 50 +contrast = 50 +hue = 50 +whiteness = 50 # 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 =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/example.camErc.ssh,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- example.camErc.ssh 2001/07/06 19:06:53 1.4 +++ example.camErc.ssh 2001/07/10 19:30:50 1.5 @@ -30,6 +30,14 @@ # percentage of the delay to spend uploading the image, # 100 disables, useful values are < 40 percent = 100 +# only for philps cams right now +framerate = 5 +# image settings +colour = 50 +brightness = 50 +contrast = 50 +hue = 50 +whiteness = 50 # 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 =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/webcam.c,v retrieving revision 1.41 retrieving revision 1.42 diff -u -3 -r1.41 -r1.42 --- webcam.c 2001/07/09 23:48:00 1.41 +++ webcam.c 2001/07/10 19:30:50 1.42 @@ -35,6 +35,7 @@ #include <net/if.h> #include "parseconfig.h" +#include "pwc-ioctl.h" void log(char *fmt, ...); @@ -78,6 +79,12 @@ int bg_a = 150; int close_dev = 0; int ftp_timeout = 30; +int cam_contrast = 50; +int cam_brightness = 50; +int cam_hue = 50; +int cam_colour = 50; +int cam_whiteness = 50; +int cam_framerate = 10; char *title_font = "arial/8"; char *ttf_dir = "/usr/X11R6/lib/X11/fonts/TrueType"; char *archive_ext = "jpg"; @@ -97,6 +104,7 @@ char *ftp_interface = "-"; char *watch_interface = NULL; int interface_active = 0; +int device_palette; int v_width[5] = { 128, 160, 176, 320, 640 }; int v_height[5] = { 96, 120, 144, 240, 480 }; @@ -106,6 +114,8 @@ int delay_correct = 0; int reinit_device = 0; +struct video_picture cam_pic; + /* these work for v4l only, not v4l2 */ int grab_input = 0; int grab_norm = VIDEO_MODE_PAL; @@ -114,7 +124,8 @@ static int grab_fd = -1; static int grab_size = 0; static unsigned char *grab_data = NULL; -Imlib_Image convert_yuv_to_imlib2(unsigned char *mem, int width, int height); +Imlib_Image convert_yuv420p_to_imlib2(unsigned char *mem, int width, + int height); int execvp_with_timeout(int timeout, char *file, char **argv); void alarm_handler(int sig); @@ -132,12 +143,42 @@ grab_fd = -1; } +int +try_palette(int fd, int pal, int depth) +{ + cam_pic.palette = pal; + cam_pic.depth = depth; + if (ioctl(fd, VIDIOCSPICT, &cam_pic) < 0) + return FALSE; + if (ioctl(fd, VIDIOCGPICT, &cam_pic) < 0) + return FALSE; + if (cam_pic.palette == pal) + return TRUE; + return FALSE; +} + +int +find_palette(int fd, struct video_mmap *vid) +{ + if (try_palette(fd, VIDEO_PALETTE_YUV420P, 16)) + return VIDEO_PALETTE_YUV420P; + if (try_palette(fd, VIDEO_PALETTE_YUV420, 16)) + return VIDEO_PALETTE_YUV420; + if (try_palette(fd, VIDEO_PALETTE_RGB24, 24)) + return VIDEO_PALETTE_RGB24; + fprintf(stderr, + "No supported palette found, please report your device to the author\n"); + exit(2); + return 0; +} + void grab_init() { struct video_capability grab_cap; struct video_channel grab_chan; struct video_mbuf vid_mbuf; + int type; if ((grab_fd = open(grab_device, O_RDWR)) == -1) { @@ -150,6 +191,49 @@ exit(1); } + memset(&cam_pic, 0, sizeof(struct video_picture)); + cam_pic.contrast = 65535 * (cam_contrast / 100); + cam_pic.brightness = 65535 * (cam_brightness / 100); + cam_pic.hue = 65535 * (cam_hue / 100); + cam_pic.colour = 65535 * (cam_colour / 100); + cam_pic.whiteness = 65535 * (cam_whiteness / 100); + + device_palette = find_palette(grab_fd, &grab_buf); + grab_buf.format = device_palette; + grab_buf.frame = 0; + grab_buf.width = grab_width; + grab_buf.height = grab_height; + + ioctl(grab_fd, VIDIOCGMBUF, &vid_mbuf); + + /* special philips features */ + if (sscanf(grab_cap.name, "Philips %d webcam", &type) > 0) + { + struct video_window vwin; + int shutter = -1; + int gain = -1; + + /* philips cam detected, maybe enable special features */ + printf("Philips %d webcam detected\n", type); + + ioctl(grab_fd, VIDIOCGWIN, &vwin); + if (vwin.flags & PWC_FPS_MASK) + { + /* Set new framerate */ + vwin.flags &= ~PWC_FPS_FRMASK; + vwin.flags |= (cam_framerate << PWC_FPS_SHIFT); + } + + /* Turning on snapshot mode */ + vwin.flags |= PWC_FPS_SNAPSHOT; + + ioctl(grab_fd, VIDIOCSWIN, &vwin); + if(ioctl(grab_fd, VIDIOCPWCSAGC, &gain) < 0) + perror("trying to set gain"); + if(ioctl(grab_fd, VIDIOCPWCSSHUTTER, &shutter) < 0) + perror("trying to set shutter"); + } + /* set image source and TV norm */ grab_chan.channel = grab_input; if (ioctl(grab_fd, VIDIOCGCHAN, &grab_chan) == -1) @@ -165,14 +249,6 @@ exit(1); } - /* try to setup mmap-based capture */ - grab_buf.format = VIDEO_PALETTE_YUV420P; - grab_buf.frame = 0; - grab_buf.width = grab_width; - grab_buf.height = grab_height; - - ioctl(grab_fd, VIDIOCGMBUF, &vid_mbuf); - /* grab_size = grab_buf.width * grab_buf.height * 3; */ grab_size = vid_mbuf.size; grab_data = @@ -185,17 +261,9 @@ } } -/** - \brief convert YUV 4:2:0 data into RGB - \param width Width of yuv data, in pixels - \param height Height of yuv data, in pixels - \param src beginning of YUV data - \param dst beginning of RGB data, \b including the initial offset into the viewport - - This is a really simplistic approach. Speedups are welcomed. -*/ +/* This is a really simplistic approach. Speedups are welcomed. */ Imlib_Image -convert_yuv_to_imlib2(unsigned char *src, int width, int height) +convert_yuv420p_to_imlib2(unsigned char *src, int width, int height) { int line, col; int y, u, v, yy, vr = 0, ug = 0, vg = 0, ub = 0; @@ -262,7 +330,120 @@ return im; } +/* This is a really simplistic approach. Speedups are welcomed. */ +Imlib_Image +convert_yuv420i_to_imlib2(unsigned char *src, int width, int height) +{ + int line, col, linewidth; + int y, u, v, yy, vr = 0, ug = 0, vg = 0, ub = 0; + int r, g, b; + unsigned char *sy, *su, *sv; + Imlib_Image im; + DATA32 *data, *dest; + + im = imlib_create_image(width, height); + imlib_context_set_image(im); + data = imlib_image_get_data(); + dest = data; + + linewidth = width + (width >> 1); + sy = src; + su = sy + 4; + sv = su + linewidth; + + /* + The biggest problem is the interlaced data, and the fact that odd + add even lines have V and U data, resp. + */ + + for (line = 0; line < height; line++) + { + for (col = 0; col < width; col++) + { + y = *sy++; + yy = y << 8; + if ((col & 1) == 0) + { + /* only at even colums we update the u/v data */ + u = *su - 128; + ug = 88 * u; + ub = 454 * u; + v = *sv - 128; + vg = 183 * v; + vr = 359 * v; + + su++; + sv++; + } + if ((col & 3) == 3) + { + sy += 2; /* skip u/v */ + su += 4; /* skip y */ + sv += 4; /* skip y */ + } + r = (yy + vr) >> 8; + g = (yy - ug - vg) >> 8; + b = (yy + ub) >> 8; + + if (r < 0) + r = 0; + if (r > 255) + r = 255; + if (g < 0) + g = 0; + if (g > 255) + g = 255; + if (b < 0) + b = 0; + if (b > 255) + b = 255; + + *dest = (r << 16) | (g << 8) | b | 0xff000000; + dest++; + } + if (line & 1) + { + su += linewidth; + sv += linewidth; + } + else + { + su -= linewidth; + sv -= linewidth; + } + } + imlib_image_put_back_data(data); + return im; +} + +Imlib_Image +convert_rgb24_to_imlib2(unsigned char *mem, int width, int height) +{ + Imlib_Image im; + DATA32 *data, *dest; + unsigned char *src; + int i; + + im = imlib_create_image(width, height); + imlib_context_set_image(im); + data = imlib_image_get_data(); + dest = data; + src = mem; + i = width * height; + while (i--) + { + *dest = (src[2] << 16) | (src[1] << 8) | src[0] | 0xff000000; + dest++; + src += 3; + } + + imlib_image_put_back_data(data); + + return im; +} + + Imlib_Image grab_one(int *width, int *height) { @@ -285,8 +466,28 @@ perror("ioctl VIDIOCSYNC"); return NULL; } + } + switch (device_palette) + { + case VIDEO_PALETTE_YUV420P: + im = + convert_yuv420p_to_imlib2(grab_data, grab_buf.width, + grab_buf.height); + break; + case VIDEO_PALETTE_YUV420: + im = + convert_yuv420i_to_imlib2(grab_data, grab_buf.width, + grab_buf.height); + break; + case VIDEO_PALETTE_RGB24: + im = + convert_rgb24_to_imlib2(grab_data, grab_buf.width, + grab_buf.height); + break; + default: + fprintf(stderr, "eeek"); + exit(2); } - im = convert_yuv_to_imlib2(grab_data, grab_buf.width, grab_buf.height); if (close_dev) close_device(); if (im) @@ -368,33 +569,6 @@ } } -Imlib_Image -old_convert_yuv_to_imlib2(unsigned char *mem, int width, int height) -{ - Imlib_Image im; - DATA32 *data, *dest; - unsigned char *src; - int i; - - im = imlib_create_image(width, height); - imlib_context_set_image(im); - data = imlib_image_get_data(); - - dest = data; - src = mem; - i = width * height; - while (i--) - { - *dest = (src[2] << 16) | (src[1] << 8) | src[0] | 0xff000000; - dest++; - src += 3; - } - - imlib_image_put_back_data(data); - - return im; -} - /* ---------------------------------------------------------------------- */ void @@ -868,9 +1042,26 @@ overlay_x = i; if (-1 != (i = cfg_get_int("grab", "overlay_y"))) overlay_y = i; + if (-1 != (i = cfg_get_int("grab", "colour"))) + cam_colour = i; + if (-1 != (i = cfg_get_int("grab", "brightness"))) + cam_brightness = i; + if (-1 != (i = cfg_get_int("grab", "contrast"))) + cam_contrast = i; + if (-1 != (i = cfg_get_int("grab", "hue"))) + cam_hue = i; + if (-1 != (i = cfg_get_int("grab", "whiteness"))) + cam_whiteness = i; + if (-1 != (i = cfg_get_int("grab", "framerate"))) + cam_framerate = i; + + if(cam_framerate > 60) + cam_framerate = 60; + if(cam_framerate < 1) + cam_framerate = 1; /* print config */ - fprintf(stderr, "camE v1.0 - (c) 1999, 2000 Gerd Knorr, Tom Gilbert\n"); + fprintf(stderr, "camE v1.1 - (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...> - 2001-07-10 23:08:35
|
Enlightenment CVS committal Author : gilbertt Project : misc Module : camE Dir : misc/camE Modified Files: AUTHORS example.camErc webcam.c Log Message: Patch from Greg Gilbert <gr...@tr...> to add cropping and scaling options =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/AUTHORS,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- AUTHORS 2001/07/06 19:06:53 1.3 +++ AUTHORS 2001/07/10 23:08:35 1.4 @@ -7,3 +7,6 @@ Brian Martin <in...@me...> Passive mode support with libcurl watch-interface option + +Greg Gilbert <gr...@tr...> + Cropping and scaling code options =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/example.camErc,v retrieving revision 1.16 retrieving revision 1.17 diff -u -3 -r1.16 -r1.17 --- example.camErc 2001/07/10 19:30:50 1.16 +++ example.camErc 2001/07/10 23:08:35 1.17 @@ -113,4 +113,15 @@ #action_pre_shot #action_post_shot #action_post_upload - +# image processing +# crop = 1 +# crop_width = 320 +# crop_height = 240 +# crop_x = 20 +# crop_y = 20 +# +# scaling is applied after cropping, so you can +# remove borders then stretch up the result +# scale = 1 +# scale_width = 640 +# scale_height = 480 =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/webcam.c,v retrieving revision 1.42 retrieving revision 1.43 diff -u -3 -r1.42 -r1.43 --- webcam.c 2001/07/10 19:30:50 1.42 +++ webcam.c 2001/07/10 23:08:35 1.43 @@ -106,6 +106,16 @@ int interface_active = 0; int device_palette; +int crop = 0; +int crop_x = 0; +int crop_y = 0; +int crop_width = 0; +int crop_height = 0; + +int scale = 0; +int scale_width = 0; +int scale_height = 0; + int v_width[5] = { 128, 160, 176, 320, 640 }; int v_height[5] = { 96, 120, 144, 240, 480 }; int v_curr = -1; @@ -205,7 +215,7 @@ grab_buf.height = grab_height; ioctl(grab_fd, VIDIOCGMBUF, &vid_mbuf); - + /* special philips features */ if (sscanf(grab_cap.name, "Philips %d webcam", &type) > 0) { @@ -228,9 +238,9 @@ vwin.flags |= PWC_FPS_SNAPSHOT; ioctl(grab_fd, VIDIOCSWIN, &vwin); - if(ioctl(grab_fd, VIDIOCPWCSAGC, &gain) < 0) + if (ioctl(grab_fd, VIDIOCPWCSAGC, &gain) < 0) perror("trying to set gain"); - if(ioctl(grab_fd, VIDIOCPWCSSHUTTER, &shutter) < 0) + if (ioctl(grab_fd, VIDIOCPWCSSHUTTER, &shutter) < 0) perror("trying to set shutter"); } @@ -892,7 +902,7 @@ main(int argc, char *argv[]) { unsigned char *val; - Imlib_Image image; + Imlib_Image image, tmp_image; char filename[100]; int width, height, i; struct stat st; @@ -1054,10 +1064,26 @@ cam_whiteness = i; if (-1 != (i = cfg_get_int("grab", "framerate"))) cam_framerate = i; + if (-1 != (i = cfg_get_int("grab", "crop"))) + crop = i; + if (-1 != (i = cfg_get_int("grab", "crop_width"))) + crop_width = i; + if (-1 != (i = cfg_get_int("grab", "crop_height"))) + crop_height = i; + if (-1 != (i = cfg_get_int("grab", "crop_x"))) + crop_x = i; + if (-1 != (i = cfg_get_int("grab", "crop_y"))) + crop_y = i; + if (-1 != (i = cfg_get_int("grab", "scale"))) + scale = i; + if (-1 != (i = cfg_get_int("grab", "scale_width"))) + scale_width = i; + if (-1 != (i = cfg_get_int("grab", "scale_height"))) + scale_height = i; - if(cam_framerate > 60) + if (cam_framerate > 60) cam_framerate = 60; - if(cam_framerate < 1) + if (cam_framerate < 1) cam_framerate = 1; /* print config */ @@ -1127,6 +1153,43 @@ { fprintf(stderr, "no image captured\n"); exit(2); + } + + + if (crop) + { + if (!crop_width) + crop_width = grab_width; + if (!crop_height) + crop_height = grab_height; + tmp_image = + gib_imlib_create_cropped_scaled_image(image, crop_x, crop_y, + crop_width, crop_height, + crop_width, crop_height, + 1); + gib_imlib_free_image_and_decache(image); + image = tmp_image; + imlib_context_set_image(image); + } + + if (scale) + { + if (!scale_width) + scale_width = grab_width; + if (!scale_height) + scale_height = grab_height; + + tmp_image = + gib_imlib_create_cropped_scaled_image(image, 0, 0, scale_width, + scale_height, + scale_width, + scale_height, 1); + gib_imlib_blend_image_onto_image(tmp_image, image, 1, 0, 0, + grab_width, grab_height, 0, 0, + scale_width, scale_height, 1, 0, + 0); + gib_imlib_free_image_and_decache(image); + image = tmp_image; } log("** shot taken\n"); |
From: <enl...@li...> - 2001-07-10 23:09:04
|
Enlightenment CVS committal Author : gilbertt Project : misc Module : camE Dir : misc/camE Modified Files: AUTHORS Log Message: speak me well English good yes? =================================================================== RCS file: /cvsroot/enlightenment/misc/camE/AUTHORS,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- AUTHORS 2001/07/10 23:08:35 1.4 +++ AUTHORS 2001/07/10 23:09:04 1.5 @@ -9,4 +9,4 @@ watch-interface option Greg Gilbert <gr...@tr...> - Cropping and scaling code options + Cropping and scaling options |