From 568b7752bbc19da01d39d5f639377fc327711dcf Mon Sep 17 00:00:00 2001 From: AngelCarpintero Date: Mon, 12 May 2008 02:39:58 +0000 Subject: [PATCH] Major clean up code , apply CODE_STANDARD rules, add partially IPV6 http://www.lavrsen.dk/twiki/bin/view/Motion/IPv6 ( webcam and http-control , not netcam yet ) --- CHANGELOG | 2 + CREDITS | 6 + alg.c | 350 ++++++++++++++++++----------------- conf.c | 76 ++++---- conf.h | 12 +- configure | 20 +- configure.in | 2 +- draw.c | 34 ++-- event.c | 73 ++++---- ffmpeg.c | 8 +- motion.c | 44 ++--- motion.h | 28 +-- netcam.c | 76 ++++---- netcam_ftp.c | 62 +++---- netcam_jpeg.c | 9 +- picture.c | 6 +- track.c | 53 +++--- track.h | 14 +- video2.c | 57 +++--- video_common.c | 33 ++-- video_freebsd.c | 164 ++++++++--------- video_freebsd.h | 4 +- webcam.c | 168 ++++++++++------- webhttpd.c | 477 +++++++++++++++++++++++++----------------------- 24 files changed, 907 insertions(+), 871 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 4cdbd615..beac7721 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -2,6 +2,8 @@ SVN trunk Summary of Changes Features * Insert Blanking frames http://www.lavrsen.dk/twiki/bin/view/Motion/FeatureRequest2007x12x16x132522 (Dag Erlandsson) + * IPV6 for http-control and webcam stream not netcam yet http://www.lavrsen.dk/twiki/bin/view/Motion/IPv6 + (Jeroen Massar & Angel Carpintero) Bugfixes diff --git a/CREDITS b/CREDITS index a0d45817..cad1ff5b 100644 --- a/CREDITS +++ b/CREDITS @@ -395,6 +395,8 @@ Angel Carpintero http://www.lavrsen.dk/twiki/bin/view/Motion/BugReport2008x02x25x025134 * Fixed stepper when is used track_auto on. * Added to configure.in --with-pwcbsd to allow compile motion in freebsd with webcam support instead of bktr. + * IPV6 for http-control and webcam stream not netcam yet http://www.lavrsen.dk/twiki/bin/view/Motion/IPv6 + (Jeroen Massar & Angel Carpintero) Jared D * Change bayer2rgb24() to fix a problem with sn9c102 driver @@ -1022,6 +1024,10 @@ Bill Maidment Philip Marien * Fixed a problem when compiling with --without-v4l configuration. +Jeroen Massar + * IPV6 for http-control and webcam stream not netcam yet http://www.lavrsen.dk/twiki/bin/view/Motion/IPv6 + (Jeroen Massar & Angel Carpintero) + Lionnel Maugis * ffmpeg code diff --git a/alg.c b/alg.c index bb69ab5a..8976db1d 100644 --- a/alg.c +++ b/alg.c @@ -20,23 +20,23 @@ /* locate the center and size of the movement. */ void alg_locate_center_size(struct images *imgs, int width, int height, struct coord *cent) { - unsigned char *out=imgs->out; - int *labels=imgs->labels; - int x, y, centc=0, xdist=0, ydist=0; + unsigned char *out = imgs->out; + int *labels = imgs->labels; + int x, y, centc = 0, xdist = 0, ydist = 0; - cent->x=0; - cent->y=0; - cent->maxx=0; - cent->maxy=0; - cent->minx=width; - cent->miny=height; + cent->x = 0; + cent->y = 0; + cent->maxx = 0; + cent->maxy = 0; + cent->minx = width; + cent->miny = height; /* If Labeling enabled - locate center of largest labelgroup */ if (imgs->labelsize_max) { /* Locate largest labelgroup */ - for (y=0; yx += x; cent->y += y; centc++; @@ -45,8 +45,8 @@ void alg_locate_center_size(struct images *imgs, int width, int height, struct c } } else { /* Locate movement */ - for (y=0; yx += x; cent->y += y; @@ -56,22 +56,22 @@ void alg_locate_center_size(struct images *imgs, int width, int height, struct c } } if (centc) { - cent->x=cent->x/centc; - cent->y=cent->y/centc; + cent->x = cent->x / centc; + cent->y = cent->y / centc; } /* Now we find the size of the Motion */ /* First reset pointers back to initial value */ - centc=0; - labels=imgs->labels; - out=imgs->out; + centc = 0; + labels = imgs->labels; + out = imgs->out; /* If Labeling then we find the area around largest labelgroup instead */ if (imgs->labelsize_max) { - for (y=0; y cent->x) xdist += x - cent->x; else if (x < cent->x) @@ -85,8 +85,8 @@ void alg_locate_center_size(struct images *imgs, int width, int height, struct c } } } else { - for (y=0; y cent->x) xdist += x - cent->x; @@ -103,13 +103,13 @@ void alg_locate_center_size(struct images *imgs, int width, int height, struct c } if (centc) { - cent->minx = cent->x - xdist/centc*2; - cent->maxx = cent->x + xdist/centc*2; + cent->minx = cent->x - xdist / centc * 2; + cent->maxx = cent->x + xdist / centc * 2; /* Make the box a little bigger in y direction to make sure the heads fit in so we multiply by 3 instead of 2 which seems to to work well in practical */ - cent->miny = cent->y - ydist/centc*3; - cent->maxy = cent->y + ydist/centc*2; + cent->miny = cent->y - ydist / centc * 3; + cent->maxy = cent->y + ydist / centc * 2; } if (cent->maxx > width - 1) cent->maxx = width - 1; @@ -134,7 +134,7 @@ void alg_locate_center_size(struct images *imgs, int width, int height, struct c /* We want to center Y coordinate to be the center of the action. The head of a person is important so we correct the cent.y coordinate to match the correction to include a persons head that we just did above */ - cent->y = (cent->miny + cent->maxy)/2; + cent->y = (cent->miny + cent->maxy) / 2; } @@ -142,46 +142,46 @@ void alg_locate_center_size(struct images *imgs, int width, int height, struct c /* draw a box around the movement */ void alg_draw_location(struct coord *cent, struct images *imgs, int width, unsigned char *new, int mode) { - unsigned char *out=imgs->out; + unsigned char *out = imgs->out; int x, y; - out=imgs->out; + out = imgs->out; /* Draw a box around the movement */ if (mode == LOCATE_BOTH){ /* both normal and motion image gets a box */ int width_miny = width*cent->miny; int width_maxy = width*cent->maxy; - for (x=cent->minx; x<=cent->maxx; x++) { + for (x = cent->minx; x <= cent->maxx; x++) { int width_miny_x = x+width_miny; int width_maxy_x = x+width_maxy; - new[width_miny_x]=~new[width_miny_x]; - new[width_maxy_x]=~new[width_maxy_x]; - out[width_miny_x]=~out[width_miny_x]; - out[width_maxy_x]=~out[width_maxy_x]; + new[width_miny_x] =~new[width_miny_x]; + new[width_maxy_x] =~new[width_maxy_x]; + out[width_miny_x] =~out[width_miny_x]; + out[width_maxy_x] =~out[width_maxy_x]; } - for (y=cent->miny; y<=cent->maxy; y++) { - int width_minx_y = cent->minx+y*width; - int width_maxx_y = cent->maxx+y*width; - new[width_minx_y]=~new[width_minx_y]; - new[width_maxx_y]=~new[width_maxx_y]; - out[width_minx_y]=~out[width_minx_y]; - out[width_maxx_y]=~out[width_maxx_y]; + for (y = cent->miny; y <= cent->maxy; y++) { + int width_minx_y = cent->minx + y * width; + int width_maxx_y = cent->maxx + y * width; + new[width_minx_y] =~new[width_minx_y]; + new[width_maxx_y] =~new[width_maxx_y]; + out[width_minx_y] =~out[width_minx_y]; + out[width_maxx_y] =~out[width_maxx_y]; } } else{ /* normal image only (e.g. preview shot) */ - int width_miny = width*cent->miny; - int width_maxy = width*cent->maxy; - for (x=cent->minx; x<=cent->maxx; x++) { + int width_miny = width * cent->miny; + int width_maxy = width * cent->maxy; + for (x = cent->minx; x <= cent->maxx; x++) { int width_miny_x = width_miny+x; int width_maxy_x = width_maxy+x; - new[width_miny_x]=~new[width_miny_x]; - new[width_maxy_x]=~new[width_maxy_x]; + new[width_miny_x] =~new[width_miny_x]; + new[width_maxy_x] =~new[width_maxy_x]; } - for (y=cent->miny; y<=cent->maxy; y++) { + for (y = cent->miny; y <= cent->maxy; y++) { int minx_y = cent->minx+y*width; int maxx_y = cent->maxx+y*width; - new[minx_y]=~new[minx_y]; - new[maxx_y]=~new[maxx_y]; + new[minx_y] =~new[minx_y]; + new[maxx_y] =~new[maxx_y]; } } } @@ -189,26 +189,26 @@ void alg_draw_location(struct coord *cent, struct images *imgs, int width, unsig #define NORM 100 -#define ABS(x) ((x)<0 ? -(x) : (x)) +#define ABS(x) ((x) < 0 ? -(x) : (x)) #define DIFF(x, y) (ABS((x)-(y))) -#define NDIFF(x, y) (ABS(x)*NORM/(ABS(x)+2*DIFF(x,y))) +#define NDIFF(x, y) (ABS(x) * NORM / (ABS(x) + 2 * DIFF(x, y))) void alg_noise_tune(struct context *cnt, unsigned char *new) { - struct images *imgs=&cnt->imgs; + struct images *imgs = &cnt->imgs; int i; - unsigned char *ref=imgs->ref; - int diff, sum=0, count=0; - unsigned char *mask=imgs->mask; - unsigned char *smartmask=imgs->smartmask_final; + unsigned char *ref = imgs->ref; + int diff, sum = 0, count = 0; + unsigned char *mask = imgs->mask; + unsigned char *smartmask = imgs->smartmask_final; - i=imgs->motionsize; + i = imgs->motionsize; - for (; i>0; i--) { + for (; i > 0; i--) { diff = ABS(*ref - *new); if (mask) - diff = ((diff * *mask++)/255); + diff = ((diff * *mask++) / 255); if (*smartmask){ sum += diff + 1; count++; @@ -298,8 +298,8 @@ static int iflood(int x, int y, * segment of scan line y-dy for x1<=x<=x2 was previously filled, * now explore adjacent pixels in scan line y */ - for (x = x1; x >= 0 && out[y*width+x] != 0 && labels[y*width+x] == oldvalue; x--) { - labels[y*width+x] = newvalue; + for (x = x1; x >= 0 && out[y * width + x] != 0 && labels[y * width + x] == oldvalue; x--) { + labels[y * width + x] = newvalue; count++; } @@ -314,8 +314,8 @@ static int iflood(int x, int y, x = x1 + 1; do { - for (; x < width && out[y*width+x] != 0 && labels[y*width+x]==oldvalue; x++) { - labels[y*width+x] = newvalue; + for (; x < width && out[y * width + x] != 0 && labels[y * width + x] == oldvalue; x++) { + labels[y * width + x] = newvalue; count++; } @@ -326,7 +326,7 @@ static int iflood(int x, int y, skip: - for (x++; x <= x2 && !(out[y*width+x] != 0 && labels[y*width+x]==oldvalue); x++); + for (x++; x <= x2 && !(out[y * width + x] != 0 && labels[y * width + x] == oldvalue); x++); l = x; } while (x <= x2); @@ -336,48 +336,48 @@ static int iflood(int x, int y, static int alg_labeling(struct context *cnt) { - struct images *imgs=&cnt->imgs; - unsigned char *out=imgs->out; - int *labels=imgs->labels; + struct images *imgs = &cnt->imgs; + unsigned char *out = imgs->out; + int *labels = imgs->labels; int ix, iy, pixelpos; - int width=imgs->width; - int height=imgs->height; - int labelsize=0; - int current_label=2; - cnt->current_image->total_labels=0; - imgs->labelsize_max=0; + int width = imgs->width; + int height = imgs->height; + int labelsize = 0; + int current_label = 2; + cnt->current_image->total_labels = 0; + imgs->labelsize_max = 0; /* ALL labels above threshold are counted as labelgroup */ - imgs->labelgroup_max=0; - imgs->labels_above=0; + imgs->labelgroup_max = 0; + imgs->labels_above = 0; /* init: 0 means no label set / not checked */ memset(labels, 0, width*height*sizeof(labels)); pixelpos = 0; - for( iy=0; iy 0) continue; - labelsize=iflood(ix, iy, width, height, out, labels, current_label, 0); + labelsize = iflood(ix, iy, width, height, out, labels, current_label, 0); - if( labelsize > 0 ) { + if (labelsize > 0) { //printf( "Label: %i (%i) Size: %i (%i,%i)\n", current_label, cnt->current_image->total_labels, labelsize, ix, iy ); /* Label above threshold? Mark it again (add 32768 to labelnumber) */ - if (labelsize > cnt->threshold){ - labelsize=iflood(ix, iy, width, height, out, labels, current_label+32768, current_label); - imgs->labelgroup_max+=labelsize; + if (labelsize > cnt->threshold) { + labelsize = iflood(ix, iy, width, height, out, labels, current_label + 32768, current_label); + imgs->labelgroup_max += labelsize; imgs->labels_above++; } - if( imgs->labelsize_max < labelsize ){ - imgs->labelsize_max=labelsize; - imgs->largest_label=current_label; + if (imgs->labelsize_max < labelsize) { + imgs->labelsize_max = labelsize; + imgs->largest_label = current_label; } cnt->current_image->total_labels++; @@ -546,7 +546,7 @@ static int erode9(unsigned char *img, int width, int height, void *buffer, unsig char *Row1,*Row2,*Row3; Row1 = buffer; Row2 = Row1 + width; - Row3 = Row1 + 2*width; + Row3 = Row1 + 2 * width; memset(Row2, flag, width); memcpy(Row3, img, width); for (y = 0; y < height; y++) { @@ -555,7 +555,7 @@ static int erode9(unsigned char *img, int width, int height, void *buffer, unsig if (y == height-1) memset(Row3, flag, width); else - memcpy(Row3, img+(y+1)*width, width); + memcpy(Row3, img + (y+1) * width, width); for (i = width-2; i >= 1; i--) { if (Row1[i-1] == 0 || @@ -571,7 +571,7 @@ static int erode9(unsigned char *img, int width, int height, void *buffer, unsig else sum++; } - img[y*width] = img[y*width+width-1] = flag; + img[y * width] = img[y * width + width - 1] = flag; } return sum; } @@ -583,7 +583,7 @@ static int erode5(unsigned char *img, int width, int height, void *buffer, unsig char *Row1,*Row2,*Row3; Row1 = buffer; Row2 = Row1 + width; - Row3 = Row1 + 2*width; + Row3 = Row1 + 2 * width; memset(Row2, flag, width); memcpy(Row3, img, width); for (y = 0; y < height; y++) { @@ -592,19 +592,19 @@ static int erode5(unsigned char *img, int width, int height, void *buffer, unsig if (y == height-1) memset(Row3, flag, width); else - memcpy(Row3, img+(y+1)*width, width); + memcpy(Row3, img + (y + 1) * width, width); - for (i = width-2; i >= 1; i--) { + for (i = width - 2; i >= 1; i--) { if (Row1[i] == 0 || Row2[i-1] == 0 || Row2[i] == 0 || Row2[i+1] == 0 || Row3[i] == 0) - img[y*width+i] = 0; + img[y * width + i] = 0; else sum++; } - img[y*width] = img[y*width+width-1] = flag; + img[y * width] = img[y * width + width - 1] = flag; } return sum; } @@ -617,33 +617,33 @@ int alg_despeckle(struct context *cnt, int olddiffs) int diffs = 0; unsigned char *out = cnt->imgs.out; int width = cnt->imgs.width; - int height= cnt->imgs.height; + int height = cnt->imgs.height; int done = 0, i, len = strlen(cnt->conf.despeckle); unsigned char *common_buffer = cnt->imgs.common_buffer; for (i = 0; i < len; i++) { switch (cnt->conf.despeckle[i]) { case 'E': - if ((diffs = erode9(out, width, height, common_buffer, 0)) == 0) i=len; - done=1; + if ((diffs = erode9(out, width, height, common_buffer, 0)) == 0) i = len; + done = 1; break; case 'e': - if ((diffs = erode5(out, width, height, common_buffer, 0)) == 0) i=len; - done=1; + if ((diffs = erode5(out, width, height, common_buffer, 0)) == 0) i = len; + done = 1; break; case 'D': diffs = dilate9(out, width, height, common_buffer); - done=1; + done = 1; break; case 'd': diffs = dilate5(out, width, height, common_buffer); - done=1; + done = 1; break; /* no further despeckle after labeling! */ case 'l': diffs = alg_labeling(cnt); - i=len; - done=2; + i = len; + done = 2; break; } } @@ -668,10 +668,9 @@ void alg_tune_smartmask(struct context *cnt) unsigned char *smartmask = cnt->imgs.smartmask; unsigned char *smartmask_final = cnt->imgs.smartmask_final; int *smartmask_buffer = cnt->imgs.smartmask_buffer; - int sensitivity=cnt->lastrate*(11-cnt->smartmask_speed); + int sensitivity = cnt->lastrate * (11 - cnt->smartmask_speed); - for (i=0; i 0) smartmask[i]--; @@ -679,16 +678,16 @@ void alg_tune_smartmask(struct context *cnt) diff = smartmask_buffer[i]/sensitivity; if (diff){ if (smartmask[i] <= diff+80) - smartmask[i]+=diff; + smartmask[i] += diff; else - smartmask[i]=80; - smartmask_buffer[i]%=sensitivity; + smartmask[i] = 80; + smartmask_buffer[i] %= sensitivity; } /* Transfer raw mask to the final stage when above trigger value */ - if (smartmask[i]>20) - smartmask_final[i]=0; + if (smartmask[i] > 20) + smartmask_final[i] = 0; else - smartmask_final[i]=255; + smartmask_final[i] = 255; } /* Further expansion (here:erode due to inverted logic!) of the mask */ diff = erode9(smartmask_final, cnt->imgs.width, cnt->imgs.height, cnt->imgs.common_buffer, 255); @@ -700,21 +699,21 @@ void alg_tune_smartmask(struct context *cnt) int alg_diff_standard (struct context *cnt, unsigned char *new) { - struct images *imgs=&cnt->imgs; - int i, diffs=0; - int noise=cnt->noise; - int smartmask_speed=cnt->smartmask_speed; - unsigned char *ref=imgs->ref; - unsigned char *out=imgs->out; - unsigned char *mask=imgs->mask; - unsigned char *smartmask_final=imgs->smartmask_final; - int *smartmask_buffer=imgs->smartmask_buffer; + struct images *imgs = &cnt->imgs; + int i, diffs = 0; + int noise = cnt->noise; + int smartmask_speed = cnt->smartmask_speed; + unsigned char *ref = imgs->ref; + unsigned char *out = imgs->out; + unsigned char *mask = imgs->mask; + unsigned char *smartmask_final = imgs->smartmask_final; + int *smartmask_buffer = imgs->smartmask_buffer; #ifdef HAVE_MMX mmx_t mmtemp; /* used for transferring to/from memory */ int unload; /* counter for unloading diff counts */ #endif - i=imgs->motionsize; + i = imgs->motionsize; memset(out+i, 128, i/2); /* motion pictures are now b/w i.o. green */ /* Keeping this memset in the MMX case when zeroes are necessarily * written anyway seems to be beneficial in terms of speed. Perhaps a @@ -741,7 +740,7 @@ int alg_diff_standard (struct context *cnt, unsigned char *new) * 255*(noise+1)-1). */ mmtemp.uw[0] = mmtemp.uw[1] = mmtemp.uw[2] = mmtemp.uw[3] = - (unsigned short)(noise * 255 + 254); + (unsigned short)(noise * 255 + 254); /* Reset mm5 to zero, set the mm6 mask, and store the multiplied noise * level as four words in mm7. @@ -756,9 +755,9 @@ int alg_diff_standard (struct context *cnt, unsigned char *new) * in each packed byte, which can hold at most 255 diffs before it * gets saturated. */ - unload=255; + unload = 255; - for (; i>7; i-=8) { + for (; i > 7; i -= 8) { /* Calculate abs(*ref-*new) for 8 pixels in parallel. */ movq_m2r(*ref, mm0); /* U: mm0 = r7 r6 r5 r4 r3 r2 r1 r0 */ pxor_r2r(mm4, mm4); /* V: mm4 = 0 */ @@ -793,9 +792,8 @@ int alg_diff_standard (struct context *cnt, unsigned char *new) pmullw_r2r(mm3, mm1); /* U: mm1 = (d7*m7) ... (d4*m4) */ - mask+=8; - } - else { + mask += 8; + } else { /* Not using mask - multiply the absolute differences by 255. We * do this by left-shifting 8 places and then subtracting dX. */ @@ -854,18 +852,18 @@ int alg_diff_standard (struct context *cnt, unsigned char *new) /* Add to *smartmask_buffer. This is probably the fastest way to do it. */ if (cnt->event_nr != cnt->prev_event) { - if (mmtemp.ub[0]) smartmask_buffer[0]+=SMARTMASK_SENSITIVITY_INCR; - if (mmtemp.ub[1]) smartmask_buffer[1]+=SMARTMASK_SENSITIVITY_INCR; - if (mmtemp.ub[2]) smartmask_buffer[2]+=SMARTMASK_SENSITIVITY_INCR; - if (mmtemp.ub[3]) smartmask_buffer[3]+=SMARTMASK_SENSITIVITY_INCR; - if (mmtemp.ub[4]) smartmask_buffer[4]+=SMARTMASK_SENSITIVITY_INCR; - if (mmtemp.ub[5]) smartmask_buffer[5]+=SMARTMASK_SENSITIVITY_INCR; - if (mmtemp.ub[6]) smartmask_buffer[6]+=SMARTMASK_SENSITIVITY_INCR; - if (mmtemp.ub[7]) smartmask_buffer[7]+=SMARTMASK_SENSITIVITY_INCR; + if (mmtemp.ub[0]) smartmask_buffer[0] += SMARTMASK_SENSITIVITY_INCR; + if (mmtemp.ub[1]) smartmask_buffer[1] += SMARTMASK_SENSITIVITY_INCR; + if (mmtemp.ub[2]) smartmask_buffer[2] += SMARTMASK_SENSITIVITY_INCR; + if (mmtemp.ub[3]) smartmask_buffer[3] += SMARTMASK_SENSITIVITY_INCR; + if (mmtemp.ub[4]) smartmask_buffer[4] += SMARTMASK_SENSITIVITY_INCR; + if (mmtemp.ub[5]) smartmask_buffer[5] += SMARTMASK_SENSITIVITY_INCR; + if (mmtemp.ub[6]) smartmask_buffer[6] += SMARTMASK_SENSITIVITY_INCR; + if (mmtemp.ub[7]) smartmask_buffer[7] += SMARTMASK_SENSITIVITY_INCR; } - smartmask_buffer+=8; - smartmask_final+=8; + smartmask_buffer += 8; + smartmask_final += 8; } movq_m2r(*new, mm2); /* U: mm1 = n7 n6 n5 n4 n3 n2 n1 n0 */ @@ -885,28 +883,28 @@ int alg_diff_standard (struct context *cnt, unsigned char *new) /* Every 255th turn, we need to unload mm5 into the diffs variable, * because otherwise the packed bytes will get saturated. */ - if (--unload==0) { + if (--unload == 0) { /* Unload mm5 to memory and reset it. */ movq_r2m(mm5, mmtemp); /* U */ pxor_r2r(mm5, mm5); /* V: mm5 = 0 */ diffs += mmtemp.ub[0] + mmtemp.ub[1] + mmtemp.ub[2] + mmtemp.ub[3] + - mmtemp.ub[4] + mmtemp.ub[5] + mmtemp.ub[6] + mmtemp.ub[7]; - unload=255; + mmtemp.ub[4] + mmtemp.ub[5] + mmtemp.ub[6] + mmtemp.ub[7]; + unload = 255; } - out+=8; - ref+=8; - new+=8; + out += 8; + ref += 8; + new += 8; } /* Check if there are diffs left in mm5 that need to be copied to the * diffs variable. */ - if (unload<255) { + if (unload < 255) { movq_r2m(mm5, mmtemp); diffs += mmtemp.ub[0] + mmtemp.ub[1] + mmtemp.ub[2] + mmtemp.ub[3] + - mmtemp.ub[4] + mmtemp.ub[5] + mmtemp.ub[6] + mmtemp.ub[7]; + mmtemp.ub[4] + mmtemp.ub[5] + mmtemp.ub[6] + mmtemp.ub[7]; } emms(); @@ -917,11 +915,11 @@ int alg_diff_standard (struct context *cnt, unsigned char *new) * case the non-MMX code needs to take care of the remaining pixels. */ - for (; i>0; i--) { - register unsigned char curdiff=(int)(abs(*ref - *new)); /* using a temp variable is 12% faster */ + for (; i > 0; i--) { + register unsigned char curdiff = (int)(abs(*ref - *new)); /* using a temp variable is 12% faster */ /* apply fixed mask */ if (mask) - curdiff=((int)(curdiff * *mask++)/255); + curdiff = ((int)(curdiff * *mask++) / 255); if (smartmask_speed) { if (curdiff > noise) { @@ -934,14 +932,14 @@ int alg_diff_standard (struct context *cnt, unsigned char *new) (*smartmask_buffer) += SMARTMASK_SENSITIVITY_INCR; /* apply smart_mask */ if (!*smartmask_final) - curdiff=0; + curdiff = 0; } smartmask_final++; smartmask_buffer++; } /* Pixel still in motion after all the masks? */ if (curdiff > noise) { - *out=*new; + *out = *new; diffs++; } out++; @@ -956,26 +954,26 @@ int alg_diff_standard (struct context *cnt, unsigned char *new) */ static char alg_diff_fast(struct context *cnt, int max_n_changes, unsigned char *new) { - struct images *imgs=&cnt->imgs; - int i, diffs=0, step=imgs->motionsize/10000; - int noise=cnt->noise; - unsigned char *ref=imgs->ref; + struct images *imgs = &cnt->imgs; + int i, diffs = 0, step = imgs->motionsize/10000; + int noise = cnt->noise; + unsigned char *ref = imgs->ref; - if (!step%2) + if (!step % 2) step++; /* we're checking only 1 of several pixels */ max_n_changes /= step; - i=imgs->motionsize; - for (; i>0; i-=step) { - register unsigned char curdiff=(int)(abs((char)(*ref-*new))); /* using a temp variable is 12% faster */ + i = imgs->motionsize; + for (; i > 0; i -= step) { + register unsigned char curdiff = (int)(abs((char)(*ref - *new))); /* using a temp variable is 12% faster */ if (curdiff > noise) { diffs++; if (diffs > max_n_changes) return 1; } - ref+=step; - new+=step; + ref += step; + new += step; } return 0; @@ -986,10 +984,10 @@ static char alg_diff_fast(struct context *cnt, int max_n_changes, unsigned char */ int alg_diff(struct context *cnt, unsigned char *new) { - int diffs=0; + int diffs = 0; - if (alg_diff_fast(cnt, cnt->conf.max_changes/2, new)) - diffs=alg_diff_standard(cnt, new); + if (alg_diff_fast(cnt, cnt->conf.max_changes / 2, new)) + diffs = alg_diff_standard(cnt, new); return diffs; } @@ -1000,7 +998,7 @@ int alg_diff(struct context *cnt, unsigned char *new) */ int alg_lightswitch(struct context *cnt, int diffs) { - struct images *imgs=&cnt->imgs; + struct images *imgs = &cnt->imgs; if (cnt->conf.lightswitch < 0) cnt->conf.lightswitch = 0; @@ -1019,29 +1017,29 @@ int alg_switchfilter(struct context *cnt, int diffs, unsigned char *newimg) int linediff = diffs / cnt->imgs.height; unsigned char *out = cnt->imgs.out; int y, x, line; - int lines=0, vertlines=0; + int lines = 0, vertlines = 0; - for (y=0; y < cnt->imgs.height; y++) { - line=0; - for (x=0; x < cnt->imgs.width; x++) { + for (y = 0; y < cnt->imgs.height; y++) { + line = 0; + for (x = 0; x < cnt->imgs.width; x++) { if (*(out++)) { line++; } } - if (line > cnt->imgs.width/18) { + if (line > cnt->imgs.width / 18) { vertlines++; } - if (line > linediff*2) { + if (line > linediff * 2) { lines++; } } - if (vertlines > cnt->imgs.height/10 && lines < vertlines/3 && - (vertlines > cnt->imgs.height/4 || lines - vertlines > lines/2)) { + if (vertlines > cnt->imgs.height / 10 && lines < vertlines / 3 && + (vertlines > cnt->imgs.height / 4 || lines - vertlines > lines / 2)) { if (cnt->conf.text_changes) { char tmp[80]; sprintf(tmp, "%d %d", lines, vertlines); - draw_text(newimg, cnt->imgs.width-10, 20, cnt->imgs.width, tmp, cnt->conf.text_double); + draw_text(newimg, cnt->imgs.width - 10, 20, cnt->imgs.width, tmp, cnt->conf.text_double); } return diffs; } diff --git a/conf.c b/conf.c index aaa429a3..bb06ab16 100644 --- a/conf.c +++ b/conf.c @@ -1351,30 +1351,30 @@ config_param config_params[] = { */ static void conf_cmdline (struct context *cnt, short int thread) { - struct config *conf=&cnt->conf; + struct config *conf = &cnt->conf; int c; /* For the string options, we free() if necessary and malloc() * if necessary. This is accomplished by calling mystrcpy(); * see this function for more information. */ - while ((c=getopt(conf->argc, conf->argv, "c:d:hns?p:"))!=EOF) + while ((c = getopt(conf->argc, conf->argv, "c:d:hns?p:")) != EOF) switch (c) { case 'c': - if (thread==-1) strcpy(cnt->conf_filename, optarg); + if (thread == -1) strcpy(cnt->conf_filename, optarg); break; case 'n': - cnt->daemon=0; + cnt->daemon = 0; break; case 's': - conf->setup_mode=1; + conf->setup_mode = 1; break; case 'd': /* no validation - just take what user gives */ debug_level = (unsigned short int)atoi(optarg); break; case 'p': - if (thread==-1) strcpy(cnt->pid_file, optarg); + if (thread == -1) strcpy(cnt->pid_file, optarg); break; case 'h': case '?': @@ -1382,7 +1382,7 @@ static void conf_cmdline (struct context *cnt, short int thread) usage(); exit(1); } - optind=1; + optind = 1; } @@ -1406,7 +1406,7 @@ struct context **conf_cmdparse(struct context **cnt, const char *cmd, const char if(!strncasecmp(cmd, config_params[i].param_name , 255 + 50)) { // Why +50? /* if config_param is string we don't want to check arg1 */ - if (strcmp(config_type(&config_params[i]),"string")) { + if (strcmp(config_type(&config_params[i]), "string")) { if(config_params[i].conf_value && !arg1) return cnt; } @@ -1423,14 +1423,14 @@ struct context **conf_cmdparse(struct context **cnt, const char *cmd, const char * config_params[i].conf_value - an integer value which is a pointer * to the context structure member relative to the pointer cnt. */ - cnt=config_params[i].copy( cnt, arg1, config_params[i].conf_value ); + cnt = config_params[i].copy( cnt, arg1, config_params[i].conf_value); return cnt; } i++; } /* We reached the end of config_params without finding a matching option */ - motion_log(LOG_ERR, 0, "Unknown config option \"%s\"",cmd); + motion_log(LOG_ERR, 0, "Unknown config option \"%s\"", cmd); return cnt; } @@ -1484,7 +1484,7 @@ static struct context **conf_process(struct context **cnt, FILE *fp) /* trim space between command and argument */ beg++; - if (strlen(beg) > 0){ + if (strlen(beg) > 0) { while (*beg == ' ' || *beg == '\t' || *beg == '=' || *beg == '\n' || *beg == '\r') { beg++; } @@ -1520,16 +1520,16 @@ void conf_print(struct context **cnt) unsigned short int i, thread; FILE *conffile; - for (thread=0; cnt[thread]; thread++) { - motion_log(LOG_INFO, 0, "Writing config file to %s",cnt[thread]->conf_filename); - conffile=myfopen(cnt[thread]->conf_filename, "w"); + for (thread = 0; cnt[thread]; thread++) { + motion_log(LOG_INFO, 0, "Writing config file to %s", cnt[thread]->conf_filename); + conffile = myfopen(cnt[thread]->conf_filename, "w"); if (!conffile) continue; fprintf(conffile, "# %s\n", cnt[thread]->conf_filename); fprintf(conffile, "#\n# This config file was generated by motion " VERSION "\n"); fprintf(conffile, "\n\n"); - for (i=0; config_params[i].param_name; i++) { - retval=config_params[i].print(cnt, NULL, i, thread); + for (i = 0; config_params[i].param_name; i++) { + retval = config_params[i].print(cnt, NULL, i, thread); /*If config parameter has a value (not NULL) print it to the config file*/ if (retval) { fprintf(conffile, "%s\n", config_params[i].param_help); @@ -1547,21 +1547,21 @@ void conf_print(struct context **cnt) Else write the disabled option to the config file but with a comment mark in front of the parameter name */ if (val) { - fprintf(conffile,"%s\n", config_params[i].param_help); + fprintf(conffile, "%s\n", config_params[i].param_help); fprintf(conffile, "%s\n", val); - if (strlen(val)==0) - fprintf(conffile,"; thread /usr/local/etc/thread1.conf\n"); + if (strlen(val) == 0) + fprintf(conffile, "; thread /usr/local/etc/thread1.conf\n"); free(val); - } else if (thread==0) { - fprintf(conffile,"%s\n", config_params[i].param_help); - fprintf(conffile,"; %s value\n\n", config_params[i].param_name); + } else if (thread == 0) { + fprintf(conffile, "%s\n", config_params[i].param_help); + fprintf(conffile, "; %s value\n\n", config_params[i].param_name); } } } fprintf(conffile, "\n"); fclose(conffile); - conffile=NULL; + conffile = NULL; } } @@ -1585,7 +1585,7 @@ void conf_print(struct context **cnt) **************************************************************************/ struct context ** conf_load (struct context **cnt) { - FILE *fp=NULL; + FILE *fp = NULL; char filename[PATH_MAX]; int i; /* We preserve argc and argv because they get overwritten by the memcpy command */ @@ -1622,15 +1622,15 @@ struct context ** conf_load (struct context **cnt) cnt[0]->pid_file[0] = 0; conf_cmdline(cnt[0], -1); - if (cnt[0]->conf_filename[0]){ /* User has supplied filename on commandline*/ + if (cnt[0]->conf_filename[0]) { /* User has supplied filename on commandline*/ strcpy(filename, cnt[0]->conf_filename); fp = fopen (filename, "r"); } - if (!fp){ /* Commandline didn't work, try current dir */ + if (!fp) { /* Commandline didn't work, try current dir */ char *path = NULL; if (cnt[0]->conf_filename[0]) motion_log(-1, 1, "Configfile %s not found - trying defaults.", filename); - if ( (path = get_current_dir_name()) == NULL){ + if ( (path = get_current_dir_name()) == NULL) { motion_log(LOG_ERR, 1, "Error get_current_dir_name"); exit(-1); } @@ -1645,17 +1645,17 @@ struct context ** conf_load (struct context **cnt) snprintf(filename, PATH_MAX, "%s/motion.conf", sysconfdir); fp = fopen(filename, "r"); if (!fp) /* there is no config file.... use defaults */ - motion_log(-1, 1, "could not open configfile %s",filename); + motion_log(-1, 1, "could not open configfile %s", filename); } } /* Now we process the motion.conf config file and close it*/ if (fp) { strcpy(cnt[0]->conf_filename, filename); - motion_log(LOG_INFO, 0, "Processing thread 0 - config file %s",filename); - cnt=conf_process(cnt, fp); + motion_log(LOG_INFO, 0, "Processing thread 0 - config file %s", filename); + cnt = conf_process(cnt, fp); fclose(fp); - }else{ + } else { motion_log(LOG_INFO, 0, "Not config file to process using default values"); } @@ -1668,7 +1668,7 @@ struct context ** conf_load (struct context **cnt) * so we go through each thread and overrides any set command line * options */ - i=-1; + i = -1; while(cnt[++i]) conf_cmdline(cnt[i], i); @@ -1744,7 +1744,7 @@ static struct context **copy_bool (struct context **cnt, const char *str, int va i=-1; while(cnt[++i]) { tmp = (char *)cnt[i]+(int)val_ptr; - if ( !strcmp(str, "1") || !strcasecmp(str, "yes") || !strcasecmp(str,"on")) { + if ( !strcmp(str, "1") || !strcasecmp(str, "yes") || !strcasecmp(str, "on")) { *((int *)tmp) = 1; } else { *((int *)tmp) = 0; @@ -1898,7 +1898,7 @@ const char *config_type(config_param *configparam) static const char *print_bool(struct context **cnt, char **str ATTRIBUTE_UNUSED, int parm, unsigned short int threadnr) { - int val=config_params[parm].conf_value; + int val = config_params[parm].conf_value; if (threadnr && *(int*)((char *)cnt[threadnr] + val) == *(int*)((char *)cnt[0] + val)) @@ -1920,7 +1920,7 @@ static const char *print_string(struct context **cnt, char **str ATTRIBUTE_UNUSED, int parm, unsigned short int threadnr) { - int val=config_params[parm].conf_value; + int val = config_params[parm].conf_value; const char **cptr0, **cptr1; /* strcmp does not like NULL so we have to check for this also */ @@ -1966,7 +1966,7 @@ static const char *print_thread(struct context **cnt, char **str, int parm ATTRIBUTE_UNUSED, unsigned short int threadnr) { char *retval; - unsigned short int i=0; + unsigned short int i = 0; if (!str || threadnr) return NULL; @@ -2001,9 +2001,9 @@ static struct context **config_thread(struct context **cnt, const char *str, if (cnt[0]->threadnr) return cnt; - fp=fopen(str, "r"); + fp = fopen(str, "r"); if (!fp) { - motion_log(LOG_ERR, 1, "Thread config file %s not found",str); + motion_log(LOG_ERR, 1, "Thread config file %s not found", str); return cnt; } diff --git a/conf.h b/conf.h index b10d28f1..25c1cbc7 100644 --- a/conf.h +++ b/conf.h @@ -135,12 +135,12 @@ typedef const char *(* conf_print_func)(struct context **, char **, int, unsigne * description for parameters in the config file */ typedef struct { - const char * param_name; /* name for this parameter */ - const char * param_help; /* short explanation for parameter */ - unsigned short int main_thread; /* belong only to main thread when value>0 */ - int conf_value; /* pointer to a field in struct context */ - conf_copy_func copy; /* a function to set the value in 'config' */ - conf_print_func print; /* a function to output the value to a file */ + const char *param_name; /* name for this parameter */ + const char *param_help; /* short explanation for parameter */ + unsigned short int main_thread; /* belong only to main thread when value>0 */ + int conf_value; /* pointer to a field in struct context */ + conf_copy_func copy; /* a function to set the value in 'config' */ + conf_print_func print; /* a function to output the value to a file */ } config_param; diff --git a/configure b/configure index 8d9b0774..a0c0a12d 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.61 for motion trunk-r339. +# Generated by GNU Autoconf 2.61 for motion trunk-r343. # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. @@ -572,8 +572,8 @@ SHELL=${CONFIG_SHELL-/bin/sh} # Identity of this package. PACKAGE_NAME='motion' PACKAGE_TARNAME='motion' -PACKAGE_VERSION='trunk-r339' -PACKAGE_STRING='motion trunk-r339' +PACKAGE_VERSION='trunk-r343' +PACKAGE_STRING='motion trunk-r343' PACKAGE_BUGREPORT='' ac_unique_file="motion.c" @@ -1178,7 +1178,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures motion trunk-r339 to adapt to many kinds of systems. +\`configure' configures motion trunk-r343 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1239,7 +1239,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of motion trunk-r339:";; + short | recursive ) echo "Configuration of motion trunk-r343:";; esac cat <<\_ACEOF @@ -1375,7 +1375,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -motion configure trunk-r339 +motion configure trunk-r343 generated by GNU Autoconf 2.61 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, @@ -1389,7 +1389,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by motion $as_me trunk-r339, which was +It was created by motion $as_me trunk-r343, which was generated by GNU Autoconf 2.61. Invocation command line was $ $0 $@ @@ -7108,7 +7108,7 @@ rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ if test "${DEVELOPER_FLAGS}" = "yes"; then - TEMP_CFLAGS="${TEMP_CFLAGS} -W -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -Waggregate-return -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs -Winline -Wredundant-decls -Wno-long-long" + TEMP_CFLAGS="${TEMP_CFLAGS} -W -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -Waggregate-return -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs -Winline -Wredundant-decls -Wno-long-long -gdwarf-2 -g3" fi CFLAGS="${TEMP_CFLAGS} $UNAME_DEFS $CPU_OPTIONS" @@ -7538,7 +7538,7 @@ exec 6>&1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by motion $as_me trunk-r339, which was +This file was extended by motion $as_me trunk-r343, which was generated by GNU Autoconf 2.61. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -7587,7 +7587,7 @@ Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ -motion config.status trunk-r339 +motion config.status trunk-r343 configured by $0, generated by GNU Autoconf 2.61, with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" diff --git a/configure.in b/configure.in index ff9194de..d1d242ef 100644 --- a/configure.in +++ b/configure.in @@ -1085,7 +1085,7 @@ AC_LINK_IFELSE([ if test "${DEVELOPER_FLAGS}" = "yes"; then - TEMP_CFLAGS="${TEMP_CFLAGS} -W -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -Waggregate-return -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs -Winline -Wredundant-decls -Wno-long-long" + TEMP_CFLAGS="${TEMP_CFLAGS} -W -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -Waggregate-return -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs -Winline -Wredundant-decls -Wno-long-long -gdwarf-2 -g3" fi CFLAGS="${TEMP_CFLAGS} $UNAME_DEFS $CPU_OPTIONS" diff --git a/draw.c b/draw.c index 9bc6ba35..88e65d73 100644 --- a/draw.c +++ b/draw.c @@ -1081,26 +1081,26 @@ static int draw_textn (unsigned char *image, int startx, int starty, int width, int pos, x, y, line_offset, next_char_offs; unsigned char *image_ptr, *char_ptr, **char_arr_ptr; - if (startx>width/2) - startx -= len*(6*(factor+1)); + if (startx > width / 2) + startx -= len * (6 * (factor + 1)); if (startx < 0) startx = 0; - if (startx+len*6*(factor+1) >= width) + if (startx + len * 6 * (factor + 1) >= width) len = (width-startx-1)/(6*(factor+1)); - line_offset = width - 7*(factor+1); - next_char_offs = width*8*(factor+1) - 6*(factor+1); + line_offset = width - 7 * (factor + 1); + next_char_offs = width * 8 * (factor + 1) - 6 * (factor + 1); - image_ptr = image + startx + starty*width; + image_ptr = image + startx + starty * width; char_arr_ptr = factor ? big_char_arr_ptr : small_char_arr_ptr; for (pos = 0; pos < len; pos++) { char_ptr = char_arr_ptr[(int)text[pos]]; - for (y=8*(factor+1); y--;) { - for (x=7*(factor+1); x--;) { + for (y = 8 * (factor + 1); y--; ) { + for (x = 7 * (factor + 1); x--; ) { switch(*char_ptr) { case 1: *image_ptr = 0; @@ -1149,13 +1149,13 @@ int draw_text (unsigned char *image, int startx, int starty, int width, const ch int initialize_chars(void) { - unsigned int i=0, x, y; + unsigned int i = 0, x, y; /* Fill the structure 'big_table' with double sized characters. */ while(draw_table[i].ascii) { big_table[i].ascii = draw_table[i].ascii; - for(x=0; x < 14; x++) { - for(y=0; y < 16; y++) { + for(x = 0; x < 14; x++) { + for(y = 0; y < 16; y++) { big_table[i].pix[y][x] = draw_table[i].pix[y/2][x/2]; } } @@ -1163,15 +1163,15 @@ int initialize_chars(void) } /* first init all char ptr's to a space character */ - for (i=0; i < ASCII_MAX; i++) { - small_char_arr_ptr[i]=&draw_table[0].pix[0][0]; - big_char_arr_ptr[i]=&big_table[0].pix[0][0]; + for (i = 0; i < ASCII_MAX; i++) { + small_char_arr_ptr[i] = &draw_table[0].pix[0][0]; + big_char_arr_ptr[i] = &big_table[0].pix[0][0]; } /* build [big_]char_arr_ptr table to point to each available ascii */ - for (i=0; i < sizeof(draw_table) / sizeof(struct draw_char); i++) { - small_char_arr_ptr[(int)draw_table[i].ascii]=&draw_table[i].pix[0][0]; - big_char_arr_ptr[(int)draw_table[i].ascii]=&big_table[i].pix[0][0]; + for (i = 0; i < sizeof(draw_table) / sizeof(struct draw_char); i++) { + small_char_arr_ptr[(int)draw_table[i].ascii] = &draw_table[i].pix[0][0]; + big_char_arr_ptr[(int)draw_table[i].ascii] = &big_table[i].pix[0][0]; } return 0; } diff --git a/event.c b/event.c index c31ee4e9..24e2b28a 100644 --- a/event.c +++ b/event.c @@ -10,7 +10,6 @@ */ #include "ffmpeg.h" /* must be first to avoid 'shadow' warning */ -//#include "motion.h" #include "picture.h" /* already includes motion.h */ #include "event.h" #if (!defined(BSD)) @@ -340,8 +339,8 @@ static void event_camera_lost(struct context *cnt, int type ATTRIBUTE_UNUSED, #ifdef HAVE_FFMPEG static void grey2yuv420p(unsigned char *u, unsigned char *v, int width, int height) { - memset(u, 128, width*height/4); - memset(v, 128, width*height/4); + memset(u, 128, width * height / 4); + memset(v, 128, width * height / 4); } static void on_movie_end_command(struct context *cnt, int type ATTRIBUTE_UNUSED, @@ -358,8 +357,8 @@ static void event_ffmpeg_newfile(struct context *cnt, int type ATTRIBUTE_UNUSED, unsigned char *img, char *dummy1 ATTRIBUTE_UNUSED, void *dummy2 ATTRIBUTE_UNUSED, struct tm *currenttime_tm) { - int width=cnt->imgs.width; - int height=cnt->imgs.height; + int width = cnt->imgs.width; + int height = cnt->imgs.height; unsigned char *convbuf, *y, *u, *v; char stamp[PATH_MAX]; const char *mpegpath; @@ -371,7 +370,7 @@ static void event_ffmpeg_newfile(struct context *cnt, int type ATTRIBUTE_UNUSED, cnt->movie_fps = cnt->lastrate; if (debug_level >= CAMERA_DEBUG) - motion_log(LOG_DEBUG, 0, "%s FPS %d",__FUNCTION__,cnt->movie_fps); + motion_log(LOG_DEBUG, 0, "%s FPS %d", __FUNCTION__, cnt->movie_fps); if (cnt->movie_fps > 30) cnt->movie_fps = 30; @@ -393,41 +392,41 @@ static void event_ffmpeg_newfile(struct context *cnt, int type ATTRIBUTE_UNUSED, snprintf(cnt->newfilename, PATH_MAX - 4, "%s/%s", cnt->conf.filepath, stamp); if (cnt->conf.ffmpeg_cap_new) { - if (cnt->imgs.type==VIDEO_PALETTE_GREY) { - convbuf=mymalloc((width*height)/2); - y=img; - u=convbuf; - v=convbuf+(width*height)/4; + if (cnt->imgs.type == VIDEO_PALETTE_GREY) { + convbuf = mymalloc((width * height) / 2); + y = img; + u = convbuf; + v = convbuf + (width * height) / 4; grey2yuv420p(u, v, width, height); } else { - convbuf=NULL; - y=img; - u=img+width*height; - v=u+(width*height)/4; + convbuf = NULL; + y = img; + u = img + width * height; + v = u + (width * height) / 4; } if ( (cnt->ffmpeg_new = ffmpeg_open((char *)cnt->conf.ffmpeg_video_codec, cnt->newfilename, y, u, v, cnt->imgs.width, cnt->imgs.height, cnt->movie_fps, cnt->conf.ffmpeg_bps, cnt->conf.ffmpeg_vbr)) == NULL) { - motion_log(LOG_ERR, 1, "ffopen_open error creating (new) file [%s]",cnt->newfilename); - cnt->finish=1; + motion_log(LOG_ERR, 1, "ffopen_open error creating (new) file [%s]", cnt->newfilename); + cnt->finish = 1; return; } - ((struct ffmpeg *)cnt->ffmpeg_new)->udata=convbuf; + ((struct ffmpeg *)cnt->ffmpeg_new)->udata = convbuf; event(cnt, EVENT_FILECREATE, NULL, cnt->newfilename, (void *)FTYPE_MPEG, NULL); } if (cnt->conf.ffmpeg_cap_motion) { - if (cnt->imgs.type==VIDEO_PALETTE_GREY) { - convbuf=mymalloc((width*height)/2); - y=cnt->imgs.out; - u=convbuf; - v=convbuf+(width*height)/4; + if (cnt->imgs.type == VIDEO_PALETTE_GREY) { + convbuf = mymalloc((width * height) / 2); + y = cnt->imgs.out; + u = convbuf; + v = convbuf + (width * height) / 4; grey2yuv420p(u, v, width, height); } else { - y=cnt->imgs.out; - u=cnt->imgs.out+width*height; - v=u+(width*height)/4; - convbuf=NULL; + y = cnt->imgs.out; + u = cnt->imgs.out + width *height; + v = u + (width * height) / 4; + convbuf = NULL; } if ( (cnt->ffmpeg_motion = @@ -435,10 +434,10 @@ static void event_ffmpeg_newfile(struct context *cnt, int type ATTRIBUTE_UNUSED, cnt->imgs.width, cnt->imgs.height, cnt->movie_fps, cnt->conf.ffmpeg_bps, cnt->conf.ffmpeg_vbr)) == NULL){ motion_log(LOG_ERR, 1, "ffopen_open error creating (motion) file [%s]", cnt->motionfilename); - cnt->finish=1; + cnt->finish = 1; return; } - cnt->ffmpeg_motion->udata=convbuf; + cnt->ffmpeg_motion->udata = convbuf; event(cnt, EVENT_FILECREATE, NULL, cnt->motionfilename, (void *)FTYPE_MPEG_MOTION, NULL); } } @@ -469,16 +468,16 @@ static void event_ffmpeg_timelapse(struct context *cnt, snprintf(cnt->timelapsefilename, PATH_MAX - 4, "%s/%s", cnt->conf.filepath, tmp); if (cnt->imgs.type == VIDEO_PALETTE_GREY) { - convbuf = mymalloc((width*height)/2); + convbuf = mymalloc((width * height) / 2); y = img; u = convbuf; - v = convbuf+(width*height)/4; + v = convbuf + (width * height) / 4; grey2yuv420p(u, v, width, height); } else { convbuf = NULL; y = img; - u = img+width*height; - v = u+(width*height)/4; + u = img + width * height; + v = u + (width * height) / 4; } if ( (cnt->ffmpeg_timelapse = @@ -486,7 +485,7 @@ static void event_ffmpeg_timelapse(struct context *cnt, cnt->imgs.width, cnt->imgs.height, 24, cnt->conf.ffmpeg_bps, cnt->conf.ffmpeg_vbr)) == NULL) { motion_log(LOG_ERR, 1, "ffopen_open error creating (timelapse) file [%s]", cnt->timelapsefilename); - cnt->finish=1; + cnt->finish = 1; return; } @@ -499,7 +498,7 @@ static void event_ffmpeg_timelapse(struct context *cnt, if (cnt->imgs.type == VIDEO_PALETTE_GREY) u = cnt->ffmpeg_timelapse->udata; else - u = img+width*height; + u = img + width * height; v = u+(width*height)/4; if (ffmpeg_put_other_image(cnt->ffmpeg_timelapse, y, u, v) == -1){ @@ -515,8 +514,8 @@ static void event_ffmpeg_put(struct context *cnt, int type ATTRIBUTE_UNUSED, { if (cnt->ffmpeg_new) { - int width=cnt->imgs.width; - int height=cnt->imgs.height; + int width = cnt->imgs.width; + int height = cnt->imgs.height; unsigned char *y = img; unsigned char *u, *v; diff --git a/ffmpeg.c b/ffmpeg.c index 06f0d165..c1556568 100644 --- a/ffmpeg.c +++ b/ffmpeg.c @@ -382,7 +382,7 @@ struct ffmpeg *ffmpeg_open(char *ffmpeg_video_codec, char *filename, #endif /* LIBAVCODEC_BUILD >= 4754 */ if (debug_level >= CAMERA_DEBUG) - motion_log(LOG_DEBUG, 0, "%s FPS %d",__FUNCTION__,rate); + motion_log(LOG_DEBUG, 0, "%s FPS %d", __FUNCTION__, rate); if (vbr) c->flags |= CODEC_FLAG_QSCALE; @@ -489,7 +489,7 @@ struct ffmpeg *ffmpeg_open(char *ffmpeg_video_codec, char *filename, /* and retry opening the file (use file_proto) */ if (url_fopen(&ffmpeg->oc->pb, file_proto, URL_WRONLY) < 0) { - motion_log(LOG_ERR, 1, "url_fopen - error opening file %s",filename); + motion_log(LOG_ERR, 1, "url_fopen - error opening file %s", filename); ffmpeg_cleanups(ffmpeg); return (NULL); } @@ -735,8 +735,8 @@ void ffmpeg_deinterlace(unsigned char *img, int width, int height) } picture->data[0] = img; - picture->data[1] = img+width*height; - picture->data[2] = picture->data[1]+(width*height)/4; + picture->data[1] = img + width * height; + picture->data[2] = picture->data[1] + (width * height) / 4; picture->linesize[0] = width; picture->linesize[1] = width2; picture->linesize[2] = width2; diff --git a/motion.c b/motion.c index 3b8ffe25..121f587e 100644 --- a/motion.c +++ b/motion.c @@ -48,7 +48,7 @@ pthread_mutex_t global_lock; * * List of context structures, one for each main Motion thread. */ -struct context **cnt_list=NULL; +struct context **cnt_list = NULL; /** * threads_running @@ -56,7 +56,7 @@ struct context **cnt_list=NULL; * Keeps track of number of Motion threads currently running. Also used * by 'main' to know when all threads have exited. */ -volatile int threads_running=0; +volatile int threads_running = 0; /* * debug_level is for developers, normally used to control which @@ -66,7 +66,7 @@ unsigned short int debug_level; /* Set this when we want main to end or restart */ -volatile unsigned short int finish=0; +volatile unsigned short int finish = 0; /** * restart @@ -75,7 +75,7 @@ volatile unsigned short int finish=0; * finished running, 'main' checks if 'restart' is true and if so starts * up again (instead of just quitting). */ -unsigned short int restart=0; +unsigned short int restart = 0; /** * image_ring_resize @@ -288,7 +288,7 @@ static void sig_handler(int signo) i = -1; while (cnt_list[++i]) { if (cnt_list[i]->conf.snapshot_interval) { - cnt_list[i]->snapshot=1; + cnt_list[i]->snapshot = 1; } } } @@ -299,7 +299,7 @@ static void sig_handler(int signo) if (cnt_list) { i = -1; while (cnt_list[++i]) - cnt_list[i]->makemovie=1; + cnt_list[i]->makemovie = 1; } break; case SIGHUP: @@ -315,12 +315,12 @@ static void sig_handler(int signo) if (cnt_list) { i = -1; while (cnt_list[++i]) { - cnt_list[i]->makemovie=1; - cnt_list[i]->finish=1; + cnt_list[i]->makemovie = 1; + cnt_list[i]->finish = 1; /* don't restart thread when it ends, * all threads restarts if global restart is set */ - cnt_list[i]->restart=0; + cnt_list[i]->restart = 0; } } /* Set flag we want to quit main check threads loop @@ -676,7 +676,7 @@ static int motion_init(struct context *cnt) for (i = 0; i < 5; i++) { if (vid_next(cnt, cnt->imgs.image_virgin) == 0) break; - SLEEP(2,0); + SLEEP(2, 0); } if (i >= 5) { memset(cnt->imgs.image_virgin, 0x80, cnt->imgs.size); /* initialize to grey */ @@ -795,7 +795,7 @@ static int motion_init(struct context *cnt) motion_log(LOG_INFO, 0, "Maskfile \"%s\" loaded.",cnt->conf.mask_file); } } else - cnt->imgs.mask=NULL; + cnt->imgs.mask = NULL; /* Always initialize smart_mask - someone could turn it on later... */ memset(cnt->imgs.smartmask, 0, cnt->imgs.motionsize); @@ -950,10 +950,10 @@ static void *motion_loop(void *arg) unsigned short int get_image = 1; /* Flag used to signal that we capture new image when we run the loop */ /* Next two variables are used for snapshot and timelapse feature - * time_last_frame is set to 1 so that first coming timelapse or second=0 + * time_last_frame is set to 1 so that first coming timelapse or second = 0 * is acted upon. */ - unsigned long int time_last_frame=1, time_current_frame; + unsigned long int time_last_frame = 1, time_current_frame; cnt->running = 1; @@ -991,8 +991,8 @@ static void *motion_loop(void *arg) rolling_average_data = mymalloc(sizeof(rolling_average_data) * rolling_average_limit); /* Preset history buffer with expected frame rate */ - for (j=0; j< rolling_average_limit; j++) - rolling_average_data[j]=required_frame_time; + for (j = 0; j < rolling_average_limit; j++) + rolling_average_data[j] = required_frame_time; /* MAIN MOTION LOOP BEGINS HERE */ @@ -1868,7 +1868,7 @@ static void *motion_loop(void *arg) /* Calculate 10 second average and use deviation in delay calculation */ rolling_average = 0L; - for (j=0; j < rolling_average_limit; j++) + for (j = 0; j < rolling_average_limit; j++) rolling_average += rolling_average_data[j]; rolling_average /= rolling_average_limit; @@ -1907,7 +1907,7 @@ err: pthread_mutex_unlock(&global_lock); if (!cnt->restart) - cnt->watchdog=WATCHDOG_OFF; + cnt->watchdog = WATCHDOG_OFF; cnt->running = 0; cnt->finish = 0; @@ -2179,7 +2179,7 @@ static void start_motion_thread(struct context *cnt, pthread_attr_t *thread_attr /* Check the webcam port number for conflicts. * First we check for conflict with the control port. * Second we check for that two threads does not use the same port number - * for the webcam. If a duplicate port is found the webcam feature gets disabled (port =0) + * for the webcam. If a duplicate port is found the webcam feature gets disabled (port = 0) * for this thread and a warning is written to console and syslog. */ @@ -2292,7 +2292,7 @@ int main (int argc, char **argv) restart = 0; /* only one reset for now */ motion_log(LOG_INFO,0,"motion restarted"); #ifndef WITHOUT_V4L - SLEEP(5,0); // maybe some cameras needs less time + SLEEP(5, 0); // maybe some cameras needs less time #endif motion_startup(0, argc, argv); /* 0 = skip daemon init */ } @@ -2334,7 +2334,7 @@ int main (int argc, char **argv) * counter (because we cannot do join on the detached threads). */ while (1) { - SLEEP(1,0); + SLEEP(1, 0); /* Calculate how many threads runnig or wants to run * if zero and we want to finish, break out @@ -2390,13 +2390,13 @@ int main (int argc, char **argv) /* Rest for a while if we're supposed to restart. */ if (restart) - SLEEP(2,0); + SLEEP(2, 0); } while (restart); /* loop if we're supposed to restart */ // Be sure that http control exits fine cnt_list[0]->finish = 1; - SLEEP(1,0); + SLEEP(1, 0); motion_log(LOG_INFO, 0, "Motion terminating"); /* Perform final cleanup. */ diff --git a/motion.h b/motion.h index c6ddc410..34440837 100644 --- a/motion.h +++ b/motion.h @@ -134,14 +134,14 @@ * and then we show a grey image instead */ -#define WATCHDOG_TMO 30 /* 10 sec max motion_loop interval */ -#define WATCHDOG_OFF -127 /* Turn off watchdog, used when we wants to quit a thread */ +#define WATCHDOG_TMO 30 /* 10 sec max motion_loop interval */ +#define WATCHDOG_OFF -127 /* Turn off watchdog, used when we wants to quit a thread */ #define CONNECTION_KO "Lost connection" #define CONNECTION_OK "Connection OK" -#define DEF_MAXSTREAMS 10 /* Maximum number of webcam clients per camera */ -#define DEF_MAXWEBQUEUE 10 /* Maximum number of webcam client in queue */ +#define DEF_MAXSTREAMS 10 /* Maximum number of webcam clients per camera */ +#define DEF_MAXWEBQUEUE 10 /* Maximum number of webcam client in queue */ #define DEF_TIMESTAMP "%Y-%m-%d\\n%T" #define DEF_EVENTSTAMP "%Y%m%d%H%M%S" @@ -207,15 +207,15 @@ struct images; struct image_data { unsigned char *image; int diffs; - time_t timestamp; /* Timestamp when image was captured */ + time_t timestamp; /* Timestamp when image was captured */ struct tm timestamp_tm; - int shot; /* Sub second timestamp count */ + int shot; /* Sub second timestamp count */ /* movement center to img center distance * Note Dist is calculated distX*distX + distY*distY */ unsigned long cent_dist; - unsigned int flags; /* Se IMAGE_* defines */ + unsigned int flags; /* Se IMAGE_* defines */ struct coord location; /* coordinates for center and size of last motion detection*/ @@ -310,11 +310,11 @@ struct context { struct images imgs; struct trackoptions track; struct netcam_context *netcam; - struct image_data *current_image; /* Pointer to a structure where the image, diffs etc is stored */ + struct image_data *current_image; /* Pointer to a structure where the image, diffs etc is stored */ unsigned short int new_img; int locate; - struct rotdata rotate_data; /* rotation data is thread-specific */ + struct rotdata rotate_data; /* rotation data is thread-specific */ int noise; int threshold; @@ -335,9 +335,9 @@ struct context { int event_nr; int prev_event; int lightswitch_framecounter; - char text_event_string[PATH_MAX]; /* The text for conv. spec. %C - - we assume PATH_MAX normally 4096 characters is fine */ - int postcap; /* downcounter, frames left to to send post event */ + char text_event_string[PATH_MAX]; /* The text for conv. spec. %C - + we assume PATH_MAX normally 4096 characters is fine */ + int postcap; /* downcounter, frames left to to send post event */ short int shots; unsigned short int detecting_motion; @@ -347,13 +347,13 @@ struct context { time_t currenttime; time_t lasttime; time_t eventtime; - time_t connectionlosttime; /* timestamp from connection lost */ + time_t connectionlosttime; /* timestamp from connection lost */ int lastrate; unsigned short int startup_frames; unsigned short int moved; unsigned short int pause; - int missing_frame_counter; /* counts failed attempts to fetch picture frame from camera */ + int missing_frame_counter; /* counts failed attempts to fetch picture frame from camera */ unsigned short int lost_connection; #if (defined(BSD)) diff --git a/netcam.c b/netcam.c index 7b266188..72c699c1 100644 --- a/netcam.c +++ b/netcam.c @@ -42,11 +42,7 @@ #include #include #include /* For parsing of the URL */ -//#include -//#include -//#include #include -//#include #include "netcam_ftp.h" @@ -211,7 +207,7 @@ static void netcam_url_parse(struct url_t *parse_url, const char *text_url) } } } - if ((!parse_url->port) && (parse_url->service)){ + if ((!parse_url->port) && (parse_url->service)) { if (!strcmp(parse_url->service, "http")) parse_url->port = 80; else if (!strcmp(parse_url->service, "ftp")) @@ -363,13 +359,13 @@ static int netcam_check_keepalive(char *header) static int netcam_check_close(char *header) { char *type = NULL; - int ret=-1; + int ret = -1; if (!header_process(header, "Connection", http_process_type, &type)) return -1; if (!strcmp(type, "close")) /* strcmp returns 0 for match */ - ret=1; + ret = 1; if (type) free(type); @@ -697,7 +693,7 @@ static int netcam_read_first_header(netcam_context_ptr netcam) * If we are a non-streaming (ie. Jpeg) netcam and keepalive is configured */ - if (aliveflag){ + if (aliveflag) { if (closeflag) { /* * If not a streaming cam, and keepalive is set, and the flag shows we @@ -706,7 +702,7 @@ static int netcam_read_first_header(netcam_context_ptr netcam) */ motion_log(LOG_INFO, 0, "Info: Both 'Connection: Keep-Alive' and 'Connection: close' " "header received. Motion continues unchanged."); - }else{ + } else { /* aliveflag && !closeflag * * If not a streaming cam, and keepalive is set, and the flag shows we @@ -717,7 +713,7 @@ static int netcam_read_first_header(netcam_context_ptr netcam) if (debug_level > CAMERA_INFO) motion_log(LOG_INFO, 0, "Info: Received a Keep-Alive field in this set of headers."); } - }else{ /* !aliveflag */ + } else { /* !aliveflag */ if (!closeflag) { /* * If not a streaming cam, and keepalive is set, and the flag shows we @@ -812,7 +808,7 @@ static int netcam_connect(netcam_context_ptr netcam, int err_flag) int saveflags; int back_err; int optval; - socklen_t optlen=sizeof(optval); + socklen_t optlen = sizeof(optval); socklen_t len; fd_set fd_w; struct timeval selecttime; @@ -820,16 +816,16 @@ static int netcam_connect(netcam_context_ptr netcam, int err_flag) /* Assure any previous connection has been closed - IF we are not in keepalive */ if (!netcam->connect_keepalive) { if (debug_level > CAMERA_INFO ) - motion_log(LOG_DEBUG, 0, "netcam_connect, disconnecting netcam since keep-alive not set." ); - netcam_disconnect(netcam); + motion_log(LOG_DEBUG, 0, "netcam_connect, disconnecting netcam since keep-alive not set." ); + netcam_disconnect(netcam); /* create a new socket */ - if ((netcam->sock = socket(PF_INET, SOCK_STREAM, 0)) < 0) { - motion_log(LOG_ERR, 1, "netcam_connect with no keepalive, attempt to create socket failed."); - return -1; - } - if (debug_level > CAMERA_INFO ) - motion_log(LOG_DEBUG, 0, "netcam_connect with no keepalive, new socket created fd %d", netcam->sock); + if ((netcam->sock = socket(PF_INET, SOCK_STREAM, 0)) < 0) { + motion_log(LOG_ERR, 1, "netcam_connect with no keepalive, attempt to create socket failed."); + return -1; + } + if (debug_level > CAMERA_INFO ) + motion_log(LOG_DEBUG, 0, "netcam_connect with no keepalive, new socket created fd %d", netcam->sock); } else { /* We are in keepalive mode, check for invalid socket */ if (netcam->sock == -1) { /* Must be first time, or closed, create a new socket */ @@ -851,11 +847,11 @@ static int netcam_connect(netcam_context_ptr netcam, int err_flag) return -1; } if (debug_level > CAMERA_INFO) { - if (optval==1) + if (optval == 1) motion_log(LOG_DEBUG, 0, "netcam_connect: SO_KEEPALIVE is ON"); else motion_log(LOG_DEBUG, 0, "netcam_connect: SO_KEEPALIVE is OFF"); - } + } /* Set the option active */ optval = 1; @@ -1393,9 +1389,9 @@ static int netcam_read_ftp_jpeg(netcam_context_ptr netcam) */ static int netcam_read_file_jpeg(netcam_context_ptr netcam) { - int loop_counter=0; + int loop_counter = 0; if (debug_level > CAMERA_VERBOSE) { - motion_log(-1,0,"Begin %s", __FUNCTION__); + motion_log(-1, 0, "Begin %s", __FUNCTION__); } netcam_buff_ptr buffer; int len; @@ -1433,7 +1429,7 @@ static int netcam_read_file_jpeg(netcam_context_ptr netcam) /*return -1;*/ loop_counter++; - } while(statbuf.st_mtime==netcam->file->last_st_mtime); + } while(statbuf.st_mtime == netcam->file->last_st_mtime); netcam->file->last_st_mtime = statbuf.st_mtime; if (debug_level > CAMERA_INFO) { @@ -1507,7 +1503,7 @@ static int netcam_read_file_jpeg(netcam_context_ptr netcam) pthread_mutex_unlock(&netcam->mutex); if (debug_level > CAMERA_VERBOSE) { - motion_log(-1,0,"End %s", __FUNCTION__); + motion_log(-1, 0, "End %s", __FUNCTION__); } return 0; } @@ -1550,7 +1546,7 @@ static int netcam_setup_file(netcam_context_ptr netcam, struct url_t *url) { url->path = NULL; if (debug_level > CAMERA_INFO) - motion_log(LOG_INFO, 0, "netcam_setup_file: netcam->file->path %s",netcam->file->path); + motion_log(LOG_INFO, 0, "netcam_setup_file: netcam->file->path %s", netcam->file->path); netcam_url_free(url); @@ -1617,7 +1613,7 @@ static void *netcam_handler_loop(void *arg) open_error = 1; } /* need to have a dynamic delay here */ - SLEEP(5,0); + SLEEP(5, 0); continue; } if (open_error) { /* log re-connection */ @@ -1629,11 +1625,9 @@ static void *netcam_handler_loop(void *arg) /* Send our request and look at the response */ if ((retval = netcam_read_first_header(netcam)) != 1) { if (retval > 0) { - motion_log(LOG_ERR, 0, - "Unrecognized image header (%d)", retval); + motion_log(LOG_ERR, 0, "Unrecognized image header (%d)", retval); } else if (retval != -1) { - motion_log(LOG_ERR, 0, - "Error in header (%d)", retval); + motion_log(LOG_ERR, 0, "Error in header (%d)", retval); } /* need to have a dynamic delay here */ continue; @@ -1646,7 +1640,7 @@ static void *netcam_handler_loop(void *arg) "re-opening camera (streaming)"); open_error = 1; } - SLEEP(5,0); + SLEEP(5, 0); continue; } @@ -1823,7 +1817,7 @@ static int netcam_setup_html(netcam_context_ptr netcam, struct url_t *url) { ptr = mymalloc(strlen(url->service) + strlen(url->host) + strlen(url->path) + 4); sprintf((char *)ptr, "http://%s%s", url->host, url->path); - netcam->connect_keepalive=0; /* Disable Keepalive if proxy */ + netcam->connect_keepalive = 0; /* Disable Keepalive if proxy */ if (debug_level > CAMERA_INFO) motion_log(LOG_DEBUG, 0, "Removed netcam_keepalive flag due to proxy set." "Proxy is incompatible with Keep-Alive."); @@ -1911,7 +1905,7 @@ static int netcam_setup_html(netcam_context_ptr netcam, struct url_t *url) { if (debug_level > CAMERA_INFO) motion_log(-1, 0, "netcam_setup_html: about to try to connect, time #%d", ix ); if (netcam_connect(netcam, 0) != 0) { - motion_log(LOG_ERR, 0,"Failed to open camera - check your config and that netcamera is online"); + motion_log(LOG_ERR, 0, "Failed to open camera - check your config and that netcamera is online"); /* Fatal error on startup */ ix = MAX_HEADER_RETRIES; @@ -1975,7 +1969,7 @@ static int netcam_setup_ftp(netcam_context_ptr netcam, struct url_t *url) { netcam->ftp->user = strdup(ptr); else { netcam->ftp->user = mymalloc((cptr - ptr)); - memcpy(netcam->ftp->user,ptr,(cptr - ptr)); + memcpy(netcam->ftp->user, ptr,(cptr - ptr)); netcam->ftp->passwd = strdup(cptr + 1); } } @@ -2368,15 +2362,15 @@ int netcam_start(struct context *cnt) * in the context structures (cnt->...) only. */ - if (!strcmp(cnt->conf.netcam_http,"keep_alive")) { + if (!strcmp(cnt->conf.netcam_http, "keep_alive")) { netcam->connect_http_10 = TRUE; netcam->connect_http_11 = FALSE; netcam->connect_keepalive = TRUE; - } else if (!strcmp(cnt->conf.netcam_http,"1.0") || !strcmp(cnt->conf.netcam_http,"1.0")) { + } else if (!strcmp(cnt->conf.netcam_http, "1.0") || !strcmp(cnt->conf.netcam_http, "1.0")) { netcam->connect_http_10 = TRUE; netcam->connect_http_11 = FALSE; netcam->connect_keepalive = FALSE; - } else if (!strcmp(cnt->conf.netcam_http,"1.1")) { + } else if (!strcmp(cnt->conf.netcam_http, "1.1")) { netcam->connect_http_10 = FALSE; netcam->connect_http_11 = TRUE; netcam->connect_keepalive = TRUE; /* HTTP 1.1 has keepalive by default */ @@ -2390,15 +2384,15 @@ int netcam_start(struct context *cnt) /* Initialise the netcam socket to -1 to trigger a connection by the keep-alive logic */ netcam->sock = -1; - if ((url.service) && (!strcmp(url.service, "http")) ){ + if ((url.service) && (!strcmp(url.service, "http")) ) { if (debug_level > CAMERA_INFO) motion_log(-1, 0, "netcam_start: now calling netcam_setup_html()"); retval = netcam_setup_html(netcam, &url); - } else if ((url.service) && (!strcmp(url.service, "ftp")) ){ + } else if ((url.service) && (!strcmp(url.service, "ftp")) ) { if (debug_level > CAMERA_INFO) motion_log(-1, 0, "netcam_start: now calling netcam_setup_ftp"); retval = netcam_setup_ftp(netcam, &url); - } else if ((url.service) && (!strcmp(url.service, "file")) ){ + } else if ((url.service) && (!strcmp(url.service, "file")) ) { if (debug_level > CAMERA_INFO) motion_log(-1, 0, "netcam_start: now calling netcam_setup_file()"); retval = netcam_setup_file(netcam, &url); diff --git a/netcam_ftp.c b/netcam_ftp.c index d25f4f74..5af9d1c1 100644 --- a/netcam_ftp.c +++ b/netcam_ftp.c @@ -11,19 +11,9 @@ #include "motion.h" /* needs to come first, because _GNU_SOURCE_ set there */ #include -//#include -//#include #include -#include -//#include -//#include -//#include -//#include -//#include -//#include -#include -//#include -//#include +//#include +//#include #include #include "netcam_ftp.h" @@ -210,7 +200,7 @@ static int ftp_get_response(ftp_context_pointer ctxt) { int res = -1, cur = -1; if ((ctxt == NULL) || (ctxt->control_file_desc < 0)) - return(-1); + return(-1); get_more: /* @@ -244,7 +234,7 @@ static int ftp_get_response(ftp_context_pointer ctxt) { break; } while ((ptr < end) && (*ptr != '\n')) - ptr++; + ptr++; if (ptr >= end) { ctxt->control_buffer_index = ctxt->control_buffer_used; goto get_more; @@ -268,9 +258,9 @@ static int ftp_send_user(ftp_context_pointer ctxt) { int res; if (ctxt->user == NULL) - snprintf(buf, sizeof(buf), "USER anonymous\r\n"); + snprintf(buf, sizeof(buf), "USER anonymous\r\n"); else - snprintf(buf, sizeof(buf), "USER %s\r\n", ctxt->user); + snprintf(buf, sizeof(buf), "USER %s\r\n", ctxt->user); buf[sizeof(buf) - 1] = 0; len = strlen(buf); res = send(ctxt->control_file_desc, buf, len, 0); @@ -291,9 +281,9 @@ static int ftp_send_passwd(ftp_context_pointer ctxt) { int res; if (ctxt->passwd == NULL) - snprintf(buf, sizeof(buf), "PASS anonymous@\r\n"); + snprintf(buf, sizeof(buf), "PASS anonymous@\r\n"); else - snprintf(buf, sizeof(buf), "PASS %s\r\n", ctxt->passwd); + snprintf(buf, sizeof(buf), "PASS %s\r\n", ctxt->passwd); buf[sizeof(buf) - 1] = 0; len = strlen(buf); res = send(ctxt->control_file_desc, buf, len, 0); @@ -322,7 +312,7 @@ static int ftp_quit(ftp_context_pointer ctxt) { int len, res; if ((ctxt == NULL) || (ctxt->control_file_desc < 0)) - return(-1); + return(-1); snprintf(buf, sizeof(buf), "QUIT\r\n"); len = strlen(buf); @@ -354,19 +344,19 @@ int ftp_connect(netcam_context_ptr netcam) { int addrlen = sizeof (struct sockaddr_in); if (netcam == NULL) - return -1; + return -1; ctxt = netcam->ftp; if (ctxt == NULL) - return(-1); + return(-1); if (netcam->connect_host == NULL) - return(-1); + return(-1); /* * do the blocking DNS query. */ port = netcam->connect_port; if (port == 0) - port = 21; + port = 21; memset (&ctxt->ftp_address, 0, sizeof(ctxt->ftp_address)); @@ -386,10 +376,8 @@ int ftp_connect(netcam_context_ptr netcam) { * Prepare the socket */ ((struct sockaddr_in *)&ctxt->ftp_address)->sin_family = AF_INET; - memcpy (&((struct sockaddr_in *)&ctxt->ftp_address)->sin_addr, - hp->h_addr_list[0], hp->h_length); - ((struct sockaddr_in *)&ctxt->ftp_address)->sin_port = - (u_short)htons ((unsigned short)port); + memcpy (&((struct sockaddr_in *)&ctxt->ftp_address)->sin_addr, hp->h_addr_list[0], hp->h_length); + ((struct sockaddr_in *)&ctxt->ftp_address)->sin_port = (u_short)htons ((unsigned short)port); ctxt->control_file_desc = socket (AF_INET, SOCK_STREAM, 0); addrlen = sizeof (struct sockaddr_in); @@ -431,7 +419,7 @@ int ftp_connect(netcam_context_ptr netcam) { res = ftp_get_response(ctxt); switch (res) { case 2: - return(0); + return(0); case 3: break; case 1: @@ -439,9 +427,9 @@ int ftp_connect(netcam_context_ptr netcam) { case 5: case -1: default: - close(ctxt->control_file_desc); - ctxt->control_file_desc = -1; - return(-1); + close(ctxt->control_file_desc); + ctxt->control_file_desc = -1; + return(-1); } res = ftp_send_passwd(ctxt); if (res < 0) { @@ -454,15 +442,15 @@ int ftp_connect(netcam_context_ptr netcam) { case 2: break; case 3: - motion_log(LOG_ERR, 0, "FTP server asking for ACCT on anonymous"); + motion_log(LOG_ERR, 0, "FTP server asking for ACCT on anonymous"); case 1: case 4: case 5: case -1: default: - close(ctxt->control_file_desc); ctxt->control_file_desc = -1; - ctxt->control_file_desc = -1; - return(-1); + close(ctxt->control_file_desc); ctxt->control_file_desc = -1; + ctxt->control_file_desc = -1; + return(-1); } return(0); @@ -552,7 +540,7 @@ static int ftp_get_connection(ftp_context_pointer ctxt) { } return (-1); } - for (i=0; i<6; i++) + for (i = 0; i < 6; i++) ad[i] = (unsigned char) (temp[i] & 0xff) ; memcpy (&((struct sockaddr_in *)&data_address)->sin_addr, &ad[0], 4); memcpy (&((struct sockaddr_in *)&data_address)->sin_port, &ad[4], 2); @@ -600,7 +588,7 @@ static int ftp_get_connection(ftp_context_pointer ctxt) { /* now generate the PORT command */ adp = (unsigned char *) &((struct sockaddr_in *)&data_address)->sin_addr; portp = (unsigned char *) &((struct sockaddr_in *)&data_address)->sin_port; - snprintf (buf, sizeof(buf), "PORT %d,%d,%d,%d,%d,%d\r\n", + snprintf (buf, sizeof(buf), "PORT %d,%d,%d,%d,%d,%d\r\n", adp[0] & 0xff, adp[1] & 0xff, adp[2] & 0xff, adp[3] & 0xff, portp[0] & 0xff, portp[1] & 0xff); diff --git a/netcam_jpeg.c b/netcam_jpeg.c index 7d4f9d81..fee07f7d 100644 --- a/netcam_jpeg.c +++ b/netcam_jpeg.c @@ -12,17 +12,10 @@ * This program is published under the GNU Public license */ -//#include "motion.h" #include "rotate.h" /* already includes motion.h */ - -//#include -//#include -//#include #include #include -//#include "rotate.h" - /* * netcam_source_mgr is a locally-defined structure to contain elements * which are not present in the standard libjpeg (the element 'pub' is a @@ -295,7 +288,7 @@ static int netcam_init_jpeg(netcam_context_ptr netcam, j_decompress_ptr cinfo) pthread_mutex_unlock(&netcam->mutex); if (debug_level > CAMERA_WARNINGS) - motion_log(-1,0,"no new pic, no signal rcvd"); + motion_log(-1, 0, "no new pic, no signal rcvd"); return NETCAM_GENERAL_ERROR | NETCAM_NOTHING_NEW_ERROR; } diff --git a/picture.c b/picture.c index c175ad45..f272ff63 100644 --- a/picture.c +++ b/picture.c @@ -291,7 +291,7 @@ static void put_jpeg_grey_file(FILE *picture, unsigned char *image, int width, i jpeg_start_compress(&cjpeg, TRUE); - row_ptr[0]=image; + row_ptr[0] = image; for (y = 0; y < height; y++) { jpeg_write_scanlines(&cjpeg, row_ptr, 1); row_ptr[0] += width; @@ -539,11 +539,11 @@ void put_picture(struct context *cnt, char *file, unsigned char *image, int ftyp /* Get the pgm file used as fixed mask */ unsigned char *get_pgm(FILE *picture, int width, int height) { - int x = 0 ,y = 0, maxval; + int x = 0 , y = 0, maxval; char line[256]; unsigned char *image; - line[255]=0; + line[255] = 0; if (!fgets(line, 255, picture)) { motion_log(LOG_ERR, 1, "Could not read from ppm file"); diff --git a/track.c b/track.c index 3ebca486..8839af04 100644 --- a/track.c +++ b/track.c @@ -115,18 +115,19 @@ static unsigned short int stepper_command(struct context *cnt, unsigned short in unsigned short int data) { char buffer[3]; - time_t timeout=time(NULL); + time_t timeout = time(NULL); - buffer[0]=motor; - buffer[1]=command; - buffer[2]=data; - if (write(cnt->track.dev, buffer, 3)!=3){ + buffer[0] = motor; + buffer[1] = command; + buffer[2] = data; + + if (write(cnt->track.dev, buffer, 3) != 3){ motion_log(LOG_ERR, 1, "stepper_command port %s dev fd %i, motor %hu command %hu data %hu", cnt->track.port, cnt->track.dev, motor, command, data); return 0; } - while (read(cnt->track.dev, buffer, 1)!=1 && time(NULL) < timeout+1); + while (read(cnt->track.dev, buffer, 1) != 1 && time(NULL) < timeout+1); if (time(NULL) >= timeout+2) { motion_log(LOG_ERR, 1, "Status byte timeout!"); return 0; @@ -149,7 +150,7 @@ static unsigned short int stepper_center(struct context *cnt, int x_offset, int if (cnt->track.dev<0) { motion_log(LOG_INFO, 0, "Try to open serial device %s", cnt->track.port); - if ((cnt->track.dev=open(cnt->track.port, O_RDWR | O_NOCTTY)) < 0) { + if ((cnt->track.dev = open(cnt->track.port, O_RDWR | O_NOCTTY)) < 0) { motion_log(LOG_ERR, 1, "Unable to open serial device %s", cnt->track.port); return 0; } @@ -159,8 +160,8 @@ static unsigned short int stepper_center(struct context *cnt, int x_offset, int adtio.c_iflag= IGNPAR; adtio.c_oflag= 0; adtio.c_lflag= 0; /* non-canon, no echo */ - adtio.c_cc[VTIME]=0; /* timer unused */ - adtio.c_cc[VMIN]=0; /* blocking read until 1 char */ + adtio.c_cc[VTIME] = 0; /* timer unused */ + adtio.c_cc[VMIN] = 0; /* blocking read until 1 char */ tcflush (cnt->track.dev, TCIFLUSH); if (tcsetattr(cnt->track.dev, TCSANOW, &adtio) < 0) { @@ -281,7 +282,7 @@ static void iomojo_setspeed(struct context *cnt, unsigned short int speed) command[1] = cnt->track.iomojo_id; command[2] = speed; - if (iomojo_command(cnt, command, 3, 1)!=IOMOJO_SETSPEED_RET) + if (iomojo_command(cnt, command, 3, 1) != IOMOJO_SETSPEED_RET) motion_log(LOG_ERR, 1, "Unable to set camera speed"); } @@ -298,10 +299,10 @@ static void iomojo_movehome(struct context *cnt) static unsigned short int iomojo_center(struct context *cnt, int x_offset, int y_offset) { struct termios adtio; - char command[5], direction=0; + char command[5], direction = 0; if (cnt->track.dev<0) { - if ((cnt->track.dev=open(cnt->track.port, O_RDWR | O_NOCTTY)) < 0) { + if ((cnt->track.dev = open(cnt->track.port, O_RDWR | O_NOCTTY)) < 0) { motion_log(LOG_ERR, 1, "Unable to open serial device %s", cnt->track.port); return 0; } @@ -427,14 +428,14 @@ static unsigned short int lqos_center(struct context *cnt, int dev, int x_angle, struct pwc_mpt_angles pma; struct pwc_mpt_range pmr; - if (cnt->track.dev==-1) { + if (cnt->track.dev == -1) { if (ioctl(dev, VIDIOCPWCMPTRESET, &reset) == -1) { motion_log(LOG_ERR, 1, "Failed to reset pwc camera to starting position! Reason"); return 0; } - SLEEP(6,0) + SLEEP(6, 0); if (ioctl(dev, VIDIOCPWCMPTGRANGE, &pmr) == -1) { motion_log(LOG_ERR, 1, "failed VIDIOCPWCMPTGRANGE"); @@ -574,7 +575,7 @@ static unsigned short int uvc_center(struct context *cnt, int dev, int x_angle, } motion_log(LOG_DEBUG, 0, "Reseting UVC camera to starting position"); - SLEEP(8,0) + SLEEP(8, 0); /* Get camera range */ struct v4l2_queryctrl queryctrl; @@ -650,7 +651,7 @@ static unsigned short int uvc_center(struct context *cnt, int dev, int x_angle, /* DWe 30.03.07 We must wait a little,before we set the next CMD, otherwise PAN is mad ... */ if ((move_x_degrees != 0) && (move_y_degrees != 0)) { - SLEEP (1,0); + SLEEP (1, 0); } if (move_y_degrees != 0 ) { @@ -664,17 +665,17 @@ static unsigned short int uvc_center(struct context *cnt, int dev, int x_angle, } - motion_log(LOG_DEBUG, 0,"Found MINMAX = %d", cnt->track.minmaxfound); + motion_log(LOG_DEBUG, 0, "Found MINMAX = %d", cnt->track.minmaxfound); if (cnt->track.dev!=-1) { - motion_log(LOG_DEBUG, 0," Before_ABS_Y_Angel : x= %d , Y= %d , ", cnt->track.pan_angle, cnt->track.tilt_angle ); + motion_log(LOG_DEBUG, 0, " Before_ABS_Y_Angel : x= %d , Y= %d , ", cnt->track.pan_angle, cnt->track.tilt_angle ); if (move_x_degrees != -1) { cnt->track.pan_angle += move_x_degrees; } if (move_x_degrees != -1) { cnt->track.tilt_angle += move_y_degrees; } - motion_log(LOG_DEBUG, 0," After_ABS_Y_Angel : x= %d , Y= %d , ", cnt->track.pan_angle, cnt->track.tilt_angle ); + motion_log(LOG_DEBUG, 0, " After_ABS_Y_Angel : x= %d , Y= %d , ", cnt->track.pan_angle, cnt->track.tilt_angle ); } return cnt->track.move_wait; @@ -707,7 +708,7 @@ static unsigned short int uvc_move(struct context *cnt, int dev, struct coord *c /* set the "helpvalue" back to null because after reset CAM should be in x=0 and not 70 */ cent->x = 0; - SLEEP(8,0); + SLEEP(8, 0); /* DWe 30.03.07 The orig request failed : * must be VIDIOC_G_CTRL separate for pan and tilt or via VIDIOC_G_EXT_CTRLS - now for 1st manual @@ -792,7 +793,7 @@ static unsigned short int uvc_move(struct context *cnt, int dev, struct coord *c // control_s.value = pan.value; control_s.value = pan.s16.pan; - motion_log(LOG_DEBUG, 0," dev %d,addr= %d, control_S= %d,Wert= %d,", dev,VIDIOC_S_CTRL, &control_s, pan.s16.pan ); + motion_log(LOG_DEBUG, 0, " dev %d, addr= %d, control_S= %d, Wert= %d", dev, VIDIOC_S_CTRL, &control_s, pan.s16.pan); if (ioctl(dev, VIDIOC_S_CTRL, &control_s) < 0) { motion_log(LOG_ERR, 1, "Failed to move UVC camera!"); return 0; @@ -801,7 +802,7 @@ static unsigned short int uvc_move(struct context *cnt, int dev, struct coord *c /* DWe 30.03.07 We must wait a little,before we set the next CMD, otherwise PAN is mad ... */ if ((move_x_degrees != 0) && (move_y_degrees != 0)) { - SLEEP (1,0); + SLEEP (1, 0); } @@ -811,7 +812,7 @@ static unsigned short int uvc_move(struct context *cnt, int dev, struct coord *c // control_s.value = pan.value; control_s.value = pan.s16.tilt; - motion_log(LOG_DEBUG, 0," dev %d,addr= %d, control_S= %d, Wert= %d, ", dev,VIDIOC_S_CTRL, &control_s, pan.s16.tilt ); + motion_log(LOG_DEBUG, 0, " dev %d,addr= %d, control_S= %d, Wert= %d", dev, VIDIOC_S_CTRL, &control_s, pan.s16.tilt); if (ioctl(dev, VIDIOC_S_CTRL, &control_s) < 0) { motion_log(LOG_ERR, 1, "Failed to move UVC camera!"); return 0; @@ -819,9 +820,9 @@ static unsigned short int uvc_move(struct context *cnt, int dev, struct coord *c } - motion_log(LOG_DEBUG, 0,"Found MINMAX = %d", cnt->track.minmaxfound); + motion_log(LOG_DEBUG, 0, "Found MINMAX = %d", cnt->track.minmaxfound); if (cnt->track.minmaxfound == 1) { - motion_log(LOG_DEBUG, 0," Before_REL_Y_Angel : x= %d , Y= %d", cnt->track.pan_angle, cnt->track.tilt_angle ); + motion_log(LOG_DEBUG, 0, " Before_REL_Y_Angel : x= %d , Y= %d", cnt->track.pan_angle, cnt->track.tilt_angle ); if (move_x_degrees != 0){ cnt->track.pan_angle += -pan.s16.pan / INCPANTILT; @@ -829,7 +830,7 @@ static unsigned short int uvc_move(struct context *cnt, int dev, struct coord *c if (move_y_degrees != 0){ cnt->track.tilt_angle += -pan.s16.tilt / INCPANTILT; } - motion_log(LOG_DEBUG, 0," After_REL_Y_Angel : x= %d , Y= %d", cnt->track.pan_angle, cnt->track.tilt_angle ); + motion_log(LOG_DEBUG, 0, " After_REL_Y_Angel : x= %d , Y= %d", cnt->track.pan_angle, cnt->track.tilt_angle ); } return cnt->track.move_wait; diff --git a/track.h b/track.h index 96aeb195..2c6ddac5 100644 --- a/track.h +++ b/track.h @@ -32,7 +32,7 @@ struct trackoptions { unsigned short int step_angle_x; unsigned short int step_angle_y; unsigned short int move_wait; -// UVC + /* UVC */ int pan_angle; // degrees int tilt_angle; // degrees }; @@ -43,7 +43,7 @@ unsigned short int track_center(struct context *, int, unsigned short int, int, unsigned short int track_move(struct context *, int, struct coord *, struct images *, unsigned short int); /* - Some default values: + * Some default values: */ #define TRACK_SPEED 255 #define TRACK_STEPSIZE 40 @@ -55,7 +55,7 @@ unsigned short int track_move(struct context *, int, struct coord *, struct imag #define TRACK_TYPE_UVC 5 /* - Some defines for the Serial stepper motor: + * Some defines for the Serial stepper motor: */ #define STEPPER_BAUDRATE B9600 @@ -88,7 +88,7 @@ unsigned short int track_move(struct context *, int, struct coord *, struct imag /* - Some defines for the Iomojo Smilecam: + * Some defines for the Iomojo Smilecam: */ #define IOMOJO_BAUDRATE B19200 @@ -109,14 +109,14 @@ unsigned short int track_move(struct context *, int, struct coord *, struct imag #ifndef WITHOUT_V4L /* - Defines for the Logitech QuickCam Orbit/Sphere USB webcam -*/ + * Defines for the Logitech QuickCam Orbit/Sphere USB webcam + */ #define LQOS_VERTICAL_DEGREES 180 #define LQOS_HORIZONAL_DEGREES 120 /* - * UVC + * UVC */ #ifdef MOTION_V4L2 diff --git a/video2.c b/video2.c index aacde456..c3eccc96 100644 --- a/video2.c +++ b/video2.c @@ -315,20 +315,22 @@ static int v4l2_set_pix_format(struct context *cnt, src_v4l2_t * s, int *width, fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; motion_log(LOG_INFO, 0, "Supported palettes:"); + while (xioctl(s->fd, VIDIOC_ENUM_FMT, &fmt) != -1) { short int i; - motion_log(LOG_INFO, 0, "%i: %c%c%c%c (%s)", v4l2_pal, - fmt.pixelformat >> 0, fmt.pixelformat >> 8, - fmt.pixelformat >> 16, fmt.pixelformat >> 24, fmt.description); + motion_log(LOG_INFO, 0, "%i: %c%c%c%c (%s)", v4l2_pal, fmt.pixelformat >> 0, + fmt.pixelformat >> 8, fmt.pixelformat >> 16, + fmt.pixelformat >> 24, fmt.description); for (i = 0; supported_formats[i]; i++) if (supported_formats[i] == fmt.pixelformat && i > index_format) { if (cnt->conf.v4l2_palette == i) { index_format = cnt->conf.v4l2_palette; motion_log(LOG_INFO, 0, "Selected palette %c%c%c%c", fmt.pixelformat >> 0, - fmt.pixelformat >> 8, fmt.pixelformat >> 16, fmt.pixelformat >> 24); - i=10; + fmt.pixelformat >> 8, fmt.pixelformat >> 16, + fmt.pixelformat >> 24); + i = 10; break; } index_format = i; @@ -355,12 +357,14 @@ static int v4l2_set_pix_format(struct context *cnt, src_v4l2_t * s, int *width, s->fmt.fmt.pix.field = V4L2_FIELD_ANY; if (xioctl(s->fd, VIDIOC_TRY_FMT, &s->fmt) != -1 && s->fmt.fmt.pix.pixelformat == pixformat) { - motion_log(LOG_INFO, 0, "index_format %d Test palette %c%c%c%c (%dx%d)", index_format, pixformat >> 0, pixformat >> 8, pixformat >> 16, pixformat >> 24, *width, *height); + motion_log(LOG_INFO, 0, "index_format %d Test palette %c%c%c%c (%dx%d)", + index_format, pixformat >> 0, pixformat >> 8, + pixformat >> 16, pixformat >> 24, *width, *height); if (s->fmt.fmt.pix.width != (unsigned int) *width || s->fmt.fmt.pix.height != (unsigned int) *height) { motion_log(LOG_INFO, 0, "Adjusting resolution from %ix%i to %ix%i.", *width, *height, - s->fmt.fmt.pix.width, s->fmt.fmt.pix.height); + s->fmt.fmt.pix.width, s->fmt.fmt.pix.height); *width = s->fmt.fmt.pix.width; *height = s->fmt.fmt.pix.height; } @@ -371,7 +375,9 @@ static int v4l2_set_pix_format(struct context *cnt, src_v4l2_t * s, int *width, return (-1); } - motion_log(LOG_INFO, 0, "Using palette %c%c%c%c (%dx%d) bytesperlines %d sizeimage %d colorspace %08x", pixformat >> 0, pixformat >> 8, pixformat >> 16, pixformat >> 24, *width, *height, s->fmt.fmt.pix.bytesperline, s->fmt.fmt.pix.sizeimage, s->fmt.fmt. pix.colorspace); + motion_log(LOG_INFO, 0, "Using palette %c%c%c%c (%dx%d) bytesperlines %d sizeimage %d colorspace %08x", + pixformat >> 0, pixformat >> 8, pixformat >> 16, pixformat >> 24, *width, *height, + s->fmt.fmt.pix.bytesperline, s->fmt.fmt.pix.sizeimage, s->fmt.fmt. pix.colorspace); /* TODO: Review when it has been tested */ if (pixformat == V4L2_PIX_FMT_MJPEG) { @@ -390,7 +396,7 @@ static int v4l2_set_pix_format(struct context *cnt, src_v4l2_t * s, int *width, } motion_log(LOG_ERR, 0, "VIDIOC_TRY_FMT failed for format %c%c%c%c (%s).", pixformat >> 0, - pixformat >> 8, pixformat >> 16, pixformat >> 24, strerror(errno)); + pixformat >> 8, pixformat >> 16, pixformat >> 24, strerror(errno)); return -1; } @@ -403,13 +409,13 @@ static int v4l2_set_pix_format(struct context *cnt, src_v4l2_t * s, int *width, static void v4l2_set_fps(src_v4l2_t * s){ struct v4l2_streamparm* setfps; - setfps=(struct v4l2_streamparm *) calloc(1, sizeof(struct v4l2_streamparm)); + setfps = (struct v4l2_streamparm *) calloc(1, sizeof(struct v4l2_streamparm)); memset(setfps, 0, sizeof(struct v4l2_streamparm)); setfps->type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - setfps->parm.capture.timeperframe.numerator=1; - setfps->parm.capture.timeperframe.denominator=s->fps; - if (xioctl(s->fd, VIDIOC_S_PARM, setfps) == -1){ - motion_log(LOG_ERR, 0, "v4l2_set_fps VIDIOC_S_PARM %s",strerror(errno)); + setfps->parm.capture.timeperframe.numerator = 1; + setfps->parm.capture.timeperframe.denominator = s->fps; + if (xioctl(s->fd, VIDIOC_S_PARM, setfps) == -1) { + motion_log(LOG_ERR, 0, "v4l2_set_fps VIDIOC_S_PARM %s", strerror(errno)); } } @@ -540,14 +546,14 @@ static int v4l2_scan_controls(src_v4l2_t * s) memcpy(ctrl, &queryctrl, sizeof(struct v4l2_queryctrl)); motion_log(LOG_INFO, 0, "found control 0x%08x, \"%s\", range %d,%d %s", ctrl->id, - ctrl->name, ctrl->minimum, ctrl->maximum, - ctrl->flags & V4L2_CTRL_FLAG_DISABLED ? "!DISABLED!" : ""); + ctrl->name, ctrl->minimum, ctrl->maximum, + ctrl->flags & V4L2_CTRL_FLAG_DISABLED ? "!DISABLED!" : ""); memset (&control, 0, sizeof (control)); control.id = queried_ctrls[i]; xioctl(s->fd, VIDIOC_G_CTRL, &control); motion_log(LOG_INFO, 0, "\t\"%s\", default %d, current %d", ctrl->name, - ctrl->default_value, control.value); + ctrl->default_value, control.value); ctrl++; } @@ -592,8 +598,9 @@ static int v4l2_set_control(src_v4l2_t * s, u32 cid, int value) } if (debug_level > 5) motion_log(LOG_INFO, 0, "setting control \"%s\" to %d (ret %d %s) %s", ctrl->name, - value, ret, ret ? strerror(errno) : "", - ctrl->flags & V4L2_CTRL_FLAG_DISABLED ? "Control is DISABLED!" : ""); + value, ret, ret ? strerror(errno) : "", + ctrl->flags & V4L2_CTRL_FLAG_DISABLED ? + "Control is DISABLED!" : ""); return 0; } @@ -664,7 +671,7 @@ unsigned char *v4l2_start(struct context *cnt, struct video_dev *viddev, int wid goto err; } - if (v4l2_set_pix_format(cnt ,s, &width, &height)) { + if (v4l2_set_pix_format(cnt, s, &width, &height)) { goto err; } @@ -736,7 +743,7 @@ void v4l2_set_input(struct context *cnt, struct video_dev *viddev, unsigned char unsigned int counter = 0; if (debug_level > 5) motion_log(LOG_DEBUG, 0, "set_input_skip_frame switch_time=%ld:%ld", - switchTime.tv_sec, switchTime.tv_usec); + switchTime.tv_sec, switchTime.tv_usec); /* Avoid hang using the number of mmap buffers */ while(counter < s->req.count) @@ -749,7 +756,7 @@ void v4l2_set_input(struct context *cnt, struct video_dev *viddev, unsigned char break; if (debug_level > 5) motion_log(LOG_DEBUG, 0, "got frame before switch timestamp=%ld:%ld", - s->buf.timestamp.tv_sec, s->buf.timestamp.tv_usec); + s->buf.timestamp.tv_sec, s->buf.timestamp.tv_usec); } } @@ -798,12 +805,12 @@ int v4l2_next(struct context *cnt, struct video_dev *viddev, unsigned char *map, driver might dequeue an (empty) buffer despite returning an error, or even stop capturing. */ - if ( errno == EIO ){ + if ( errno == EIO ) { s->pframe++; - if ((u32)s->pframe >= s->req.count) s->pframe=0; + if ((u32)s->pframe >= s->req.count) s->pframe = 0; s->buf.index = s->pframe; - motion_log(LOG_ERR, 0, "%s: VIDIOC_DQBUF: EIO (s->pframe %d)", __FUNCTION__,s->pframe); + motion_log(LOG_ERR, 0, "%s: VIDIOC_DQBUF: EIO (s->pframe %d)", __FUNCTION__, s->pframe); return (1); } diff --git a/video_common.c b/video_common.c index 9967a767..e1c8274f 100644 --- a/video_common.c +++ b/video_common.c @@ -9,12 +9,9 @@ * */ -//#include "motion.h" /* for rotation */ #include "rotate.h" /* already includes motion.h */ #include "video.h" -/* for rotation */ -//#include "rotate.h" #ifdef MJPEGT #include @@ -296,7 +293,7 @@ void conv_uyvyto420p(unsigned char *map, unsigned char *cap_map, unsigned int wi { uint8_t *pY = map; uint8_t *pU = pY + (width * height); - uint8_t *pV = pU + (width * height)/4; + uint8_t *pV = pU + (width * height) / 4; uint32_t uv_offset = width * 4 * sizeof(uint8_t); uint32_t ix, jx; @@ -363,7 +360,7 @@ void conv_rgb24toyuv420p(unsigned char *map, unsigned char *cap_map, int width, } } -int conv_jpeg2yuv420(struct context *cnt, unsigned char *dst, netcam_buff * buff, int width, int height) +int conv_jpeg2yuv420(struct context *cnt, unsigned char *dst, netcam_buff *buff, int width, int height) { netcam_context netcam; @@ -406,23 +403,23 @@ void mjpegtoyuv420p(unsigned char *map, unsigned char *cap_map, int width, int h decode_jpeg_raw(cap_map, size, 0, 420, width, height, yuv[0], yuv[1], yuv[2]); - y=map; - u=y+width*height; - v=u+(width*height)/4; - memset(y, 0, width*height); - memset(u, 0, width*height/4); - memset(v, 0, width*height/4); + y = map; + u = y + width * height; + v = u + (width * height) / 4; + memset(y, 0, width * height); + memset(u, 0, width * height / 4); + memset(v, 0, width * height / 4); - for(loop=0; loop>15; - *u+=((-4784**r-9437**g+14221**b)>>17)+32; - *v+=((20218**r-16941**g-3277**b)>>17)+32; - r+=3; - g+=3; - b+=3; - *y++=(9796**r+19235**g+3736**b)>>15; - *u+=((-4784**r-9437**g+14221**b)>>17)+32; - *v+=((20218**r-16941**g-3277**b)>>17)+32; - r+=3; - g+=3; - b+=3; + for(loop = 0; loop < height; loop++) { + for(i = 0; i < width; i += 2) { + *y++ = (9796 ** r + 19235 ** g + 3736 ** b) >> 15; + *u += ((-4784 ** r - 9437 ** g + 14221 ** b) >> 17) + 32; + *v += ((20218 ** r - 16941**g-3277 ** b) >> 17) + 32; + r += 3; + g += 3; + b += 3; + *y++ = (9796 ** r + 19235 ** g + 3736 ** b) >> 15; + *u += ((-4784 ** r - 9437 ** g + 14221 ** b) >> 17) + 32; + *v += ((20218 ** r - 16941 ** g - 3277 ** b) >> 17) + 32; + r += 3; + g += 3; + b += 3; u++; v++; } if ((loop & 1) == 0) { - u-=width/2; - v-=width/2; + u -= width / 2; + v -= width / 2; } } @@ -174,7 +170,7 @@ static int camparam_normalize( int param, int cfg_value, int *ioctl_val ) val = (cfg_value - CamParams[ param ].min ) / (CamParams[ param ].range + 0.01) * CamParams[param].drv_range + CamParams[param].drv_min; val = MAX( CamParams[ param ].min, - MIN( CamParams[ param ].drv_min + CamParams[ param ].drv_range-1,val )); + MIN( CamParams[ param ].drv_min + CamParams[ param ].drv_range-1, val )); *ioctl_val = val; return cfg_value; } @@ -185,11 +181,11 @@ static int set_hue( int viddev, int new_hue ) signed char ioctlval = new_hue; if( ioctl( viddev, METEORSHUE, &ioctlval ) < 0 ) { - motion_log(LOG_ERR, 1, "METEORSHUE Error setting hue [%d]",new_hue); + motion_log(LOG_ERR, 1, "METEORSHUE Error setting hue [%d]", new_hue); return -1; } - motion_log(-1, 0, "set hue to [%d]",ioctlval); + motion_log(-1, 0, "set hue to [%d]", ioctlval); return ioctlval; } @@ -212,11 +208,11 @@ static int set_saturation( int viddev, int new_saturation ) unsigned char ioctlval= new_saturation; if( ioctl( viddev, METEORSCSAT, &ioctlval ) < 0 ) { - motion_log(LOG_ERR, 1, "METEORSCSAT Error setting saturation [%d]",new_saturation); + motion_log(LOG_ERR, 1, "METEORSCSAT Error setting saturation [%d]", new_saturation); return -1; } - motion_log(-1, 0, "set saturation to [%d]",ioctlval); + motion_log(-1, 0, "set saturation to [%d]", ioctlval); return ioctlval; } @@ -244,7 +240,7 @@ static int set_contrast( int viddev, int new_contrast ) return 0; } - motion_log(-1, 0, "set contrast to [%d]",ioctlval); + motion_log(-1, 0, "set contrast to [%d]", ioctlval); return ioctlval; } @@ -268,11 +264,11 @@ static int set_brightness( int viddev, int new_bright ) unsigned char ioctlval = new_bright; if( ioctl( viddev, METEORSBRIG, &ioctlval ) < 0 ) { - motion_log(LOG_ERR, 1, "METEORSBRIG brightness [%d]",new_bright); + motion_log(LOG_ERR, 1, "METEORSBRIG brightness [%d]", new_bright); return -1; } - motion_log(-1, 0, "set brightness to [%d]",ioctlval); + motion_log(-1, 0, "set brightness to [%d]", ioctlval); return ioctlval; } @@ -299,10 +295,10 @@ static int set_channel( struct video_dev *viddev, int new_channel ) ioctlval = new_channel; if( ioctl( viddev->fd_tuner, TVTUNER_SETCHNL, &ioctlval ) < 0 ) { - motion_log(LOG_ERR, 1, "Error channel %d",ioctlval); + motion_log(LOG_ERR, 1, "Error channel %d", ioctlval); return -1; } else { - motion_log(LOG_DEBUG, 0, "channel set to %d",ioctlval); + motion_log(LOG_DEBUG, 0, "channel set to %d", ioctlval); } viddev->channel = new_channel; @@ -328,7 +324,7 @@ static int set_freq(struct video_dev *viddev, unsigned long freq) } if (ioctl(tuner_fd, TVTUNER_SETFREQ, &freq) < 0){ - motion_log(LOG_ERR, 1, "Tuning (TVTUNER_SETFREQ) failed , freq [%lu]",freq); + motion_log(LOG_ERR, 1, "Tuning (TVTUNER_SETFREQ) failed , freq [%lu]", freq); return -1; } @@ -336,7 +332,7 @@ static int set_freq(struct video_dev *viddev, unsigned long freq) if ( old_audio ){ old_audio = AUDIO_MUTE; if ( ioctl(tuner_fd , BT848_SAUDIO, &old_audio ) < 0 ) { - motion_log(LOG_ERR, 1, "BT848_SAUDIO %i",old_audio); + motion_log(LOG_ERR, 1, "BT848_SAUDIO %i", old_audio); return -1; } } @@ -361,7 +357,7 @@ static int set_input(struct video_dev *viddev, unsigned short input) METEOR_INPUT_DEV_SVIDEO }; if( input >= array_elem( portdata ) ) { - motion_log(LOG_WARNING, 0, "Channel Port %d out of range (0-4)",input); + motion_log(LOG_WARNING, 0, "Channel Port %d out of range (0-4)", input); input = IN_DEFAULT; } @@ -377,7 +373,7 @@ static int set_input(struct video_dev *viddev, unsigned short input) return -1; } } else { - motion_log(LOG_ERR, 1, "METEORSINPUT %d init",input); + motion_log(LOG_ERR, 1, "METEORSINPUT %d init", input); return -1; } } @@ -427,7 +423,7 @@ static int set_input_format(struct video_dev *viddev, unsigned short newformat) int format; if( newformat >= array_elem( input_format ) ) { - motion_log(LOG_WARNING, 0, "Input format %d out of range (0-2)",newformat ); + motion_log(LOG_WARNING, 0, "Input format %d out of range (0-2)", newformat ); format = NORM_DEFAULT_NEW; newformat = 3; } else @@ -454,12 +450,12 @@ statict int setup_pixelformat( int bktr ) struct meteor_pixfmt p; int format=-1; - for( i=0; ; i++ ){ + for( i = 0; ; i++ ){ p.index = i; if( ioctl( bktr, METEORGSUPPIXFMT, &p ) < 0 ){ if( errno == EINVAL ) break; - motion_log(LOG_ERR, 1, "METEORGSUPPIXFMT getting pixformat %d",i); + motion_log(LOG_ERR, 1, "METEORGSUPPIXFMT getting pixformat %d", i); return -1; } @@ -512,8 +508,8 @@ statict int setup_pixelformat( int bktr ) motion_log(LOG_WARNING, 1, "METEORSACTPIXFMT etting pixformat METEOR_PIXTYPE_RGB Bpp == 3"); // Not immediately fatal } - motion_log(LOG_DEBUG, 0, "input format METEOR_PIXTYPE_RGB %i",i); - format=i; + motion_log(LOG_DEBUG, 0, "input format METEOR_PIXTYPE_RGB %i", i); + format = i; } if( p.type == METEOR_PIXTYPE_YUV_PACKED ){ @@ -522,8 +518,8 @@ statict int setup_pixelformat( int bktr ) motion_log(LOG_WARNING, 1, "METEORSACTPIXFMT setting pixformat METEOR_PIXTYPE_YUV_PACKED"); // Not immediately fatal } - motion_log(LOG_DEBUG, 0, "input format METEOR_PIXTYPE_YUV_PACKED %i",i); - format=i; + motion_log(LOG_DEBUG, 0, "input format METEOR_PIXTYPE_YUV_PACKED %i", i); + format = i; } } @@ -538,7 +534,7 @@ static void v4l_picture_controls(struct context *cnt, struct video_dev *viddev) int dev = viddev->fd_bktr; if ( (cnt->conf.contrast) && (cnt->conf.contrast != viddev->contrast) ){ - set_contrast(dev,cnt->conf.contrast); + set_contrast(dev, cnt->conf.contrast); viddev->contrast = cnt->conf.contrast; } @@ -580,7 +576,7 @@ static unsigned char *v4l_start(struct context *cnt, struct video_dev *viddev, i { int dev_bktr = viddev->fd_bktr; struct sigaction act, old; - //int dev_tunner=viddev->fd_tuner; + //int dev_tunner = viddev->fd_tuner; /* to ensure that all device will be support the capture mode _TODO_ : Autodected the best capture mode . */ @@ -603,14 +599,14 @@ static unsigned char *v4l_start(struct context *cnt, struct video_dev *viddev, i /* FIXME if we set as input tuner , we need to set option for tuner not for bktr */ if ( set_input_format(viddev, norm) == -1 ) { - motion_log(LOG_ERR, 1, "set input format [%d]",norm); + motion_log(LOG_ERR, 1, "set input format [%d]", norm); return (NULL); } viddev->norm = norm; if (set_geometry(viddev, width, height) == -1) { - motion_log(LOG_ERR, 1, "set geometry [%d]x[%d]",width, height); + motion_log(LOG_ERR, 1, "set geometry [%d]x[%d]", width, height); return (NULL); } /* @@ -646,11 +642,11 @@ static unsigned char *v4l_start(struct context *cnt, struct video_dev *viddev, i /* That is the buffer size for capture images , so is dependent of color space of input format / FIXME */ - viddev->v4l_bufsize = (((width*height*3/2)) * sizeof(unsigned char *)); + viddev->v4l_bufsize = (((width * height * 3 / 2)) * sizeof(unsigned char *)); viddev->v4l_fmt = VIDEO_PALETTE_YUV420P; - map = mmap((caddr_t)0,viddev->v4l_bufsize,PROT_READ|PROT_WRITE,MAP_SHARED, dev_bktr, (off_t)0); + map = mmap((caddr_t)0, viddev->v4l_bufsize, PROT_READ|PROT_WRITE, MAP_SHARED, dev_bktr, (off_t)0); if (map == MAP_FAILED){ motion_log(LOG_ERR, 1, "mmap failed"); @@ -661,14 +657,14 @@ static unsigned char *v4l_start(struct context *cnt, struct video_dev *viddev, i if (0) { viddev->v4l_maxbuffer = 2; viddev->v4l_buffers[0] = map; - viddev->v4l_buffers[1] = (unsigned char *)map+0; /* 0 is not valid just a test */ - //viddev->v4l_buffers[1]=map+vid_buf.offsets[1]; + viddev->v4l_buffers[1] = (unsigned char *)map + 0; /* 0 is not valid just a test */ + //viddev->v4l_buffers[1] = map+vid_buf.offsets[1]; } else { viddev->v4l_buffers[0] = map; viddev->v4l_maxbuffer = 1; } - viddev->v4l_curbuffer=0; + viddev->v4l_curbuffer = 0; /* Clear the buffer */ @@ -701,7 +697,7 @@ static unsigned char *v4l_start(struct context *cnt, struct video_dev *viddev, i viddev->capture_method = METEOR_CAP_SINGLE; if (ioctl(dev_bktr, METEORCAPTUR, &viddev->capture_method) < 0){ motion_log(LOG_ERR, 1, "METEORCAPTUR using single method Error capturing"); - motion_log(LOG_INFO,0, "METEORCAPTUR using single method Error capturing"); + motion_log(LOG_INFO, 0, "METEORCAPTUR using single method Error capturing"); } } } @@ -712,28 +708,28 @@ static unsigned char *v4l_start(struct context *cnt, struct video_dev *viddev, i motion_log(LOG_INFO, 0, "METEORCAPTUR METEOR_CAP_SINGLE"); // settle , sleep(1) replaced - SLEEP(1,0) + SLEEP(1, 0); /* FIXME*/ switch (viddev->v4l_fmt) { case VIDEO_PALETTE_YUV420P: - viddev->v4l_bufsize=(width*height*3)/2; + viddev->v4l_bufsize = (width * height * 3) / 2; break; case VIDEO_PALETTE_YUV422: - viddev->v4l_bufsize=(width*height*2); + viddev->v4l_bufsize = (width * height * 2); break; case VIDEO_PALETTE_RGB24: - viddev->v4l_bufsize=(width*height*3); + viddev->v4l_bufsize = (width * height * 3); break; case VIDEO_PALETTE_GREY: - viddev->v4l_bufsize=width*height; + viddev->v4l_bufsize = width * height; break; } - motion_log(LOG_INFO,0,"HUE [%d]",get_hue(dev_bktr,&dummy)); - motion_log(LOG_INFO,0,"SATURATION [%d]",get_saturation(dev_bktr,&dummy)); - motion_log(LOG_INFO,0,"BRIGHTNESS [%d]",get_brightness(dev_bktr,&dummy)); - motion_log(LOG_INFO,0,"CONTRAST [%d]",get_contrast(dev_bktr,&dummy)); + motion_log(LOG_INFO, 0, "HUE [%d]", get_hue(dev_bktr, &dummy)); + motion_log(LOG_INFO, 0, "SATURATION [%d]", get_saturation(dev_bktr, &dummy)); + motion_log(LOG_INFO, 0, "BRIGHTNESS [%d]", get_brightness(dev_bktr, &dummy)); + motion_log(LOG_INFO, 0, "CONTRAST [%d]", get_contrast(dev_bktr, &dummy)); return map; } @@ -752,12 +748,12 @@ static unsigned char *v4l_start(struct context *cnt, struct video_dev *viddev, i * -1 Fatal error * 1 Non fatal error (not implemented) */ -static int v4l_next(struct video_dev *viddev,unsigned char *map, int width, int height) +static int v4l_next(struct video_dev *viddev, unsigned char *map, int width, int height) { - int dev_bktr=viddev->fd_bktr; - unsigned char *cap_map=NULL; - int single = METEOR_CAP_SINGLE; - sigset_t set, old; + int dev_bktr = viddev->fd_bktr; + unsigned char *cap_map = NULL; + int single = METEOR_CAP_SINGLE; + sigset_t set, old; /* ONLY MMAP method is used to Capture */ @@ -770,12 +766,12 @@ static int v4l_next(struct video_dev *viddev,unsigned char *map, int width, int sigaddset (&set, SIGUSR1); sigaddset (&set, SIGTERM); sigaddset (&set, SIGHUP); - pthread_sigmask (SIG_BLOCK, &set, &old); - cap_map=viddev->v4l_buffers[viddev->v4l_curbuffer]; + pthread_sigmask(SIG_BLOCK, &set, &old); + cap_map = viddev->v4l_buffers[viddev->v4l_curbuffer]; viddev->v4l_curbuffer++; if (viddev->v4l_curbuffer >= viddev->v4l_maxbuffer) - viddev->v4l_curbuffer=0; + viddev->v4l_curbuffer = 0; /* capture */ @@ -792,7 +788,6 @@ static int v4l_next(struct video_dev *viddev,unsigned char *map, int width, int /*undo the signal blocking*/ pthread_sigmask (SIG_UNBLOCK, &old, NULL); - switch (viddev->v4l_fmt){ case VIDEO_PALETTE_RGB24: rgb24toyuv420p(map, cap_map, width, height); @@ -803,7 +798,6 @@ static int v4l_next(struct video_dev *viddev,unsigned char *map, int width, int default: memcpy(map, cap_map, viddev->v4l_bufsize); } - return 0; } @@ -817,7 +811,7 @@ static void v4l_set_input(struct context *cnt, struct video_dev *viddev, unsigne int i; unsigned long frequnits = freq; - if (input != viddev->input || width != viddev->width || height!=viddev->height || freq!=viddev->freq){ + if (input != viddev->input || width != viddev->width || height != viddev->height || freq != viddev->freq){ if (set_input(viddev, input) == -1) return; @@ -837,7 +831,7 @@ static void v4l_set_input(struct context *cnt, struct video_dev *viddev, unsigne } */ - viddev->norm=norm; + viddev->norm = norm; if (set_geometry(viddev, width, height) == -1) return; @@ -850,7 +844,7 @@ static void v4l_set_input(struct context *cnt, struct video_dev *viddev, unsigne viddev->freq = freq; /* skip a few frames if needed */ - for (i=0; iv4l_buffers[0],viddevs->v4l_bufsize); + munmap(viddevs->v4l_buffers[0], viddevs->v4l_bufsize); viddevs->v4l_buffers[0] = MAP_FAILED; dev->fd_bktr = -1; @@ -1005,7 +999,7 @@ int vid_start(struct context *cnt) } #ifdef WITHOUT_V4L else - motion_log(LOG_ERR, 0,"You must setup netcam_url"); + motion_log(LOG_ERR, 0, "You must setup netcam_url"); #else else{ struct video_dev *dev; @@ -1085,10 +1079,10 @@ int vid_start(struct context *cnt) dev = mymalloc(sizeof(struct video_dev)); memset(dev, 0, sizeof(struct video_dev)); - fd_bktr=open(conf->video_device, O_RDWR); + fd_bktr = open(conf->video_device, O_RDWR); if (fd_bktr < 0) { - motion_log(LOG_ERR, 1, "open video device %s",conf->video_device); + motion_log(LOG_ERR, 1, "open video device %s", conf->video_device); free(dev); pthread_mutex_unlock(&vid_mutex); return -1; @@ -1097,9 +1091,9 @@ int vid_start(struct context *cnt) /* Only open tuner if conf->tuner_device has set , freq and input is 1 */ if ( (conf->tuner_device != NULL) && (frequency > 0) && ( input == IN_TV )) { - fd_tuner=open(conf->tuner_device, O_RDWR); + fd_tuner = open(conf->tuner_device, O_RDWR); if (fd_tuner < 0) { - motion_log(LOG_ERR, 1, "open tuner device %s",conf->tuner_device); + motion_log(LOG_ERR, 1, "open tuner device %s", conf->tuner_device); free(dev); pthread_mutex_unlock(&vid_mutex); return -1; @@ -1145,7 +1139,7 @@ int vid_start(struct context *cnt) return -1; } - cnt->imgs.type=dev->v4l_fmt; + cnt->imgs.type = dev->v4l_fmt; switch (cnt->imgs.type) { case VIDEO_PALETTE_GREY: @@ -1214,7 +1208,7 @@ int vid_next(struct context *cnt, unsigned char *map) pthread_mutex_lock(&vid_mutex); dev = viddevs; while (dev){ - if (dev->fd_bktr==dev_bktr) + if (dev->fd_bktr == dev_bktr) break; dev = dev->next; } @@ -1224,7 +1218,7 @@ int vid_next(struct context *cnt, unsigned char *map) return V4L_FATAL_ERROR; //return -1; - if (dev->owner!=cnt->threadnr) { + if (dev->owner != cnt->threadnr) { pthread_mutex_lock(&dev->mutex); dev->owner = cnt->threadnr; dev->frames = conf->roundrobin_frames; diff --git a/video_freebsd.h b/video_freebsd.h index 1202dc5a..b548fbb5 100644 --- a/video_freebsd.h +++ b/video_freebsd.h @@ -122,8 +122,8 @@ struct video_dev { /* video functions, video_freebsd.c */ int vid_start(struct context *); -int vid_next(struct context *, unsigned char *map); -void vid_close(struct context *cnt); +int vid_next(struct context *, unsigned char *); +void vid_close(struct context *); #ifndef WITHOUT_V4L void vid_init(void); diff --git a/webcam.c b/webcam.c index a6ccec38..eb5fcf8c 100644 --- a/webcam.c +++ b/webcam.c @@ -19,15 +19,12 @@ */ #include "picture.h" -//#include #include #include #include +#include #include #include -//#include - - /* This function sets up a TCP/IP socket for incoming requests. It is called only during @@ -38,35 +35,70 @@ */ int http_bindsock(int port, int local) { - int sl, optval=1; - struct sockaddr_in sin; + int sl = -1, optval; + struct addrinfo hints, *res, *ressave; + char portnumber[10], hbuf[NI_MAXHOST], sbuf[NI_MAXSERV]; - if ((sl=socket(PF_INET, SOCK_STREAM, 0))<0) { - motion_log(LOG_ERR, 1, "socket()"); + + snprintf(portnumber, sizeof(portnumber), "%u", port); + + memset(&hints, 0, sizeof(struct addrinfo)); + /* Use the AI_PASSIVE flag, which indicates we are using this address for a listen() */ + hints.ai_flags = AI_PASSIVE; + hints.ai_family = AF_UNSPEC; + hints.ai_socktype = SOCK_STREAM; + + optval = getaddrinfo(local ? "localhost" : NULL, portnumber, &hints, &res); + + if (optval != 0) { + motion_log(LOG_ERR, 1, "getaddrinfo() for webcam socket failed: %s", gai_strerror(optval)); + freeaddrinfo(res); return -1; } - memset(&sin, 0, sizeof(struct sockaddr_in)); - sin.sin_family=AF_INET; - sin.sin_port=htons(port); + ressave = res; + + while (res) { + /* create socket */ + sl = socket(res->ai_family, res->ai_socktype, res->ai_protocol); + + getnameinfo(res->ai_addr, res->ai_addrlen, hbuf, + sizeof(hbuf), sbuf, sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV); + + if (sl >= 0) { + optval = 1; + /* Reuse Address */ + setsockopt(sl, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof( int ) ); + + motion_log(LOG_INFO, 0, "webcam testing : %s addr: %s port: %s", + res->ai_family == AF_INET ? "IPV4":"IPV6", hbuf, sbuf); + + if (bind(sl, res->ai_addr, res->ai_addrlen) == 0){ + motion_log(LOG_INFO, 0, "webcam Binded : %s addr: %s port: %s", + res->ai_family == AF_INET ? "IPV4":"IPV6", hbuf, sbuf); + break; + } + + motion_log(LOG_ERR, 1, "webcam bind() failed, retrying "); + close(sl); + sl = -1; + } + motion_log(LOG_ERR, 1, "webcam socket failed, retrying"); + res = res->ai_next; + } + + freeaddrinfo(ressave); + + if (sl < 0) { + motion_log(LOG_ERR, 1, "webcam creating socket/bind ERROR"); + return -1; + } - if (local) - sin.sin_addr.s_addr=htonl(INADDR_LOOPBACK); - else - sin.sin_addr.s_addr=htonl(INADDR_ANY); - setsockopt(sl, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval)); - - if (bind(sl, (struct sockaddr *)&sin, sizeof(struct sockaddr_in))==-1) { - motion_log(LOG_ERR, 1, "bind()"); + if (listen(sl, DEF_MAXWEBQUEUE) == -1) { + motion_log(LOG_ERR, 1, "webcam listen() ERROR"); close(sl); - return -1; - } - - if (listen(sl, DEF_MAXWEBQUEUE)==-1) { - motion_log(LOG_ERR, 1, "listen()"); - close(sl); - return -1; + sl = -1; } return sl; @@ -77,16 +109,16 @@ static int http_acceptsock(int sl) { int sc; unsigned long i; - struct sockaddr_in sin; - socklen_t addrlen=sizeof(struct sockaddr_in); + struct sockaddr_storage sin; + socklen_t addrlen = sizeof(sin); - if ((sc=accept(sl, (struct sockaddr *)&sin, &addrlen))>=0) { - i=1; + if ((sc = accept(sl, (struct sockaddr *)&sin, &addrlen)) >= 0) { + i = 1; ioctl(sc, FIONBIO, &i); return sc; } - motion_log(LOG_ERR, 1, "accept()"); + motion_log(LOG_ERR, 1, "motion-stream accept()"); return -1; } @@ -126,15 +158,15 @@ static void webcam_flush(struct webcam *list, int *stream_count, int lim) * 'filepos' contains how much of the buffer * has already been written. */ - written=write(client->socket, + written = write(client->socket, client->tmpbuffer->ptr + client->filepos, client->tmpbuffer->size - client->filepos); /* If any data has been written, update the * data pointer and set the workdone flag */ - if (written>0) { - client->filepos+=written; + if (written > 0) { + client->filepos += written; workdone = 1; } } else @@ -146,7 +178,7 @@ static void webcam_flush(struct webcam *list, int *stream_count, int lim) * finished. */ if ( (client->filepos >= client->tmpbuffer->size) || - (written < 0 && errno!=EAGAIN)) { + (written < 0 && errno != EAGAIN)) { /* If no other clients need this buffer, free it */ if (--client->tmpbuffer->ref <= 0) { free(client->tmpbuffer->ptr); @@ -154,7 +186,7 @@ static void webcam_flush(struct webcam *list, int *stream_count, int lim) } /* Mark this client's buffer as empty */ - client->tmpbuffer=NULL; + client->tmpbuffer = NULL; client->nr++; } @@ -163,18 +195,18 @@ static void webcam_flush(struct webcam *list, int *stream_count, int lim) * greater than our configuration limit, disconnect * the client and free the webcam struct */ - if ( (written<0 && errno!=EAGAIN) || - (lim && !client->tmpbuffer && client->nr>lim) ) { + if ( (written < 0 && errno != EAGAIN) || + (lim && !client->tmpbuffer && client->nr > lim) ) { void *tmp; close(client->socket); if (client->next) - client->next->prev=client->prev; + client->next->prev = client->prev; - client->prev->next=client->next; - tmp=client; - client=client->prev; + client->prev->next = client->next; + tmp = client; + client = client->prev; free(tmp); (*stream_count)--; } @@ -198,9 +230,9 @@ static void webcam_flush(struct webcam *list, int *stream_count, int lim) */ static struct webcam_buffer *webcam_tmpbuffer(int size) { - struct webcam_buffer *tmpbuffer=mymalloc(sizeof(struct webcam_buffer)); - tmpbuffer->ref=0; - tmpbuffer->ptr=mymalloc(size); + struct webcam_buffer *tmpbuffer = mymalloc(sizeof(struct webcam_buffer)); + tmpbuffer->ref = 0; + tmpbuffer->ptr = mymalloc(size); return tmpbuffer; } @@ -219,7 +251,7 @@ static void webcam_add_client(struct webcam *list, int sc) "Content-Type: multipart/x-mixed-replace; boundary=--BoundaryString\r\n\r\n"; memset(new, 0, sizeof(struct webcam)); - new->socket=sc; + new->socket = sc; if ((new->tmpbuffer = webcam_tmpbuffer(sizeof(header))) == NULL) { motion_log(LOG_ERR, 1, "Error creating tmpbuffer in webcam_add_client"); @@ -228,13 +260,13 @@ static void webcam_add_client(struct webcam *list, int sc) new->tmpbuffer->size = sizeof(header)-1; } - new->prev=list; - new->next=list->next; + new->prev = list; + new->next = list->next; if (new->next) - new->next->prev=new; + new->next->prev = new; - list->next=new; + list->next = new; } @@ -244,20 +276,20 @@ static void webcam_add_write(struct webcam *list, struct webcam_buffer *tmpbuffe unsigned long int curtime; gettimeofday(&curtimeval, NULL); - curtime=curtimeval.tv_usec+1000000L*curtimeval.tv_sec; + curtime = curtimeval.tv_usec + 1000000L * curtimeval.tv_sec; while (list->next) { - list=list->next; + list = list->next; - if (list->tmpbuffer==NULL && ((curtime-list->last) >= 1000000L/fps)) { - list->last=curtime; - list->tmpbuffer=tmpbuffer; + if (list->tmpbuffer == NULL && ((curtime - list->last) >= 1000000L / fps)) { + list->last = curtime; + list->tmpbuffer = tmpbuffer; tmpbuffer->ref++; - list->filepos=0; + list->filepos = 0; } } - if (tmpbuffer->ref<=0) { + if (tmpbuffer->ref <= 0) { free(tmpbuffer->ptr); free(tmpbuffer); } @@ -272,9 +304,9 @@ static void webcam_add_write(struct webcam *list, struct webcam_buffer *tmpbuffe static int webcam_check_write(struct webcam *list) { while (list->next) { - list=list->next; + list = list->next; - if (list->tmpbuffer==NULL) + if (list->tmpbuffer == NULL) return 1; } return 0; @@ -287,9 +319,9 @@ static int webcam_check_write(struct webcam *list) */ int webcam_init(struct context *cnt) { - cnt->webcam.socket=http_bindsock(cnt->conf.webcam_port, cnt->conf.webcam_localhost); - cnt->webcam.next=NULL; - cnt->webcam.prev=NULL; + cnt->webcam.socket = http_bindsock(cnt->conf.webcam_port, cnt->conf.webcam_localhost); + cnt->webcam.next = NULL; + cnt->webcam.prev = NULL; return cnt->webcam.socket; } @@ -310,8 +342,8 @@ void webcam_stop(struct context *cnt) cnt->webcam.socket = -1; while (next) { - list=next; - next=list->next; + list = next; + next = list->next; if (list->tmpbuffer) { free(list->tmpbuffer->ptr); @@ -347,7 +379,7 @@ void webcam_put(struct context *cnt, unsigned char *image) struct timeval timeout; struct webcam_buffer *tmpbuffer; fd_set fdread; - int sl=cnt->webcam.socket; + int sl = cnt->webcam.socket; int sc; /* the following string has an extra 16 chars at end for length */ const char jpeghead[] = "--BoundaryString\r\n" @@ -359,8 +391,8 @@ void webcam_put(struct context *cnt, unsigned char *image) /* timeout struct used to timeout the time we wait for a client * and we do not wait at all */ - timeout.tv_sec=0; - timeout.tv_usec=0; + timeout.tv_sec = 0; + timeout.tv_usec = 0; FD_ZERO(&fdread); FD_SET(cnt->webcam.socket, &fdread); @@ -372,7 +404,7 @@ void webcam_put(struct context *cnt, unsigned char *image) */ if ((cnt->stream_count < DEF_MAXSTREAMS) && (select(sl+1, &fdread, NULL, NULL, &timeout)>0)) { - sc=http_acceptsock(sl); + sc = http_acceptsock(sl); webcam_add_client(&cnt->webcam, sc); cnt->stream_count++; } diff --git a/webhttpd.c b/webhttpd.c index 1c40f5e0..a563f1f3 100644 --- a/webhttpd.c +++ b/webhttpd.c @@ -10,10 +10,7 @@ * See also the file 'COPYING'. * */ -//#include "motion.h" #include "webhttpd.h" /* already includes motion.h */ -//#include -//#include #include #include #include @@ -24,7 +21,7 @@ pthread_mutex_t httpd_mutex; int warningkill; // This is a dummy variable use to kill warnings when not checking sscanf and similar functions -static const char* ini_template = +static const char *ini_template = "Motion "VERSION"\n" "\n"; @@ -36,11 +33,11 @@ static const char *set_template = "}\nMotion "VERSION"\n" "\n"; -static const char* end_template = +static const char *end_template = "\n" "\n"; -static const char* ok_response = +static const char *ok_response = "HTTP/1.1 200 OK\r\n" "Server: Motion-httpd/"VERSION"\r\n" "Connection: close\r\n" @@ -51,7 +48,7 @@ static const char* ok_response = "Pragma: no-cache\r\n" "Content-type: text/html\r\n\r\n"; -static const char* ok_response_raw = +static const char *ok_response_raw = "HTTP/1.1 200 OK\r\n" "Server: Motion-httpd/"VERSION"\r\n" "Connection: close\r\n" @@ -63,7 +60,7 @@ static const char* ok_response_raw = "Content-type: text/plain\r\n\r\n"; -static const char* bad_request_response = +static const char *bad_request_response = "HTTP/1.0 400 Bad Request\r\n" "Content-type: text/html\r\n\r\n" "\n" @@ -73,12 +70,12 @@ static const char* bad_request_response = "\n" "\n"; -static const char* bad_request_response_raw = +static const char *bad_request_response_raw = "HTTP/1.0 400 Bad Request\r\n" "Content-type: text/plain\r\n\r\n" "Bad Request"; -static const char* not_found_response_template = +static const char *not_found_response_template = "HTTP/1.0 404 Not Found\r\n" "Content-type: text/html\r\n\r\n" "\n" @@ -88,12 +85,12 @@ static const char* not_found_response_template = "\n" "\n"; -static const char* not_found_response_template_raw = +static const char *not_found_response_template_raw = "HTTP/1.0 404 Not Found\r\n" "Content-type: text/plain\r\n\r\n" "Not Found"; -static const char* not_found_response_valid = +static const char *not_found_response_valid = "HTTP/1.0 404 Not Valid\r\n" "Content-type: text/html\r\n\r\n" "\n" @@ -103,12 +100,12 @@ static const char* not_found_response_valid = "\n" "\n"; -static const char* not_found_response_valid_raw = +static const char *not_found_response_valid_raw = "HTTP/1.0 404 Not Valid\r\n" "Content-type: text/plain\r\n\r\n" "The requested URL is not valid."; -static const char* not_valid_syntax = +static const char *not_valid_syntax = "HTTP/1.0 404 Not Valid Syntax\r\n" "Content-type: text/html\r\n\r\n" "\n" @@ -117,48 +114,48 @@ static const char* not_valid_syntax = "\n" "\n"; -static const char* not_valid_syntax_raw = +static const char *not_valid_syntax_raw = "HTTP/1.0 404 Not Valid Syntax\r\n" "Content-type: text/plain\r\n\r\n" "Not Valid Syntax\n"; -static const char* not_track = +static const char *not_track = "HTTP/1.0 200 OK\r\n" "Content-type: text/html\r\n\r\n" "\n" "\n" "

