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 ...
随机推荐
- linux命令(42):tr命令
Linux tr命令 Linux tr 命令用于转换或删除文件中的字符. tr 指令从标准输入设备读取数据,经过字符串转译后,将结果输出到标准输出设备. 语法: tr [-cdst][--help][ ...
- (转)Making 1 million requests with python-aiohttp
转自:https://pawelmhm.github.io/asyncio/python/aiohttp/2016/04/22/asyncio-aiohttp.html Making 1 millio ...
- vue中创建全局单文件组件/命令
1.在 vue中如果我们使用基于vue.js编写的插件,我们可以使用Vue.use() 如在main.js中: 2.添加全局命令,让每个vue单文件组件都可以使用到: 第一步:最好建一个全局的命令文件 ...
- Swiper.js的腾讯新闻演示
演示效果地址:https://www.swiper.com.cn/demo/indexsample/: 代码: <!DOCTYPE html> <html> <head& ...
- Maven mvn install 本地jar添加到maven仓库中
最近在使用支付宝.财付通这样的第三方支付,在使用支付宝过程中需要引入官方SDK方便开发,使用以下命令来将本地的jar装载到maven仓库中. 这里有几点需要注意点,我使用Windows10时,使用po ...
- STL之std::set、std::map的lower_bound和upper_bound函数使用说明
由于在使用std::map时感觉lower_bound和upper_bound函数了解不多,这里整理并记录下相关用法及功能. STL的map.multimap.set.multiset都有三个比较特殊 ...
- 怎样把任意exe程序注册成windows系统服务(手动注册服务)
1. 要实现这个功能要用到微软提供的两个小工具“instsrv.exe”和“srvany.exe”(下载地址:http://www.cr173.com/soft/64394.html). 先下载这两个 ...
- How To Install Java with Apt-Get on Ubuntu 16.04
Introduction Java and the JVM (Java's virtual machine) are widely used and required for many kinds o ...
- Joint Extraction of Entities and Relations论文解析
1. 前言 实体和关系的联合抽取问题作为信息抽取的关键任务,其实现方法可以简单分为两类: 一类是串联抽取方法.传统的串联抽取就是首先进行实体抽取,然后进行关系识别.这种分开的方法比较容易实现,而且各个 ...
- Android 收集已发布程序的崩溃信息
我们写程序的时候都希望能写出一个没有任何Bug的程序,期望在任何情况下都不会发生程序崩溃.不过理想是丰满的,现实是骨感的.没有一个程序员能保证自己写的程序绝对不会出现异常崩溃.特别是针对用户数达到几十 ...