audio 临时总结

audioflinger 如何连接 hal

1 audio_hw_hal.cpp : audio_hw_device 这个文件塑造出 audio_hw_device

2
struct legacy_audio_device {
struct audio_hw_device device; 向上提供

struct AudioHardwareInterface *hwif;  向下提供

};

3 audio_hw_hal.cpp 文件中 legacy_adev_open 函数里面有 ladev->hwif = createAudioHardware();

4 createAudioHardware的流程
https://blog.csdn.net/syh63053767/article/details/9112153
从这个函数 可以连接到 厂家提供的 类(audiohardware)

5 输入 输出 接口 adev_open_output_stream adev_open_input_stream
struct legacy_stream_out {
struct audio_stream_out stream;

AudioStreamOut *legacy_out;

};

struct legacy_stream_in {
struct audio_stream_in stream;

AudioStreamIn *legacy_in;

};
上面这两个接口 也是通过 legacy_adev_open 建立联系的

6
AudioPolicyService启动过程分析
a. 加载解析/vendor/etc/audio_policy.conf或/system/etc/audio_policy.conf
对于配置文件里的每一个module项, new HwModule(name), 放入mHwModules数组
对于module里的每一个output, new IOProfile, 放入module的mOutputProfiles
对于module里的每一个input, new IOProfile, 放入module的mInputProfiles
b. 根据module的name加载厂家提供的so文件 (通过AudioFlinger来加载)
c. 打开对应的output (通过AudioFlinger来open output)

profile : 配置,用来描述output

a. 本可以支持哪些设备

b. 参数: 采样率,通道

android 音频总结
https://www.jianshu.com/p/5389a9abe2b9

7
DeviceVector mAvailableOutputDevices; // all available output devices
DeviceVector mAvailableInputDevices; // all available input devices
输出设备,用mAvailableOutputDevices维护,主要是连接和断开时的处理。听筒,Speaker等手机自带的设备,一般只有启动的时候才会处理一下,其他时间都是不需要处理的。所以主要是还是我们所说的,蓝牙耳机,有线耳机等。
参考文件
Android Audio和耳机,蓝牙耳机等音频外设

8
moutputs
解析完audio_policy.conf之后,遍历mHwModules[i]->mOutputProfiles,然后加到mOutputs中去。
参考
Android audio 输出设备选择过程分析(上)

你可能感兴趣的:(audio)