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

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

?? netcam_jpeg.c

?? motion motion
?? C
字號(hào):
/* *	netcam_jpeg.c * *	Module for handling JPEG decompression for network cameras. * *	This code was inspired by the original module written by *	Jeroen Vreeken and enhanced by several Motion project *	contributors, particularly Angel Carpintero and *	Christopher Price. * *	Copyright 2005, William M. Brack *	This program is published under the GNU Public license *///#include "motion.h"#include "rotate.h"	/* already includes motion.h *///#include <stdlib.h>//#include <stdio.h>//#include <string.h>#include <jpeglib.h>#include <jerror.h>//#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 * pointer to the standard information) */typedef struct {	struct jpeg_source_mgr pub;	char           *data;	int             length;	JOCTET         *buffer;	boolean         start_of_file;} netcam_source_mgr;typedef netcam_source_mgr *netcam_src_ptr;/* * Here we declare function prototypes for all the routines involved with * overriding libjpeg functions.  The reason these are required is that, * although the standard library handles input and output with stdio, * we are working with "remote" data (from the camera or from a file). */static void     netcam_init_source(j_decompress_ptr);static boolean  netcam_fill_input_buffer(j_decompress_ptr);static void     netcam_skip_input_data(j_decompress_ptr, long);static void     netcam_term_source(j_decompress_ptr);static void     netcam_memory_src(j_decompress_ptr, char *, int);static void     netcam_error_exit(j_common_ptr);static void netcam_init_source(j_decompress_ptr cinfo){	/*	 * Get our "private" structure from the libjpeg structure	 */	netcam_src_ptr  src = (netcam_src_ptr) cinfo->src;	/*	 * Set the 'start_of_file' flag in our private structure	 * (used by my_fill_input_buffer)	 */	src->start_of_file = TRUE;}static boolean netcam_fill_input_buffer(j_decompress_ptr cinfo){	netcam_src_ptr  src = (netcam_src_ptr) cinfo->src;	size_t nbytes;	/*	 * start_of_file is set any time netcam_init_source has been called	 * since the last entry to this routine.  This would be the normal	 * path when a new image is to be processed.  It is assumed that	 * this routine will only be called once for the entire image.	 * If an unexpected call (with start_of_file FALSE) occurs, the	 * routine will insert a "fake" "end of image" marker and return	 * to the library to process whatever data remains from the original	 * image (the one with errors).	 *	 * I'm not yet clear on what the result (from the application's	 * point of view) will be from this logic.  If the application	 * expects that a completely new image will be started, this will	 * give trouble.	 */	if (src->start_of_file) {		nbytes = src->length;		src->buffer = (JOCTET *) src->data;	} else {		/* Insert a fake EOI marker - as per jpeglib recommendation */		if (debug_level > CAMERA_VERBOSE)			motion_log(LOG_INFO, 0, "**fake EOI inserted**");		src->buffer[0] = (JOCTET) 0xFF;		src->buffer[1] = (JOCTET) JPEG_EOI;    /* 0xD9 */		nbytes = 2;	}	src->pub.next_input_byte = src->buffer;	src->pub.bytes_in_buffer = nbytes;	src->start_of_file = FALSE;	return TRUE;}static void netcam_skip_input_data(j_decompress_ptr cinfo, long num_bytes){	netcam_src_ptr  src = (netcam_src_ptr) cinfo->src;	if (num_bytes > 0) {		while (num_bytes > (long) src->pub.bytes_in_buffer) {			num_bytes -= (long) src->pub.bytes_in_buffer;			(void) netcam_fill_input_buffer (cinfo);		}		src->pub.next_input_byte += (size_t) num_bytes;		src->pub.bytes_in_buffer -= (size_t) num_bytes;	}}static void netcam_term_source(j_decompress_ptr cinfo ATTRIBUTE_UNUSED){}/** * netcam_memory_src * *	Routine to setup for fetching data from a netcam buffer, used by the *	JPEG library decompression routine. * * Parameters: *	cinfo           pointer to the jpeg decompression object *	data            pointer to the image data received from a netcam *	length          total size of the image * * Returns:             Nothing *  */static void netcam_memory_src(j_decompress_ptr cinfo, char *data, int length){	netcam_src_ptr src;	if (cinfo->src == NULL) {		cinfo->src = (struct jpeg_source_mgr *)		             (*cinfo->mem->alloc_small)		             ((j_common_ptr) cinfo, JPOOL_PERMANENT,		              sizeof (netcam_source_mgr));	}	src = (netcam_src_ptr)cinfo->src;	src->data = data;	src->length = length;	src->pub.init_source = netcam_init_source;	src->pub.fill_input_buffer = netcam_fill_input_buffer;	src->pub.skip_input_data = netcam_skip_input_data;	src->pub.resync_to_restart = jpeg_resync_to_restart;	src->pub.term_source = netcam_term_source;	src->pub.bytes_in_buffer = 0;	src->pub.next_input_byte = NULL;}/** * netcam_error_exit * * 	Routine to override the libjpeg error exit routine so * 	that we can just throw away the bad frame and continue * 	with more data from the netcam. * * Parameters * * 	cinfo           pointer to the decompression control structure * * Returns:             does an (ugly) longjmp to get back to netcam_jpeg *                      code * */static void netcam_error_exit(j_common_ptr cinfo){	/* fetch our pre-stored pointer to the netcam context */	netcam_context_ptr netcam = cinfo->client_data;	/* output the message associated with the error */	(*cinfo->err->output_message)(cinfo);	/* set flag to show the decompression had errors */	netcam->jpeg_error |= 1;	/* need to "cleanup" the aborted decompression */	jpeg_destroy (cinfo);	/* jump back to wherever we started */	longjmp(netcam->setjmp_buffer, 1);}/** * netcam_output_message * * 	Routine to override the libjpeg error message output routine. * 	We do this so that we can output our module and thread i.d., * 	as well as put the message to the motion log. * * Parameters * * 	cinfo           pointer to the decompression control structure * * Returns              Nothing * */static void netcam_output_message(j_common_ptr cinfo){	char buffer[JMSG_LENGTH_MAX];		/* fetch our pre-stored pointer to the netcam context */	netcam_context_ptr netcam = cinfo->client_data;	/*	 * While experimenting with a "appro" netcam it was discovered	 * that the jpeg data produced by the camera caused warning	 * messages from libjpeg (JWRN_EXTRANEOUS_DATA).  The following	 * code is to assure that specific warning is ignored.	 * 	 * NOTE: It's likely that we will discover other error message	 * codes which we want to ignore.  In that case, we should have	 * some sort of table-lookup to decide which messages we really	 * care about.	 */	if (cinfo->err->msg_code != JWRN_EXTRANEOUS_DATA)		netcam->jpeg_error |= 2;    /* Set flag to show problem */	/*	 * We only display and log errors when debug_level	 * is non-zero.  The reasoning here is that these kinds	 * of errors are only produced when the input data is	 * wrong, and that indicates a network problem rather	 * than a problem with the content.	 */	if (debug_level > CAMERA_VERBOSE) {		/*		 * Format the message according to library standards.		 * Write it out to the motion log.		 */		(*cinfo->err->format_message)(cinfo, buffer);		motion_log(LOG_ERR, 0, buffer);	}}/** * netcam_init_jpeg * * 	Initialises the JPEG library prior to doing a * 	decompression. * * Parameters: * 	netcam          pointer to netcam_context * 	cinfo           pointer to JPEG decompression context * * Returns:           Error code */static int netcam_init_jpeg(netcam_context_ptr netcam, j_decompress_ptr cinfo){	netcam_buff_ptr buff;	/*	 * First we check whether a new image has arrived.  If not, we	 * setup to wait for 1/2 a frame time.  This will (hopefully)	 * help in synchronizing the camera frames with the motion main	 * loop.	 */	pthread_mutex_lock(&netcam->mutex);	if (netcam->imgcnt_last == netcam->imgcnt) {    /* need to wait */		struct timespec waittime;		struct timeval curtime;		int retcode;			/*		 * We calculate the delay time (representing the desired frame		 * rate).  This delay time is in *nanoseconds*.		 * We will wait 0.5 seconds which gives a practical minimum		 * framerate of 2 which is desired for the motion_loop to		 * function.		 */		gettimeofday(&curtime, NULL);		curtime.tv_usec += 500000;		if (curtime.tv_usec > 1000000) {			curtime.tv_usec -= 1000000;			curtime.tv_sec++;		}				waittime.tv_sec = curtime.tv_sec;		waittime.tv_nsec = 1000L * curtime.tv_usec;				do {			retcode = pthread_cond_timedwait(&netcam->pic_ready,		                  &netcam->mutex, &waittime);		} while (retcode == EINTR);				if (retcode) {    /* we assume a non-zero reply is ETIMEOUT */			pthread_mutex_unlock(&netcam->mutex);						if (debug_level > CAMERA_WARNINGS)				motion_log(-1,0,"no new pic, no signal rcvd");							return NETCAM_GENERAL_ERROR | NETCAM_NOTHING_NEW_ERROR;		}				if (debug_level > CAMERA_VERBOSE)			motion_log(-1, 0, "***new pic delay successful***");	}		netcam->imgcnt_last = netcam->imgcnt;	/* set latest buffer as "current" */	buff = netcam->latest;	netcam->latest = netcam->jpegbuf;	netcam->jpegbuf = buff;	pthread_mutex_unlock(&netcam->mutex);	/* clear any error flag from previous work */	netcam->jpeg_error = 0;		buff = netcam->jpegbuf;	/* prepare for the decompression */	/* Initialize the JPEG decompression object */	jpeg_create_decompress(cinfo);	/* Set up own error exit routine */	cinfo->err = jpeg_std_error(&netcam->jerr);	cinfo->client_data = netcam;	netcam->jerr.error_exit = netcam_error_exit;	netcam->jerr.output_message = netcam_output_message;	/* Specify the data source as our own routine */	netcam_memory_src(cinfo, buff->ptr, buff->used);	/* Read file parameters (rejecting tables-only) */	jpeg_read_header(cinfo, TRUE);	/* Override the desired colour space */	cinfo->out_color_space = JCS_YCbCr;	/* Start the decompressor */	jpeg_start_decompress(cinfo);	return netcam->jpeg_error;}static int netcam_image_conv(netcam_context_ptr netcam,                               struct jpeg_decompress_struct *cinfo,                               unsigned char *image){	JSAMPARRAY      line;           /* array of decomp data lines */	unsigned char  *wline;          /* will point to line[0] *//* Working variables */	int             linesize, i;	unsigned char  *upic, *vpic;	unsigned char  *pic = image;	unsigned char   y;              /* switch for decoding YUV data */	unsigned int    width, height;	width = cinfo->output_width;	height = cinfo->output_height;	if (width && ((width != netcam->width) || (height != netcam->height))) {		motion_log(LOG_ERR, 0, 		           "JPEG image size %dx%d, JPEG was %dx%d",		           netcam->width, netcam->height, width, height);		jpeg_destroy_decompress (cinfo);		netcam->jpeg_error |= 4;		return netcam->jpeg_error;	}	/* Set the output pointers (these come from YUV411P definition */	upic = pic + width * height;	vpic = upic + (width * height) / 4;	/* YCbCr format will give us one byte each for YUV */	linesize = cinfo->output_width * 3;	/* Allocate space for one line */	line = (cinfo->mem->alloc_sarray)((j_common_ptr) cinfo, JPOOL_IMAGE,	                                   cinfo->output_width * cinfo->output_components, 1);	wline = line[0];	y = 0;	while (cinfo->output_scanline < height) {		jpeg_read_scanlines (cinfo, line, 1);		for (i = 0; i < linesize; i += 3) {			pic[i / 3] = wline[i];			if (i & 1) {				upic[(i / 3) / 2] = wline[i + 1];				vpic[(i / 3) / 2] = wline[i + 2];			}		}		pic += linesize / 3;		if (y++ & 1) {			upic += width / 2;			vpic += width / 2;		}	}	jpeg_finish_decompress (cinfo);	jpeg_destroy_decompress (cinfo);	if (netcam->cnt->rotate_data.degrees > 0) {		/* rotate as specified */		rotate_map(netcam->cnt, image);	}	return netcam->jpeg_error;}/** * netcam_proc_jpeg * *	Routine to decode an image received from a netcam into a YUV420P buffer *	suitable for processing by motion. * * Parameters: *	netcam    pointer to the netcam_context structure *      image     Pointer to a buffer for the returned image * * Returns:  * *      0         Success *      non-zero  error code from other routines *                (e.g. netcam_init_jpeg or netcam_image_conv) *                or just NETCAM_GENERAL_ERROR */int netcam_proc_jpeg(netcam_context_ptr netcam, unsigned char *image){	struct jpeg_decompress_struct cinfo;    /* decompression control struct */	int retval = 0;                         /* value returned to caller */	int ret;                                /* working var */	/*	 * This routine is only called from the main thread.	 * We need to "protect" the "latest" image while we	 * decompress it.  netcam_init_jpeg uses	 * netcam->mutex to do this;	 */	if (debug_level > CAMERA_INFO) {		motion_log(LOG_INFO, 0, "processing jpeg image - content length "				"%d", netcam->latest->content_length);	}		ret = netcam_init_jpeg(netcam, &cinfo);		if (ret != 0)		return ret;	/* Do a sanity check on dimensions	 * If dimensions have changed we throw an	 * error message that will cause	 * restart of Motion	 */	if (netcam->width) {    /* 0 means not yet init'ed */		if ((cinfo.output_width != netcam->width) ||			(cinfo.output_height != netcam->height)) {			motion_log(LOG_ERR, 0,		        	   "Camera width/height mismatch "			           "with JPEG image - expected %dx%d, JPEG %dx%d",			           netcam->width, netcam->height,			           cinfo.output_width, cinfo.output_height);			retval = NETCAM_RESTART_ERROR;		       	return retval;				}	}	/* do the conversion */	ret = netcam_image_conv(netcam, &cinfo, image);		if (ret != 0)		retval |= NETCAM_JPEG_CONV_ERROR;	return retval;}/** * netcam_get_dimensions * *	This function gets the height and width of the JPEG image *	located in the supplied netcam_image_buffer * * Parameters * *	netcam     pointer to the netcam context * * Returns:   Nothing, but fills in width and height into context * */void netcam_get_dimensions(netcam_context_ptr netcam){	struct jpeg_decompress_struct cinfo; /* decompression control struct */	netcam_init_jpeg(netcam, &cinfo);	netcam->width = cinfo.output_width;	netcam->height = cinfo.output_height;	jpeg_destroy_decompress(&cinfo);}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
免费成人在线视频观看| 肉丝袜脚交视频一区二区| 欧美午夜在线观看| 另类综合日韩欧美亚洲| 亚洲人成精品久久久久久| 日韩视频在线观看一区二区| 白白色 亚洲乱淫| 美腿丝袜亚洲三区| 亚洲精品中文字幕乱码三区| 日韩一级高清毛片| 欧美在线影院一区二区| 国产成人免费在线观看不卡| 日韩电影在线一区二区三区| 国产精品久久久久一区二区三区 | 国产剧情在线观看一区二区| 亚洲v日本v欧美v久久精品| 国产精品乱人伦| 日韩精品一区二区三区视频| 欧美性猛交xxxx乱大交退制版| 高清成人免费视频| 久久99精品网久久| 日韩精品色哟哟| 亚洲在线免费播放| 综合久久给合久久狠狠狠97色| 精品免费国产一区二区三区四区| 欧美日韩极品在线观看一区| 91蜜桃传媒精品久久久一区二区| 国产福利精品导航| 精品一二线国产| 性欧美疯狂xxxxbbbb| 一区二区三区国产精品| 亚洲天堂精品在线观看| 国产精品拍天天在线| 国产欧美一区二区三区沐欲| wwwwxxxxx欧美| 久久综合九色综合欧美就去吻 | 欧美亚洲一区三区| 在线免费亚洲电影| 欧美三级一区二区| 欧美日韩午夜在线| 在线综合亚洲欧美在线视频| 欧美欧美午夜aⅴ在线观看| 欧美三级乱人伦电影| 欧美性感一区二区三区| 欧美亚洲动漫另类| 欧美精品乱码久久久久久| 欧美色中文字幕| 欧美高清视频在线高清观看mv色露露十八| 在线观看一区二区视频| 欧美私人免费视频| 欧美日本韩国一区| 欧美一区二区三区不卡| 日韩欧美电影在线| 久久老女人爱爱| 国产精品久线在线观看| 亚洲日本免费电影| 亚洲午夜久久久久久久久久久 | 国产91清纯白嫩初高中在线观看 | 3d成人动漫网站| 欧美丰满一区二区免费视频| 日韩欧美一二三四区| 亚洲精品一区二区三区蜜桃下载| 精品福利视频一区二区三区| 久久久久国产免费免费| 国产精品乱人伦| 香蕉av福利精品导航| 精品一区二区久久| av午夜一区麻豆| 欧美日韩国产一级片| 精品欧美乱码久久久久久1区2区| 国产日韩欧美综合一区| 亚洲另类一区二区| 日本美女一区二区三区| 国产99一区视频免费| 在线视频国产一区| 久久综合色8888| 亚洲狼人国产精品| 乱中年女人伦av一区二区| 不卡一区二区三区四区| 欧美精品一二三| 中文字幕欧美日本乱码一线二线| 一区二区三区欧美亚洲| 久久99精品国产.久久久久久| 成人手机电影网| 欧美精品vⅰdeose4hd| 久久久精品中文字幕麻豆发布| 亚洲男同1069视频| 精品一区二区三区在线播放| av一二三不卡影片| 欧美精品18+| 成人免费在线视频观看| 人禽交欧美网站| 99精品国产热久久91蜜凸| 91精品国产91久久久久久一区二区| 国产日韩欧美不卡在线| 五月综合激情婷婷六月色窝| 高清免费成人av| 91精品国模一区二区三区| 国产精品麻豆视频| 麻豆成人免费电影| 在线欧美日韩国产| 国产精品乱子久久久久| 久久疯狂做爰流白浆xx| 91福利国产成人精品照片| 久久欧美中文字幕| 三级不卡在线观看| 91黄视频在线观看| 国产日韩成人精品| 韩国女主播成人在线观看| 欧美日产国产精品| 亚洲美女精品一区| 国产福利一区二区三区视频在线| 欧美猛男gaygay网站| 亚洲日本乱码在线观看| 粉嫩欧美一区二区三区高清影视| 欧美一区二区三区视频在线观看| 亚洲天堂福利av| 成人免费视频国产在线观看| 精品对白一区国产伦| 丝袜国产日韩另类美女| 91搞黄在线观看| 亚洲女爱视频在线| 91视频在线看| 国产精品久久久久永久免费观看| 国产成人午夜高潮毛片| 精品粉嫩aⅴ一区二区三区四区| 日本人妖一区二区| 欧美久久免费观看| 香蕉成人啪国产精品视频综合网| 日本高清成人免费播放| 亚洲另类中文字| 日本韩国欧美三级| 一区二区三区四区五区视频在线观看 | 亚洲一区免费在线观看| 91一区在线观看| 亚洲婷婷综合色高清在线| 天天综合网 天天综合色| 精品视频全国免费看| 亚洲国产精品一区二区久久恐怖片| 欧洲色大大久久| 亚洲成人av一区二区| 欧美日韩性生活| 日本成人在线不卡视频| 日韩一二三四区| 美女mm1313爽爽久久久蜜臀| 日韩一区二区在线播放| 老司机精品视频一区二区三区| 欧美一级片免费看| 另类欧美日韩国产在线| 精品国产不卡一区二区三区| 国产精品456露脸| 国产精品人妖ts系列视频| 99re成人在线| 亚洲国产视频一区二区| 欧美精品 日韩| 国产又黄又大久久| 国产精品乱码久久久久久| 99re热视频这里只精品| 亚洲小少妇裸体bbw| 在线播放亚洲一区| 精品一区二区综合| 国产三级欧美三级| av资源网一区| 亚洲成av人影院在线观看网| 欧美狂野另类xxxxoooo| 国产最新精品免费| 日韩码欧中文字| 91精品欧美福利在线观看| 国产一区二区三区在线观看免费| 国产精品天干天干在观线| 日本高清免费不卡视频| 另类综合日韩欧美亚洲| ...中文天堂在线一区| 欧美视频在线不卡| 国产一区二区三区av电影| 一区视频在线播放| 91麻豆精品国产自产在线 | 日韩欧美视频在线| www..com久久爱| 日本美女一区二区| 亚洲欧美日韩中文字幕一区二区三区| 欧美高清激情brazzers| 国产福利视频一区二区三区| 亚洲成人自拍偷拍| 久久先锋影音av| 另类人妖一区二区av| 国产精品电影一区二区| 欧美肥大bbwbbw高潮| 大胆亚洲人体视频| 日韩在线一区二区三区| 国产精品三级av| 欧美一二三区在线| 99精品视频在线免费观看| 免费成人你懂的| 一区二区成人在线视频| 精品盗摄一区二区三区| 在线免费观看一区| 成人高清视频在线| 紧缚捆绑精品一区二区| 亚洲在线视频一区|