[Android][Audio] audio_policy.conf文件分析

  不同的Android产品在音频的设计上通常是存在差异的,而这些差异可以同过Audio的配置文件audio_policy.conf来获得。在Android系统中音频配置文件存放路径有两处,存放地址可以从AudioPolicyManagerBase.cpp文件中知道:

 #define AUDIO_POLICY_VENDOR_CONFIG_FILE  "/vendor/etc/audio_policy.conf"
 #define AUDIO_POLICY_CONFIG_FILE         "/system/etc/audio_policy.conf"

  在AudioPolicyManager.cpp文件中可以知道系统会首先加载vendor/etc目录下的configure文件,再加载system/etc目录下的configure文件。若这两者加载都发生错误的话,系统会加载default配置文件,并命名为primary module,从这可以看出,音频系统中一定必须存在的module就是primary了。

1     if (loadAudioPolicyConfig(AUDIO_POLICY_VENDOR_CONFIG_FILE) != NO_ERROR) {
2         if (loadAudioPolicyConfig(AUDIO_POLICY_CONFIG_FILE) != NO_ERROR) {
3             ALOGE("could not load audio policy configuration file, setting defaults");
4             defaultAudioPolicyConfig();
5         }
6     }


  【摘录audio_policy.conf】 

  1 # Global configuration section: lists input and output devices always present on the device
  2 # as well as the output device selected by default.
  3 # Devices are designated by a string that corresponds to the enum in audio.h
  4
  5 global_configuration {
  6   attached_output_devices AUDIO_DEVICE_OUT_SPEAKER
  7   default_output_device AUDIO_DEVICE_OUT_SPEAKER
  8   attached_input_devices AUDIO_DEVICE_IN_BUILTIN_MIC|AUDIO_DEVICE_IN_VOICE_CALL|AUDIO_DEVICE_IN_REMOTE_SUBMIX
  9   custom_properties {
 10     voice_volume_applied_after_mixing_in_call true
 11     voice_volume_applied_after_mixing_in_communication false
 12     in_call_music_attenuation_dB 6
 13     }
 14 }
 15
 16 # audio hardware module section: contains descriptors for all audio hw modules present on the
 17 # device. Each hw module node is named after the corresponding hw module library base name.
 18 # For instance, "primary" corresponds to audio.primary.<device>.so.
 19 # The "primary" module is mandatory and must include at least one output with
 20 # AUDIO_OUTPUT_FLAG_PRIMARY flag.
 21 # Each module descriptor contains one or more output profile descriptors and zero or more
 22 # input profile descriptors. Each profile lists all the parameters supported by a given output
 23 # or input stream category.
 24 # The "channel_masks", "formats", "devices" and "flags" are specified using strings corresponding
 25 # to enums in audio.h and audio_policy.h. They are concatenated by use of "|" without space or "\n".
 26
 27 audio_hw_modules {
 28   primary {
 29     outputs {
 30       primary {
 31         sampling_rates 48000
 32         channel_masks AUDIO_CHANNEL_OUT_STEREO
 33         formats AUDIO_FORMAT_PCM_16_BIT
 34         devices AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_ALL_SCO
 35         flags AUDIO_OUTPUT_FLAG_PRIMARY
 36       }
 37       deep_buffer {
 38         sampling_rates 48000
 39         channel_masks AUDIO_CHANNEL_OUT_STEREO
 40         formats AUDIO_FORMAT_PCM_16_BIT
 41         devices AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE
 42         flags AUDIO_OUTPUT_FLAG_DEEP_BUFFER
 43       }
 44     }
 45     inputs {
 46       primary {
 47         sampling_rates 8000|11025|12000|16000|22050|24000|32000|44100|48000
 48         channel_masks AUDIO_CHANNEL_IN_MONO|AUDIO_CHANNEL_IN_STEREO
 49         formats AUDIO_FORMAT_PCM_16_BIT
 50         devices AUDIO_DEVICE_IN_BUILTIN_MIC|AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET|AUDIO_DEVICE_IN_WIRED_HEADSET|AUDIO_DEVICE_IN_VOICE_CALL
 51       }
 52     }
 53   }
 54   a2dp {
 55     outputs {
 56       a2dp {
 57         sampling_rates 44100
 58         channel_masks AUDIO_CHANNEL_OUT_STEREO
 59         formats AUDIO_FORMAT_PCM_16_BIT
 60         devices AUDIO_DEVICE_OUT_ALL_A2DP
 61       }
 62     }
 63   }
 64   hdmi {
 65     outputs {
 66      hdmi_stereo {
 67         sampling_rates 48000
 68         channel_masks AUDIO_CHANNEL_OUT_STEREO
 69         formats AUDIO_FORMAT_PCM_16_BIT
 70         devices AUDIO_DEVICE_OUT_AUX_DIGITAL
 71       }
 72       hdmi_multi {
 73         sampling_rates 32000|44100|48000|88200|96000
 74        # channel_masks AUDIO_CHANNEL_OUT_5POINT1
 75         channel_masks dynamic
 76         formats AUDIO_FORMAT_PCM_16_BIT
 77         devices AUDIO_DEVICE_OUT_AUX_DIGITAL
 78         flags AUDIO_OUTPUT_FLAG_DIRECT
 79       }
 80     }
 81   }
 82   r_submix {
 83     outputs {
 84       submix {
 85         sampling_rates 48000
 86         channel_masks AUDIO_CHANNEL_OUT_STEREO
 87         formats AUDIO_FORMAT_PCM_16_BIT
 88         devices AUDIO_DEVICE_OUT_REMOTE_SUBMIX
 89       }
 90     }
 91     inputs {
 92       submix {
 93         sampling_rates 48000
 94         channel_masks AUDIO_CHANNEL_IN_STEREO
 95         formats AUDIO_FORMAT_PCM_16_BIT
 96         devices AUDIO_DEVICE_IN_REMOTE_SUBMIX
 97       }
 98     }
 99   }
100   hs_usb {
101     outputs {
102        usb_dgtl {
103          sampling_rates 44100|48000
104          channel_masks AUDIO_CHANNEL_OUT_STEREO
105          formats AUDIO_FORMAT_PCM_16_BIT
106          devices AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET
107         }
108     }
109   }
110   usb {
111     outputs {
112       usb_accessory {
113         sampling_rates 44100
114         channel_masks AUDIO_CHANNEL_OUT_STEREO
115         formats AUDIO_FORMAT_PCM_16_BIT
116         devices AUDIO_DEVICE_OUT_USB_ACCESSORY
117       }
118 #      usb_device {
119 #        sampling_rates 44100
120 #        channel_masks AUDIO_CHANNEL_OUT_STEREO
121 #        formats AUDIO_FORMAT_PCM_16_BIT
122 #        devices AUDIO_DEVICE_OUT_USB_DEVICE
123 #      }
124     }
125   } }

  从audio_policy.conf文件中可以发现,系统包含了primary、a2dp、usb等音频接口,对应着系统中的audio.<primary/a2dp/usb>.<device>.so。每个音频接口中又包含了若干个outputs & inputs,并且每个output or input又包含了若干个devices,且还有采样频率,声道数等信息。这些devices信息、采样频率信息 & 声道信息等都会保存在各自module的IOProfile中。按上文中audio_policy.conf配置文件所描述,系统最后会生成6个modules(eg.primary,a2dp,hdmi,r_submix,hs_usb & usb)以及7个outputs。以AUDIO_DEVICE_OUT_SPEAKER为例,该device会定义在primary模块中outputs所属的IOProfile1中,其它设备依次类推。

  根据audio_policy.conf文件可以简化Audio module的架构,如下图1所示:

