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

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

?? ivtv-yuv.c

?? trident tm5600的linux驅動
?? C
?? 第 1 頁 / 共 3 頁
字號:
	reg_2964_base = (src_minor_y * ((f->dst_h << 16) / f->src_h)) >> 14;	reg_2968_base = (src_minor_uv * ((f->dst_h << 16) / f->src_h)) >> 14;	if (f->dst_h / 2 >= f->src_h && !f->interlaced_y) {		master_height = (f->src_h * 0x00400000) / f->dst_h;		if ((f->src_h * 0x00400000) - (master_height * f->dst_h) >= f->dst_h / 2)			master_height++;		reg_2920 = master_height >> 2;		reg_2928 = master_height >> 3;		reg_2930 = master_height;		reg_2940 = master_height >> 1;		reg_2964_base >>= 3;		reg_2968_base >>= 3;		reg_296c = 0x00000000;	} else if (f->dst_h >= f->src_h) {		master_height = (f->src_h * 0x00400000) / f->dst_h;		master_height = (master_height >> 1) + (master_height & 1);		reg_2920 = master_height >> 2;		reg_2928 = master_height >> 2;		reg_2930 = master_height;		reg_2940 = master_height >> 1;		reg_296c = 0x00000000;		if (f->interlaced_y) {			reg_2964_base >>= 3;		} else {			reg_296c++;			reg_2964_base >>= 2;		}		if (f->interlaced_uv)			reg_2928 >>= 1;		reg_2968_base >>= 3;	} else if (f->dst_h >= f->src_h / 2) {		master_height = (f->src_h * 0x00200000) / f->dst_h;		master_height = (master_height >> 1) + (master_height & 1);		reg_2920 = master_height >> 2;		reg_2928 = master_height >> 2;		reg_2930 = master_height;		reg_2940 = master_height;		reg_296c = 0x00000101;		if (f->interlaced_y) {			reg_2964_base >>= 2;		} else {			reg_296c++;			reg_2964_base >>= 1;		}		if (f->interlaced_uv)			reg_2928 >>= 1;		reg_2968_base >>= 2;	} else {		master_height = (f->src_h * 0x00100000) / f->dst_h;		master_height = (master_height >> 1) + (master_height & 1);		reg_2920 = master_height >> 2;		reg_2928 = master_height >> 2;		reg_2930 = master_height;		reg_2940 = master_height;		reg_2964_base >>= 1;		reg_2968_base >>= 2;		reg_296c = 0x00000102;	}	/* FIXME These registers change depending on scaled / unscaled output	   We really need to work out what they should be */	if (f->src_h == f->dst_h) {		reg_2934 = 0x00020000;		reg_293c = 0x00100000;		reg_2944 = 0x00040000;		reg_294c = 0x000b0000;	} else {		reg_2934 = 0x00000FF0;		reg_293c = 0x00000FF0;		reg_2944 = 0x00000FF0;		reg_294c = 0x00000FF0;	}	/* The first line to be displayed */	reg_2950 = 0x00010000 + src_major_y;	if (f->interlaced_y)		reg_2950 += 0x00010000;	reg_2954 = reg_2950 + 1;	reg_2958 = 0x00010000 + (src_major_y >> 1);	if (f->interlaced_uv)		reg_2958 += 0x00010000;	reg_295c = reg_2958 + 1;	if (yi->decode_height == 480)		reg_289c = 0x011e0017;	else		reg_289c = 0x01500017;	if (f->dst_y < 0)		reg_289c = (reg_289c - ((f->dst_y & ~1)<<15))-(f->dst_y >>1);	else		reg_289c = (reg_289c + ((f->dst_y & ~1)<<15))+(f->dst_y >>1);	/* How much of the source to decode.	   Take into account the source offset */	reg_2960 = ((src_minor_y + f->src_h + src_major_y) - 1) |		(((src_minor_uv + f->src_h + src_major_uv - 1) & ~1) << 15);	/* Calculate correct value for register 2964 */	if (f->src_h == f->dst_h) {		reg_2964 = 1;	} else {		reg_2964 = 2 + ((f->dst_h << 1) / f->src_h);		reg_2964 = (reg_2964 >> 1) + (reg_2964 & 1);	}	reg_2968 = (reg_2964 << 16) + reg_2964 + (reg_2964 >> 1);	reg_2964 = (reg_2964 << 16) + reg_2964 + (reg_2964 * 46 / 94);	/* Okay, we've wasted time working out the correct value,	   but if we use it, it fouls the the window alignment.	   Fudge it to what we want... */	reg_2964 = 0x00010001 + ((reg_2964 & 0x0000FFFF) - (reg_2964 >> 16));	reg_2968 = 0x00010001 + ((reg_2968 & 0x0000FFFF) - (reg_2968 >> 16));	/* Deviate further from what it should be. I find the flicker headache	   inducing so try to reduce it slightly. Leave 2968 as-is otherwise	   colours foul. */	if ((reg_2964 != 0x00010001) && (f->dst_h / 2 <= f->src_h))		reg_2964 = (reg_2964 & 0xFFFF0000) + ((reg_2964 & 0x0000FFFF) / 2);	if (!f->interlaced_y)		reg_2964 -= 0x00010001;	if (!f->interlaced_uv)		reg_2968 -= 0x00010001;	reg_2964 += ((reg_2964_base << 16) | reg_2964_base);	reg_2968 += ((reg_2968_base << 16) | reg_2968_base);	/* Select the vertical filter */	if (f->src_h == f->dst_h) {		/* 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 = ((f->src_h << 16) / f->dst_h) >> 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;	}	write_reg(reg_2934, 0x02934);	write_reg(reg_293c, 0x0293c);	IVTV_DEBUG_YUV("Update reg 0x2934 %08x->%08x 0x293c %08x->%08x\n",		       yi->reg_2934, reg_2934, yi->reg_293c, reg_293c);	write_reg(reg_2944, 0x02944);	write_reg(reg_294c, 0x0294c);	IVTV_DEBUG_YUV("Update reg 0x2944 %08x->%08x 0x294c %08x->%08x\n",		       yi->reg_2944, reg_2944, yi->reg_294c, reg_294c);	/* Ensure 2970 is 0 (does it ever change ?) *//*	write_reg(0,0x02970); *//*	IVTV_DEBUG_YUV("Update reg 0x2970 %08x->%08x\n", yi->reg_2970, 0); */	write_reg(reg_2930, 0x02938);	write_reg(reg_2930, 0x02930);	IVTV_DEBUG_YUV("Update reg 0x2930 %08x->%08x 0x2938 %08x->%08x\n",		       yi->reg_2930, reg_2930, yi->reg_2938, reg_2930);	write_reg(reg_2928, 0x02928);	write_reg(reg_2928 + 0x514, 0x0292C);	IVTV_DEBUG_YUV("Update reg 0x2928 %08x->%08x 0x292c %08x->%08x\n",		       yi->reg_2928, reg_2928, yi->reg_292c, reg_2928 + 0x514);	write_reg(reg_2920, 0x02920);	write_reg(reg_2920 + 0x514, 0x02924);	IVTV_DEBUG_YUV("Update reg 0x2920 %08x->%08x 0x2924 %08x->%08x\n",		       yi->reg_2920, reg_2920, yi->reg_2924, reg_2920 + 0x514);	write_reg(reg_2918, 0x02918);	write_reg(reg_291c, 0x0291C);	IVTV_DEBUG_YUV("Update reg 0x2918 %08x->%08x 0x291C %08x->%08x\n",		       yi->reg_2918, reg_2918, yi->reg_291c, reg_291c);	write_reg(reg_296c, 0x0296c);	IVTV_DEBUG_YUV("Update reg 0x296c %08x->%08x\n",		       yi->reg_296c, reg_296c);	write_reg(reg_2940, 0x02948);	write_reg(reg_2940, 0x02940);	IVTV_DEBUG_YUV("Update reg 0x2940 %08x->%08x 0x2948 %08x->%08x\n",		       yi->reg_2940, reg_2940, yi->reg_2948, reg_2940);	write_reg(reg_2950, 0x02950);	write_reg(reg_2954, 0x02954);	IVTV_DEBUG_YUV("Update reg 0x2950 %08x->%08x 0x2954 %08x->%08x\n",		       yi->reg_2950, reg_2950, yi->reg_2954, reg_2954);	write_reg(reg_2958, 0x02958);	write_reg(reg_295c, 0x0295C);	IVTV_DEBUG_YUV("Update reg 0x2958 %08x->%08x 0x295C %08x->%08x\n",		       yi->reg_2958, reg_2958, yi->reg_295c, reg_295c);	write_reg(reg_2960, 0x02960);	IVTV_DEBUG_YUV("Update reg 0x2960 %08x->%08x \n",		       yi->reg_2960, reg_2960);	write_reg(reg_2964, 0x02964);	write_reg(reg_2968, 0x02968);	IVTV_DEBUG_YUV("Update reg 0x2964 %08x->%08x 0x2968 %08x->%08x\n",		       yi->reg_2964, reg_2964, yi->reg_2968, reg_2968);	write_reg(reg_289c, 0x0289c);	IVTV_DEBUG_YUV("Update reg 0x289c %08x->%08x\n",		       yi->reg_289c, reg_289c);	/* Only update filter 1 if we really need to */	if (v_filter_1 != yi->v_filter_1) {		ivtv_yuv_filter(itv, -1, v_filter_1, -1);		yi->v_filter_1 = v_filter_1;	}	/* Only update filter 2 if we really need to */	if (v_filter_2 != yi->v_filter_2) {		ivtv_yuv_filter(itv, -1, -1, v_filter_2);		yi->v_filter_2 = v_filter_2;	}}/* Modify the supplied coordinate information to fit the visible osd area */static u32 ivtv_yuv_window_setup(struct ivtv *itv, struct yuv_frame_info *f){	struct yuv_frame_info *of = &itv->yuv_info.old_frame_info;	int osd_crop;	u32 osd_scale;	u32 yuv_update = 0;	/* Sorry, but no negative coords for src */	if (f->src_x < 0)		f->src_x = 0;	if (f->src_y < 0)		f->src_y = 0;	/* Can only reduce width down to 1/4 original size */	if ((osd_crop = f->src_w - 4 * f->dst_w) > 0) {		f->src_x += osd_crop / 2;		f->src_w = (f->src_w - osd_crop) & ~3;		f->dst_w = f->src_w / 4;		f->dst_w += f->dst_w & 1;	}	/* Can only reduce height down to 1/4 original size */	if (f->src_h / f->dst_h >= 2) {		/* Overflow may be because we're running progressive,		   so force mode switch */		f->interlaced_y = 1;		/* Make sure we're still within limits for interlace */		if ((osd_crop = f->src_h - 4 * f->dst_h) > 0) {			/* If we reach here we'll have to force the height. */			f->src_y += osd_crop / 2;			f->src_h = (f->src_h - osd_crop) & ~3;			f->dst_h = f->src_h / 4;			f->dst_h += f->dst_h & 1;		}	}	/* If there's nothing to safe to display, we may as well stop now */	if ((int)f->dst_w <= 2 || (int)f->dst_h <= 2 ||	    (int)f->src_w <= 2 || (int)f->src_h <= 2) {		return IVTV_YUV_UPDATE_INVALID;	}	/* Ensure video remains inside OSD area */	osd_scale = (f->src_h << 16) / f->dst_h;	if ((osd_crop = f->pan_y - f->dst_y) > 0) {		/* Falls off the upper edge - crop */		f->src_y += (osd_scale * osd_crop) >> 16;		f->src_h -= (osd_scale * osd_crop) >> 16;		f->dst_h -= osd_crop;		f->dst_y = 0;	} else {		f->dst_y -= f->pan_y;	}	if ((osd_crop = f->dst_h + f->dst_y - f->vis_h) > 0) {		/* Falls off the lower edge - crop */		f->dst_h -= osd_crop;		f->src_h -= (osd_scale * osd_crop) >> 16;	}	osd_scale = (f->src_w << 16) / f->dst_w;	if ((osd_crop = f->pan_x - f->dst_x) > 0) {		/* Fall off the left edge - crop */		f->src_x += (osd_scale * osd_crop) >> 16;		f->src_w -= (osd_scale * osd_crop) >> 16;		f->dst_w -= osd_crop;		f->dst_x = 0;	} else {		f->dst_x -= f->pan_x;	}	if ((osd_crop = f->dst_w + f->dst_x - f->vis_w) > 0) {		/* Falls off the right edge - crop */		f->dst_w -= osd_crop;		f->src_w -= (osd_scale * osd_crop) >> 16;	}	if (itv->yuv_info.track_osd) {		/* The OSD can be moved. Track to it */		f->dst_x += itv->yuv_info.osd_x_offset;		f->dst_y += itv->yuv_info.osd_y_offset;	}	/* Width & height for both src & dst must be even.	   Same for coordinates. */	f->dst_w &= ~1;	f->dst_x &= ~1;	f->src_w += f->src_x & 1;	f->src_x &= ~1;	f->src_w &= ~1;	f->dst_w &= ~1;	f->dst_h &= ~1;	f->dst_y &= ~1;	f->src_h += f->src_y & 1;	f->src_y &= ~1;	f->src_h &= ~1;	f->dst_h &= ~1;	/* Due to rounding, we may have reduced the output size to <1/4 of	   the source. Check again, but this time just resize. Don't change	   source coordinates */	if (f->dst_w < f->src_w / 4) {		f->src_w &= ~3;		f->dst_w = f->src_w / 4;		f->dst_w += f->dst_w & 1;	}	if (f->dst_h < f->src_h / 4) {		f->src_h &= ~3;		f->dst_h = f->src_h / 4;		f->dst_h += f->dst_h & 1;	}	/* Check again. If there's nothing to safe to display, stop now */	if ((int)f->dst_w <= 2 || (int)f->dst_h <= 2 ||	    (int)f->src_w <= 2 || (int)f->src_h <= 2) {		return IVTV_YUV_UPDATE_INVALID;	}	/* Both x offset & width are linked, so they have to be done together */	if ((of->dst_w != f->dst_w) || (of->src_w != f->src_w) ||	    (of->dst_x != f->dst_x) || (of->src_x != f->src_x) ||	    (of->pan_x != f->pan_x) || (of->vis_w != f->vis_w)) {		yuv_update |= IVTV_YUV_UPDATE_HORIZONTAL;	}	if ((of->src_h != f->src_h) || (of->dst_h != f->dst_h) ||	    (of->dst_y != f->dst_y) || (of->src_y != f->src_y) ||	    (of->pan_y != f->pan_y) || (of->vis_h != f->vis_h) ||	    (of->lace_mode != f->lace_mode) ||	    (of->interlaced_y != f->interlaced_y) ||	    (of->interlaced_uv != f->interlaced_uv)) {		yuv_update |= IVTV_YUV_UPDATE_VERTICAL;	}	return yuv_update;}/* Update the scaling register to the requested value */void ivtv_yuv_work_handler(struct ivtv *itv){	struct yuv_playback_info *yi = &itv->yuv_info;	struct yuv_frame_info f;	int frame = yi->update_frame;	u32 yuv_update;	IVTV_DEBUG_YUV("Update yuv registers for frame %d\n", frame);	f = yi->new_frame_info[frame];	if (yi->track_osd) {		/* Snapshot the osd pan info */		f.pan_x = yi->osd_x_pan;		f.pan_y = yi->osd_y_pan;		f.vis_w = yi->osd_vis_w;		f.vis_h = yi->osd_vis_h;	} else {		/* Not tracking the osd, so assume full screen */		f.pan_x = 0;		f.pan_y = 0;		f.vis_w = 720;		f.vis_h = yi->decode_height;	}	/* Calculate the display window coordinates. Exit if nothing left */	if (!(yuv_update = ivtv_yuv_window_setup(itv, &f)))		return;	if (yuv_update & IVTV_YUV_UPDATE_INVALID) {		write_reg(0x01008080, 0x2898);	} else if (yuv_update) {		write_reg(0x00108080, 0x2898);		if (yuv_update & IVTV_YUV_UPDATE_HORIZONTAL)			ivtv_yuv_handle_horizontal(itv, &f);		if (yuv_update & IVTV_YUV_UPDATE_VERTICAL)			ivtv_yuv_handle_vertical(itv, &f);	}	yi->old_frame_info = f;}static void ivtv_yuv_init(struct ivtv *itv){	struct yuv_playback_info *yi = &itv->yuv_info;	IVTV_DEBUG_YUV("ivtv_yuv_init\n");	/* Take a snapshot of the current register settings */	yi->reg_2834 = read_reg(0x02834);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲激情自拍偷拍| 日韩欧美在线综合网| 国产精品盗摄一区二区三区| 成人国产精品免费观看动漫| 国产精品理论在线观看| 色综合久久久久久久久| 天堂资源在线中文精品| 日韩片之四级片| 国产一区二区导航在线播放| 最近日韩中文字幕| 欧美日韩国产大片| 蜜桃视频在线一区| 国产精品福利电影一区二区三区四区| 99国产欧美另类久久久精品| 亚洲成在线观看| www一区二区| 99riav一区二区三区| 亚洲va在线va天堂| 欧美一区在线视频| 国产精品一二三区在线| 亚洲日本电影在线| 欧美男人的天堂一二区| 福利电影一区二区三区| 夜夜嗨av一区二区三区中文字幕| 91精品中文字幕一区二区三区| 激情丁香综合五月| 亚洲精品日韩一| 日韩欧美一区中文| av电影在线观看一区| 欧美bbbbb| 亚洲男女一区二区三区| 精品毛片乱码1区2区3区| 99综合影院在线| 麻豆91在线播放免费| 亚洲日本va午夜在线电影| 日韩欧美一区二区不卡| 97se狠狠狠综合亚洲狠狠| 日本va欧美va欧美va精品| 中文字幕一区免费在线观看| 日韩一级欧美一级| 欧美探花视频资源| 成人午夜av影视| 激情小说欧美图片| 亚洲成a天堂v人片| 国产精品久久久久久一区二区三区| 欧美日韩在线播| 成人h动漫精品一区二区| 久久电影国产免费久久电影| 亚洲第一二三四区| 亚洲免费观看高清完整版在线| 欧美精品一区二区久久婷婷| 欧美在线影院一区二区| av毛片久久久久**hd| 国产麻豆视频精品| 韩国欧美一区二区| 日产国产欧美视频一区精品| 亚洲一区二区三区四区在线| 国产精品久久久久久久久快鸭 | 日韩精品久久久久久| 亚洲欧洲日本在线| 中文字幕欧美激情一区| 欧美精品一区二区三区久久久| 欧美精品一二三区| 欧美日韩高清在线| 欧美艳星brazzers| 色综合天天在线| 不卡的av电影在线观看| 国产成人精品综合在线观看| 免费人成黄页网站在线一区二区| 亚洲国产精品一区二区久久恐怖片| 成人免费在线播放视频| 亚洲国产精品国自产拍av| 久久日一线二线三线suv| 欧美变态tickling挠脚心| 91精品视频网| 91精品国产色综合久久不卡蜜臀| 欧美日本一区二区在线观看| 欧美丝袜第三区| 欧美性色黄大片手机版| 欧美视频在线一区| 欧美精品久久久久久久多人混战| 精品污污网站免费看| 欧美亚洲一区二区三区四区| 色狠狠色噜噜噜综合网| 欧美三级电影网| 91精品国产综合久久久久久久久久| 欧美精品一二三区| 日韩欧美电影一二三| 久久亚洲免费视频| 欧美激情资源网| 亚洲人成网站在线| 亚洲成人免费观看| 日韩电影在线免费看| 美女一区二区三区在线观看| 激情成人综合网| av亚洲精华国产精华| 在线精品视频一区二区| 欧美另类一区二区三区| 日韩精品中文字幕一区| 国产视频一区二区在线| 综合激情网...| 日韩综合一区二区| 国产乱码一区二区三区| 91亚洲精品久久久蜜桃网站| 欧美午夜一区二区三区免费大片| 欧美丰满美乳xxx高潮www| 精品国产伦理网| 成人欧美一区二区三区白人| 亚洲成年人网站在线观看| 国产综合成人久久大片91| 99久久久久免费精品国产| 欧美少妇bbb| 久久综合九色综合97_久久久 | 亚洲国产成人精品视频| 麻豆国产精品官网| 99久久婷婷国产综合精品电影| 欧美综合亚洲图片综合区| 日韩视频免费观看高清完整版在线观看 | 大陆成人av片| 欧美日韩午夜精品| 久久久五月婷婷| 亚洲一区在线视频| 国产经典欧美精品| 欧美色欧美亚洲另类二区| 国产无一区二区| 亚洲成人黄色影院| 国产91综合一区在线观看| 欧美天堂一区二区三区| 国产欧美精品在线观看| 日韩电影一二三区| 色香色香欲天天天影视综合网 | 久久久精品人体av艺术| 亚洲va国产天堂va久久en| av影院午夜一区| 久久蜜桃av一区精品变态类天堂| 亚洲成人激情综合网| 99久精品国产| 久久久久久久久久久久久久久99 | 亚洲人成在线播放网站岛国| 国产一区二区三区四区五区入口| 欧美视频一区在线| 亚洲视频在线一区| 成人免费av在线| 久久综合视频网| 久久成人久久鬼色| 91精品久久久久久久91蜜桃| 一个色综合av| 97精品视频在线观看自产线路二| 久久蜜桃av一区二区天堂| 日本不卡的三区四区五区| 在线精品观看国产| 亚洲三级视频在线观看| 成熟亚洲日本毛茸茸凸凹| 久久中文娱乐网| 久久精品久久99精品久久| 在线播放一区二区三区| 一区二区三区在线免费视频 | 欧美日韩一卡二卡| 亚洲美女淫视频| 色综合天天狠狠| 亚洲码国产岛国毛片在线| 99精品欧美一区二区三区小说 | 欧美伊人久久久久久久久影院| 亚洲欧美影音先锋| 成人毛片在线观看| 中文字幕精品一区二区精品绿巨人| 国产大陆精品国产| 欧美极品少妇xxxxⅹ高跟鞋| 国产成人精品免费网站| 欧美国产亚洲另类动漫| 国产91精品一区二区麻豆亚洲| 久久久精品日韩欧美| 成人免费视频视频| 成人欧美一区二区三区黑人麻豆| 99精品国产热久久91蜜凸| 亚洲人成网站色在线观看| 欧美专区日韩专区| 视频在线在亚洲| 日韩精品影音先锋| 国产一区二区三区黄视频 | 欧美一区二区三区免费| 日韩电影在线观看网站| 欧美电影免费观看高清完整版在线观看 | 日韩国产欧美一区二区三区| 欧美一区二区精品| 精品一区二区三区不卡| 久久久五月婷婷| 94-欧美-setu| 午夜一区二区三区视频| 日韩一区二区三区四区| 国产精品综合二区| 综合婷婷亚洲小说| 欧美日韩国产bt| 国产精品中文字幕一区二区三区| 中文字幕巨乱亚洲| 欧美日韩国产天堂| 国产精品综合二区| 一区二区三区在线观看动漫| 日韩一区二区三区三四区视频在线观看| 国产真实乱偷精品视频免|