在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中。
至于这两种配置文件的关系,后续有空再追