图1

时间: 2024-08-10 19:17:00

[Android][Audio] audio_policy.conf文件分析的相关文章

Android -- Audio Native服务之启动流程分析(一)

Android -- Audio Native服务之启动流程分析(一) Android中的Audio系统是比较庞大.繁杂的一部分内容, 其中会涉及较多的音频编解码.多媒体制式与Android Audio HAL设备管理的知识.随着Android的发展,其所支持的音频设备也变得越来丰富,如扬声器.耳机.听筒等等:这种变化也为Android管理如此丰富的音频设备以及如何正确.合理地切换音频输出提出了更高的要求.面对如此繁杂的管理要求,我们分析Android Audio服务的历程想必也不会轻松.接下来

[Android Pro] 通过Android trace文件分析死锁ANR

转载自: http://blog.csdn.net/oujunli/article/details/9102101#reply 对于从事Android开发的人来说,遇到ANR(Application Not Responding)是比较常见的问题.一般情况下,如果有ANR发生,系统都会在/data/anr/目录下生成trace文件,通过分析trace文件,可以定位产生ANR的原因.产生ANR的原因有很多,比如CPU使用过高.事件没有得到及时的响应.死锁等,下面将通过一次因为死锁导致的ANR问题,

Android中将xml布局文件转化为View树的过程分析(下)-- LayoutInflater源码分析

