Android 音频系统
文章平均质量分 81
Kbattery
这个作者很懒,什么都没留下…
展开
-
Android11 AudioTrack和Track建立联系
对于是客户端创建的内存,客户端使用 StaticAudioTrackClientProxy来管理,对于AudioFlinger创建的内存,使用AudioTrackClientProxy来管理。对于是客户端创建的内存,使用 StaticAudioTrackServerProxy 来管理,对于AudioFlinger创建的内存,使用AudioTrackServerProxy来管理。可以看出,共享内存可以由客户端申请,也可以由AudioFlinger申请。客户端通过mProxy来管理。原创 2024-06-03 17:20:43 · 560 阅读 · 1 评论 -
Android11 AudioTrack 创建过程
首先,通过声音属性,从mProductStrategies中找到strategy,然后根据strategy,找到对应的device。mOutputs中,支持该device的output可能有多个,通过getOutputsForDevices把它们找出来,然后调用selectOutput从中选择一个最符合的。综上,找到output的流程为: audio_attributes_t >>> strategy >>> device >>> output。2,根据device,找到output。原创 2024-06-03 15:12:04 · 520 阅读 · 0 评论 -
Android 11 Audio strategy配置解析
注释2处,创建ProductStrategy对象时,传入的名字就是gOrderedStrategies中各元素的名字,如:“STRATEGY_PHONE”,“STRATEGY_SONIFICATION”。注释3处,遍历前面得到的mVolumeGroups集合,根据名字进行匹配(用volumeGroup 的名字和“AUDIO_STREAM_VOICE_CALL”,“AUDIO_STREAM_BLUETOOTH_SCO”等进行匹配),找到匹配的volumeGroup。再来看一下图中各结构体的定义。原创 2024-05-31 11:33:34 · 1088 阅读 · 1 评论 -
Android 11 AudioPolicyService 启动流程
在打开输出流的过程中,会得到HAL层的audio_stream_out对象,并将其保存在AudioStreamOut中,创建播放线程的时候,传入该AudioStreamOut,最后将播放线程保存到mPlaybackThreads中。在打开输出流的过程中,会得到HAL层的audio_stream_in对象,并将其保存在AudioStreamIn中,创建录音线程的时候,传入该AudioStreamIn。这个流程和上面的是一样的,最终调用到AudioFlinger的openInput_l处理。原创 2024-05-29 18:14:10 · 1057 阅读 · 0 评论 -
Android 11 Audio音频系统配置文件解析
其中mHwModules保存的是modules标签下的每个HwModule,解析attachedDevices标签时,会根据其名字找到对应的DeviceDescriptor,然后根据这些DeviceDescriptor的type,分别放入mOutputDevices和mInputDevices中。注释1处,针对不同的Trait类型,就调用不同的子类的deserialize处理。回到modules的解析方法中,mixPorts标签解析完成后,调用HwModule的setProfiles保存解析的结果。原创 2024-05-28 18:43:54 · 1214 阅读 · 1 评论 -
Linux Alsa驱动框架
注册声卡时(调用snd_card_register),会从list链表中取出snd_device,并调用其ops的dev_register 函数,也就是执行snd_ctl_dev_register函数。对于录音和播放节点,都会调用snd_register_device往snd_minors数组中放入元素,播放节点对应的f_ops为snd_pcm_f_ops[0],录音对应的为snd_pcm_f_ops[1]snd_pcm_f_ops[0]对应的是播放,snd_pcm_f_ops[1]对应的是录音。原创 2024-05-27 14:59:54 · 404 阅读 · 0 评论