当前位置: 首页 > news >正文

video 视频编解码一些debug方法

文章目录

  • 一、通过命令去获取一些数据
    • 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。

http://www.lryc.cn/news/170228.html

相关文章:

  • 中秋国庆假期——模板推荐
  • 【配代码演示】Cookie和Session的区别
  • 【Linux初阶】信号入门2 | 信号阻塞、捕捉、保存
  • 【已解决】:该该虚拟机似乎正在使用中。如果该虚拟机未在使用,请按“获取所有权(T)“按钮获取它的所有权。否则,请按“取消(C)“按钮以防损坏。
  • 系统架构常用的工具
  • 腾讯云2核4G服务器5M带宽 218元一年 优惠价格明细表
  • [C++ 网络协议] 多播与广播
  • IOS17正式版今日发布
  • 2560. 打家劫舍 IV
  • java web中部署log4j.xml
  • 【张兔兔送书第一期:考研必备书单】
  • 基于Spring Boot+ Vue的健身房管理系统与实现
  • ThreadLocal线程局部变量
  • C++ Primer (第五版)第一章习题部分答案
  • Python与GUI集成:零基础也能开发国际象棋游戏
  • SaaS软件能保证数据安全吗?
  • 方案:基于AI烟火识别与视频技术的秸秆焚烧智能化监控预警方案
  • phantomjs插件---实现通过链接生成网页截图
  • SpringBoot分页实现查询数据
  • Jetson Xavier NX 与飞控(Pixhawk 4 Mini)实现串口通信
  • 为什么2022年秋招嵌入式开发岗位薪资大涨?
  • 在HTML里,attribute和property有什么区别?
  • 机器学习入门与实践:从原理到代码
  • SpringCloud在idea中一键启动项目
  • VB过程的递归调用,辗转相除法求最大公约数
  • OpenCV(三十九):积分图像
  • 【Electron 拦截请求实现自定义网络处理】
  • Pytest系列-内置标签skip和skipif 跳过测试用例的详细使用(5)
  • 华为云云耀云服务器L实例评测|docker 常用操作命令
  • RJ45网络信号浪涌保护器解决方案