Android 语音遥控器的整体分析-主机端语音解码的添加

前面几篇大致介绍了HAL层的实现方式。这里要介绍下如何在Android主机端的HAL层语音解码的添加。

一、首先需要了解libhardware.so(\libhardware\hardware.c)

这个库是HAL层的加载库。hardware相关的so库通过这个库中进行加载。加载过程的分析见:

http://blog.csdn.net/ralph_sqd/article/details/7644508

这里可以关注下

handle = dlopen(path, RTLD_NOW);//该函数将打开一个新库,并把它装入内存

hmi = (struct hw_module_t *)dlsym(handle, sym);//根据动态链接库操作句柄与符号,返回符号对应的地址

这些直接操作so库的C函数。

其实加载so库的过程,就是打开一个新库,并把它放入内存,然后将句柄赋给注册的hw_module_t结构体的dso指针。这样就能够通过注册的hw_module_t访问到加载到内存中的so库了


二、然后需要了解audio.primary.default.so(audio\auodio_hw.c)。这是Android提供的默认的 audio HAL 模块示例,也是一个stub。

这里的HAL层结构体虽然是C语言实现,但其实都是通过指针和嵌套实现C++中的面向对象的效果。在hardware.h中有定义

struct hw_module_t;
struct hw_module_methods_t;
struct hw_device_t;
这三个结构体的作用其实就相当于Android给我们规定好的基类,我们在这个体系上派生实现自己的HAL 模块就可以了。

这里我们就假设自己写的就是这个默认的模块,且已经被上面的libhardware.so加载好了。


三、实际我们需要做的是


在Android给我们的框架内仿照上面audio_hw.c实现我们自己的audio模块。

编解码的调用函数,可以在这里添加回调函数或开启线程进行处理,比较重要的部分,还可以单独封装成so库供我们自己编写的这个模块调用。


实现自己的audio模块后,会被系统优先加载。(多个audio模块怎么处理,后面再探究)


语音部分就先总结到这里,剩下的是蓝牙部分以及蓝牙和语音两个模块的数据对接。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值