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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? pwc-dec23.c

?? webcam device driver
?? C
?? 第 1 頁 / 共 2 頁
字號:
 *   . G . G . G . G . G . G . G *   . . . . . . . . . . . . . . *   . G . G . G . G . G . G . G *   . . . . . . . . . . . . . . *   or *   . . . . . . . . . . . . . . *   G . G . G . G . G . G . G . *   . . . . . . . . . . . . . . *   G . G . G . G . G . G . G .*/static void copy_image_block_Green(const int *src, unsigned char *dst, unsigned int bytes_per_line, unsigned int scalebits){#if UNROLL_LOOP_FOR_COPY	/* Unroll all loops */	const unsigned char *cm = pwc_crop_table+MAX_OUTER_CROP_VALUE;	unsigned char *d = dst;	const int *c = src;	d[0] = cm[c[0] >> scalebits];	d[2] = cm[c[1] >> scalebits];	d[4] = cm[c[2] >> scalebits];	d[6] = cm[c[3] >> scalebits];	d[8] = cm[c[4] >> scalebits];	d[10] = cm[c[5] >> scalebits];	d[12] = cm[c[6] >> scalebits];	d[14] = cm[c[7] >> scalebits];	d = dst + bytes_per_line;	d[0] = cm[c[8] >> scalebits];	d[2] = cm[c[9] >> scalebits];	d[4] = cm[c[10] >> scalebits];	d[6] = cm[c[11] >> scalebits];	d[8] = cm[c[12] >> scalebits];	d[10] = cm[c[13] >> scalebits];	d[12] = cm[c[14] >> scalebits];	d[14] = cm[c[15] >> scalebits];#else	int i;	unsigned char *d;	const int *c = src;	d = dst;	for (i = 0; i < 8; i++, c++)		d[i*2] = CLAMP((*c) >> scalebits);	d = dst + bytes_per_line;	for (i = 0; i < 8; i++, c++)		d[i*2] = CLAMP((*c) >> scalebits);#endif}#endif#if ENABLE_BAYER_DECODER/* * Format: 4x4 pixels *   R . R . R . R *   . B . B . B . *   R . R . R . R *   . B . B . B . */static void copy_image_block_RedBlue(const int *src, unsigned char *dst, unsigned int bytes_per_line, unsigned int scalebits){#if UNROLL_LOOP_FOR_COPY	/* Unroll all loops */	const unsigned char *cm = pwc_crop_table+MAX_OUTER_CROP_VALUE;	unsigned char *d = dst;	const int *c = src;	d[0] = cm[c[0] >> scalebits];	d[2] = cm[c[1] >> scalebits];	d[4] = cm[c[2] >> scalebits];	d[6] = cm[c[3] >> scalebits];	d = dst + bytes_per_line;	d[1] = cm[c[4] >> scalebits];	d[3] = cm[c[5] >> scalebits];	d[5] = cm[c[6] >> scalebits];	d[7] = cm[c[7] >> scalebits];	d = dst + bytes_per_line*2;	d[0] = cm[c[8] >> scalebits];	d[2] = cm[c[9] >> scalebits];	d[4] = cm[c[10] >> scalebits];	d[6] = cm[c[11] >> scalebits];	d = dst + bytes_per_line*3;	d[1] = cm[c[12] >> scalebits];	d[3] = cm[c[13] >> scalebits];	d[5] = cm[c[14] >> scalebits];	d[7] = cm[c[15] >> scalebits];#else	int i;	unsigned char *d;	const int *c = src;	d = dst;	for (i = 0; i < 4; i++, c++)		d[i*2] = CLAMP((*c) >> scalebits);	d = dst + bytes_per_line;	for (i = 0; i < 4; i++, c++)		d[i*2+1] = CLAMP((*c) >> scalebits);	d = dst + bytes_per_line*2;	for (i = 0; i < 4; i++, c++)		d[i*2] = CLAMP((*c) >> scalebits);	d = dst + bytes_per_line*3;	for (i = 0; i < 4; i++, c++)		d[i*2+1] = CLAMP((*c) >> scalebits);#endif}#endif/* * To manage the stream, we keep bits in a 32 bits register. * fill_nbits(n): fill the reservoir with at least n bits * skip_bits(n): discard n bits from the reservoir * get_bits(n): fill the reservoir, returns the first n bits and discard the *              bits from the reservoir. * __get_nbits(n): faster version of get_bits(n), but asumes that the reservoir *                 contains at least n bits. bits returned is discarded. */#define fill_nbits(pdec, nbits_wanted) do { \   while (pdec->nbits_in_reservoir<(nbits_wanted)) \    { \      pdec->reservoir |= (*(pdec->stream)++) << (pdec->nbits_in_reservoir); \      pdec->nbits_in_reservoir += 8; \    } \}  while(0);#define skip_nbits(pdec, nbits_to_skip) do { \   pdec->reservoir >>= (nbits_to_skip); \   pdec->nbits_in_reservoir -= (nbits_to_skip); \}  while(0);#define get_nbits(pdec, nbits_wanted, result) do { \   fill_nbits(pdec, nbits_wanted); \   result = (pdec->reservoir) & ((1U<<(nbits_wanted))-1); \   skip_nbits(pdec, nbits_wanted); \}  while(0);#define __get_nbits(pdec, nbits_wanted, result) do { \   result = (pdec->reservoir) & ((1U<<(nbits_wanted))-1); \   skip_nbits(pdec, nbits_wanted); \}  while(0);#define look_nbits(pdec, nbits_wanted) \   ((pdec->reservoir) & ((1U<<(nbits_wanted))-1))/* * Decode a 4x4 pixel block */static void decode_block(struct pwc_dec23_private *pdec,			 const unsigned char *ptable0004,			 const unsigned char *ptable8004){	unsigned int primary_color;	unsigned int channel_v, offset1, op;	int i;	fill_nbits(pdec, 16);	__get_nbits(pdec, pdec->nbits, primary_color);	if (look_nbits(pdec,2) == 0) {		skip_nbits(pdec, 2);		/* Very simple, the color is the same for all pixels of the square */		for (i = 0; i < 16; i++)			pdec->temp_colors[i] = pdec->table_dc00[primary_color];		return;	}	/* This block is encoded with small pattern */	for (i = 0; i < 16; i++)		pdec->temp_colors[i] = pdec->table_d800[primary_color];	__get_nbits(pdec, 3, channel_v);	channel_v = ((channel_v & 1) << 2) | (channel_v & 2) | ((channel_v & 4) >> 2);	ptable0004 += (channel_v * 128);	ptable8004 += (channel_v * 32);	offset1 = 0;	do	{		unsigned int htable_idx, rows = 0;		const unsigned int *block;		/* [  zzzz y x x ]		 *     xx == 00 :=> end of the block def, remove the two bits from the stream		 *    yxx == 111		 *    yxx == any other value		 *    		 */		fill_nbits(pdec, 16);		htable_idx = look_nbits(pdec, 6);		op = hash_table_ops[htable_idx * 4];		if (op == 2) {			skip_nbits(pdec, 2);		} else if (op == 1) {			/* 15bits [ xxxx xxxx yyyy 111 ]			 * yyy => offset in the table8004			 * xxx => offset in the tabled004 (tree)			 */			unsigned int mask, shift;			unsigned int nbits, col1;			unsigned int yyyy;			skip_nbits(pdec, 3);			/* offset1 += yyyy */			__get_nbits(pdec, 4, yyyy);			offset1 += 1 + yyyy;			offset1 &= 0x0F;			nbits = ptable8004[offset1 * 2];			/* col1 = xxxx xxxx */			__get_nbits(pdec, nbits+1, col1);			/* Bit mask table */			mask = pdec->table_bitpowermask[nbits][col1];			shift = ptable8004[offset1 * 2 + 1];			rows = ((mask << shift) + 0x80) & 0xFF;			block = pdec->table_subblock[rows];			for (i = 0; i < 16; i++)				pdec->temp_colors[i] += block[MulIdx[offset1][i]];		} else {			/* op == 0			 * offset1 is coded on 3 bits			 */    			unsigned int shift;			offset1 += hash_table_ops [htable_idx * 4 + 2];			offset1 &= 0x0F;			rows = ptable0004[offset1 + hash_table_ops [htable_idx * 4 + 3]];			block = pdec->table_subblock[rows];			for (i = 0; i < 16; i++)				pdec->temp_colors[i] += block[MulIdx[offset1][i]];			shift = hash_table_ops[htable_idx * 4 + 1];			skip_nbits(pdec, shift);		}	} while (op != 2);}static void DecompressBand23(struct pwc_dec23_private *pdec,			     const unsigned char *rawyuv,			     unsigned char *planar_y,			     unsigned char *planar_u,			     unsigned char *planar_v,			     unsigned int   compressed_image_width,			     unsigned int   real_image_width){	int compression_index, nblocks;	const unsigned char *ptable0004;	const unsigned char *ptable8004;	pdec->reservoir = 0;	pdec->nbits_in_reservoir = 0;	pdec->stream = rawyuv + 1;	/* The first byte of the stream is skipped */	get_nbits(pdec, 4, compression_index);	/* pass 1: uncompress Y component */	nblocks = compressed_image_width / 4;	ptable0004 = pdec->table_0004_pass1[compression_index];	ptable8004 = pdec->table_8004_pass1[compression_index];	/* Each block decode a square of 4x4 */	while (nblocks) {		decode_block(pdec, ptable0004, ptable8004);		copy_image_block_Y(pdec->temp_colors, planar_y, real_image_width, pdec->scalebits);		planar_y += 4;		nblocks--;	}	/* pass 2: uncompress UV component */	nblocks = compressed_image_width / 8;	ptable0004 = pdec->table_0004_pass2[compression_index];	ptable8004 = pdec->table_8004_pass2[compression_index];	/* Each block decode a square of 4x4 */	while (nblocks) {		decode_block(pdec, ptable0004, ptable8004);		copy_image_block_CrCb(pdec->temp_colors, planar_u, real_image_width/2, pdec->scalebits);		decode_block(pdec, ptable0004, ptable8004);		copy_image_block_CrCb(pdec->temp_colors, planar_v, real_image_width/2, pdec->scalebits);		planar_v += 8;		planar_u += 8;		nblocks -= 2;	}}#if ENABLE_BAYER_DECODER/* * Size need to be a multiple of 8 in width * * Return a block of four line encoded like this: * *   G R G R G R G R G R G R G R G R *   B G B G B G B G B G B G B G B G *   G R G R G R G R G R G R G R G R *   B G B G B G B G B G B G B G B G *  */static void DecompressBandBayer(struct pwc_dec23_private *pdec,    				const unsigned char *rawyuv,				unsigned char *rgbbayer,				unsigned int   compressed_image_width,				unsigned int   real_image_width){	int compression_index, nblocks;	const unsigned char *ptable0004;	const unsigned char *ptable8004;	unsigned char *dest;	pdec->reservoir = 0;	pdec->nbits_in_reservoir = 0;	pdec->stream = rawyuv + 1;	/* The first byte of the stream is skipped */	get_nbits(pdec, 4, compression_index);	/* pass 1: uncompress RB component */	nblocks = compressed_image_width / 4;	ptable0004 = pdec->table_0004_pass1[compression_index];	ptable8004 = pdec->table_8004_pass1[compression_index];	dest = rgbbayer;	/* Each block decode a square of 4x4 */	while (nblocks) {		decode_block(pdec, ptable0004, ptable8004);		copy_image_block_RedBlue(pdec->temp_colors, rgbbayer, real_image_width, pdec->scalebits);		dest += 8;		nblocks--;	}	/* pass 2: uncompress G component */	nblocks = compressed_image_width / 8;	ptable0004 = pdec->table_0004_pass2[compression_index];	ptable8004 = pdec->table_8004_pass2[compression_index];	/* Each block decode a square of 4x4 */	while (nblocks) {		decode_block(pdec, ptable0004, ptable8004);		copy_image_block_Green(pdec->temp_colors, rgbbayer+1, real_image_width, pdec->scalebits);		decode_block(pdec, ptable0004, ptable8004);		copy_image_block_Green(pdec->temp_colors, rgbbayer+real_image_width, real_image_width, pdec->scalebits);		rgbbayer += 16;		nblocks -= 2;	}}#endif/** * * Uncompress a pwc23 buffer. * * pwc.view: size of the image wanted * pwc.image: size of the image returned by the camera * pwc.offset: (x,y) to displayer image in the view * * src: raw data * dst: image output * flags: PWCX_FLAG_PLANAR or PWCX_FLAG_BAYER */void pwc_dec23_decompress(const struct pwc_device *pwc,			  const void *src,			  void *dst,			  int flags){	int bandlines_left, stride, bytes_per_block;	bandlines_left = pwc->image.y / 4;	bytes_per_block = pwc->view.x * 4;	if (flags & PWCX_FLAG_BAYER) {#if ENABLE_BAYER_DECODER		/* RGB Bayer format */		unsigned char *rgbout;		stride = pwc->view.x * pwc->offset.y;		rgbout = dst + stride + pwc->offset.x;		while (bandlines_left--) {			DecompressBandBayer(pwc->decompress_data,					    src,					    rgbout,					    pwc->image.x, pwc->view.x);			src += pwc->vbandlength;			rgbout += bytes_per_block;		}	#else		memcpy(dst, 0, pwc->view.x * pwc->view.y);#endif	} else {		/* YUV420P image format */		unsigned char *pout_planar_y;		unsigned char *pout_planar_u;		unsigned char *pout_planar_v;		unsigned int   plane_size;		plane_size = pwc->view.x * pwc->view.y;		/* offset in Y plane */		stride = pwc->view.x * pwc->offset.y;		pout_planar_y = dst + stride + pwc->offset.x;		/* offsets in U/V planes */		stride = (pwc->view.x * pwc->offset.y) / 4 + pwc->offset.x / 2;		pout_planar_u = dst + plane_size + stride;		pout_planar_v = dst + plane_size + plane_size / 4 + stride;		while (bandlines_left--) {			DecompressBand23(pwc->decompress_data,				         src,					 pout_planar_y, pout_planar_u, pout_planar_v,					 pwc->image.x, pwc->view.x);			src += pwc->vbandlength;			pout_planar_y += bytes_per_block;			pout_planar_u += pwc->view.x;			pout_planar_v += pwc->view.x;		}		}}void pwc_dec23_exit(void){	/* Do nothing */}/** * Allocate a private structure used by lookup table. * You must call kfree() to free the memory allocated. */int pwc_dec23_alloc(struct pwc_device *pwc){	pwc->decompress_data = kmalloc(sizeof(struct pwc_dec23_private), GFP_KERNEL);	if (pwc->decompress_data == NULL)		return -ENOMEM;	return 0;}/* vim: set cino= formatoptions=croql cindent shiftwidth=8 tabstop=8: */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
免费高清不卡av| www一区二区| 欧美艳星brazzers| 91免费小视频| 色综合天天综合网国产成人综合天| 国产精品一级片| 国产成都精品91一区二区三| 国内精品国产成人| 国产精品一区二区91| 成人精品免费看| 99久久久久久99| 色天使久久综合网天天| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 国产精品久久毛片a| 中文字幕欧美激情| 亚洲欧洲av色图| 亚洲一区在线播放| 午夜电影久久久| 欧美a一区二区| 国产一区二区三区四区五区入口 | 99精品欧美一区二区蜜桃免费 | 欧美日韩国产系列| 91精品福利在线一区二区三区| 欧美一级xxx| 久久亚洲捆绑美女| 日韩理论在线观看| 三级久久三级久久久| 国产在线精品免费| 91污在线观看| 日韩亚洲电影在线| 欧美国产精品一区| 亚洲最新在线观看| 裸体一区二区三区| 不卡电影免费在线播放一区| 欧洲人成人精品| 精品日韩欧美一区二区| 国产精品久久久久四虎| 亚洲成人自拍网| 国产精品99久久久久久宅男| 在线视频一区二区三区| 欧美成人vr18sexvr| 中文字幕一区免费在线观看 | 国产69精品久久久久777| 91免费国产在线| 日韩欧美国产精品一区| 中文字幕一区二区三区精华液| 亚洲一区二区三区影院| 国产精品12区| 欧美日韩精品免费观看视频| 国产网站一区二区三区| 亚洲电影在线播放| 成人午夜电影小说| 欧美一级黄色大片| 一区二区在线观看不卡| 国产一区在线视频| 精品婷婷伊人一区三区三| 国产视频一区不卡| 五月开心婷婷久久| 一本到高清视频免费精品| www日韩大片| 日韩主播视频在线| 色老头久久综合| 日本一区二区三区四区在线视频 | 91福利在线看| 日本一区二区视频在线| 另类小说图片综合网| 欧洲精品在线观看| 日本女人一区二区三区| 99国产精品国产精品久久| 精品久久免费看| 五月天一区二区| 在线视频综合导航| 亚洲视频一二区| 国产成人自拍网| 欧美r级在线观看| 日韩和欧美的一区| 欧美亚洲一区二区在线| 国产精品九色蝌蚪自拍| 国产电影精品久久禁18| 精品三级在线看| 日本不卡中文字幕| 欧美日韩夫妻久久| 艳妇臀荡乳欲伦亚洲一区| 99精品国产99久久久久久白柏| 精品国产三级a在线观看| 日日夜夜一区二区| 欧美三级在线看| 亚洲超碰97人人做人人爱| 日本高清不卡视频| 亚洲欧美日韩一区| 色老头久久综合| 一区二区三区在线看| 色综合久久88色综合天天| 亚洲欧洲性图库| 99r国产精品| 亚洲欧洲成人精品av97| 97久久精品人人做人人爽50路| 国产女同互慰高潮91漫画| 国产酒店精品激情| 久久久精品中文字幕麻豆发布| 极品美女销魂一区二区三区| 欧美tickling网站挠脚心| 久久99精品久久久久久动态图| 日韩亚洲欧美在线| 国产在线不卡一区| 久久精品综合网| 成人丝袜高跟foot| 亚洲欧洲精品一区二区精品久久久 | 亚洲成人tv网| 欧美日韩三级一区二区| 午夜精品一区二区三区三上悠亚| 欧美丝袜丝交足nylons图片| 亚洲综合区在线| 欧美精品三级在线观看| 奇米精品一区二区三区在线观看| 日韩一级片在线观看| 国产一区二区三区国产| 亚洲国产精品成人综合| 97国产精品videossex| 亚洲欧美一区二区三区国产精品| 在线观看欧美黄色| 日韩av一区二区三区| 2020国产精品自拍| av成人老司机| 亚洲v日本v欧美v久久精品| 欧美一区二区免费视频| 国产又粗又猛又爽又黄91精品| 中文字幕成人网| 91国偷自产一区二区使用方法| 五月天精品一区二区三区| 亚洲精品一区二区三区福利 | 久久亚洲春色中文字幕久久久| 国产精品亚洲专一区二区三区| 中文字幕日本乱码精品影院| 欧美最猛黑人xxxxx猛交| 免费成人av资源网| 国产精品久久久久aaaa| 精品视频在线视频| 国产高清久久久| 一区二区三区中文在线| 日韩欧美国产一二三区| 成人av资源站| 天天色 色综合| 欧美激情在线免费观看| 欧美日韩国产精选| 成人丝袜18视频在线观看| 亚洲成人在线网站| 欧美高清在线精品一区| 欧美裸体bbwbbwbbw| 国产v日产∨综合v精品视频| 亚洲va欧美va天堂v国产综合| 26uuu国产电影一区二区| 欧美在线三级电影| 国产精品18久久久久久vr| 亚洲午夜激情网站| 国产精品毛片高清在线完整版| 欧美区一区二区三区| 成人免费看黄yyy456| 三级久久三级久久| 亚洲免费观看高清完整版在线观看熊| 在线播放国产精品二区一二区四区| 国产99久久久国产精品潘金| 午夜精品久久久久久久久久| 国产精品久久久久久久裸模| 欧美老肥妇做.爰bbww| 99久久婷婷国产综合精品| 狠狠色丁香久久婷婷综合_中| 亚洲在线观看免费| 国产精品精品国产色婷婷| 精品1区2区在线观看| 欧美福利视频导航| 91福利视频在线| 99久久婷婷国产综合精品电影| 精品在线一区二区| 日韩激情一二三区| 亚洲国产视频网站| 亚洲女性喷水在线观看一区| 国产欧美一区二区三区在线看蜜臀 | 亚洲欧洲国产日本综合| 26uuu色噜噜精品一区二区| 51精品久久久久久久蜜臀| 欧美怡红院视频| 色天使久久综合网天天| 99精品久久久久久| 成人免费不卡视频| 国产成人av在线影院| 久久成人综合网| 蜜臀久久99精品久久久画质超高清 | 日韩欧美一区二区不卡| 欧美丝袜丝交足nylons图片| 色偷偷久久一区二区三区| 成人午夜在线播放| 国产成人午夜视频| 国产精品一区二区在线观看不卡 | 精品一区二区久久| 奇米影视一区二区三区小说| 亚洲二区视频在线| 午夜视频一区在线观看| 午夜国产精品一区| 日韩电影在线一区|