Biu~笔记:高通蓝牙ADK(19)--SBC被强制营业的游戏模式

       Biu~如标题所示,本篇是和大家分享如何让SBC编码强行上线营业。其实这也不只是只能让SBC上线啦,别的编码也是可以滴,方法也是一样滴,只是这里的例子是对于游戏模式而言。在众多的测试中,在常见的编码里延时最低的编码是SBC。如果耳机只有SBC那就绕道吧,本篇对你没意义。但如果耳机有多个编码,什么APTX,AAC这些,SBC往往被使用的优先级会排在最后,没办法呀!物竞天择,只有强大才能拥有交配权被使用权,他们的音质都比SBC好。另外决定使用什么编码的还不能是耳机自己,只有手机端才有选择的权利。所以问题就来了, 在游戏模式时,SBC的体验最好;不在游戏模式时,SBC的体验就一般,又不能根据自身模式单方面去调整编码,因此就产生了以下比较狗的方法,让耳机在游戏模式时,只支持SBC编码。

 

       这种做法也是小编在sink中的broadcast下发现的,因为broadcaste不支持aptx,所以在正常模式切换到broadcaste模式就会重新制定支持的编码列表。所以小编就从这逻辑里面提取了大概的思路

        第一步,我们修改切换游戏模式的执行步骤,在切换游戏模式之前,先设置支持的codec,这一步小编就在按键处理里面做这个修改。
\

这里有个need_changed的全局变量,用来记录第几次进入按键处理,在第一次触发进入按键处理时,如果是要开启游戏模式就会先设置codec,等第二次进入按键处理才正真开始进入游戏模式。而如果是关闭游戏模式,就只会设置codec,不需要第二次处理,因为在设置codec的时候,a2dp的断连会让游戏模式自动退出。这样写,进入游戏模式就需要触发两次按键才行,但用户不动,小编全自动,用户依旧只需要触发一次按键,程序自己触发第二次按键动作。

       第二步,把支持或不支持的codec告知给底层。这里面主要是用了A2dpCodecSetAvailable这个函数去实现,他的第二个参数就是codec类型,第三个参数表示使不使能这个类型,

       第三步,断开连接,这里只需要调用appAvDisconnectHandset就可以了。第二、三步,小编写到同一个函数里面去,方便第一步去调用



这里面有两个变量需要注意,一个是gameModeNextStep,这个变量是用来存储回调函数的指针的,当a2dp回连完成后就需要调用这个去触发第二次按键动作。另一个是game_mode_reconnect,用来标志这次断连之后需要立即回连。而这两个参数不是简单的在变量类型里面申明就好了,而是要在一个a2dp.typedef文件中申明,这文件的数据在编译的时候就会自动生成到.h中。斯国一捏୧(๑•̀◡•́๑)૭

        第四步,回连手机,这里的回连是在断开完成后执行的,a2dp断开完成的标志就是收到signalling断开指示,在appA2dpHandleA2dpSignallingDisconnectInd中断开成功的位置,加上一个连接请求

回连完成后,我们就可以在手机开发者选项中看到当前的codec是什么啦,但这里还要继续完成进入游戏模式的步骤。在完成连接时,调用回调函数,回到第一步去执行进入游戏模式。那回连完成的标志,当然是其状态机里面的connected状态,这里小编从log看,回连之后耳机会在A2DP_STATE_CONNECTED_MEDIA_SUSPENDED状态,所以小编就在appA2dpHandleA2dpMediaOpenConfirm函数里添加了执行回调函数的动作

再后面的处理就是默认进入游戏模式的处理啦,完成以上SBC就已经被强制营业了,游戏模式也顺理成章地使用了SBC编码来传输。

 

 

        以上是本期博文的全部内容,如有疑问请在博文下方评论留言,或者有什么想了解的都可以留言,我会尽量安排上(o´ω`o)و。谢谢大家浏览,我们下期再见。

  

多看文档,多上官网

多看文档,多上官网

多看文档,多上官网

 

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论