Tracking Not Enabled

\n"; -static const char* not_track_raw = +static const char *not_track_raw = "HTTP/1.0 200 OK\r\n" "Content-type: text/plain\r\n\r\n" "Tracking Not Enabled"; -static const char* track_error = +static const char *track_error = "HTTP/1.0 200 OK\r\n" "Content-type: text/html\r\n\r\n" "\n" "\n" "

Track Error

\n"; -static const char* track_error_raw = +static const char *track_error_raw = "HTTP/1.0 200 OK\r\n" "Content-type: text/plain\r\n\r\n" "Track Error"; -static const char* error_value = +static const char *error_value = "HTTP/1.0 200 OK\r\n" "Content-type: text/html\r\n\r\n" "\n" "\n" "

Value Error

\n"; -static const char* error_value_raw = +static const char *error_value_raw = "HTTP/1.0 200 OK\r\n" "Content-type: text/plain\r\n\r\n" "Value Error"; -static const char* not_found_response_valid_command = +static const char *not_found_response_valid_command = "HTTP/1.0 404 Not Valid Command\r\n" "Content-type: text/html\r\n\r\n" "\n" @@ -168,12 +165,12 @@ static const char* not_found_response_valid_command = "\n" "\n"; -static const char* not_found_response_valid_command_raw = +static const char *not_found_response_valid_command_raw = "HTTP/1.0 404 Not Valid Command\r\n" "Content-type: text/plain\n\n" "Not Valid Command\n"; -static const char* bad_method_response_template = +static const char *bad_method_response_template = "HTTP/1.0 501 Method Not Implemented\r\n" "Content-type: text/html\r\n\r\n" "\n" @@ -183,7 +180,7 @@ static const char* bad_method_response_template = "\n" "\n"; -static const char* bad_method_response_template_raw = +static const char *bad_method_response_template_raw = "HTTP/1.0 501 Method Not Implemented\r\n" "Content-type: text/plain\r\n\r\n" "Method Not Implemented\n"; @@ -192,7 +189,7 @@ static const char *request_auth_response_template= "HTTP/1.0 401 Authorization Required\r\n" "WWW-Authenticate: Basic realm=\"Motion Security Access\"\r\n"; -static void send_template_ini_client(int client_socket, const char* template) +static void send_template_ini_client(int client_socket, const char *template) { ssize_t nwrite = 0; nwrite = write(client_socket, ok_response, strlen (ok_response)); @@ -229,7 +226,7 @@ static void send_template_end_client(int client_socket) nwrite = write(client_socket, end_template, strlen(end_template)); } -static void response_client(int client_socket, const char* template, char *back) +static void response_client(int client_socket, const char *template, char *back) { ssize_t nwrite = 0; nwrite = write(client_socket, template, strlen(template)); @@ -304,8 +301,8 @@ static char *replace(const char *str, const char *old, const char *new) static void url_decode(char *urlencoded, size_t length) { - char *data=urlencoded; - char *urldecoded=urlencoded; + char *data = urlencoded; + char *urldecoded = urlencoded; while (length > 0) { if (*data == '%') { @@ -325,12 +322,12 @@ static void url_decode(char *urlencoded, size_t length) *urldecoded++ = c[0]; *urldecoded++ = c[1]; } - } else if (*data=='+') { - *urldecoded++=' '; + } else if (*data == '+') { + *urldecoded++ = ' '; } else { - *urldecoded++=*data; + *urldecoded++ = *data; } data++; length--; @@ -353,8 +350,8 @@ static unsigned short int config(char *pointer, char *res, unsigned short int le unsigned short int i; struct context **cnt = userdata; - warningkill = sscanf (pointer, "%256[a-z]%c", command , &question); - if (!strcmp(command,"list")) { + warningkill = sscanf(pointer, "%256[a-z]%c", command , &question); + if (!strcmp(command, "list")) { pointer = pointer + 4; length_uri = length_uri - 4; if (length_uri == 0) { @@ -374,7 +371,7 @@ static unsigned short int config(char *pointer, char *res, unsigned short int le value = config_params[i].print(cnt, NULL, i, thread); if (value == NULL) { - retval=NULL; + retval = NULL; /* Only get the thread value for main thread */ if (thread == 0) @@ -388,11 +385,11 @@ static unsigned short int config(char *pointer, char *res, unsigned short int le free(retval); retval = strdup("No threads"); } else { - char *temp=retval; + char *temp = retval; size_t retval_miss = 0; size_t retval_len = strlen(retval); - unsigned short int ind=0; - char thread_strings[1024]={'\0'}; + unsigned short int ind = 0; + char thread_strings[1024] = {'\0'}; while (retval_miss != retval_len) { while (*temp != '\n') { @@ -429,21 +426,21 @@ static unsigned short int config(char *pointer, char *res, unsigned short int le } } else { - sprintf(res, "
  • %s = %s
  • \n",thread, + sprintf(res, "
  • %s = %s
  • \n", thread, config_params[i].param_name, config_params[i].param_name, value); } send_template(client_socket, res); } - sprintf(res, "<– back",thread); + sprintf(res, "<– back", thread); send_template(client_socket, res); send_template_end_client(client_socket); } else { send_template_ini_client_raw(client_socket); for (i=0; config_params[i].param_name != NULL; i++) { - value=config_params[i].print(cnt, NULL, i, thread); + value = config_params[i].print(cnt, NULL, i, thread); if (value == NULL) - value=config_params[i].print(cnt, NULL, i, 0); + value = config_params[i].print(cnt, NULL, i, 0); sprintf(res, "%s = %s\n", config_params[i].param_name, value); send_template_raw(client_socket, res); } @@ -455,7 +452,7 @@ static unsigned short int config(char *pointer, char *res, unsigned short int le else response_client(client_socket, not_found_response_valid_command_raw, NULL); } - } else if (!strcmp(command,"set")) { + } else if (!strcmp(command, "set")) { /* set?param_name=value */ pointer = pointer + 3; length_uri = length_uri - 3; @@ -464,13 +461,13 @@ static unsigned short int config(char *pointer, char *res, unsigned short int le length_uri--; warningkill = sscanf(pointer,"%256[-0-9a-z_]%c", command, &question); /*check command , question == '=' length_uri too*/ - if ((question == '=') && (command[0]!='\0')) { + if ((question == '=') && (command[0] != '\0')) { length_uri = length_uri - strlen(command) - 1; pointer = pointer + strlen(command) + 1; /* check if command exists and type of command and not end of URI */ i=0; while (config_params[i].param_name != NULL) { - if ((thread != 0) && (config_params[i].main_thread)){ + if ((thread != 0) && (config_params[i].main_thread)) { i++; continue; } @@ -482,12 +479,12 @@ static unsigned short int config(char *pointer, char *res, unsigned short int le if (config_params[i].param_name) { if (length_uri > 0) { - char Value[1024]={'\0'}; + char Value[1024] = {'\0'}; warningkill = sscanf(pointer,"%1024s", Value); length_uri = length_uri - strlen(Value); if ( (length_uri == 0) && (strlen(Value) > 0) ) { /* FIXME need to assure that is a valid value */ - url_decode(Value,strlen(Value)); + url_decode(Value, strlen(Value)); conf_cmdparse(cnt + thread, config_params[i].param_name, Value); if (cnt[0]->conf.control_html_output) { sprintf(res, @@ -495,11 +492,11 @@ static unsigned short int config(char *pointer, char *res, unsigned short int le "

    \nThread %hu\n" "
    • %s = %s" "
    Done", - thread, thread, thread,config_params[i].param_name, + thread, thread, thread, config_params[i].param_name, config_params[i].param_name, Value); send_template_ini_client(client_socket, ini_template); - send_template(client_socket,res); + send_template(client_socket, res); send_template_end_client(client_socket); } else { send_template_ini_client_raw(client_socket); @@ -517,20 +514,20 @@ static unsigned short int config(char *pointer, char *res, unsigned short int le char *type = NULL; type = strdup(config_type(&config_params[i])); - if (!strcmp(type,"string")) { + if (!strcmp(type, "string")) { char *value = NULL; conf_cmdparse(cnt+thread, config_params[i].param_name, value); free(type); type = strdup("(null)"); - } else if (!strcmp(type,"int")) { + } else if (!strcmp(type, "int")) { free(type); type = strdup("0"); conf_cmdparse(cnt+thread, config_params[i].param_name, type); - } else if (!strcmp(type,"short")) { + } else if (!strcmp(type, "short")) { free(type); type = strdup("0"); conf_cmdparse(cnt+thread, config_params[i].param_name, type); - } else if (!strcmp(type,"bool")) { + } else if (!strcmp(type, "bool")) { free(type); type = strdup("off"); conf_cmdparse(cnt+thread, config_params[i].param_name, type); @@ -551,7 +548,7 @@ static unsigned short int config(char *pointer, char *res, unsigned short int le send_template_end_client(client_socket); } else { send_template_ini_client_raw(client_socket); - sprintf(res, "%s = %s\nDone\n", config_params[i].param_name,type); + sprintf(res, "%s = %s\nDone\n", config_params[i].param_name, type); send_template_raw(client_socket, res); } free(type); @@ -566,13 +563,13 @@ static unsigned short int config(char *pointer, char *res, unsigned short int le } } else { /* Show param_name dialogue only for html output */ - if ( (cnt[0]->conf.control_html_output) && (command[0]!='\0') && + if ( (cnt[0]->conf.control_html_output) && (command[0] != '\0') && (((length_uri = length_uri - strlen(command)) == 0 )) ) { i=0; while (config_params[i].param_name != NULL) { - if ((thread != 0) && (config_params[i].main_thread)){ + if ((thread != 0) && (config_params[i].main_thread)) { i++; - continue; + continue; } if (!strcasecmp(command, config_params[i].param_name)) @@ -595,7 +592,7 @@ static unsigned short int config(char *pointer, char *res, unsigned short int le text_help = replace(sharp, "\n#", "
    "); send_template_ini_client(client_socket, ini_template); - if (!strcmp ("bool",config_type(&config_params[i])) ){ + if (!strcmp ("bool", config_type(&config_params[i])) ) { char option[80] = {'\0'}; if ((value == NULL) && (thread != 0)) @@ -618,10 +615,10 @@ static unsigned short int config(char *pointer, char *res, unsigned short int le "[help]" "\n
    %s", thread, thread, config_params[i].param_name, config_params[i].param_name, - option, TWIKI_URL,config_params[i].param_name, text_help); + option, TWIKI_URL, config_params[i].param_name, text_help); }else{ - if (value == NULL){ + if (value == NULL) { if (thread != 0) /* get the value from main thread for the rest of threads */ value = config_params[i].print(cnt, NULL, i, 0); @@ -688,7 +685,7 @@ static unsigned short int config(char *pointer, char *res, unsigned short int le else response_client(client_socket, not_found_response_valid_command_raw, NULL); } - } else if (!strcmp(command,"get")) { + } else if (!strcmp(command, "get")) { /* get?query=param_name */ pointer = pointer + 3; length_uri = length_uri - 3; @@ -699,7 +696,7 @@ static unsigned short int config(char *pointer, char *res, unsigned short int le length_uri--; warningkill = sscanf(pointer,"%256[-0-9a-z]%c", command, &question); - if ( (question == '=') && (!strcmp(command,"query")) ) { + if ( (question == '=') && (!strcmp(command, "query")) ) { pointer = pointer + 6; length_uri = length_uri - 6; warningkill = sscanf(pointer, "%256[-0-9a-z_]", command); @@ -708,9 +705,9 @@ static unsigned short int config(char *pointer, char *res, unsigned short int le if (length_uri == 0) { const char *value = NULL; - i=0; + i = 0; while (config_params[i].param_name != NULL) { - if ((thread != 0) && (config_params[i].main_thread)){ + if ((thread != 0) && (config_params[i].main_thread)) { i++; continue; } @@ -723,9 +720,9 @@ static unsigned short int config(char *pointer, char *res, unsigned short int le solved with config_type */ if (config_params[i].param_name) { - const char *type=NULL; + const char *type = NULL; type = config_type(&config_params[i]); - if (!strcmp(type,"unknown")) { + if (!strcmp(type, "unknown")) { /*error doesn't exists this param_name */ if (cnt[0]->conf.control_html_output) response_client(client_socket, not_found_response_valid_command, NULL); @@ -746,9 +743,9 @@ static unsigned short int config(char *pointer, char *res, unsigned short int le text_help = replace(sharp, "\n#", "
    "); if (value == NULL) - value=config_params[i].print(cnt, NULL, i, 0); + value = config_params[i].print(cnt, NULL, i, 0); if (cnt[0]->conf.control_html_output) { - send_template_ini_client(client_socket,ini_template); + send_template_ini_client(client_socket, ini_template); sprintf(res, "<– back

    \n" "Thread %hu
    \n
    • %s = %s   " "  " @@ -762,7 +759,7 @@ static unsigned short int config(char *pointer, char *res, unsigned short int le free(text_help); } else { send_template_ini_client_raw(client_socket); - sprintf(res, "%s = %s\nDone\n", config_params[i].param_name,value); + sprintf(res, "%s = %s\nDone\n", config_params[i].param_name, value); send_template_raw(client_socket, res); } } @@ -812,7 +809,7 @@ static unsigned short int config(char *pointer, char *res, unsigned short int le else response_client(client_socket, not_valid_syntax_raw, NULL); } - } else if (!strcmp(command,"write")) { + } else if (!strcmp(command, "write")) { pointer = pointer + 5; length_uri = length_uri - 5; if (length_uri == 0) { @@ -839,7 +836,7 @@ static unsigned short int config(char *pointer, char *res, unsigned short int le } else if (!strcmp(command, "writeyes")) { pointer = pointer + 8; length_uri = length_uri - 8; - if (length_uri==0) { + if (length_uri == 0) { conf_print(cnt); if (cnt[0]->conf.control_html_output) { send_template_ini_client(client_socket, ini_template); @@ -887,8 +884,8 @@ static unsigned short int action(char *pointer, char *res, unsigned short int le struct context **cnt = userdata; unsigned short int i = 0; - warningkill = sscanf (pointer, "%256[a-z]" , command); - if (!strcmp(command,"makemovie")) { + warningkill = sscanf(pointer, "%256[a-z]" , command); + if (!strcmp(command, "makemovie")) { pointer = pointer + 9; length_uri = length_uri - 9; if (length_uri == 0) { @@ -896,9 +893,9 @@ static unsigned short int action(char *pointer, char *res, unsigned short int le if (thread == 0) { while (cnt[++i]) - cnt[i]->makemovie=1; + cnt[i]->makemovie = 1; } else { - cnt[thread]->makemovie=1; + cnt[thread]->makemovie = 1; } if (cnt[0]->conf.control_html_output) { @@ -915,11 +912,11 @@ static unsigned short int action(char *pointer, char *res, unsigned short int le } else { /*error*/ if (cnt[0]->conf.control_html_output) - response_client(client_socket,not_found_response_valid_command,NULL); + response_client(client_socket, not_found_response_valid_command, NULL); else - response_client(client_socket,not_found_response_valid_command_raw,NULL); + response_client(client_socket, not_found_response_valid_command_raw, NULL); } - } else if (!strcmp(command,"snapshot")) { + } else if (!strcmp(command, "snapshot")) { pointer = pointer + 8; length_uri = length_uri - 8; if (length_uri == 0) { @@ -927,9 +924,9 @@ static unsigned short int action(char *pointer, char *res, unsigned short int le if (thread == 0) { while (cnt[++i]) - cnt[i]->snapshot=1; + cnt[i]->snapshot = 1; } else { - cnt[thread]->snapshot=1; + cnt[thread]->snapshot = 1; } cnt[thread]->snapshot = 1; @@ -974,10 +971,10 @@ static unsigned short int action(char *pointer, char *res, unsigned short int le } else { motion_log(LOG_DEBUG, 0, "httpd restart thread %d", thread); if (cnt[thread]->running) { - cnt[thread]->makemovie=1; - cnt[thread]->finish=1; + cnt[thread]->makemovie = 1; + cnt[thread]->finish = 1; } - cnt[thread]->restart=1; + cnt[thread]->restart = 1; if (cnt[0]->conf.control_html_output) { send_template_ini_client(client_socket, ini_template); sprintf(res, "<– back

      \n" @@ -992,11 +989,11 @@ static unsigned short int action(char *pointer, char *res, unsigned short int le } } else { if (cnt[0]->conf.control_html_output) - response_client(client_socket,not_found_response_valid_command,NULL); + response_client(client_socket, not_found_response_valid_command, NULL); else - response_client(client_socket,not_found_response_valid_command_raw,NULL); + response_client(client_socket, not_found_response_valid_command_raw, NULL); } - } else if (!strcmp(command,"quit")) { + } else if (!strcmp(command, "quit")) { pointer = pointer + 4; length_uri = length_uri - 4; if (length_uri == 0) { @@ -1018,10 +1015,10 @@ static unsigned short int action(char *pointer, char *res, unsigned short int le return 0; // to quit } else { motion_log(LOG_DEBUG, 0, "httpd quit thread %d", thread); - cnt[thread]->restart=0; - cnt[thread]->makemovie=1; - cnt[thread]->finish=1; - cnt[thread]->watchdog=WATCHDOG_OFF; + cnt[thread]->restart = 0; + cnt[thread]->makemovie = 1; + cnt[thread]->finish = 1; + cnt[thread]->watchdog = WATCHDOG_OFF; if (cnt[0]->conf.control_html_output) { send_template_ini_client(client_socket, ini_template); sprintf(res, "<– back

      \n" @@ -1060,12 +1057,12 @@ static unsigned short int action(char *pointer, char *res, unsigned short int le static unsigned short int detection(char *pointer, char *res, unsigned short int length_uri, unsigned short int thread, int client_socket, void *userdata) { - char command[256]={'\0'}; - struct context **cnt=userdata; + char command[256] = {'\0'}; + struct context **cnt = userdata; unsigned short int i = 0; - warningkill = sscanf (pointer, "%256[a-z]" , command); - if (!strcmp(command,"status")) { + warningkill = sscanf(pointer, "%256[a-z]" , command); + if (!strcmp(command, "status")) { pointer = pointer + 6; length_uri = length_uri - 6; if (length_uri == 0) { @@ -1079,7 +1076,7 @@ static unsigned short int detection(char *pointer, char *res, unsigned short int send_template(client_socket, res); send_template_end_client(client_socket); } else { - sprintf(res, "Thread %hu Detection status %s\n",thread, + sprintf(res, "Thread %hu Detection status %s\n", thread, (!cnt[thread]->running)? "NOT RUNNING": (cnt[thread]->pause)? "PAUSE":"ACTIVE"); send_template_ini_client_raw(client_socket); send_template_raw(client_socket, res); @@ -1106,7 +1103,7 @@ static unsigned short int detection(char *pointer, char *res, unsigned short int } if (cnt[0]->conf.control_html_output) { - send_template_ini_client(client_socket,ini_template); + send_template_ini_client(client_socket, ini_template); sprintf(res, "<– back

      \nThread %hu" " Detection resumed\n", thread, thread); send_template(client_socket, res); @@ -1123,10 +1120,10 @@ static unsigned short int detection(char *pointer, char *res, unsigned short int else response_client(client_socket, not_found_response_valid_command_raw, NULL); } - } else if (!strcmp(command,"pause")){ + } else if (!strcmp(command, "pause")) { pointer = pointer + 5; length_uri = length_uri - 5; - if (length_uri==0) { + if (length_uri == 0) { /*call pause*/ if (thread == 0) { @@ -1141,7 +1138,7 @@ static unsigned short int detection(char *pointer, char *res, unsigned short int send_template_ini_client(client_socket, ini_template); sprintf(res, "<– back

      \nThread %hu" " Detection paused\n", thread, thread); - send_template(client_socket,res); + send_template(client_socket, res); send_template_end_client(client_socket); } else { send_template_ini_client_raw(client_socket); @@ -1155,33 +1152,33 @@ static unsigned short int detection(char *pointer, char *res, unsigned short int else response_client(client_socket, not_found_response_valid_command_raw, NULL); } - } else if (!strcmp(command,"connection")){ + } else if (!strcmp(command, "connection")) { pointer = pointer + 10; length_uri = length_uri - 10; - if (length_uri==0) { + if (length_uri == 0) { /*call connection*/ if (cnt[0]->conf.control_html_output) { send_template_ini_client(client_socket, ini_template); sprintf(res, "<– back

      \n", thread); - send_template(client_socket,res); - if (thread == 0){ + send_template(client_socket, res); + if (thread == 0) { do{ - sprintf(res, "Thread %hu %s
      \n",i, + sprintf(res, "Thread %hu %s
      \n", i, (!cnt[i]->running)? "NOT RUNNING" : (cnt[i]->lost_connection)?CONNECTION_KO:CONNECTION_OK); - send_template(client_socket,res); + send_template(client_socket, res); }while (cnt[++i]); }else{ sprintf(res, "Thread %hu %s\n", thread, (!cnt[thread]->running)? "NOT RUNNING" : (cnt[thread]->lost_connection)? CONNECTION_KO: CONNECTION_OK); - send_template(client_socket,res); + send_template(client_socket, res); } send_template_end_client(client_socket); } else { send_template_ini_client_raw(client_socket); - if (thread == 0){ + if (thread == 0) { do{ sprintf(res, "Thread %hu %s\n", i, (!cnt[i]->running)? "NOT RUNNING" : @@ -1229,7 +1226,8 @@ static unsigned short int track(char *pointer, char *res, unsigned short int len warningkill = sscanf(pointer, "%256[a-z]%c", command, &question); if (!strcmp(command, "set")) { - pointer=pointer+3;length_uri=length_uri-3; + pointer = pointer+3; + length_uri = length_uri-3; /* FIXME need to check each value */ /* Relative movement set?pan=0&tilt=0 | set?pan=0 | set?tilt=0*/ /* Absolute movement set?x=0&y=0 | set?x=0 | set?y=0 */ @@ -1246,7 +1244,7 @@ static unsigned short int track(char *pointer, char *res, unsigned short int len /* set?x=value&y=value */ /* pan= or x= | tilt= or y= */ - warningkill = sscanf (pointer, "%256[a-z]%c" , command, &question); + warningkill = sscanf(pointer, "%256[a-z]%c" , command, &question); if (( question != '=' ) || (command[0] == '\0')) { /* no valid syntax */ @@ -1267,7 +1265,7 @@ static unsigned short int track(char *pointer, char *res, unsigned short int len pointer = pointer + 3; length_uri = length_uri - 3; pan = 1; - if ((warningkill = sscanf(pointer, "%10[-0-9]", panvalue))){ + if ((warningkill = sscanf(pointer, "%10[-0-9]", panvalue))) { pointer = pointer + strlen(panvalue); length_uri = length_uri - strlen(panvalue); } @@ -1276,7 +1274,7 @@ static unsigned short int track(char *pointer, char *res, unsigned short int len pointer = pointer + 4; length_uri = length_uri - 4; tilt = 1; - if ((warningkill = sscanf(pointer, "%10[-0-9]", tiltvalue))){ + if ((warningkill = sscanf(pointer, "%10[-0-9]", tiltvalue))) { pointer = pointer + strlen(tiltvalue); length_uri = length_uri - strlen(tiltvalue); } @@ -1285,7 +1283,7 @@ static unsigned short int track(char *pointer, char *res, unsigned short int len pointer++; length_uri--; X = 1; - if ((warningkill = sscanf(pointer, "%10[-0-9]", x_value))){ + if ((warningkill = sscanf(pointer, "%10[-0-9]", x_value))) { pointer = pointer + strlen(x_value); length_uri = length_uri - strlen(x_value); } @@ -1294,7 +1292,7 @@ static unsigned short int track(char *pointer, char *res, unsigned short int len pointer++; length_uri--; Y = 1; - if ((warningkill = sscanf (pointer, "%10[-0-9]" , y_value))){ + if ((warningkill = sscanf(pointer, "%10[-0-9]" , y_value))) { pointer = pointer + strlen(y_value); length_uri = length_uri - strlen(y_value); } @@ -1308,9 +1306,7 @@ static unsigned short int track(char *pointer, char *res, unsigned short int len return 1; } - /* first value check for error */ - if ( !warningkill ) { motion_log(LOG_WARNING, 0, "httpd debug race 3"); @@ -1322,8 +1318,6 @@ static unsigned short int track(char *pointer, char *res, unsigned short int len return 1; } - - /* Only one parameter (pan= ,tilt= ,x= ,y= ) */ if (length_uri == 0) { if (pan) { @@ -1375,8 +1369,8 @@ static unsigned short int track(char *pointer, char *res, unsigned short int len cent.x = 0; cent.y = atoi(tiltvalue); // Add the number of frame to skip for motion detection - cnt[thread]->moved=track_move(tiltcnt, tiltcnt->video_dev, ¢, &tiltcnt->imgs, 1); - if (cnt[thread]->moved){ + cnt[thread]->moved = track_move(tiltcnt, tiltcnt->video_dev, ¢, &tiltcnt->imgs, 1); + if (cnt[thread]->moved) { if (cnt[0]->conf.control_html_output) { send_template_ini_client(client_socket, ini_template); sprintf(res, "<– back

      " @@ -1387,7 +1381,7 @@ static unsigned short int track(char *pointer, char *res, unsigned short int len send_template_end_client(client_socket); } else { send_template_ini_client_raw(client_socket); - sprintf(res, "track set relative tilt=%s\nDone\n",tiltvalue); + sprintf(res, "track set relative tilt=%s\nDone\n", tiltvalue); send_template_raw(client_socket, res); } } else { @@ -1400,7 +1394,7 @@ static unsigned short int track(char *pointer, char *res, unsigned short int len else response_client(client_socket, track_error_raw, NULL); } - } else if (X){ + } else if (X) { /* X */ setcnt = cnt[thread]; // 1000 is out of range for pwc @@ -1466,10 +1460,10 @@ static unsigned short int track(char *pointer, char *res, unsigned short int len /* Check Second parameter */ - warningkill = sscanf (pointer, "%c%256[a-z]" ,&question, command); - if ( ( question != '&' ) || (command[0] == '\0') ){ + warningkill = sscanf(pointer, "%c%256[a-z]" , &question, command); + if ( ( question != '&' ) || (command[0] == '\0') ) { motion_log(LOG_WARNING, 0, "httpd debug race 4"); - if ( strstr(pointer,"&")){ + if ( strstr(pointer, "&")) { if (cnt[0]->conf.control_html_output) response_client(client_socket, error_value, NULL); else @@ -1488,7 +1482,7 @@ static unsigned short int track(char *pointer, char *res, unsigned short int len pointer++; length_uri--; - if (!strcmp(command, "pan")){ + if (!strcmp(command, "pan")) { pointer = pointer + 3; length_uri = length_uri - 3; if ( (pan) || (!tilt) || (X) || (Y) ) { @@ -1501,7 +1495,7 @@ static unsigned short int track(char *pointer, char *res, unsigned short int len return 1; } pan=2; - warningkill = sscanf (pointer, "%c%10[-0-9]" ,&question, panvalue); + warningkill = sscanf(pointer, "%c%10[-0-9]" , &question, panvalue); } else if (!strcmp(command, "tilt")) { pointer = pointer + 4; @@ -1516,7 +1510,7 @@ static unsigned short int track(char *pointer, char *res, unsigned short int len return 1; } tilt = 2; - warningkill = sscanf (pointer, "%c%10[-0-9]" ,&question, tiltvalue); + warningkill = sscanf(pointer, "%c%10[-0-9]" , &question, tiltvalue); } else if (!strcmp(command, "x")) { pointer++; @@ -1532,12 +1526,12 @@ static unsigned short int track(char *pointer, char *res, unsigned short int len return 1; } X = 2; - warningkill = sscanf (pointer, "%c%10[-0-9]" ,&question, x_value); + warningkill = sscanf(pointer, "%c%10[-0-9]" , &question, x_value); } else if (!strcmp(command, "y")) { pointer++; length_uri--; - if ( (Y) || (!X) || (pan) || (tilt) ){ + if ( (Y) || (!X) || (pan) || (tilt) ) { motion_log(LOG_WARNING, 0, "httpd debug race 8"); /* no valid syntax */ if (cnt[0]->conf.control_html_output) @@ -1547,7 +1541,7 @@ static unsigned short int track(char *pointer, char *res, unsigned short int len return 1; } Y = 2; - warningkill = sscanf (pointer, "%c%10[-0-9]" ,&question, y_value); + warningkill = sscanf(pointer, "%c%10[-0-9]" , &question, y_value); } else { motion_log(LOG_WARNING, 0, "httpd debug race 9"); /* no valid syntax */ @@ -1568,7 +1562,7 @@ static unsigned short int track(char *pointer, char *res, unsigned short int len else response_client(client_socket, not_valid_syntax_raw, NULL); return 1; - }else if (( question == '=') && ( warningkill == 1)){ + }else if (( question == '=') && ( warningkill == 1)) { motion_log(LOG_WARNING, 0, "httpd debug race 11"); if (cnt[0]->conf.control_html_output) response_client(client_socket, error_value, NULL); @@ -1578,15 +1572,15 @@ static unsigned short int track(char *pointer, char *res, unsigned short int len } - if (pan == 2){ + if (pan == 2) { pointer = pointer + strlen(panvalue) + 1; length_uri = length_uri - strlen(panvalue) - 1; } - else if (tilt == 2){ + else if (tilt == 2) { pointer = pointer + strlen(tiltvalue) + 1; length_uri = length_uri - strlen(tiltvalue) - 1; } - else if (X == 2){ + else if (X == 2) { pointer = pointer + strlen(x_value) + 1; length_uri = length_uri - strlen(x_value) - 1; } @@ -1613,7 +1607,7 @@ static unsigned short int track(char *pointer, char *res, unsigned short int len setcnt = cnt[thread]; cnt[thread]->moved = track_center(setcnt, setcnt->video_dev, 1, atoi(x_value), atoi(y_value)); if (cnt[thread]->moved) { - if (cnt[0]->conf.control_html_output){ + if (cnt[0]->conf.control_html_output) { send_template_ini_client(client_socket, ini_template); sprintf(res, "<– back

      " "Thread %hu
      \n" @@ -1650,7 +1644,7 @@ static unsigned short int track(char *pointer, char *res, unsigned short int len cent.x = atoi(panvalue); // Add the number of frame to skip for motion detection cnt[thread]->moved = track_move(relativecnt, relativecnt->video_dev, ¢, &relativecnt->imgs, 1); - if (cnt[thread]->moved){ + if (cnt[thread]->moved) { /* move tilt */ relativecnt = cnt[thread]; cent.width = relativecnt->imgs.width; @@ -1659,7 +1653,7 @@ static unsigned short int track(char *pointer, char *res, unsigned short int len cent.y = atoi(tiltvalue); SLEEP(1,0); cnt[thread]->moved = track_move(relativecnt, relativecnt->video_dev, ¢, &relativecnt->imgs, 1); - if (cnt[thread]->moved){ + if (cnt[thread]->moved) { if (cnt[0]->conf.control_html_output) { send_template_ini_client(client_socket, ini_template); sprintf(res, "<– back

      " @@ -1721,7 +1715,7 @@ static unsigned short int track(char *pointer, char *res, unsigned short int len else response_client(client_socket, not_found_response_valid_command_raw, NULL); } - } else if (!strcmp(command,"status")) { + } else if (!strcmp(command, "status")) { pointer = pointer+6; length_uri = length_uri-6; if (length_uri==0) { @@ -1733,7 +1727,7 @@ static unsigned short int track(char *pointer, char *res, unsigned short int len send_template(client_socket, res); send_template_end_client(client_socket); } else { - sprintf(res, "Thread %hu\n track auto %s\nDone\n",thread, + sprintf(res, "Thread %hu\n track auto %s\nDone\n", thread, (cnt[thread]->track.active)? "enabled":"disabled"); send_template_ini_client_raw(client_socket); send_template_raw(client_socket, res); @@ -1746,7 +1740,7 @@ static unsigned short int track(char *pointer, char *res, unsigned short int len else response_client(client_socket, not_found_response_valid_command_raw, NULL); } - } else if (!strcmp(command,"auto")) { + } else if (!strcmp(command, "auto")) { pointer = pointer + 4; length_uri = length_uri - 4; if ((question == '?') && (length_uri > 0)) { @@ -1755,17 +1749,17 @@ static unsigned short int track(char *pointer, char *res, unsigned short int len length_uri--; /* value= */ - warningkill = sscanf (pointer, "%256[a-z]%c",query,&question); - if ((question == '=') && (!strcmp(query,"value")) ) { + warningkill = sscanf(pointer, "%256[a-z]%c", query, &question); + if ((question == '=') && (!strcmp(query, "value")) ) { pointer = pointer + 6; length_uri = length_uri - 6; - warningkill = sscanf (pointer, "%256[-0-9a-z]" , command); - if ((command!=NULL) && (strlen(command) > 0)) { + warningkill = sscanf(pointer, "%256[-0-9a-z]" , command); + if ((command != NULL) && (strlen(command) > 0)) { struct context *autocnt; /* auto value=0|1|status*/ - if (!strcmp(command,"status")) { + if (!strcmp(command, "status")) { if (cnt[0]->conf.control_html_output) { send_template_ini_client(client_socket, ini_template); sprintf(res, "<– back

      " @@ -1797,7 +1791,7 @@ static unsigned short int track(char *pointer, char *res, unsigned short int len send_template_end_client(client_socket); } else { send_template_ini_client_raw(client_socket); - sprintf(res, "track auto %s\nDone\n",active ? "enabled":"disabled"); + sprintf(res, "track auto %s\nDone\n", active ? "enabled":"disabled"); send_template_raw(client_socket, res); } } else { @@ -1829,13 +1823,13 @@ static unsigned short int track(char *pointer, char *res, unsigned short int len "\n" "\n" "\n" - "\n",thread, thread, (cnt[thread]->track.active) ? "selected":"", - (cnt[thread]->track.active) ? "selected":"" ); + "\n", thread, thread, (cnt[thread]->track.active) ? "selected":"", + (cnt[thread]->track.active) ? "selected":""); send_template(client_socket, res); send_template_end_client(client_socket); } else { send_template_ini_client_raw(client_socket); - sprintf(res, "auto accepts only 0,1 or status as valid value\n"); + sprintf(res, "auto accepts only 0,1 or status as valid value\n"); send_template_raw(client_socket, res); } } else { @@ -1864,10 +1858,10 @@ static unsigned short int track(char *pointer, char *res, unsigned short int len return 1 on success */ -static unsigned short int handle_get(int client_socket, const char* url, void *userdata) +static unsigned short int handle_get(int client_socket, const char *url, void *userdata) { - struct context **cnt=userdata; - if (*url == '/' ){ + struct context **cnt = userdata; + if (*url == '/' ) { unsigned short int i = 0; char *res=NULL; res = malloc(2048); @@ -1878,11 +1872,11 @@ static unsigned short int handle_get(int client_socket, const char* url, void *u if (! (strcmp (url, "/")) ) { unsigned short int y; if (cnt[0]->conf.control_html_output) { - send_template_ini_client(client_socket,ini_template); + send_template_ini_client(client_socket, ini_template); sprintf(res, "Motion "VERSION" Running [%hu] Threads
      \n" "All
      \n", i); send_template(client_socket, res); - for (y=1; yThread %hu
      \n", y, y); send_template(client_socket, res); } @@ -1908,11 +1902,11 @@ static unsigned short int handle_get(int client_socket, const char* url, void *u /* Check for Thread number first -> GET /2 */ pointer++; length_uri--; - warningkill = sscanf (pointer, "%hd%c", &thread, &slash); + warningkill = sscanf(pointer, "%hd%c", &thread, &slash); if ((thread != -1) && (thread < i)) { /* thread_number found */ - if (thread > 9){ + if (thread > 9) { pointer = pointer + 2; length_uri = length_uri - 2; }else{ @@ -1926,10 +1920,10 @@ static unsigned short int handle_get(int client_socket, const char* url, void *u } if (length_uri!=0) { - warningkill = sscanf (pointer, "%256[a-z]%c" , command , &slash); + warningkill = sscanf(pointer, "%256[a-z]%c" , command , &slash); /* config */ - if (!strcmp(command,"config")) { + if (!strcmp(command, "config")) { pointer = pointer + 6; length_uri = length_uri - 6; if (length_uri == 0) { @@ -1962,7 +1956,7 @@ static unsigned short int handle_get(int client_socket, const char* url, void *u } } /* action */ - else if (!strcmp(command,"action")) { + else if (!strcmp(command, "action")) { pointer = pointer + 6; length_uri = length_uri - 6; /* call action() */ @@ -1975,7 +1969,7 @@ static unsigned short int handle_get(int client_socket, const char* url, void *u "snapshot
      \n" "restart
      \n" "quit
      \n", - thread,thread,thread,thread,thread,thread); + thread, thread, thread, thread, thread, thread); send_template(client_socket, res); send_template_end_client(client_socket); } else { @@ -1999,7 +1993,7 @@ static unsigned short int handle_get(int client_socket, const char* url, void *u } } /* detection */ - else if (!strcmp(command,"detection")) { + else if (!strcmp(command, "detection")) { pointer = pointer + 9; length_uri = length_uri - 9; if (length_uri == 0) { @@ -2062,10 +2056,10 @@ static unsigned short int handle_get(int client_socket, const char* url, void *u /* error track not enable */ if (cnt[0]->conf.control_html_output) { sprintf(res, "<– back\n", thread); - response_client(client_socket, not_track,res); + response_client(client_socket, not_track, res); } else - response_client(client_socket, not_track_raw,NULL); + response_client(client_socket, not_track_raw, NULL); } } else { if (cnt[0]->conf.control_html_output) { @@ -2086,7 +2080,7 @@ static unsigned short int handle_get(int client_socket, const char* url, void *u } else { /* /thread_number/ requested */ if (cnt[0]->conf.control_html_output) { - send_template_ini_client(client_socket,ini_template); + send_template_ini_client(client_socket, ini_template); sprintf(res, "<– back

      \nThread %hd
      \n" "config
      \n" "action
      \n" @@ -2145,7 +2139,7 @@ static unsigned short int read_client(int client_socket, void *userdata, char *a { ssize_t nread = 0, readb = -1; - nread = read (client_socket, buffer, length); + nread = read(client_socket, buffer, length); if (nread <= 0) { motion_log(LOG_ERR, 1, "httpd First read"); @@ -2160,17 +2154,17 @@ static unsigned short int read_client(int client_socket, void *userdata, char *a buffer[nread] = '\0'; - warningkill = sscanf (buffer, "%s %s %s", method, url, protocol); + warningkill = sscanf(buffer, "%s %s %s", method, url, protocol); - while ((strstr (buffer, "\r\n\r\n") == NULL) && (readb!=0) && (nread < length)){ - readb = read (client_socket, buffer+nread, sizeof (buffer) - nread); + while ((strstr(buffer, "\r\n\r\n") == NULL) && (readb!=0) && (nread < length)) { + readb = read(client_socket, buffer+nread, sizeof (buffer) - nread); - if (readb == -1){ + if (readb == -1) { nread = -1; break; } - nread +=readb; + nread += readb; if (nread > length) { motion_log(LOG_ERR, 1, "httpd End buffer reached waiting for buffer ending"); @@ -2189,12 +2183,12 @@ static unsigned short int read_client(int client_socket, void *userdata, char *a alive = 0; /* Check Protocol */ - if (strcmp (protocol, "HTTP/1.0") && strcmp (protocol, "HTTP/1.1")) { + if (strcmp(protocol, "HTTP/1.0") && strcmp (protocol, "HTTP/1.1")) { /* We don't understand this protocol. Report a bad response. */ if (cnt[0]->conf.control_html_output) - warningkill = write (client_socket, bad_request_response, sizeof (bad_request_response)); + warningkill = write(client_socket, bad_request_response, sizeof (bad_request_response)); else - warningkill = write (client_socket, bad_request_response_raw, sizeof (bad_request_response_raw)); + warningkill = write(client_socket, bad_request_response_raw, sizeof (bad_request_response_raw)); pthread_mutex_unlock(&httpd_mutex); return 1; @@ -2205,10 +2199,10 @@ static unsigned short int read_client(int client_socket, void *userdata, char *a uses other method, report the failure. */ char response[1024]; if (cnt[0]->conf.control_html_output) - snprintf (response, sizeof (response),bad_method_response_template, method); + snprintf(response, sizeof (response), bad_method_response_template, method); else - snprintf (response, sizeof (response),bad_method_response_template_raw, method); - warningkill = write (client_socket, response, strlen (response)); + snprintf(response, sizeof (response), bad_method_response_template_raw, method); + warningkill = write(client_socket, response, strlen (response)); pthread_mutex_unlock(&httpd_mutex); return 1; } @@ -2222,8 +2216,8 @@ static unsigned short int read_client(int client_socket, void *userdata, char *a authentication[end_auth - authentication] = '\0'; } else { char response[1024]; - snprintf (response, sizeof (response),request_auth_response_template, method); - warningkill = write (client_socket, response, strlen (response)); + snprintf(response, sizeof (response), request_auth_response_template, method); + warningkill = write(client_socket, response, strlen (response)); pthread_mutex_unlock(&httpd_mutex); return 1; } @@ -2235,21 +2229,21 @@ static unsigned short int read_client(int client_socket, void *userdata, char *a cnt[0]->conf.control_authentication)) { */ - if (strcmp(auth, authentication)){ - char response[1024]={'\0'}; + if (strcmp(auth, authentication)) { + char response[1024] = {'\0'}; snprintf(response, sizeof (response), request_auth_response_template, method); - warningkill = write (client_socket, response, strlen (response)); + warningkill = write(client_socket, response, strlen (response)); pthread_mutex_unlock(&httpd_mutex); return 1; } else { - ret = handle_get (client_socket, url, cnt); + ret = handle_get(client_socket, url, cnt); /* A valid auth request. Process it. */ } } else { // Request Authorization - char response[1024]={'\0'}; - snprintf (response, sizeof (response),request_auth_response_template, method); - warningkill = write (client_socket, response, strlen (response)); + char response[1024] = {'\0'}; + snprintf(response, sizeof (response), request_auth_response_template, method); + warningkill = write(client_socket, response, strlen (response)); pthread_mutex_unlock(&httpd_mutex); return 1; } @@ -2277,19 +2271,20 @@ static unsigned short int read_client(int client_socket, void *userdata, char *a static int acceptnonblocking(int serverfd, int timeout) { int curfd; - socklen_t namelen = sizeof(struct sockaddr_in); - struct sockaddr_in client; + struct sockaddr_storage client; + socklen_t namelen = sizeof(client); + struct timeval tm; fd_set fds; tm.tv_sec = timeout; /* Timeout in seconds */ tm.tv_usec = 0; FD_ZERO(&fds); - FD_SET(serverfd,&fds); + FD_SET(serverfd, &fds); - if( select (serverfd + 1, &fds, NULL, NULL, &tm) > 0){ + if ( select (serverfd + 1, &fds, NULL, NULL, &tm) > 0) { if(FD_ISSET(serverfd, &fds)) { - if((curfd = accept(serverfd, (struct sockaddr*)&client, &namelen))>0) + if((curfd = accept(serverfd, (struct sockaddr*)&client, &namelen)) > 0) return(curfd); } } @@ -2304,56 +2299,86 @@ static int acceptnonblocking(int serverfd, int timeout) void httpd_run(struct context **cnt) { - int sd, client_socket_fd, val = 1; + int sd = -1, client_socket_fd, val; unsigned short int client_sent_quit_message = 1, closehttpd = 0; - struct sockaddr_in servAddr; + struct addrinfo hints, *res, *ressave; struct sigaction act; char *authentication = NULL; + char portnumber[10], hbuf[NI_MAXHOST], sbuf[NI_MAXSERV]; /* Initialize the mutex */ pthread_mutex_init(&httpd_mutex, NULL); - /* set signal handlers TO IGNORE */ - memset(&act,0,sizeof(act)); + memset(&act, 0, sizeof(act)); sigemptyset(&act.sa_mask); act.sa_handler = SIG_IGN; - sigaction(SIGPIPE,&act,NULL); - sigaction(SIGCHLD,&act,NULL); + sigaction(SIGPIPE, &act, NULL); + sigaction(SIGCHLD, &act, NULL); - /* create socket */ - sd = socket(AF_INET, SOCK_STREAM, 0); - if (sd<0) { - motion_log(LOG_ERR, 1, "httpd socket"); + memset(&hints, 0, sizeof(struct addrinfo)); + /* PASSIVE as we are going to listen */ + hints.ai_flags = AI_PASSIVE; + hints.ai_family = AF_UNSPEC; + hints.ai_socktype = SOCK_STREAM; + + snprintf(portnumber, sizeof(portnumber), "%u", cnt[0]->conf.control_port); + + val = getaddrinfo(cnt[0]->conf.control_localhost ? "localhost" : NULL, portnumber, &hints, &res); + + /* check != 0 to allow FreeBSD compatibility */ + if (val != 0) { + motion_log(LOG_ERR, 1, "getaddrinfo() for httpd socket failed: %s", gai_strerror(val)); + freeaddrinfo(res); return; } - /* bind server port */ - servAddr.sin_family = AF_INET; - if (cnt[0]->conf.control_localhost) - servAddr.sin_addr.s_addr = htonl(INADDR_LOOPBACK); - else - servAddr.sin_addr.s_addr = htonl(INADDR_ANY); - servAddr.sin_port = htons(cnt[0]->conf.control_port); + ressave = res; - /* Reuse Address */ + while (res) { + /* create socket */ + sd = socket(res->ai_family, res->ai_socktype, res->ai_protocol); + + getnameinfo(res->ai_addr, res->ai_addrlen, hbuf, + sizeof(hbuf), sbuf, sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV); + + motion_log(LOG_INFO, 0, "motion-httpd testing : %s addr: %s port: %s", + res->ai_family == AF_INET ? "IPV4":"IPV6", hbuf, sbuf); + + if (sd >= 0) { + val = 1; + /* Reuse Address */ + setsockopt(sd, SOL_SOCKET, SO_REUSEADDR, &val, sizeof( int ) ); + + if (bind(sd, res->ai_addr, res->ai_addrlen) == 0) { + motion_log(LOG_INFO, 0, "motion-httpd Binded : %s addr: %s port: %s", + res->ai_family == AF_INET ? "IPV4":"IPV6", hbuf, sbuf); + break; + } + + motion_log(LOG_ERR, 1, "motion-httpd failed bind() interface %s / port %s, retrying", hbuf, sbuf); + close(sd); + sd = -1; + } + motion_log(LOG_ERR, 1, "motion-httpd socket failed interface %s / port %s, retrying", hbuf, sbuf); + res = res->ai_next; + } + + freeaddrinfo(ressave); + + if (sd < 0) { + motion_log(LOG_ERR, 1, "motion-httpd ERROR bind() [interface %s port %s]", hbuf, sbuf); + return; + } - setsockopt(sd, SOL_SOCKET, SO_REUSEADDR, &val, sizeof( int ) ) ; - - if (bind(sd, (struct sockaddr *) &servAddr, sizeof(servAddr))<0) { - motion_log(LOG_ERR, 1, "httpd bind()"); - close(sd); - return; - } - - if (listen(sd,5) == -1){ - motion_log(LOG_ERR, 1, "httpd listen()"); + if (listen(sd,5) == -1) { + motion_log(LOG_ERR, 1, "motion-httpd ERROR listen() [interface %s port %s]", hbuf, sbuf); close(sd); return; } motion_log(LOG_DEBUG, 0, "motion-httpd/"VERSION" running, accepting connections"); - motion_log(LOG_DEBUG, 0, "motion-httpd: waiting for data on port TCP %d", cnt[0]->conf.control_port); + motion_log(LOG_DEBUG, 0, "motion-httpd: waiting for data on %s port TCP %s", hbuf, sbuf); if (cnt[0]->conf.control_authentication != NULL ) { char *userpass = NULL; @@ -2372,15 +2397,15 @@ void httpd_run(struct context **cnt) client_socket_fd = acceptnonblocking(sd, 1); - if (client_socket_fd<0) { - if ((!cnt[0]) || (cnt[0]->finish)){ - motion_log(-1, 0, "httpd - Finishing"); + if (client_socket_fd < 0) { + if ((!cnt[0]) || (cnt[0]->finish)) { + motion_log(-1, 0, "motion-httpd - Finishing"); closehttpd = 1; } } else { /* Get the Client request */ client_sent_quit_message = read_client (client_socket_fd, cnt, authentication); - motion_log(-1, 0, "httpd - Read from client"); + motion_log(-1, 0, "motion-httpd - Read from client"); /* Close Connection */ if (client_socket_fd) @@ -2391,14 +2416,14 @@ void httpd_run(struct context **cnt) if (authentication != NULL) free(authentication); close(sd); - motion_log(LOG_DEBUG, 0, "httpd Closing"); + motion_log(LOG_DEBUG, 0, "motion-httpd Closing"); pthread_mutex_destroy(&httpd_mutex); } void *motion_web_control(void *arg) { - struct context **cnt=arg; + struct context **cnt = arg; httpd_run(cnt); - motion_log(LOG_DEBUG, 0, "httpd thread exit"); + motion_log(LOG_DEBUG, 0, "motion-httpd thread exit"); pthread_exit(NULL); }