在Android开发中为了inflate一个布局文件,大体有2种方式,如下所示: // 1. get a instance of LayoutInflater, then do whatever you want LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); // 2. you're in some View class, then jus

APP的Android.mk文件分析

转载至:http://blog.csdn.net/bmw7bmw7/article/details/45482599 APP的Android.mk文件分析 2015-05-04 16:22 52人阅读 评论(0) 收藏 举报 android应用源码 [plain] view plaincopyprint? 1.  # 调用宏my-dir,这个宏返回当前Android.mk文件所在的路径 2.  LOCAL_PATH:= $(call my-dir) 3. 4.  # 包含CLEAR_VARS变量

[Android Memory] 使用 Eclipse Memory Analyzer 进行堆转储文件分析

转载地址:http://www.ibm.com/developerworks/cn/opensource/os-cn-ecl-ma/index.html Eclipse Memory Analyzer(MAT)是著名的跨平台集成开发环境 Eclipse Galileo 版本的 33 个组成项目中之一,它是一个功能丰富的 JAVA 堆转储文件分析工具,可以帮助你发现内存漏洞和减少内存消耗.本文主要介绍如何安装配置 Memory Analyzer,并结合一个实例,介绍如何利用 MAT 来进行堆转储文

Android Studio中的AndroidManifest.xml文件分析

一.关于AndroidManifest.xml AndroidManifest.xml清单文件是每个Android程序中必须的文件,它是整个Android程序的全局描述文件,除了能声明程序中的Activities,Content Providers,Services,和Intent Receivers,还能指定应用的名称.使用的图标.包含的组件以及permissions和instrumentation(安全控制和测试). 二.Hello World工程中的清单文件分析 <?xml version

Android——4.2.2 文件系统目录分析

最近公司要整android内部培训,分配给我写个培训文档,这里记录如下: 撰写不易,转载请注明出处:http://blog.csdn.net/jscese/article/details/40897703 导读: 这里补充下android运行时的文件系统结构, 同样,资料网上有很多,只是简单介绍我常涉及到的,个人观点,仅供参考- 各个厂商平台可能会有出入.这里单以我这边mstar的平台 以"/"代表文件系统的根目录. -- 蒋斌-jscese 2014/11/7 文件系统生成 目前an

Android——4.2.2 文件系统文件夹分析

近期公司要整android内部培训,分配给我写个培训文档.这里记录例如以下: 撰写不易,转载请注明出处:http://blog.csdn.net/jscese/article/details/40897703 导读: 这里补充下android执行时的文件系统结构, 相同.资料网上有非常多,仅仅是简介我常涉及到的,个人观点.仅供參考- 各个厂商平台可能会有出入.这里单以我这边mstar的平台 以"/"代表文件系统的根文件夹. --jscese 2014/11/7 文件系统生成 眼下and

Android学习2--项目文件列表简单分析

使用Eclipse创建的默认项目文件列表如下: src:src目录是Android工程的源程序目录,该目录用于存放Java项目的源代码 gen:gen目录存放所有自动生成的文件,在这个目录中最关键的文件为R.java.此文件在创建项目时会自动生成,里面主要存放了Android布局文件中资源的ID号. assets:Android除了提供res文件夹用于存放Android项目中的资源文件之外,也提供了assets文件夹用于存放资源文件,在此文件夹中存放的资源文件的ID号不会被写入R文件,所以,在读