audio学习记录一

0、

  1. 高通读取外设插入方式有两种:

  2. 1. UEvent:

  3. 读取/sys/class/switch/h2w/state文件等状态

  4. 2. InputEvent:

  5. 读取/dev/input/event

  6.  
  7. 通过属性值,判断采用何种方式。

  8. frameworks\base\core\res\res\values\config.xml

  9. <bool name="config_useDevInputEventForAudioJack">true</bool>

  10.  
  11. getevent

  12. add device 1: /dev/input/event7

  13. name: "msm8953-snd-card-mtp Button Jack"

  14. add device 2: /dev/input/event6

  15. name: "msm8953-snd-card-mtp Headset Jack"

  16. add device 3: /dev/input/event2

  17. name: "goodix-ts"

  18. add device 4: /dev/input/event3

  19. name: "hbtp_vm"

  20. could not get driver version for /dev/input/mouse0, Not a typewriter

  21. add device 5: /dev/input/event0

  22. name: "qpnp_pon"

  23. could not get driver version for /dev/input/mice, Not a typewriter

  24. add device 6: /dev/input/event1

  25. name: "tsu6721"

  26. add device 7: /dev/input/event4

  27. name: "keyremap_virtual"

  28. add device 8: /dev/input/event5

  29. name: "gpio-keys"

  30.  
  31. 插入:

  32. /dev/input/event6: 0005 0002 00000001

  33. /dev/input/event6: 0005 0004 00000001

  34. /dev/input/event6: 0005 0007 00000001

  35. /dev/input/event6: 0000 0000 00000000

  36.  
  37. 拔出:

  38. /dev/input/event6: 0005 0002 00000000

  39. /dev/input/event6: 0005 0004 00000000

  40. /dev/input/event6: 0005 0007 00000000

  41. /dev/input/event6: 0000 0000 00000000

  42.  
  43. getevent -l

  44. /dev/input/event6: EV_SW SW_HEADPHONE_INSERT 00000001

  45. /dev/input/event6: EV_SW SW_MICROPHONE_INSERT 00000001

  46. /dev/input/event6: EV_SW SW_JACK_PHYSICAL_INS 00000001

  47. /dev/input/event6: EV_SYN SYN_REPORT 00000000

  48.  
  49. /dev/input/event6: EV_SW SW_HEADPHONE_INSERT 00000000

  50. /dev/input/event6: EV_SW SW_MICROPHONE_INSERT 00000000

  51. /dev/input/event6: EV_SW SW_JACK_PHYSICAL_INS 00000000

  52. /dev/input/event6: EV_SYN SYN_REPORT 00000000

 

1、获取当前设备支持的音频输出方式

adb shell dumpsys media.audio_policy 

2、音频策略配置文件

frameworks/av/services/audiopolicy/config/audio_policy_configuration.xml

3.HAL层下面使用TiniAlsa(Android下一个简约的Alsa版本)。

HAL层分为两部分,一部分为各种音频设备,每种音频设备由一个独立的库文件实现:如audio.a2dp.default.so(管理蓝牙a2dp音频),audio.usb.default.so(管理usb外接的音频),audio.primary.default.so(管理设备上的大部分音频)。另一部分为厂家自己实现的音频策略,Android下提供了默认一套音频策略,当厂家有特殊的音频策略时,可以在这部分修改实现。HAL层上面就是音频系统的核心AudioFlinger,这里实现了各种输入、输出音频流的管理,管理实时可用的音频通道,为各种音频流选择音频通道,实现多个音频流的混音等。
这里只介绍HAL中各种音频设备的管理,如何确定各种音频设备支持哪些输入、输出音频等。AudioFlinger在加载音频设备库文件时,从/system/lib/hw/下查找以audio开头的库,同时根据audio_policy.conf中定义的音频设备名(如a2dp、usb、primary)作为库的第二部分名称,对于没有特别指定的,库的第三部分名称就是default,所以加载音频设备库的名称就可以确定了,如:audio.a2dp.default.so。每个音频库的实现接口都是一样的,这样就可以让AudioFlinger使用相同的接口调用不同音频设备。

4、音频政策代码组织

平台将 AudioPolicyManager.cpp 拆分为多个模块,使其易于维护和配置。frameworks/av/services/audiopolicy 的组织包括以下模块:

模块说明
/managerdefault包含所有应用通用的常规接口和行为实现。类似于剥离了引擎功能和通用概念的 AudioPolicyManager.cpp
/common定义基类(例如,输入输出音频流配置文件、音频设备描述符、音频补丁程序和音频端口等的数据结构)。该模块之前在 AudioPolicyManager.cpp 中定义。
/engine

实现规则,这些规则定义应将哪些设备和音量用于指定使用情形。该模块会实现标准接口(包含通用部分),例如,为指定的播放或捕获使用情形获取适当的设备,或设置可以改变导向选择的已连接设备或外部状态(即强制使用的调用状态)。

两种版本(自定义版本和默认版本)中都提供该模块;使用编译选项 USE_CONFIGURABLE_AUDIO_POLICY 进行选择。

/engineconfigurable依赖参数框架的政策引擎实现(请参阅下文)。配置基于参数框架,相关政策由 XML 文件定义。
/enginedefault基于以前的 Android 音频政策管理器实现的政策引擎实现。这是默认模块,包含 Nexus 和 AOSP 实现对应的硬编码规则。
/service包含 Binder 接口、线程和锁定实现(包含连接框架其余部分的接口)。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值