亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? picture_loop.c

?? 一個很棒的視頻服務(wù)器
?? C
字號:
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <dlfcn.h>#include <sys/types.h>#include <signal.h>#include "camserv.h"#include "camconfig.h"#include "camshm.h"#include "video.h"#include "sockset.h"#include "socket.h"#include "log.h"#include "picloop.h"#include "filter.h"#define MAX_CONSEC_BAD_SNAPS 5  /* Maximum # of consecutive bad snaps allowed*/#define DEFAULT_MAX_FPS      0static int initialized = 0;static int Abort = 0;#define MODNAME "picloop"/* * report_picsnap:  Report a snapped picture to the parent process.   * * Arguments:       server_sock = Socket connection to the parent *                  bytes       = # of bytes of the picture just snapped. */staticvoid report_picsnap( Socket *server_sock, int bytes ){  char buf[ 1024 ];    sprintf( buf, "%d %d", 0, bytes );  send( socket_query_fd( server_sock ),	buf, strlen( buf ) + 1, 0 );}/* * init_taker:  Initialize the video device and all of the filters.   *               * Arguments:   vfuncs  = Pointers to valid video functions *              filters = List of filters as returned by filter_setup *              vid_device = Vid device as returned by video_open  *              camconfig = Current camera configuration *              memhack_buf = Location to store memhack_buf if it exists. *                           if the camconfig specifies that memhackery is *                           to be used, *memhack_buf will be a valid pointer *                           on return, else NULL *              max_fps     = Location to store max FPS as returned from ccfg *              do_memhack  = if 1 setup memhack_buf if appropriate, else dont * * Return values:  Returns -1 on failure, 0 on success. */staticint init_taker( Video_Funcs *vfuncs, Filter *filters, void *vid_device,		CamConfig *camconfig, char **memhack_buf, float *max_fps,		int do_memhack_buf ){  Video_Geometry geom;  int gres;  if( initialized )     camserv_log( MODNAME, "BOGUS INIT TAKER DOUBLE INITIALIZATION!");  if( vfuncs->video_init( vid_device, camconfig ) == -1 ){    camserv_log( MODNAME, "Failed to initialize video device!");    return -1;  }  gres = vfuncs->video_get_geom( vid_device, &geom );  if( !(gres & VIDEO_GEOM_CUR)){    camserv_log( MODNAME, "Failed to get current geometry information");    vfuncs->video_deinit( vid_device );    return -1;  }    if( do_memhack_buf == 1 ){    if( camconfig_query_def_int( camconfig, SEC_VIDEO,				 "memhack", 1 ) == 1)    {      *memhack_buf = malloc( geom.cur_width * geom.cur_height * 3 );      if( *memhack_buf == NULL ){	camserv_log( MODNAME, "Error allocating memhack buffer!");	return -1;      }    } else {      *memhack_buf = NULL;    }  }  *max_fps = camconfig_query_def_float( camconfig, SEC_VIDEO,					"maxfps", DEFAULT_MAX_FPS );  filter_list_init( filters, camconfig );  initialized = 1;  return 0;}/* * deinit_taker:  Deinitialize the video device, and all of the filters, as *                well as free up the memhack buffer if it was previously *                allocated. * * Arguments:     Same as in init_taker. */staticvoid deinit_taker( Video_Funcs *vfuncs, Filter *filters, void *vid_device,		   CamConfig *camconfig, char *memhack_buf ){  if( !initialized ) {    camserv_log( MODNAME, "BOGUS DEINIT CALL IN PICTURE TAKER!");  }  if( vfuncs->video_deinit( vid_device ) == -1 )     camserv_log( MODNAME, "Could not de-initialize video device!");  if( memhack_buf != NULL )    free( memhack_buf );  filter_list_deinit( filters );  initialized = 0;}    /* * sleep_abit:  Sleep for a little while to come close to our max_fps *              setting.  This isn't exact, but it is decent enough * * Arguments:   cur_fps = The current fps  *              max_fps = The camconfig max_fps setting. */staticvoid sleep_abit( float cur_fps, float max_fps ){  float diff;  unsigned long msex;  /* we don't want to make a huge chunk in the frame rate if the camera     is going way to fast.  So we amortize it out over a few frames.  This     isn't the greatest but it appears to work decently */  if( cur_fps <= max_fps ) return;  diff = cur_fps - max_fps;  msex = (diff / max_fps) * 1000000;  if( max_fps > .3 && msex / 1000000 > 3 ) msex = 3 * 1000000;  sleep( msex / 1000000 );  usleep( msex % 1000000 );}/* * open_taker:  Open the video taker & initialize the vfuncs for accessing it. * * Arguments:   ccfg   = Camera cfg denoting where the device is. *              place_vfuncs = Location to place vfuncs to access the device *              place_filters = Location to place filter information. * * Return values:  Returns NULL on failure, else a pointer to the valid *                 video device. */staticvoid *open_taker( CamConfig *ccfg, Video_Funcs *place_vfuncs,		  Filter **place_filters ){  char vidsec[ 1024 ];  void *vid_res;  Filter *filters;  int eres;  if( video_query_active_section( ccfg, vidsec, sizeof( vidsec )) == NULL )    return NULL;  if( video_setup_funcs( ccfg, place_vfuncs ) == -1 )    return NULL;  if( (vid_res =  place_vfuncs->video_open( ccfg, vidsec )) == NULL )    return NULL;  if( (filters = filter_setup( ccfg, &eres )) == NULL && eres == 1 )  {    place_vfuncs->video_close( vid_res );    return NULL;  }  *place_filters = filters;  return vid_res;}/* * close_taker:  Close a video device. * * Arguments:    vid_device = Video device to close *               vfuncs     = Vfuncs to access the video device. */staticvoid close_taker( void *vid_device, Video_Funcs *vfuncs, Filter *filters ){  vfuncs->video_close( vid_device );  filter_destroy( filters );}void signal_handler( int signum ){  if( signum == SIGTSTP ) return;  if( signum == SIGCONT ) return;#ifdef SIGINFO  if( signum == SIGINFO ) return;#endif  camserv_log( MODNAME, "Received signal %d", signum );  Abort = 1;}staticvoid setup_signals(){  int i;  for( i=0; i< NSIG; i++)    if( i != SIGALRM &&	i != SIGSEGV )      signal( i, signal_handler );}/* * picture_single:  Take a single picture from the camera, and return *                  immediately.  This routine will do the open, init, snap *                  deinit, and close of the video device, and pass the picture *                  through all of the filters before returning. * * Arguments:       vfuncs         = Video funcs for the camera *                  ccfg           = Camera configuration *                  filters        = Filters as passed in by setup_filters. * * Return Values:   Returns -1 if the snapshot failed, 0 on success. */int picture_single( CamConfig *ccfg, const char *fname, int presnaps ){  Filter *filters;  Video_Funcs vfuncs;  extern int errno;  void *vid_device = NULL;  char *pic_snap = NULL, vidsec[ 1024 ];  Video_Geometry geom;  Video_Info vinfo, out_vinfo;  FILE *fp = NULL;  float mfps;  int errres, inited = 0;  errres = 0;  if( video_query_active_section( ccfg, vidsec, sizeof( vidsec ))==NULL)    return -1;  if( (fp = fopen( fname, "wb" )) == NULL ){    camserv_log( MODNAME, "Output snapshot file \"%s\" error!",	     fname );    camserv_log( MODNAME, "--%s", strerror( errno ));    errres = -1;    goto snafu;  }      if( (vid_device = open_taker( ccfg, &vfuncs, &filters )) == NULL ){    camserv_log( MODNAME, "Error opening video device!");    errres = -1;    goto snafu;  }  if( init_taker( &vfuncs, filters, vid_device, ccfg, NULL, &mfps, 0 ) == -1 ){    errres = -1;    goto snafu;  }  inited = 1;  if( !(vfuncs.video_get_geom( vid_device, &geom ) | VIDEO_GEOM_MAX )){    camserv_log( MODNAME, "Couldn't get max video extents!");    errres = -1;    goto snafu;  }    if( (pic_snap = malloc( geom.max_width * geom.max_height * 3 )) == NULL ){    camserv_log( MODNAME, "Couldn't malloc %d bytes for picture!",	     geom.max_width * geom.max_height * 3);    errres = -1;    goto snafu;  }  /* XXX -- Should all the snapshots be sent through the filters?  The filters     could change based on how many snaps they've had .. HRMMMM...     JMT - 10-31-99 */  presnaps++;  while( presnaps-- ){    if( vfuncs.video_snap( vid_device, pic_snap, &vinfo, ccfg ) == -1 ){      camserv_log( MODNAME, "Error snapping video image!");      errres = -1;      goto snafu;    }  }  filter_list_process( filters, pic_snap, pic_snap, &vinfo, &out_vinfo );  deinit_taker( &vfuncs, filters, vid_device, ccfg, NULL );  close_taker( vid_device, &vfuncs, filters );  inited = 0;  vid_device = NULL;  if( fwrite( pic_snap, out_vinfo.nbytes, 1, fp ) != 1){    camserv_log( MODNAME, "Error writing output file!");    camserv_log( MODNAME, "--%s", strerror( errno ));    errres = -1;    goto snafu;  } snafu:  if( pic_snap ) free( pic_snap );  if( inited )   deinit_taker( &vfuncs, filters, vid_device, ccfg, NULL );  if( vid_device ) close_taker( vid_device, &vfuncs, filters );  if( fp != NULL)  fclose( fp );  if( errres == -1 )    unlink( fname );  return errres;}               int picture_taker( char *picture_memory, int amt_alloced,		   CamConfig *camconfig, Socket *server_sock ){  Filter *filters;  Video_Funcs vfuncs;  SockSet *sset;  void *vid_device;  char *memhack_buf, vidsec[ 1024 ];  int cpid, nFrames = 0;  time_t start_time, cur_time, last_cur_time;  float max_fps, cur_fps;  if( (cpid = fork()) != 0 ) {    return cpid;  }  if( video_query_active_section( camconfig, vidsec, 				  sizeof( vidsec)) == NULL ){    kill( getppid(), SIGINT );    return -1;  }  if( (vid_device = open_taker( camconfig, &vfuncs, &filters )) == NULL ){    camserv_log( MODNAME, "Error opening video device!");    kill( getppid(), SIGINT );    return -1;  }  if( init_taker( &vfuncs, filters, vid_device, camconfig,		  &memhack_buf, &max_fps, 1 ) == -1 ){    close_taker( vid_device, &vfuncs, filters );    kill( getppid(), SIGINT );    return -1;  }  if( (sset = sockset_new()) == NULL ){    camserv_log( MODNAME, "Could not create new socket set!");    close_taker( vid_device, &vfuncs, filters );    kill( getppid(), SIGINT );    return -1;  }  if( sockset_add_fd( sset, server_sock, server_sock ) == -1 ){    camserv_log( MODNAME, "Could not add server socket to sockset!");    sockset_dest( sset );    kill( getppid(), SIGINT );    return -1;  }  last_cur_time = 0;  setup_signals();  Abort = 0;  while( !Abort ) {    char buf[ 1024 ];    int selres, dispatch_id;    Video_Info vinfo, out_vinfo;    sockset_reset( sset );    selres = sockset_select( socket_query_fd( server_sock ) + 1,			     sset, NULL, NULL );    if( selres < 1 ) {      camserv_log( MODNAME, "Bad return value from select()!");      continue;    }    recv( socket_query_fd( server_sock ), buf, sizeof( buf ), 0 );    if( sscanf( buf, "%d", &dispatch_id ) != 1 ){      camserv_log( MODNAME, "Malformed message from server!" );      continue;    }    if( dispatch_id == 0 ){  /* Snap a picture */      char *pic_snap;      int nsnaps;      for( nsnaps=0; nsnaps < MAX_CONSEC_BAD_SNAPS; nsnaps++ ){	if( memhack_buf ) pic_snap = memhack_buf;	else              pic_snap = picture_memory;	if( vfuncs.video_snap( vid_device, pic_snap, &vinfo,				camconfig ) == -1 ){	  camserv_log( MODNAME, "Error snapping video image .. reiniting!");	  deinit_taker( &vfuncs, filters, vid_device, camconfig, 			memhack_buf );	  close_taker( vid_device, &vfuncs, filters );	  /* Now reopen it and initailize it if we can */	  /* This should always be set, since one cannot UNSET a variable */	  video_query_active_section(camconfig,vidsec, sizeof( vidsec));	  if( (vid_device = open_taker(camconfig, &vfuncs,&filters)) == NULL ||	      init_taker( &vfuncs, filters, vid_device, camconfig, 			  &memhack_buf, &max_fps, 1 ) == -1)	  {	    camserv_log( MODNAME, "Couldn't open camera!");	    if( vid_device ) close_taker( vid_device, &vfuncs, filters );	    goto error_exit;	  }	} else break;      }       if( nsnaps == MAX_CONSEC_BAD_SNAPS ){	camserv_log( MODNAME, "Too many bad snaps!  Aborting!");	deinit_taker( &vfuncs, filters, vid_device, camconfig, memhack_buf );	close_taker( vid_device, &vfuncs, filters );	break;      }      filter_list_process( filters, pic_snap, picture_memory, 			   &vinfo, &out_vinfo );      report_picsnap( server_sock, out_vinfo.nbytes  );      time( &cur_time );      if( cur_time - last_cur_time > 10 ) /* Fudge factor */{	time( &start_time );	time( &cur_time );	nFrames = 0;      }	      if( max_fps != 0.0) {	nFrames++;	if( cur_time == start_time ) cur_time++;	cur_fps = (double)nFrames / (double)(cur_time - start_time);	last_cur_time = cur_time;		if( cur_fps > max_fps ) 	  sleep_abit( cur_fps, max_fps );      }    } else if( dispatch_id == 1 ) {      init_taker( &vfuncs, filters, vid_device, camconfig,		    &memhack_buf, &max_fps, 1 );    } else if( dispatch_id == 2 ) {      deinit_taker( &vfuncs, filters, vid_device, camconfig,		    memhack_buf );    } else if( dispatch_id == 9 ) {      camserv_log( MODNAME, "Abort called!");      Abort = 1;    } else {      camserv_log( MODNAME, "Invalid command %d received from server!", 	       dispatch_id );    }  }error_exit:  camserv_log( MODNAME, "Exiting");  deinit_taker( &vfuncs, filters, vid_device, camconfig, memhack_buf );  close_taker( vid_device, &vfuncs, filters );  exit( 1 );  return 0;}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区二区三区中文字幕| 久久蜜臀精品av| 亚洲最新视频在线观看| 91成人国产精品| 国产精品一卡二卡| 久久亚洲春色中文字幕久久久| 国产又粗又猛又爽又黄91精品| 久久久国产精华| 99视频有精品| 亚洲一区二区三区四区中文字幕| 欧美日韩电影在线| 久久精品国产网站| 国产精品免费观看视频| 91精彩视频在线观看| 欧美aaa在线| 欧美高清在线视频| 在线看日韩精品电影| 精品一区精品二区高清| 国产精品视频九色porn| 欧美视频在线观看一区二区| 美女mm1313爽爽久久久蜜臀| 久久一区二区三区四区| 日本高清不卡aⅴ免费网站| 日韩国产精品久久| 日本一区二区视频在线| 欧洲一区在线观看| 激情综合网av| 亚洲综合视频在线观看| 亚洲精品在线免费观看视频| 色综合天天综合狠狠| 美女一区二区视频| 有码一区二区三区| 久久久久99精品国产片| 欧美伊人久久久久久午夜久久久久| 日本不卡高清视频| 亚洲男人都懂的| 久久久影院官网| 欧美日韩日日摸| 国产91丝袜在线播放| 日韩高清不卡一区二区三区| 综合久久久久久| 日韩欧美不卡一区| 欧美网站大全在线观看| jvid福利写真一区二区三区| 麻豆成人av在线| 亚洲国产一区在线观看| 国产精品激情偷乱一区二区∴| 7777精品伊人久久久大香线蕉超级流畅| 成人激情免费视频| 久久 天天综合| 日本大胆欧美人术艺术动态| 亚洲精品第一国产综合野| 国产视频亚洲色图| 欧美r级在线观看| 欧美高清性hdvideosex| 91成人在线精品| 99久久免费视频.com| 国产精品系列在线观看| 精品影视av免费| 三级欧美在线一区| 亚洲不卡一区二区三区| 亚洲精品免费在线观看| 亚洲欧美视频在线观看视频| 中文字幕亚洲一区二区va在线| 久久久www免费人成精品| 久久综合色之久久综合| 日韩精品一区在线| 91精品国产一区二区人妖| 欧美日韩国产a| 欧美日韩精品一区视频| 欧美日韩视频一区二区| 欧美三级三级三级爽爽爽| 欧美午夜精品免费| **欧美大码日韩| 中文字幕成人网| 中文av一区特黄| 国产精品国产成人国产三级| 国产精品国产三级国产aⅴ原创| 欧美国产日韩在线观看| 国产人成亚洲第一网站在线播放| 久久久久国产免费免费| 国产精品毛片大码女人| 综合久久久久综合| 亚洲无线码一区二区三区| 亚洲国产wwwccc36天堂| 性欧美疯狂xxxxbbbb| 日本最新不卡在线| 韩国一区二区在线观看| 国产乱人伦精品一区二区在线观看| 国产一区二区三区久久悠悠色av | 久久免费精品国产久精品久久久久 | 精品乱码亚洲一区二区不卡| 日韩欧美二区三区| 国产午夜精品一区二区三区四区| 日本一区二区电影| 亚洲三级理论片| 午夜亚洲福利老司机| 日av在线不卡| 国产成人精品在线看| 色综合天天综合给合国产| 欧美日韩高清一区| 精品国产人成亚洲区| 中文字幕欧美区| 一区二区三区高清不卡| 麻豆91在线播放| 成人网在线播放| 欧美午夜理伦三级在线观看| 欧美岛国在线观看| 欧美激情综合在线| 亚洲电影一级黄| 国产精品1区2区3区| 欧洲日韩一区二区三区| 亚洲精品一区二区三区99| 亚洲视频在线观看一区| 日韩精品国产欧美| 白白色 亚洲乱淫| 欧美老肥妇做.爰bbww| 久久久噜噜噜久噜久久综合| 亚洲一区免费视频| 国产麻豆精品95视频| 欧美亚洲动漫精品| 日本一区二区三区国色天香| 亚洲一区二区三区中文字幕 | 成人中文字幕合集| 欧美精品久久天天躁| 亚洲国产岛国毛片在线| 婷婷一区二区三区| 99riav久久精品riav| 欧美刺激午夜性久久久久久久 | 久久久久久亚洲综合| 亚洲国产视频直播| 成人一道本在线| 日韩欧美你懂的| 一区二区三区四区亚洲| 国产福利一区在线| 日韩一区二区在线播放| 一区二区三区中文字幕| 懂色av中文字幕一区二区三区| 91麻豆精品国产自产在线 | 亚洲国产日韩精品| av亚洲精华国产精华精华| 亚洲精品一区在线观看| 日韩黄色一级片| 在线视频国内一区二区| 亚洲婷婷综合久久一本伊一区| 久久成人免费网| 欧美一区二区三区在线观看 | 午夜成人免费视频| 99国产欧美另类久久久精品| 久久蜜臀精品av| 美腿丝袜一区二区三区| 欧美另类z0zxhd电影| 亚洲精品久久嫩草网站秘色| 成人黄色av网站在线| 国产日产欧美一区| 国产福利不卡视频| 欧美白人最猛性xxxxx69交| 日韩激情视频在线观看| 欧美福利视频导航| 午夜视频在线观看一区| 欧美日韩久久久| 亚洲18色成人| 欧美人xxxx| 日韩成人免费电影| 欧美色视频在线观看| 尤物在线观看一区| 91麻豆国产在线观看| 亚洲欧美日韩国产另类专区| 97久久超碰精品国产| 最新久久zyz资源站| av资源网一区| 亚洲天堂2014| 欧美色大人视频| 亚洲福利电影网| 欧美一区二区三区视频在线观看| 午夜精品免费在线观看| 欧美精品在线观看一区二区| 日韩福利视频网| 久久女同互慰一区二区三区| 国产激情视频一区二区三区欧美| 国产日产亚洲精品系列| 99久久免费视频.com| 亚洲黄色片在线观看| 51精品国自产在线| 韩国一区二区在线观看| 国产精品久久久久久久午夜片| 99re视频这里只有精品| 亚洲愉拍自拍另类高清精品| 在线观看91av| 激情欧美一区二区| 国产精品嫩草久久久久| 欧美在线观看视频一区二区| 日韩av一级片| 国产亚洲婷婷免费| 91视频.com| 青青草原综合久久大伊人精品优势| 精品国产伦一区二区三区观看体验 | 亚洲精品一区二区三区在线观看 | 国产激情视频一区二区三区欧美| 亚洲欧美在线视频观看|