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

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

?? ivtv-yuv.c

?? trident tm5600的linux驅動
?? C
?? 第 1 頁 / 共 3 頁
字號:
	yi->reg_2838 = read_reg(0x02838);	yi->reg_283c = read_reg(0x0283c);	yi->reg_2840 = read_reg(0x02840);	yi->reg_2844 = read_reg(0x02844);	yi->reg_2848 = read_reg(0x02848);	yi->reg_2854 = read_reg(0x02854);	yi->reg_285c = read_reg(0x0285c);	yi->reg_2864 = read_reg(0x02864);	yi->reg_2870 = read_reg(0x02870);	yi->reg_2874 = read_reg(0x02874);	yi->reg_2898 = read_reg(0x02898);	yi->reg_2890 = read_reg(0x02890);	yi->reg_289c = read_reg(0x0289c);	yi->reg_2918 = read_reg(0x02918);	yi->reg_291c = read_reg(0x0291c);	yi->reg_2920 = read_reg(0x02920);	yi->reg_2924 = read_reg(0x02924);	yi->reg_2928 = read_reg(0x02928);	yi->reg_292c = read_reg(0x0292c);	yi->reg_2930 = read_reg(0x02930);	yi->reg_2934 = read_reg(0x02934);	yi->reg_2938 = read_reg(0x02938);	yi->reg_293c = read_reg(0x0293c);	yi->reg_2940 = read_reg(0x02940);	yi->reg_2944 = read_reg(0x02944);	yi->reg_2948 = read_reg(0x02948);	yi->reg_294c = read_reg(0x0294c);	yi->reg_2950 = read_reg(0x02950);	yi->reg_2954 = read_reg(0x02954);	yi->reg_2958 = read_reg(0x02958);	yi->reg_295c = read_reg(0x0295c);	yi->reg_2960 = read_reg(0x02960);	yi->reg_2964 = read_reg(0x02964);	yi->reg_2968 = read_reg(0x02968);	yi->reg_296c = read_reg(0x0296c);	yi->reg_2970 = read_reg(0x02970);	yi->v_filter_1 = -1;	yi->v_filter_2 = -1;	yi->h_filter = -1;	/* Set some valid size info */	yi->osd_x_offset = read_reg(0x02a04) & 0x00000FFF;	yi->osd_y_offset = (read_reg(0x02a04) >> 16) & 0x00000FFF;	/* Bit 2 of reg 2878 indicates current decoder output format	   0 : NTSC    1 : PAL */	if (read_reg(0x2878) & 4)		yi->decode_height = 576;	else		yi->decode_height = 480;	if (!itv->osd_info) {		yi->osd_vis_w = 720 - yi->osd_x_offset;		yi->osd_vis_h = yi->decode_height - yi->osd_y_offset;	} else {		/* If no visible size set, assume full size */		if (!yi->osd_vis_w)			yi->osd_vis_w = 720 - yi->osd_x_offset;		if (!yi->osd_vis_h) {			yi->osd_vis_h = yi->decode_height - yi->osd_y_offset;		} else if (yi->osd_vis_h + yi->osd_y_offset > yi->decode_height) {			/* If output video standard has changed, requested height may			   not be legal */			IVTV_DEBUG_WARN("Clipping yuv output - fb size (%d) exceeds video standard limit (%d)\n",					yi->osd_vis_h + yi->osd_y_offset,					yi->decode_height);			yi->osd_vis_h = yi->decode_height - yi->osd_y_offset;		}	}	/* We need a buffer for blanking when Y plane is offset - non-fatal if we can't get one */	yi->blanking_ptr = kzalloc(720 * 16, GFP_KERNEL|__GFP_NOWARN);	if (yi->blanking_ptr) {		yi->blanking_dmaptr = pci_map_single(itv->dev, yi->blanking_ptr, 720*16, PCI_DMA_TODEVICE);	} else {		yi->blanking_dmaptr = 0;		IVTV_DEBUG_WARN("Failed to allocate yuv blanking buffer\n");	}	/* Enable YUV decoder output */	write_reg_sync(0x01, IVTV_REG_VDM);	set_bit(IVTV_F_I_DECODING_YUV, &itv->i_flags);	atomic_set(&yi->next_dma_frame, 0);}/* Get next available yuv buffer on PVR350 */static void ivtv_yuv_next_free(struct ivtv *itv){	int draw, display;	struct yuv_playback_info *yi = &itv->yuv_info;	if (atomic_read(&yi->next_dma_frame) == -1)		ivtv_yuv_init(itv);	draw = atomic_read(&yi->next_fill_frame);	display = atomic_read(&yi->next_dma_frame);	if (display > draw)		display -= IVTV_YUV_BUFFERS;	if (draw - display >= yi->max_frames_buffered)		draw = (u8)(draw - 1) % IVTV_YUV_BUFFERS;	else		yi->new_frame_info[draw].update = 0;	yi->draw_frame = draw;}/* Set up frame according to ivtv_dma_frame parameters */static void ivtv_yuv_setup_frame(struct ivtv *itv, struct ivtv_dma_frame *args){	struct yuv_playback_info *yi = &itv->yuv_info;	u8 frame = yi->draw_frame;	u8 last_frame = (u8)(frame - 1) % IVTV_YUV_BUFFERS;	struct yuv_frame_info *nf = &yi->new_frame_info[frame];	struct yuv_frame_info *of = &yi->new_frame_info[last_frame];	int lace_threshold = yi->lace_threshold;	/* Preserve old update flag in case we're overwriting a queued frame */	int update = nf->update;	/* Take a snapshot of the yuv coordinate information */	nf->src_x = args->src.left;	nf->src_y = args->src.top;	nf->src_w = args->src.width;	nf->src_h = args->src.height;	nf->dst_x = args->dst.left;	nf->dst_y = args->dst.top;	nf->dst_w = args->dst.width;	nf->dst_h = args->dst.height;	nf->tru_x = args->dst.left;	nf->tru_w = args->src_width;	nf->tru_h = args->src_height;	/* Are we going to offset the Y plane */	nf->offset_y = (nf->tru_h + nf->src_x < 512 - 16) ? 1 : 0;	nf->update = 0;	nf->interlaced_y = 0;	nf->interlaced_uv = 0;	nf->delay = 0;	nf->sync_field = 0;	nf->lace_mode = yi->lace_mode & IVTV_YUV_MODE_MASK;	if (lace_threshold < 0)		lace_threshold = yi->decode_height - 1;	/* Work out the lace settings */	switch (nf->lace_mode) {	case IVTV_YUV_MODE_PROGRESSIVE: /* Progressive mode */		nf->interlaced = 0;		if (nf->tru_h < 512 || (nf->tru_h > 576 && nf->tru_h < 1021))			nf->interlaced_y = 0;		else			nf->interlaced_y = 1;		if (nf->tru_h < 1021 && (nf->dst_h >= nf->src_h / 2))			nf->interlaced_uv = 0;		else			nf->interlaced_uv = 1;		break;	case IVTV_YUV_MODE_AUTO:		if (nf->tru_h <= lace_threshold || nf->tru_h > 576 || nf->tru_w > 720) {			nf->interlaced = 0;			if ((nf->tru_h < 512) ||			    (nf->tru_h > 576 && nf->tru_h < 1021) ||			    (nf->tru_w > 720 && nf->tru_h < 1021))				nf->interlaced_y = 0;			else				nf->interlaced_y = 1;			if (nf->tru_h < 1021 && (nf->dst_h >= nf->src_h / 2))				nf->interlaced_uv = 0;			else				nf->interlaced_uv = 1;		} else {			nf->interlaced = 1;			nf->interlaced_y = 1;			nf->interlaced_uv = 1;		}		break;	case IVTV_YUV_MODE_INTERLACED: /* Interlace mode */	default:		nf->interlaced = 1;		nf->interlaced_y = 1;		nf->interlaced_uv = 1;		break;	}	if (memcmp(&yi->old_frame_info_args, nf, sizeof(*nf))) {		yi->old_frame_info_args = *nf;		nf->update = 1;		IVTV_DEBUG_YUV("Requesting reg update for frame %d\n", frame);	}	nf->update |= update;	nf->sync_field = yi->lace_sync_field;	nf->delay = nf->sync_field != of->sync_field;}/* Frame is complete & ready for display */void ivtv_yuv_frame_complete(struct ivtv *itv){	atomic_set(&itv->yuv_info.next_fill_frame,			(itv->yuv_info.draw_frame + 1) % IVTV_YUV_BUFFERS);}static int ivtv_yuv_udma_frame(struct ivtv *itv, struct ivtv_dma_frame *args){	DEFINE_WAIT(wait);	int rc = 0;	int got_sig = 0;	/* DMA the frame */	mutex_lock(&itv->udma.lock);	if ((rc = ivtv_yuv_prep_user_dma(itv, &itv->udma, args)) != 0) {		mutex_unlock(&itv->udma.lock);		return rc;	}	ivtv_udma_prepare(itv);	prepare_to_wait(&itv->dma_waitq, &wait, TASK_INTERRUPTIBLE);	/* if no UDMA is pending and no UDMA is in progress, then the DMA	   is finished */	while (itv->i_flags & (IVTV_F_I_UDMA_PENDING | IVTV_F_I_UDMA)) {		/* don't interrupt if the DMA is in progress but break off		   a still pending DMA. */		got_sig = signal_pending(current);		if (got_sig && test_and_clear_bit(IVTV_F_I_UDMA_PENDING, &itv->i_flags))			break;		got_sig = 0;		schedule();	}	finish_wait(&itv->dma_waitq, &wait);	/* Unmap Last DMA Xfer */	ivtv_udma_unmap(itv);	if (got_sig) {		IVTV_DEBUG_INFO("User stopped YUV UDMA\n");		mutex_unlock(&itv->udma.lock);		return -EINTR;	}	ivtv_yuv_frame_complete(itv);	mutex_unlock(&itv->udma.lock);	return rc;}/* Setup frame according to V4L2 parameters */void ivtv_yuv_setup_stream_frame(struct ivtv *itv){	struct yuv_playback_info *yi = &itv->yuv_info;	struct ivtv_dma_frame dma_args;	ivtv_yuv_next_free(itv);	/* Copy V4L2 parameters to an ivtv_dma_frame struct... */	dma_args.y_source = NULL;	dma_args.uv_source = NULL;	dma_args.src.left = 0;	dma_args.src.top = 0;	dma_args.src.width = yi->v4l2_src_w;	dma_args.src.height = yi->v4l2_src_h;	dma_args.dst = yi->main_rect;	dma_args.src_width = yi->v4l2_src_w;	dma_args.src_height = yi->v4l2_src_h;	/* ... and use the same setup routine as ivtv_yuv_prep_frame */	ivtv_yuv_setup_frame(itv, &dma_args);	if (!itv->dma_data_req_offset)		itv->dma_data_req_offset = yuv_offset[yi->draw_frame];}/* Attempt to dma a frame from a user buffer */int ivtv_yuv_udma_stream_frame(struct ivtv *itv, void __user *src){	struct yuv_playback_info *yi = &itv->yuv_info;	struct ivtv_dma_frame dma_args;	ivtv_yuv_setup_stream_frame(itv);	/* We only need to supply source addresses for this */	dma_args.y_source = src;	dma_args.uv_source = src + 720 * ((yi->v4l2_src_h + 31) & ~31);	return ivtv_yuv_udma_frame(itv, &dma_args);}/* IVTV_IOC_DMA_FRAME ioctl handler */int ivtv_yuv_prep_frame(struct ivtv *itv, struct ivtv_dma_frame *args){/*	IVTV_DEBUG_INFO("yuv_prep_frame\n"); */	ivtv_yuv_next_free(itv);	ivtv_yuv_setup_frame(itv, args);	return ivtv_yuv_udma_frame(itv, args);}void ivtv_yuv_close(struct ivtv *itv){	struct yuv_playback_info *yi = &itv->yuv_info;	int h_filter, v_filter_1, v_filter_2;	IVTV_DEBUG_YUV("ivtv_yuv_close\n");	ivtv_waitq(&itv->vsync_waitq);	yi->running = 0;	atomic_set(&yi->next_dma_frame, -1);	atomic_set(&yi->next_fill_frame, 0);	/* Reset registers we have changed so mpeg playback works */	/* If we fully restore this register, the display may remain active.	   Restore, but set one bit to blank the video. Firmware will always	   clear this bit when needed, so not a problem. */	write_reg(yi->reg_2898 | 0x01000000, 0x2898);	write_reg(yi->reg_2834, 0x02834);	write_reg(yi->reg_2838, 0x02838);	write_reg(yi->reg_283c, 0x0283c);	write_reg(yi->reg_2840, 0x02840);	write_reg(yi->reg_2844, 0x02844);	write_reg(yi->reg_2848, 0x02848);	write_reg(yi->reg_2854, 0x02854);	write_reg(yi->reg_285c, 0x0285c);	write_reg(yi->reg_2864, 0x02864);	write_reg(yi->reg_2870, 0x02870);	write_reg(yi->reg_2874, 0x02874);	write_reg(yi->reg_2890, 0x02890);	write_reg(yi->reg_289c, 0x0289c);	write_reg(yi->reg_2918, 0x02918);	write_reg(yi->reg_291c, 0x0291c);	write_reg(yi->reg_2920, 0x02920);	write_reg(yi->reg_2924, 0x02924);	write_reg(yi->reg_2928, 0x02928);	write_reg(yi->reg_292c, 0x0292c);	write_reg(yi->reg_2930, 0x02930);	write_reg(yi->reg_2934, 0x02934);	write_reg(yi->reg_2938, 0x02938);	write_reg(yi->reg_293c, 0x0293c);	write_reg(yi->reg_2940, 0x02940);	write_reg(yi->reg_2944, 0x02944);	write_reg(yi->reg_2948, 0x02948);	write_reg(yi->reg_294c, 0x0294c);	write_reg(yi->reg_2950, 0x02950);	write_reg(yi->reg_2954, 0x02954);	write_reg(yi->reg_2958, 0x02958);	write_reg(yi->reg_295c, 0x0295c);	write_reg(yi->reg_2960, 0x02960);	write_reg(yi->reg_2964, 0x02964);	write_reg(yi->reg_2968, 0x02968);	write_reg(yi->reg_296c, 0x0296c);	write_reg(yi->reg_2970, 0x02970);	/* Prepare to restore filters */	/* First the horizontal filter */	if ((yi->reg_2834 & 0x0000FFFF) == (yi->reg_2834 >> 16)) {		/* An exact size match uses filter 0 */		h_filter = 0;	} else {		/* Figure out which filter to use */		h_filter = ((yi->reg_2834 << 16) / (yi->reg_2834 >> 16)) >> 15;		h_filter = (h_filter >> 1) + (h_filter & 1);		/* Only an exact size match can use filter 0. */		h_filter += !h_filter;	}	/* Now the vertical filter */	if ((yi->reg_2918 & 0x0000FFFF) == (yi->reg_2918 >> 16)) {		/* An exact size match uses filter 0/1 */		v_filter_1 = 0;		v_filter_2 = 1;	} else {		/* Figure out which filter to use */		v_filter_1 = ((yi->reg_2918 << 16) / (yi->reg_2918 >> 16)) >> 15;		v_filter_1 = (v_filter_1 >> 1) + (v_filter_1 & 1);		/* Only an exact size match can use filter 0 */		v_filter_1 += !v_filter_1;		v_filter_2 = v_filter_1;	}	/* Now restore the filters */	ivtv_yuv_filter(itv, h_filter, v_filter_1, v_filter_2);	/* and clear a few registers */	write_reg(0, 0x02814);	write_reg(0, 0x0282c);	write_reg(0, 0x02904);	write_reg(0, 0x02910);	/* Release the blanking buffer */	if (yi->blanking_ptr) {		kfree(yi->blanking_ptr);		yi->blanking_ptr = NULL;		pci_unmap_single(itv->dev, yi->blanking_dmaptr, 720*16, PCI_DMA_TODEVICE);	}	/* Invalidate the old dimension information */	yi->old_frame_info.src_w = 0;	yi->old_frame_info.src_h = 0;	yi->old_frame_info_args.src_w = 0;	yi->old_frame_info_args.src_h = 0;	/* All done. */	clear_bit(IVTV_F_I_DECODING_YUV, &itv->i_flags);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本aⅴ亚洲精品中文乱码| 亚洲成人你懂的| 亚洲精品中文在线观看| 精品一区二区免费视频| 在线视频欧美精品| 国产精品精品国产色婷婷| 免费成人美女在线观看| 91激情五月电影| 欧美国产日韩在线观看| 久久99蜜桃精品| 欧美肥妇free| 亚洲综合小说图片| 日本乱人伦aⅴ精品| 国产婷婷一区二区| 国产一区二区看久久| 在线成人av影院| 午夜精品福利一区二区三区av | 欧美日韩国产乱码电影| 欧洲人成人精品| 亚洲人成小说网站色在线| 国产激情一区二区三区四区 | 国内成人免费视频| 日韩一二三四区| 亚洲综合999| 色av成人天堂桃色av| 综合中文字幕亚洲| 粉嫩绯色av一区二区在线观看 | 欧美久久婷婷综合色| 一区二区三区四区在线| 91免费在线播放| 亚洲三级电影网站| 91天堂素人约啪| 亚洲精品欧美综合四区| 91黄视频在线观看| 午夜伊人狠狠久久| 欧美精品丝袜久久久中文字幕| 性做久久久久久久免费看| 欧美另类一区二区三区| 婷婷久久综合九色综合绿巨人| 欧美精品自拍偷拍| 日本不卡1234视频| 久久网这里都是精品| 国产99一区视频免费| 国产精品卡一卡二| 91成人在线免费观看| 亚洲bdsm女犯bdsm网站| 日韩午夜av一区| 国产成人精品免费看| 亚洲日本在线观看| 欧美日韩电影一区| 国产主播一区二区三区| 欧美国产精品v| 欧美午夜精品理论片a级按摩| 亚洲电影一级黄| 欧美电视剧在线看免费| 成人午夜在线视频| 亚洲一区二区三区四区中文字幕| 欧美一区二区三区日韩视频| 韩国av一区二区三区| 国产精品久久福利| 欧美高清视频一二三区 | 秋霞国产午夜精品免费视频| 日韩精品一区二区三区在线播放| 国产成人免费视频| 亚洲一区在线视频观看| 精品久久久久久久久久久久包黑料 | 色婷婷激情久久| 久久精品国产一区二区三| 中文字幕在线一区二区三区| 欧美日韩另类国产亚洲欧美一级| 久久av中文字幕片| 亚洲天堂2014| 26uuu成人网一区二区三区| 99精品视频中文字幕| 美女国产一区二区| 亚洲三级在线观看| 久久久久久久综合狠狠综合| 欧美色图一区二区三区| 风间由美一区二区av101| 日本特黄久久久高潮| 亚洲视频在线观看一区| 日韩精品中文字幕一区 | 精品动漫一区二区三区在线观看| 91丨porny丨首页| 久久超碰97人人做人人爱| 亚洲高清免费视频| 国产精品三级电影| 欧美xxxx在线观看| 69久久夜色精品国产69蝌蚪网| 97aⅴ精品视频一二三区| 极品少妇xxxx精品少妇偷拍| 香蕉加勒比综合久久| 亚洲精品中文在线观看| 中文字幕 久热精品 视频在线 | 亚洲宅男天堂在线观看无病毒| 久久久不卡网国产精品一区| 欧美老女人在线| 欧美色图第一页| 精品视频在线免费| 欧美伊人精品成人久久综合97| 99re热这里只有精品视频| 国产精品一区二区91| 九九国产精品视频| 免费av成人在线| 日本特黄久久久高潮| 日产欧产美韩系列久久99| 亚洲午夜羞羞片| 亚洲v精品v日韩v欧美v专区| 亚洲午夜一区二区三区| 亚洲一区二区高清| 亚洲一区二区三区精品在线| 亚洲黄色片在线观看| 一区二区三区日韩在线观看| 亚洲精品国产a| 一区二区三区国产精华| 亚洲激情在线激情| 亚洲在线视频一区| 亚洲成人自拍偷拍| 日韩激情在线观看| 日韩激情视频在线观看| 免费成人结看片| 国产一区二区三区四| 高清国产一区二区三区| 97精品久久久午夜一区二区三区 | 国产白丝网站精品污在线入口| 国产不卡视频在线播放| 北条麻妃一区二区三区| 色综合天天综合色综合av | 免费在线观看精品| 国内外成人在线| 成人av影院在线| 欧美日韩一区二区电影| 日韩女优电影在线观看| 国产亚洲1区2区3区| 亚洲特黄一级片| 无吗不卡中文字幕| 国产一区二区三区最好精华液| 成人av影院在线| 欧美浪妇xxxx高跟鞋交| 久久丝袜美腿综合| 一区二区三区中文免费| 欧美a级一区二区| 大胆亚洲人体视频| 欧美日韩精品一区二区三区蜜桃| 欧美一区二区三区四区视频| 久久日一线二线三线suv| 亚洲三级在线免费| 久久99精品久久久久婷婷| 不卡av免费在线观看| 337p亚洲精品色噜噜狠狠| 久久免费偷拍视频| 亚洲高清免费观看 | 国产精品久久久久久妇女6080| 亚洲精品中文字幕乱码三区| 久久成人精品无人区| 91麻豆高清视频| 26uuu色噜噜精品一区二区| 亚洲精品国产一区二区精华液 | 蜜桃视频一区二区三区| bt7086福利一区国产| 日韩一级在线观看| 亚洲欧洲制服丝袜| 国产精品一区专区| 欧美精品自拍偷拍动漫精品| 国产日韩精品一区二区三区| 亚洲www啪成人一区二区麻豆| 成人性生交大合| 欧美tickling网站挠脚心| 亚洲国产人成综合网站| 成人免费视频免费观看| 欧美成va人片在线观看| 亚洲黄色免费电影| 成人免费看片app下载| 精品久久久久久久人人人人传媒| 亚洲午夜久久久久久久久电影网| 高清成人在线观看| 精品乱人伦一区二区三区| 五月天精品一区二区三区| 色哟哟精品一区| 国产精品水嫩水嫩| 国产高清不卡一区二区| 日韩三区在线观看| 日韩电影在线一区二区| 欧美性色aⅴ视频一区日韩精品| 中文字幕中文字幕一区二区| 国产黑丝在线一区二区三区| 欧美成人乱码一区二区三区| 天天av天天翘天天综合网 | 99久久精品免费精品国产| 精品美女在线观看| 久久99精品久久只有精品| 日韩色视频在线观看| 青青草伊人久久| 日韩欧美一区二区不卡| 奇米影视在线99精品| 欧美一区二区视频在线观看 | 精品成a人在线观看| 久久99精品国产.久久久久久| 欧美大胆人体bbbb| 久久国产福利国产秒拍|