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

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

?? amixer.c

?? alsa-utils-1.0.14編譯聲卡驅動所需要的一些文件源碼
?? C
?? 第 1 頁 / 共 4 頁
字號:
/* *   ALSA command line mixer utility *   Copyright (c) 1999-2000 by Jaroslav Kysela <perex@suse.cz> * *   This program is free software; you can redistribute it and/or modify *   it under the terms of the GNU General Public License as published by *   the Free Software Foundation; either version 2 of the License, or *   (at your option) any later version. * *   This program is distributed in the hope that it will be useful, *   but WITHOUT ANY WARRANTY; without even the implied warranty of *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *   GNU General Public License for more details. * *   You should have received a copy of the GNU General Public License *   along with this program; if not, write to the Free Software *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA * */#include <stdio.h>#include <stdlib.h>#include <string.h>#include <getopt.h>#include <stdarg.h>#include <ctype.h>#include <math.h>#include <errno.h>#include <assert.h>#include <alsa/asoundlib.h>#include <sys/poll.h>#include "amixer.h"#define LEVEL_BASIC		(1<<0)#define LEVEL_INACTIVE		(1<<1)#define LEVEL_ID		(1<<2)static int quiet = 0;static int debugflag = 0;static int no_check = 0;static int smixer_level = 0;static int ignore_error = 0;static struct snd_mixer_selem_regopt smixer_options;static char card[64] = "default";static void error(const char *fmt,...){	va_list va;	va_start(va, fmt);	fprintf(stderr, "amixer: ");	vfprintf(stderr, fmt, va);	fprintf(stderr, "\n");	va_end(va);}static int help(void){	printf("Usage: amixer <options> [command]\n");	printf("\nAvailable options:\n");	printf("  -h,--help       this help\n");	printf("  -c,--card N     select the card\n");	printf("  -D,--device N   select the device, default '%s'\n", card);	printf("  -d,--debug      debug mode\n");	printf("  -n,--nocheck    do not perform range checking\n");	printf("  -v,--version    print version of this program\n");	printf("  -q,--quiet      be quiet\n");	printf("  -i,--inactive   show also inactive controls\n");	printf("  -a,--abstract L select abstraction level (none or basic)\n");	printf("  -s,--stdin      Read and execute commands from stdin sequentially\n");	printf("\nAvailable commands:\n");	printf("  scontrols       show all mixer simple controls\n");	printf("  scontents	  show contents of all mixer simple controls (default command)\n");	printf("  sset sID P      set contents for one mixer simple control\n");	printf("  sget sID        get contents for one mixer simple control\n");	printf("  controls        show all controls for given card\n");	printf("  contents        show contents of all controls for given card\n");	printf("  cset cID P      set control contents for one control\n");	printf("  cget cID        get control contents for one control\n");	return 0;}static int info(void){	int err;	snd_ctl_t *handle;	snd_mixer_t *mhandle;	snd_ctl_card_info_t *info;	snd_ctl_elem_list_t *clist;	snd_ctl_card_info_alloca(&info);	snd_ctl_elem_list_alloca(&clist);		if ((err = snd_ctl_open(&handle, card, 0)) < 0) {		error("Control device %s open error: %s", card, snd_strerror(err));		return err;	}		if ((err = snd_ctl_card_info(handle, info)) < 0) {		error("Control device %s hw info error: %s", card, snd_strerror(err));		return err;	}	printf("Card %s '%s'/'%s'\n", card, snd_ctl_card_info_get_id(info),	       snd_ctl_card_info_get_longname(info));	printf("  Mixer name	: '%s'\n", snd_ctl_card_info_get_mixername(info));	printf("  Components	: '%s'\n", snd_ctl_card_info_get_components(info));	if ((err = snd_ctl_elem_list(handle, clist)) < 0) {		error("snd_ctl_elem_list failure: %s", snd_strerror(err));	} else {		printf("  Controls      : %i\n", snd_ctl_elem_list_get_count(clist));	}	snd_ctl_close(handle);	if ((err = snd_mixer_open(&mhandle, 0)) < 0) {		error("Mixer open error: %s", snd_strerror(err));		return err;	}	if (smixer_level == 0 && (err = snd_mixer_attach(mhandle, card)) < 0) {		error("Mixer attach %s error: %s", card, snd_strerror(err));		snd_mixer_close(mhandle);		return err;	}	if ((err = snd_mixer_selem_register(mhandle, smixer_level > 0 ? &smixer_options : NULL, NULL)) < 0) {		error("Mixer register error: %s", snd_strerror(err));		snd_mixer_close(mhandle);		return err;	}	err = snd_mixer_load(mhandle);	if (err < 0) {		error("Mixer load %s error: %s", card, snd_strerror(err));		snd_mixer_close(mhandle);		return err;	}	printf("  Simple ctrls  : %i\n", snd_mixer_get_count(mhandle));	snd_mixer_close(mhandle);	return 0;}static const char *control_iface(snd_ctl_elem_id_t *id){	return snd_ctl_elem_iface_name(snd_ctl_elem_id_get_interface(id));}static const char *control_type(snd_ctl_elem_info_t *info){	return snd_ctl_elem_type_name(snd_ctl_elem_info_get_type(info));}static const char *control_access(snd_ctl_elem_info_t *info){	static char result[10];	char *res = result;	*res++ = snd_ctl_elem_info_is_readable(info) ? 'r' : '-';	*res++ = snd_ctl_elem_info_is_writable(info) ? 'w' : '-';	*res++ = snd_ctl_elem_info_is_inactive(info) ? 'i' : '-';	*res++ = snd_ctl_elem_info_is_volatile(info) ? 'v' : '-';	*res++ = snd_ctl_elem_info_is_locked(info) ? 'l' : '-';	*res++ = snd_ctl_elem_info_is_tlv_readable(info) ? 'R' : '-';	*res++ = snd_ctl_elem_info_is_tlv_writable(info) ? 'W' : '-';	*res++ = snd_ctl_elem_info_is_tlv_commandable(info) ? 'C' : '-';	*res++ = '\0';	return result;}#define check_range(val, min, max) \	(no_check ? (val) : ((val < min) ? (min) : (val > max) ? (max) : (val))) #if 0static int convert_range(int val, int omin, int omax, int nmin, int nmax){	int orange = omax - omin, nrange = nmax - nmin;		if (orange == 0)		return 0;	return rint((((double)nrange * ((double)val - (double)omin)) + ((double)orange / 2.0)) / ((double)orange + (double)nmin));}#endif#if 0static int convert_db_range(int val, int omin, int omax, int nmin, int nmax){	int orange = omax - omin, nrange = nmax - nmin;		if (orange == 0)		return 0;	return rint((((double)nrange * ((double)val - (double)omin)) + ((double)orange / 2.0)) / (double)orange + (double)nmin);}#endif/* Fuction to convert from volume to percentage. val = volume */static int convert_prange(int val, int min, int max){	int range = max - min;	int tmp;	if (range == 0)		return 0;	val -= min;	tmp = rint((double)val/(double)range * 100);	return tmp;}/* Function to convert from percentage to volume. val = percentage */#define convert_prange1(val, min, max) \	ceil((val) * ((max) - (min)) * 0.01 + (min))static const char *get_percent(int val, int min, int max){	static char str[32];	int p;		p = convert_prange(val, min, max);	sprintf(str, "%i [%i%%]", val, p);	return str;}#if 0static const char *get_percent1(int val, int min, int max, int min_dB, int max_dB){	static char str[32];	int p, db;	p = convert_prange(val, min, max);	db = convert_db_range(val, min, max, min_dB, max_dB);	sprintf(str, "%i [%i%%] [%i.%02idB]", val, p, db / 100, abs(db % 100));	return str;}#endifstatic long get_integer(char **ptr, long min, long max){	long val = min;	char *p = *ptr, *s;	if (*p == ':')		p++;	if (*p == '\0' || (!isdigit(*p) && *p != '-'))		goto out;	s = p;	val = strtol(s, &p, 10);	if (*p == '.') {		p++;		strtol(p, &p, 10);	}	if (*p == '%') {		val = (long)convert_prange1(strtod(s, NULL), min, max);		p++;	}	val = check_range(val, min, max);	if (*p == ',')		p++; out:	*ptr = p;	return val;}static long get_integer64(char **ptr, long long min, long long max){	long long val = min;	char *p = *ptr, *s;	if (*p == ':')		p++;	if (*p == '\0' || (!isdigit(*p) && *p != '-'))		goto out;	s = p;	val = strtol(s, &p, 10);	if (*p == '.') {		p++;		strtol(p, &p, 10);	}	if (*p == '%') {		val = (long long)convert_prange1(strtod(s, NULL), min, max);		p++;	}	val = check_range(val, min, max);	if (*p == ',')		p++; out:	*ptr = p;	return val;}struct volume_ops {	int (*get_range)(snd_mixer_elem_t *elem, long *min, long *max);	int (*get)(snd_mixer_elem_t *elem, snd_mixer_selem_channel_id_t c,		   long *value);	int (*set)(snd_mixer_elem_t *elem, snd_mixer_selem_channel_id_t c,		   long value);};	enum { VOL_RAW, VOL_DB };struct volume_ops_set {	int (*has_volume)(snd_mixer_elem_t *elem);	struct volume_ops v[2];};static int set_playback_dB(snd_mixer_elem_t *elem,			   snd_mixer_selem_channel_id_t c, long value){	return snd_mixer_selem_set_playback_dB(elem, c, value, 0);}static int set_capture_dB(snd_mixer_elem_t *elem,			  snd_mixer_selem_channel_id_t c, long value){	return snd_mixer_selem_set_capture_dB(elem, c, value, 0);}static struct volume_ops_set vol_ops[2] = {	{		.has_volume = snd_mixer_selem_has_playback_volume,		.v = {{ snd_mixer_selem_get_playback_volume_range,			snd_mixer_selem_get_playback_volume,			snd_mixer_selem_set_playback_volume },		      { snd_mixer_selem_get_playback_dB_range,			snd_mixer_selem_get_playback_dB,			set_playback_dB }},	},	{		.has_volume = snd_mixer_selem_has_capture_volume,		.v = {{ snd_mixer_selem_get_capture_volume_range,			snd_mixer_selem_get_capture_volume,			snd_mixer_selem_set_capture_volume },		      { snd_mixer_selem_get_capture_dB_range,			snd_mixer_selem_get_capture_dB,			set_capture_dB }},	},};static int set_volume_simple(snd_mixer_elem_t *elem,			     snd_mixer_selem_channel_id_t chn,			     char **ptr, int dir){	long val, orig, pmin, pmax;	char *p = *ptr, *s;	int invalid = 0, err = 0, vol_type = VOL_RAW;	if (! vol_ops[dir].has_volume(elem))		invalid = 1;	if (*p == ':')		p++;	if (*p == '\0' || (!isdigit(*p) && *p != '-'))		goto skip;	if (! invalid &&	    vol_ops[dir].v[VOL_RAW].get_range(elem, &pmin, &pmax) < 0)		invalid = 1;	s = p;	val = strtol(s, &p, 10);	if (*p == '.') {		p++;		strtol(p, &p, 10);	}	if (*p == '%') {		if (! invalid)			val = (long)convert_prange1(strtod(s, NULL), pmin, pmax);		p++;	} else if (p[0] == 'd' && p[1] == 'B') {		if (! invalid) {			val = (long)(strtod(s, NULL) * 100.0);			vol_type = VOL_DB;			if (vol_ops[dir].v[vol_type].get_range(elem, &pmin, &pmax) < 0)				invalid = 1;		}		p += 2;	}	if (*p == '+' || *p == '-') {		if (! invalid) {			if (vol_ops[dir].v[vol_type].get(elem, chn, &orig) < 0)				invalid = 1;			if (*p == '+')				val = orig + val;			else				val = orig - val;		}		p++;	}	if (! invalid) {		val = check_range(val, pmin, pmax);		err = vol_ops[dir].v[vol_type].set(elem, chn, val);	} skip:	if (*p == ',')		p++;	*ptr = p;	return err ? err : (invalid ? -ENOENT : 0);}static int get_bool_simple(char **ptr, char *str, int invert, int orig){	if (**ptr == ':')		(*ptr)++;	if (!strncasecmp(*ptr, str, strlen(str))) {		orig = 1 ^ (invert ? 1 : 0);		while (**ptr != '\0' && **ptr != ',' && **ptr != ':')			(*ptr)++;	}	if (**ptr == ',' || **ptr == ':')		(*ptr)++;	return orig;}		static int simple_skip_word(char **ptr, char *str){	char *xptr = *ptr;	if (*xptr == ':')		xptr++;	if (!strncasecmp(xptr, str, strlen(str))) {		while (*xptr != '\0' && *xptr != ',' && *xptr != ':')			xptr++;		if (*xptr == ',' || *xptr == ':')			xptr++;		*ptr = xptr;		return 1;	}	return 0;}		static void show_control_id(snd_ctl_elem_id_t *id){	unsigned int index, device, subdevice;	printf("numid=%u,iface=%s,name='%s'",	       snd_ctl_elem_id_get_numid(id),	       control_iface(id),	       snd_ctl_elem_id_get_name(id));	index = snd_ctl_elem_id_get_index(id);	device = snd_ctl_elem_id_get_device(id);	subdevice = snd_ctl_elem_id_get_subdevice(id);	if (index)		printf(",index=%i", index);	if (device)		printf(",device=%i", device);	if (subdevice)		printf(",subdevice=%i", subdevice);}static void print_spaces(unsigned int spaces){	while (spaces-- > 0)		putc(' ', stdout);}static void print_dB(long dB){	printf("%li.%02lidB", dB / 100, (dB < 0 ? -dB : dB) % 100);}static void decode_tlv(unsigned int spaces, unsigned int *tlv, unsigned int tlv_size){	unsigned int type = tlv[0];	unsigned int size;	unsigned int idx = 0;		if (tlv_size < 2 * sizeof(unsigned int)) {		printf("TLV size error!\n");		return;	}	print_spaces(spaces);	printf("| ");	type = tlv[idx++];	size = tlv[idx++];	tlv_size -= 2 * sizeof(unsigned int);	if (size > tlv_size) {		printf("TLV size error (%i, %i, %i)!\n", type, size, tlv_size);		return;	}	switch (type) {	case SND_CTL_TLVT_CONTAINER:		size += sizeof(unsigned int) -1;		size /= sizeof(unsigned int);		while (idx < size) {			if (tlv[idx+1] > (size - idx) * sizeof(unsigned int)) {				printf("TLV size error in compound!\n");				return;			}			decode_tlv(spaces + 2, tlv + idx, tlv[idx+1]);			idx += 2 + (tlv[1] + sizeof(unsigned int) - 1) / sizeof(unsigned int);		}		break;	case SND_CTL_TLVT_DB_SCALE:		printf("dBscale-");		if (size != 2 * sizeof(unsigned int)) {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
九色|91porny| 精品久久人人做人人爽| 91精品啪在线观看国产60岁| 欧美精品一区二区在线观看| 一区二区三区欧美久久| 国产一区二区三区香蕉| 欧美片网站yy| 亚洲女厕所小便bbb| 美女免费视频一区二区| 色噜噜狠狠成人网p站| 久久精品一二三| 理论电影国产精品| 欧美日韩成人一区二区| 成人免费一区二区三区视频| 国产成人av福利| 2019国产精品| 免费人成精品欧美精品 | 国产精品中文欧美| 51精品秘密在线观看| 一区二区三区在线不卡| 本田岬高潮一区二区三区| 久久久亚洲高清| 国内成人自拍视频| 日韩欧美一级在线播放| 美洲天堂一区二卡三卡四卡视频| 欧美视频完全免费看| 亚洲综合免费观看高清在线观看| 99久久精品免费精品国产| 中文字幕欧美区| 成人综合在线视频| 国产日产欧美一区| 成人av在线网站| 国产精品伦理一区二区| 成人性色生活片免费看爆迷你毛片| 久久久久99精品一区| 国产二区国产一区在线观看| 欧美精品一区二区三区久久久| 蜜桃av一区二区| 26uuu另类欧美| 国产精品一区二区久久不卡 | 国产成+人+日韩+欧美+亚洲 | 欧美日韩久久久| 午夜精品久久久久久久99樱桃| 欧美日产国产精品| 免费人成网站在线观看欧美高清| 精品国产免费一区二区三区香蕉| 狠狠色综合日日| 亚洲视频资源在线| 欧美视频一区二| 精品影院一区二区久久久| 久久婷婷一区二区三区| www.亚洲人| 亚洲国产欧美日韩另类综合| 7777精品伊人久久久大香线蕉的| 狠狠色丁香婷婷综合| 国产欧美精品一区二区色综合朱莉| 成人动漫一区二区在线| 一区二区三区国产精华| 91精品在线一区二区| 国产精品一卡二卡| 亚洲精品国产视频| 日韩欧美不卡在线观看视频| 成人免费毛片aaaaa**| 一二三四区精品视频| 日韩欧美一区二区不卡| 成人开心网精品视频| 亚洲一级二级三级在线免费观看| 欧美videofree性高清杂交| 成人激情黄色小说| 日韩精品一二三四| 中文字幕一区不卡| 日韩午夜电影在线观看| av在线播放一区二区三区| 五月天婷婷综合| 中文字幕一区二区三区不卡在线| 制服.丝袜.亚洲.中文.综合| www.视频一区| 免费xxxx性欧美18vr| 亚洲欧洲在线观看av| 日韩精品一区二区在线观看| www.欧美日韩| 国产精品一区二区视频| 亚洲成a人片在线不卡一二三区| 国产日韩欧美综合一区| 51精品秘密在线观看| 色94色欧美sute亚洲线路二| 国产精品一区二区三区乱码| 青娱乐精品在线视频| 一区二区视频在线| 国产精品萝li| 国产女人水真多18毛片18精品视频| 欧美日韩国产综合一区二区| 91在线丨porny丨国产| 狠狠色综合色综合网络| 日韩不卡一二三区| 性久久久久久久| 亚洲在线视频免费观看| 亚洲人成网站精品片在线观看| 久久精品人人做人人爽人人 | 欧美视频日韩视频| 99这里只有精品| 国产v综合v亚洲欧| 国产综合成人久久大片91| 日本午夜一本久久久综合| 亚洲成人午夜电影| 亚洲国产精品麻豆| 亚洲一区二区在线免费观看视频| 亚洲欧洲av一区二区三区久久| 国产三级欧美三级日产三级99| 精品国产1区二区| 久久综合色鬼综合色| 精品国产人成亚洲区| 精品噜噜噜噜久久久久久久久试看 | 在线不卡欧美精品一区二区三区| 91免费版在线| 91年精品国产| 色狠狠色狠狠综合| 欧美午夜不卡视频| 91麻豆精品国产91久久久更新时间 | 国产亚洲欧美中文| 国产目拍亚洲精品99久久精品| 国产精品免费av| 亚洲免费在线视频一区 二区| 亚洲欧美日韩电影| 尤物视频一区二区| 丝袜诱惑制服诱惑色一区在线观看 | 色综合久久88色综合天天免费| 暴力调教一区二区三区| 99精品久久久久久| 91福利国产精品| 欧美日本精品一区二区三区| 欧美一区二区三区在线观看视频| 日韩三级中文字幕| 中文字幕精品三区| 亚洲精选视频免费看| 性欧美大战久久久久久久久| 久久99精品网久久| 91麻豆精东视频| 欧美一区二区三区人| 亚洲精品在线免费观看视频| 国产情人综合久久777777| 最新国产成人在线观看| 亚洲精品成人a在线观看| 全部av―极品视觉盛宴亚洲| 国产伦精品一区二区三区视频青涩| 成人午夜在线播放| 欧美日韩一卡二卡三卡 | 亚洲欧美日韩人成在线播放| 亚州成人在线电影| 国产黄色成人av| 欧美无人高清视频在线观看| 日韩午夜在线观看| 最新欧美精品一区二区三区| 人妖欧美一区二区| 色综合久久综合中文综合网| 91精品国产高清一区二区三区蜜臀 | 色偷偷久久一区二区三区| 91精品国产综合久久精品性色| www激情久久| 亚洲一区二区在线播放相泽| 激情综合网最新| 欧美日韩综合色| 国产精品久久久久永久免费观看| 午夜精品福利在线| 99久久免费国产| 久久蜜臀中文字幕| 日韩精品电影在线观看| 色综合天天综合色综合av| 久久亚洲精华国产精华液| 亚洲观看高清完整版在线观看| 成人综合婷婷国产精品久久蜜臀| 欧美放荡的少妇| 亚洲午夜电影在线| 91网站视频在线观看| 精品999久久久| 美女视频免费一区| 91精品国产丝袜白色高跟鞋| 亚洲精品日韩综合观看成人91| 国产精品一区二区久久不卡 | eeuss鲁一区二区三区| 日韩亚洲欧美中文三级| 亚洲图片欧美综合| 欧洲在线/亚洲| 一区二区三区鲁丝不卡| 99v久久综合狠狠综合久久| 国产欧美精品国产国产专区| 国产乱码精品一区二区三| 欧美不卡在线视频| 久久99精品国产麻豆婷婷| 欧美一区二区三区视频| 日韩国产一二三区| 欧美一级片在线观看| 午夜精品福利一区二区三区av| 欧美视频第二页| 香蕉久久一区二区不卡无毒影院| 欧美在线一区二区| 亚洲国产精品一区二区久久 | 91在线观看成人| 成人欧美一区二区三区视频网页| 成a人片国产精品|