蓝牙电话(hfp)与Android audio hal的关联

本文探讨了在蓝牙电话(HFP)通话时,Android系统如何打开音频通路,重点分析了`routeHfpAudio`调用在`audio_hw.c`, `audio_extn.c`和`hfp.c`中的作用,以及`start_hfp`如何启动PCM设备。通过查找配置文件,揭示了窄带HFP的PCM设备设置,并提到了四个PCM设备的开启和启动过程。" 106951018,9324334,Presto:高性能分布式SQL查询引擎,"['分布式', '大数据', 'SQL', 'Presto', 'Hive']
摘要由CSDN通过智能技术生成

通话的时候,需要打开音频通路,音频设备(上下行都要)

我们从这里开始:

packages/apps/Bluetooth/src/com/android/bluetooth/hfpclient

// in Connected state
private void processAudioEvent(int state, BluetoothDevice device) {
   ...
   switch (state) {
           ...
           case HeadsetClientHalConstants.AUDIO_STATE_CONNECTED:
                routeHfpAudio(true);
   }
}
​
private void acceptCall(int flag) {
    ...
    if (flag == BluetoothHeadsetClient.CALL_ACCEPT_HOLD) {
            // When unholding a call over Bluetooth make sure to route audio.
            routeHfpAudio(true);
        }
    ...
}

两种场景,一个是接通电话,一个是电话hold之后,unhold的时候。都需要去调用routeHfpAudio(true).我们简化问题,只分析打开的情况。

static synchronized void routeHfpAudio(boolean enable) {
        ...
        if (enable && !sAudioIsRouted) {
            sAudioManager.setParameters("hfp_enable=true");
        } else if (!enable) {
            sAudioManager.setParameters("hfp_enable=false");
        }
        ...
    }

直接跳过中间繁琐的调用分析,欢迎查看我之前的博客。我们直接来到这里(路径都懒得贴了,搞audio的都知道):

audio_hw.c

static int adev_set_parameters(struct audio_hw_device *dev, const char *kvpairs)
{
    ...
    struct str_parms *parms;
    ...
    //一猜就是通过等号把上面传下来的参数分割成对:hfp_enable,true
    parms = str_parms_create_s
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值