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

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

?? mixer.c

?? 講述linux的初始化過(guò)程
?? C
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
	l2 = i & 0xff;	r2 = (i >> 8) & 0xff;	i = card->arrwVol[volidx[SOUND_MIXER_PCM]];	l3 = i & 0xff;	r3 = (i >> 8) & 0xff;	i = card->arrwVol[volidx[SOUND_MIXER_DIGITAL1]];	l4 = i & 0xff;	r4 = (i >> 8) & 0xff;	i = (r1 * r2) / 50;	if (r2 > 50)		r2 = 2 * r1 - i;	else {		r2 = r1;		r1 = i;	}	i = (l1 * l2) / 50;	if (l2 > 50)		l2 = 2 * l1 - i;	else {		l2 = l1;		l1 = i;	}	for (i = 0; i < 36; i++) {		if (card->digmix[i] != DM_MUTE) {			if (((i >= 0) && (i < 4)) || ((i >= 18) && (i < 22)))				j = (i & 1) ? ((u64) db_table[r1] * (u64) db_table[r3]) : ((u64) db_table[l1] * (u64) db_table[l3]);			else if ((i == 6) || (i == 7) || (i == 24) || (i == 25))				j = (i & 1) ? ((u64) db_table[r1] * (u64) db_table[r4]) : ((u64) db_table[l1] * (u64) db_table[l4]);			else				j = ((i & 1) ? db_table[r1] : db_table[l1]) << 31;			card->digmix[i] = j >> 31;			sblive_writeptr(card, FXGPREGBASE + 0x10 + i, 0, card->digmix[i]);		}	}	for (i = 72; i < 90; i++) {		if (card->digmix[i] != DM_MUTE) {			if ((i >= 72) && (i < 76))				j = (i & 1) ? ((u64) db_table[r2] * (u64) db_table[r3]) : ((u64) db_table[l2] * (u64) db_table[l3]);			else if ((i == 78) || (i == 79))				j = (i & 1) ? ((u64) db_table[r2] * (u64) db_table[r4]) : ((u64) db_table[l2] * (u64) db_table[l4]);			else				j = ((i & 1) ? db_table[r2] : db_table[l2]) << 31;			card->digmix[i] = j >> 31;			sblive_writeptr(card, FXGPREGBASE + 0x10 + i, 0, card->digmix[i]);		}	}	for (i = 36; i <= 90; i += 18) {		if (i != 72) {			for (k = 0; k < 4; k++)				if (card->digmix[i + k] != DM_MUTE) {					card->digmix[i + k] = db_table[l3];					sblive_writeptr(card, FXGPREGBASE + 0x10 + i + k, 0, card->digmix[i + k]);				}			if (card->digmix[i + 6] != DM_MUTE) {				card->digmix[i + 6] = db_table[l4];				sblive_writeptr(card, FXGPREGBASE + 0x10 + i + 6, 0, card->digmix[i + 6]);			}			if (card->digmix[i + 7] != DM_MUTE) {				card->digmix[i + 7] = db_table[r4];				sblive_writeptr(card, FXGPREGBASE + 0x10 + i + 7, 0, card->digmix[i + 7]);			}		}	}}#ifdef PRIVATE_PCM_VOLUME/* calc & set attenuation factor for given channel */static int set_pcm_attn(struct emu10k1_card *card, int ch, int l){#ifndef PCMLEVEL#define PCMLEVEL 110		/* almost silence */#endif	int vol = IFATN_ATTENUATION_MASK;	/* silence */	if (l > 0)		vol = (PCMLEVEL - (l * PCMLEVEL + 50) / 100);	sblive_writeptr(card, IFATN, ch, IFATN_FILTERCUTOFF_MASK | vol);	DPD(2, "SOUND_MIXER_PCM: channel:%d  level:%d  attn:%d\n", ch, l, vol);	return vol;#undef PCMLEVEL}/* update value of local PCM volume level (using channel attenuation) * * return 1: in case its local change *        0: if the current process doesn't have entry in table *	     (it means this process have not opened audio (mixer usually) */static int update_pcm_attn(struct emu10k1_card *card, unsigned l1, unsigned r1){	int i;	int mixer = (r1 << 8) | l1;	for (i = 0; i < MAX_PCM_CHANNELS; i++) {		if (sblive_pcm_volume[i].files == current->files) {			sblive_pcm_volume[i].mixer = pcm_last_mixer = mixer;			if (sblive_pcm_volume[i].opened) {				if (sblive_pcm_volume[i].channel_r < NUM_G) {					sblive_pcm_volume[i].attn_r = set_pcm_attn(card, sblive_pcm_volume[i].channel_r, r1);					if (sblive_pcm_volume[i].channel_l < NUM_G)						sblive_pcm_volume[i].attn_l = set_pcm_attn(card, sblive_pcm_volume[i].channel_l, l1);				} else {					/* mono voice */					if (sblive_pcm_volume[i].channel_l < NUM_G)						sblive_pcm_volume[i].attn_l =						    set_pcm_attn(card, sblive_pcm_volume[i].channel_l, (l1 >= r1) ? l1 : r1);						/* to correctly handle mono voice here we would need						   to go into stereo mode and move the voice to the right & left						   looks a bit overcomplicated... */				}			}			return 1;		}	}	card->arrwVol[volidx[SOUND_MIXER_PCM]] = mixer;	return 0;}#endifint emu10k1_mixer_wrch(struct emu10k1_card *card, unsigned int ch, int val){	int i;	unsigned l1, r1;	u16 wval;	l1 = val & 0xff;	r1 = (val >> 8) & 0xff;	if (l1 > 100)		l1 = 100;	if (r1 > 100)		r1 = 100;	DPD(4, "emu10k1_mixer_wrch() called: ch=%u, l1=%u, r1=%u\n", ch, l1, r1);	if (!volidx[ch])		return -EINVAL;#ifdef PRIVATE_PCM_VOLUME	if (ch != SOUND_MIXER_PCM)#endif		card->arrwVol[volidx[ch]] = (r1 << 8) | l1;	switch (ch) {	case SOUND_MIXER_VOLUME:		DPF(4, "SOUND_MIXER_VOLUME:\n");		if (card->isaps)			aps_update_digital(card);		else			update_digital(card);		return 0;	case SOUND_MIXER_PCM:		DPF(4, "SOUND_MIXER_PCM\n");#ifdef PRIVATE_PCM_VOLUME		if (update_pcm_attn(card, l1, r1))			return 0;#endif		if (card->isaps)			aps_update_digital(card);		else			update_digital(card);		return 0;#ifdef TONE_CONTROL	case SOUND_MIXER_TREBLE:                DPF(4, "SOUND_MIXER_TREBLE:\n");                set_treble(card, l1, r1);                return 0;        case SOUND_MIXER_BASS:                DPF(4, "SOUND_MIXER_BASS:\n");                set_bass(card, l1, r1);		return 0;#endif	default:		break;	}	if (card->isaps)		return -EINVAL;	switch (ch) {	case SOUND_MIXER_DIGITAL1:	case SOUND_MIXER_LINE3:		DPD(4, "SOUND_MIXER_%s:\n", (ch == SOUND_MIXER_DIGITAL1) ? "DIGITAL1" : "LINE3");		update_digital(card);		return 0;	case SOUND_MIXER_DIGITAL2:	case SOUND_MIXER_LINE2:	case SOUND_MIXER_LINE1:	case SOUND_MIXER_LINE:	case SOUND_MIXER_CD:		DPD(4, "SOUND_MIXER_%s:\n",		    (ch == SOUND_MIXER_LINE1) ? "LINE1" :		    (ch == SOUND_MIXER_LINE2) ? "LINE2" : (ch == SOUND_MIXER_LINE) ? "LINE" : (ch == SOUND_MIXER_DIGITAL2) ? "DIGITAL2" : "CD");		wval = ((((100 - l1) * 32 + 50) / 100) << 8) | (((100 - r1) * 32 + 50) / 100);		if (wval == 0x2020)			wval = 0x8000;		else			wval -= ((wval & 0x2020) / 0x20);		sblive_writeac97(card, volreg[ch], wval);		return 0;	case SOUND_MIXER_OGAIN:	case SOUND_MIXER_PHONEIN:		DPD(4, "SOUND_MIXER_%s:\n", (ch == SOUND_MIXER_PHONEIN) ? "PHONEIN" : "OGAIN");		sblive_writeac97(card, volreg[ch], (l1 < 2) ? 0x8000 : ((100 - l1) * 32 + 50) / 100);		return 0;	case SOUND_MIXER_SPEAKER:		DPF(4, "SOUND_MIXER_SPEAKER:\n");		sblive_writeac97(card, volreg[ch], (l1 < 4) ? 0x8000 : (((100 - l1) * 16 + 50) / 100) << 1);		return 0;	case SOUND_MIXER_MIC:		DPF(4, "SOUND_MIXER_MIC:\n");		i = 0;		if (l1 >= 30)			/* 20dB / (34.5dB + 12dB + 20dB) * 100 = 30 */		{			l1 -= 30;			i = 0x40;		}		sblive_writeac97(card, volreg[ch], (l1 < 2) ? 0x8000 : ((((70 - l1) * 0x20 + 35) / 70) | i));		return 0;	case SOUND_MIXER_RECLEV:		DPF(4, "SOUND_MIXER_RECLEV:\n");		wval = (((l1 * 16 + 50) / 100) << 8) | ((r1 * 16 + 50) / 100);		if (wval == 0)			wval = 0x8000;		else {			if (wval & 0xff)				wval--;			if (wval & 0xff00)				wval -= 0x0100;		}		sblive_writeac97(card, volreg[ch], wval);		return 0;	default:		DPF(2, "Got unknown SOUND_MIXER ioctl\n");		return -EINVAL;	}}static loff_t emu10k1_mixer_llseek(struct file *file, loff_t offset, int origin){	DPF(2, "sblive_mixer_llseek() called\n");	return -ESPIPE;}/* Mixer file operations *//* FIXME: Do we need spinlocks in here? *//* WARNING! not all the ioctl's are supported by the emu-APS   (anything AC97 related). As a general rule keep the AC97 related ioctls   separate from the rest. This will make it easier to rewrite the mixer   using the kernel AC97 interface. */ static int emu10k1_mixer_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg){	static const char id[] = "SBLive";	static const char name[] = "Creative SBLive";	int i, val;	struct emu10k1_card *card = (struct emu10k1_card *) file->private_data;	u16 reg;	switch (cmd) {	case SOUND_MIXER_INFO:{			mixer_info info;			DPF(4, "SOUND_MIXER_INFO\n");			strncpy(info.id, id, sizeof(info.id));			strncpy(info.name, name, sizeof(info.name));			info.modify_counter = card->modcnt;			if (copy_to_user((void *) arg, &info, sizeof(info)))				return -EFAULT;			return 0;		}		break;	case SOUND_OLD_MIXER_INFO:{			_old_mixer_info info;			DPF(4, "SOUND_OLD_MIXER_INFO\n");			strncpy(info.id, id, sizeof(info.id));			strncpy(info.name, name, sizeof(info.name));			if (copy_to_user((void *) arg, &info, sizeof(info)))				return -EFAULT;			return 0;		}		break;	case OSS_GETVERSION:		DPF(4, "OSS_GETVERSION\n");		return put_user(SOUND_VERSION, (int *) arg);		break;	case SOUND_MIXER_PRIVATE1:		DPF(4, "SOUND_MIXER_PRIVATE1");		if (copy_to_user((void *) arg, card->digmix, sizeof(card->digmix)))			return -EFAULT;		return 0;		break;	case SOUND_MIXER_PRIVATE2:		DPF(4, "SOUND_MIXER_PRIVATE2");		if (copy_from_user(card->digmix, (void *) arg, sizeof(card->digmix)))			return -EFAULT;		for (i = 0; i < sizeof(card->digmix) / sizeof(card->digmix[0]); i++)			sblive_writeptr(card, FXGPREGBASE + 0x10 + i, 0, (card->digmix[i] & DM_MUTE) ? 0 : card->digmix[i]);		return 0;		break;	case SOUND_MIXER_PRIVATE3: {			struct mixer_private_ioctl ctl;			if (copy_from_user(&ctl, (void *) arg, sizeof(struct mixer_private_ioctl)))				return -EFAULT;			switch (ctl.cmd) {#ifdef EMU10K1_DEBUG			case CMD_WRITEFN0:				emu10k1_writefn0(card, ctl.val[0], ctl.val[1]);				return 0;				break;			case CMD_WRITEPTR:				if(ctl.val[1] >= 0x40)					return -EINVAL;				if(ctl.val[0] > 0xff)					return -EINVAL;				if((ctl.val[0] & 0x7ff) > 0x3f)					ctl.val[1] = 0x00;				sblive_writeptr(card, ctl.val[0], ctl.val[1], ctl.val[2]);				return 0;				break;#endif			case CMD_READFN0:				ctl.val[2] = emu10k1_readfn0(card, ctl.val[0]);				if (copy_to_user((void *) arg, &ctl, sizeof(struct mixer_private_ioctl)))					return -EFAULT;				return 0;				break;

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲综合图片区| 久久久久久97三级| 国产成人精品免费在线| 一区二区三区免费网站| 26uuu亚洲综合色欧美| 91成人在线免费观看| 激情成人综合网| 午夜在线成人av| 亚洲黄网站在线观看| 国产精品久久久久四虎| 欧美剧在线免费观看网站 | 欧美一区二区三区影视| 91日韩一区二区三区| 国产aⅴ精品一区二区三区色成熟| 日日夜夜一区二区| 亚洲一区二区三区四区中文字幕| 国产精品全国免费观看高清| 久久久久久久电影| 久久嫩草精品久久久久| 日韩免费福利电影在线观看| 51精品久久久久久久蜜臀| 在线观看三级视频欧美| 日本韩国精品在线| 色妹子一区二区| 日本精品一级二级| 99精品热视频| 欧美视频三区在线播放| 欧美午夜一区二区| 91.成人天堂一区| 日韩一区二区在线免费观看| 91精品国产一区二区三区| 8x福利精品第一导航| 欧美变态tickling挠脚心| 精品久久久久久久久久久院品网| 26uuu欧美| 国产精品美女久久久久久2018| 亚洲色图视频免费播放| 亚洲国产精品影院| 黄色日韩三级电影| 成人禁用看黄a在线| 欧美最猛黑人xxxxx猛交| 91小视频在线免费看| 欧美日韩免费一区二区三区| 日韩精品一区二区三区四区| 欧美精品一区二| 一个色在线综合| 另类小说综合欧美亚洲| jizzjizzjizz欧美| 91精品国产欧美一区二区18| 久久亚洲一区二区三区四区| 亚洲欧美视频在线观看视频| 欧美aaaaaa午夜精品| www.一区二区| 精品国产乱码久久久久久久久| 国产精品黄色在线观看| 婷婷国产在线综合| 91蝌蚪porny九色| 精品国产一区二区国模嫣然| 亚洲综合色区另类av| 国产呦精品一区二区三区网站| 欧美日韩精品一区二区天天拍小说| 亚洲国产精品ⅴa在线观看| 全部av―极品视觉盛宴亚洲| 在线免费观看成人短视频| 国产女人水真多18毛片18精品视频| 亚洲成人激情社区| 91看片淫黄大片一级在线观看| 久久久精品日韩欧美| 老司机精品视频导航| 日韩一级免费一区| 性做久久久久久免费观看| 99国产一区二区三精品乱码| 青青草91视频| 国产电影精品久久禁18| 日韩一级视频免费观看在线| 视频一区二区三区在线| 欧美欧美欧美欧美| 日本在线不卡一区| 精品久久久久99| 国产乱人伦偷精品视频不卡| 久久伊99综合婷婷久久伊| 久久电影网站中文字幕| 久久这里只有精品6| 国产成人免费视频精品含羞草妖精| 久久影院视频免费| 国产91露脸合集magnet| 亚洲欧洲色图综合| 欧美日韩中文另类| 美女mm1313爽爽久久久蜜臀| 久久伊人中文字幕| 91视频com| 视频在线在亚洲| 国产精品国产馆在线真实露脸 | 亚洲午夜免费电影| 日韩欧美一二三| a在线播放不卡| 亚洲高清不卡在线观看| 精品国产百合女同互慰| 成人av在线资源网站| 天堂资源在线中文精品| 精品电影一区二区| 欧美午夜宅男影院| 国产精品资源在线| 午夜精品久久久久影视| 中文字幕精品—区二区四季| 欧美日韩国产影片| 色综合久久中文综合久久97| 美女一区二区视频| 亚洲黄色性网站| 国产精品素人视频| 日韩久久久精品| 欧美疯狂性受xxxxx喷水图片| 成人视屏免费看| 精油按摩中文字幕久久| 午夜久久久久久电影| 亚洲欧美一区二区三区国产精品 | 国产一区二区不卡| 亚洲444eee在线观看| 亚洲人精品午夜| 国产精品视频一二| 国产欧美一区二区在线| 精品欧美一区二区三区精品久久| 日本韩国精品在线| 欧美性猛交xxxx乱大交退制版 | 国产精品一区在线| 国内精品视频666| 九九在线精品视频| 精品一区二区三区视频| 狠狠色狠狠色综合日日91app| 美女视频黄频大全不卡视频在线播放| 一级女性全黄久久生活片免费| 亚洲麻豆国产自偷在线| 中文字幕亚洲综合久久菠萝蜜| 国产蜜臀97一区二区三区 | 国产一区日韩二区欧美三区| 青青草原综合久久大伊人精品| 久久国产精品99久久久久久老狼| 麻豆成人久久精品二区三区小说| 久久精品免费观看| 韩国女主播一区| 国产成人免费在线视频| 色婷婷久久99综合精品jk白丝| 欧美三级在线播放| 亚洲精品一区二区三区蜜桃下载| 日本一区二区高清| 亚洲福利电影网| 国内精品国产成人国产三级粉色 | 狠狠色丁香久久婷婷综合丁香| 国产一区二区在线视频| 日本 国产 欧美色综合| 一级精品视频在线观看宜春院 | 欧美绝品在线观看成人午夜影视| 欧美一区二区三区视频在线| 国产日产欧美一区二区三区| 亚洲激情av在线| 国产高清在线观看免费不卡| 在线观看欧美黄色| 久久精品亚洲乱码伦伦中文| 亚洲综合一区二区三区| 精东粉嫩av免费一区二区三区| 在线日韩国产精品| 国产亚洲精品精华液| 日韩电影免费一区| 91丨porny丨蝌蚪视频| 欧美精品 日韩| 亚洲激情综合网| 国产精品一二三在| 4438成人网| 亚洲综合免费观看高清在线观看| 成人的网站免费观看| 精品成人私密视频| 美女被吸乳得到大胸91| 欧美日韩免费电影| 亚洲国产精品自拍| 欧洲一区二区三区在线| 中文字幕在线观看不卡视频| 国产丶欧美丶日本不卡视频| 精品对白一区国产伦| 国产美女久久久久| 91精品国产一区二区| 日韩电影在线观看一区| 欧美一区二区三区免费在线看 | 成人性色生活片| 国产精品国产a| 在线免费视频一区二区| 亚洲综合另类小说| 欧美日韩久久久| 日韩精品国产精品| 精品伦理精品一区| 国产成人免费视频| 亚洲伦在线观看| 欧美日韩国产一级片| 久久国内精品视频| 国产欧美一区二区三区在线老狼| 成人av在线资源网| 亚洲国产精品尤物yw在线观看| 欧美一区二区网站| eeuss影院一区二区三区| 亚洲乱码国产乱码精品精98午夜 | 亚洲三级电影网站|