在system/etc目录下,查看m开头文件


 system目录下只有media_profiles.xml
 但是在vendor目录下就可以看到

 目前看下来有两种配置文件:
 media_codecs.xml和media_profiles.xml
 两个分别对应MediaCodec和MediaProfiles
2.1.1 audio
文件路径:system/etc/media_codecs_google_audio.xml
常见参数:
 Decoders(编码器)和Encoders(解码器):包含mediacodec信息
 type:编解码类型,注意后续代码中获取该参数
 Limit标签:
- channel-count:通道数
 - sample-rate:采样率
 - bitrate:码率
 - complexity:复杂度
 - bitrate-modes:码率控制方法1 2 VBR(Variable Bit Rate)动态比特率
CBR(Constants Bits Rate)固定码率
CQ 不控制码率 
2.1.2 video
文件路径:system/etc/media_codecs_google_video.xml
常见参数:
- size:分辨率
 - alignment
 - block-size
 - blocks-per-second
 - adaptive-playback(feature标签)
 
文档路径:/system/etc/media_profiles.xml
3.1.1 配置文件路径定义
这里定义了默认的文件路径和默认的xml文件名
在IOmxStore 初始化的时候会调用rusahn
3.1.2 获取xml文件路径
media_codecs.xml文件加载函数
MediaCodecsXmlParser::parseXmlFilesInSearchDirs
 |-- MediaCodecsXmlParser::Impl::parseXmlFilesInSearchDirs
 |----MediaCodecsXmlParser::parseXmlPath
 |------MediaCodecsXmlParser::Impl::parseXmlPath
 |--------getVendorXmlPath
- getDefaultSearchDirs获取搜索文件夹路径
 - parseXmlFilesInSearchDirs遍历这些文件夹
 - parseXmlPath中会再搜索下vendor目录下的特定文件(比如/vendor/etc/media_codecs_performance_sdm66l_v1.xml)
 
3.1.3 解析xml文件
parseXmlFile函数解析xml,xml文件中的标签参数解析依据StartElementHandlerWrapper和EndElementHandlerWrapper
 此时将xml文件中的参数存到XML_ParseBuffer中。
再往上调用实际上是存到MediaCodecList中,具体的调用流程

3.2.1 MediaProfiles类定义
在code中直接搜MediaProfiles,查看这个结构体的定义
文件路径:frameworksavmedialibmediaincludemediaMediaProfiles.h
3.2.2 加载xml函数流程
MediaProfiles::getInstance
 首先判断media.settings.xml属性是否设置了
 · 若已经定义了就再根据”ro.board.platform“,选定对应的xml文件
 · 若未定义,就遍历xmlFiles,找到合适文件
MediaProfiles::createInstanceFromXmlFile函数
 加载xml文件,存到static MediaProfiles *sInstance中。
以上是stagefright的处理流程。注意Nuplayer好像有改变

至此,将xml文件中的配置参数存到了MediaProfiles *sInstance中
3.3.4 加载流程
3.3.4.1 stagefrightRecorder
查看下函数MediaProfiles::getInstance如何被调用的
创建client

3.3.4.2 NuPlayer(无关)
获取mediacodec实例

有两种配置文件,mediacodec.xml和media_profile.xml
 这两种解析出的数据分别存放到medicodeclist和mediaprofile中。
至于这两种配置文件的关系,后续有空再追