android设置主mic/副mic录音
//添加MIC设置参数
/hal/audio_extn/audio_extn.c
@@ -75,6 +75,7 @@ struct audio_extn_module {
bool ras_enabled;
struct aptx_dec_bt_addr addr;
struct audio_device *adev;
+ int mic_choose;
};
static struct audio_extn_module aextnmod;
@@ -838,6 +839,7 @@ void audio_extn_set_parameters(struct audio_device *adev,
if (adev->offload_effects_set_parameters != NULL)
adev->offload_effects_set_parameters(parms);
audio_extn_set_aptx_dec_bt_addr(adev, parms);
+ audio_extn_set_mic_choose_parameters(parms);
}
void audio_extn_get_parameters(const struct audio_device *adev,
@@ -1478,3 +1480,29 @@ int audio_extn_set_device_cfg_params(struct audio_device *adev,
return 0;
}
// 获取mic参数
int audio_extn_get_mic_choose_parameters(void)
{
ALOGD("%s: mic_choose:%d", __func__, aextnmod.mic_choose);
return aextnmod.mic_choose;
}
// 设置mic参数
void audio_extn_set_mic_choose_parameters(struct str_parms *parms)
{
int ret;
char value[32] = {0};
ret = str_parms_get_str(parms, "MIC_CHOOSE", value, sizeof(value));
ALOGD("mic_choose_ret:%d", ret);
if (ret >= 0) {
if (strcmp(value, "primary_mic") == 0) {
aextnmod.mic_choose = 1;
}else if (strcmp(value, "secondary_mic") == 0) {
aextnmod.mic_choose = 2;
} else {
aextnmod.mic_choose = 0;
}
} else {
aextnmod.mic_choose = 0;
}
ALOGD("%s: mic_choose:%d, value:%s", __func__, aextnmod.mic_choose, value);
}
//头文件中声明
/hal/audio_extn/audio_extn.h
+
+
+int audio_extn_get_mic_choose_parameters(void);
+
+void audio_extn_set_mic_choose_parameters(struct str_parms *parms);
hal/msm8916/platform.c
@@ -541,6 +541,7 @@ static const char * const device_table[SND_DEVICE_MAX] = {
[SND_DEVICE_IN_UNPROCESSED_THREE_MIC] = "three-mic",
[SND_DEVICE_IN_UNPROCESSED_QUAD_MIC] = "quad-mic",
[SND_DEVICE_IN_UNPROCESSED_HEADSET_MIC] = "headset-mic",
//添加mic参数,与mixer_paths_mtp.xml对应
+ [SND_DEVICE_IN_SECONDARY_MIC] = "secondary-mic",
};
// Platform specific backend bit width table
@@ -683,6 +684,7 @@ static int acdb_device_table[SND_DEVICE_MAX] = {
[SND_DEVICE_IN_UNPROCESSED_THREE_MIC] = 145,
[SND_DEVICE_IN_UNPROCESSED_QUAD_MIC] = 146,
[SND_DEVICE_IN_UNPROCESSED_HEADSET_MIC] = 147,
//自定义ID
+ [SND_DEVICE_IN_SECONDARY_MIC] = 170,
};
struct name_to_index {
@@ -4313,6 +4315,20 @@ snd_device_t platform_get_input_snd_device(void *platform, audio_devices_t out_d
snd_device = SND_DEVICE_IN_HANDSET_DMIC;
platform_set_echo_reference(adev, true, out_device);
}
+
+ /*
+ * 上层通过 AudioManager.setParameters("MIC_CHOOSE=xxx") 选择使用主副麦
+ * 主麦:MIC_CHOOSE=primary_mic
+ * 副麦:MIC_CHOOSE=secondary_mic
+ */
+ int mic_choose = 0;
+ mic_choose = audio_extn_get_mic_choose_parameters();
+ if (mic_choose == 1) {
+ snd_device = SND_DEVICE_IN_HANDSET_MIC;
+ } else if (mic_choose == 2) {
+ snd_device = SND_DEVICE_IN_SECONDARY_MIC;
+ }
+ ALOGD("%s: snd_device mic_choose (%s)", __func__, device_table[snd_device]);
}
}
} else if (source == AUDIO_SOURCE_FM_TUNER) {
hal/msm8916/platform.h
SND_DEVICE_IN_UNPROCESSED_THREE_MIC,
SND_DEVICE_IN_UNPROCESSED_QUAD_MIC,
SND_DEVICE_IN_UNPROCESSED_HEADSET_MIC,
+ SND_DEVICE_IN_SECONDARY_MIC,
SND_DEVICE_IN_END,
SND_DEVICE_MAX = SND_DEVICE_IN_END,
// 设置MIC寄存器参数。
/configs/msm8953/mixer_paths_mtp.xml
<path name="wsa-speaker-and-headphones" />
</path>
+ <path name="secondary-mic">
+ <path name="adc3"/>
+ </path>
</mixer>
android设置主mic/副mic录音的更多相关文章
- Android设置里面默认存储器选项(default write disk)的实现
原生的Android设置里面没有默认存储器的选项,可是MTK偏偏加上了这个功能,可能MTK认为这个比較实用吧,所以,他们在原生的基础上面做了改动.加上了这个功能.可是高通平台没有这个功能.相对MTK来 ...
- 逆向知识之CS1.6辅助/外挂专题.1.实现CS1.6主武器副武器无限子弹
逆向知识之CS辅助/外挂专题.1.实现CS主武器副武器无限子弹 PS: 相信大家CS1.6这类的FPS应该玩过.现在我们通过外挂手法.讲解逆向的本质.以及应用. 关于CS1.6的下载.网络百度下载即可 ...
- PL/SQL设置主键自增
oracle没有设置主键auto increment的功能,需要自己编写序列和触发器实现主键自动递增. 示例: 创建表menu: 一.创建表 create table menu( menuId n ...
- Django数据库怎么给字段设置主键
id = models.IntegerField(primary_key = True) 附: null :缺省设置为false.通常不将其用于字符型字段上,比如CharField,TextField ...
- Xamarin Android设置界面提示类型错误
Xamarin Android设置界面提示类型错误 错误信息:Integer types not allow (at ‘padding’ with value ’10’)Android界面属性的长度和 ...
- 怎样为DataTable设置主键及找行数据
只要是数据集中都应该存在主键,以确定数据集中唯一的值.那么,我们要如何为DataTable设置主键及利用主键在DataTable索引值呢? 步骤/方法 为DataTable设置主键 DataT ...
- Android 设置进度条背景
Android 设置进度条背景 直接上代码 <ProgressBar android:id="@+id/progressBar" android:layout_width=& ...
- SQL语句建表、设置主键、外键、check、default、unique约束
· 什么是数据库? 存放数据的仓库. · 数据库和数据结构有什么区别? 数据结构要解决在内存中操作数据的问题,数据库要解决在硬盘中操作数据的问题.数据结构研究一些抽象数据模型(ADT)和以及定义在该模 ...
- 转:Android 设置屏幕不待机
本文转载于:http://blog.csdn.net/yudajun/article/details/7748760 Android设置支部待机有两种方法 第一种简单通过设置WindowManager ...
随机推荐
- 行为类模式(二):命令(Command)
定义 将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能. UML 优点 能比较容易的设计一个命令队列 可以较容易的将命令加入日志 ...
- 转:在eclipse中 使用7.0及以上手机进行测试时logcat不打印日志的解决办法
解决办法 替换ADT中的ddmlib.jar文件. 下载ADT对应的zip包,解压出ddmlib.jar文件 放到eclipse\configuration\org.eclipse.osgi\bund ...
- Tornado使用-队列Queue
1.tornado队列的特点 和python标准队列queue相比,tornado的队列Queue支持异步 2.Queue常用方法 Queue.get() 会暂停,直到queue中有元素 Queue. ...
- linux命令(40):基础常用命令:cd,rm,mk
常用命令介绍 pwd,显示当前在哪个路径下 linux的用户管理 : useradd 用户名,添加用户 [案例]useradd xiaoming pas ...
- 4.3之后的PingPong效果实现
旧版本的Unity提供Animation编辑器来编辑物理动画. 在其下方可以设置动画是Loop或者是Pingpong等运动效果. 但是,在4.3之后,Unity的动画系统发生了较大的变化. 相信很多童 ...
- 【Android】事件处理系统
linux输入子系统 Android是linux内核的,所以它的事件处理系统也在linux的基础上完成的. Linux内核提供了一个Input子系统来实现的,Input子系统会在/dev/input/ ...
- 【论文笔记】多任务学习(Multi-Task Learning)
1. 前言 多任务学习(Multi-task learning)是和单任务学习(single-task learning)相对的一种机器学习方法.在机器学习领域,标准的算法理论是一次学习一个任务,也就 ...
- 【密码学】RSA公钥密码体制
RSA公钥密码体制是美国麻省理工学院(MIT)的三位科学家Rivest.Shamir.Adleman于1978年提出的,简称RSA公钥秘密系统.实际上,RSA稍后于MH背包公钥密码实用系统,但它的影响 ...
- Android使用AsyncTask异步线程网络通信获取数据(get json)
摘要: android 4.0以上强制要求不能在主线程执行耗时的网络操作,网络操作需要使用Thead+Handler或AsyncTask,本文将介绍AsyncTask的使用方法. 内容: 1.添加Ht ...
- SVD分解及线性最小二乘问题
这部分矩阵运算的知识是三维重建的数据基础. 矩阵分解 求解线性方程组:,其解可以表示为. 为了提高运算速度,节约存储空间,通常会采用矩阵分解的方案,常见的矩阵分解有LU分解.QR分解.Cholesky ...