文章目录
- 一、通过命令去获取一些数据
- 1.2 确定我们xml配置文件:
- 二、查看我们芯片支持的编码能力
- 三、通过log去获取信息
这个文章的主要内容是为了后期性能方面的debug, 设计到前期的bringup则没有
一、通过命令去获取一些数据
获取媒体相关的参数:
# getprop | grep media
获取后如下所示:
[audio.deep_buffer.media]: [true]
[init.svc.media]: [running]
[init.svc.media.swcodec]: [running]
[init.svc.mediadrm]: [running]
[init.svc.mediaextractor]: [running]
[init.svc.mediametrics]: [running]
[init.svc.qti-media]: [stopped]
[init.svc.vendor-qti-media-c2-hal-1-0]: [running]
[init.svc.vendor-qti-media-c2audio-hal-1-0]: [running]
[init.svc.vendor.media.omx]: [running]
[init.svc_debug_pid.media]: [2006]
[init.svc_debug_pid.media.swcodec]: [2092]
[init.svc_debug_pid.mediaextractor]: [2000]
[init.svc_debug_pid.mediametrics]: [2003]
[init.svc_debug_pid.qti-media]: []
[init.svc_debug_pid.vendor-qti-media-c2-hal-1-0]: [1487]
[init.svc_debug_pid.vendor-qti-media-c2audio-hal-1-0]: [1488]
[init.svc_debug_pid.vendor.media.omx]: [2032]
[media.aac_51_output_enabled]: [true]
[media.settings.xml]: [/vendor/etc/media_profiles_vendor.xml]
[media.stagefright.audio.deep]: [false]
[media.stagefright.enable-aac]: [true]
[media.stagefright.enable-fma2dp]: [true]
[media.stagefright.enable-http]: [true]
[media.stagefright.enable-player]: [true]
[media.stagefright.enable-qcp]: [true]
[media.stagefright.enable-scan]: [true]
[media.stagefright.thumbnail.prefer_hw_codecs]: [true]
[ro.boottime.media]: [17647882232]
[ro.boottime.media.swcodec]: [17719764680]
[ro.boottime.mediaextractor]: [17644505982]
[ro.boottime.mediametrics]: [17646084784]
[ro.boottime.qti-media]: [14864513588]
[ro.boottime.vendor-qti-media-c2-hal-1-0]: [17003630982]
[ro.boottime.vendor-qti-media-c2audio-hal-1-0]: [17006300149]
[ro.boottime.vendor.media.omx]: [17663434732]
[ro.media.recorder-max-base-layer-fps]: [60]
[ro.media.xml_variant.codecs]: [_kalama]
[ro.media.xml_variant.codecs_performance]: [_kalama]
[ro.mediaserver.64b.enable]: [true]
[vendor.display.enable_latch_media_content]: [1]
[vendor.media.system.build_codename]: [13]
[vendor.media.target_variant]: [_kalama]
这里我们就大致能看到:
[ro.media.xml_variant.codecs]: [_kalama]
[ro.media.xml_variant.codecs_performance]: [_kalama]
这两个文件,我们可以看到名字 和我们对应的配置xml文件是有关联的 。
1.2 确定我们xml配置文件:
# adb logcat -b all | grep -Ei "getVendorXmlPath"
05-12 09:25:36.226 13255 13314 I MediaCodecsXmlParser: getVendorXmlPath /vendor/etc/media_codecs_kalama_vendor.xml
05-12 09:25:36.228 13255 13314 I MediaCodecsXmlParser: getVendorXmlPath /vendor/etc/media_codecs_performance_kalama_vendor.xml
这个Log在开机的时候会打印一次,然后就会把这个log冲掉,所以有时候我们没有看到这个log也是正常的,
我们可以通过重启相关的服务来重新获取一次
# adb shell kalama:/ # pkill -9 media*
通过杀死这些相关的服务,后台会默认重启这个时候我们就能看到了。
qcom的xml一般会在后面多一个vendor,所以我们看到的就是 media_codecs_kalama_vendor.xml
其中这个 _kalama 就是我们上面获取的 [ro.media.xml_variant.codecs] 的名字。
二、查看我们芯片支持的编码能力
# adb shell dumpsys media.playerMedia type 'audio/3gpp':Decoder "c2.android.amrnb.decoder" supportsxxxxxxxMedia type 'video/avc':Decoder "c2.android.avc.decoder" supportsxxxxxxxMedia type 'video/avc':Decoder "c2.qti.avc.decoder" supportsxxxxxxx
从这里面我们就能看到相关的支持, 一般来说 格式都是 c2.android.xxxxx .decoder这种
c2代表框架,可能是 omx (android12之前的框架)也可能是 c2(codec2框架 android13及其以上)
Android 代表google的原生代码, 这种基本都是软件编码,性能很差的,而不同的平台这里会有不同的名字,比如高通就是 qti.
Xxxxx 是h264、 h265、video、 audio, 不同的文件格式有不同的名字, video h264就是 avc. Video H265就是 hevc 其余的大家可以去查查
decoder代表的就是解码器。 encoder就是编码器。
三、通过log去获取信息
平台为了保证性能,一般不会打开相关的log,我们可以通过对应的debug手册去获取如何打开这些debug方案;
如高通qsc8550平台:
如果是走的我们需要的硬编码,log会如下所示:
D CCodecBufferChannel: [c2.qti.avc.encoder#157]
// c2.qti.avc.encoder qti代表的是高通的硬件编码器D CCodecBufferChannel: [c2.android.avc.encoder#157]
// android.avc.encoder 代表的是原生google的软件编码逻辑
硬件编码的log大致如下图
软件编码我们基本不会使用。所以我这边暂时没有相关的 log。