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

如何判断硬件解码器或者软件解码器

方法一:

根据源码frameworks/av/media/libstagefright/MediaCodecList.cpp

bool MediaCodecList::isSoftwareCodec(const AString &componentName) { return componentName.startsWithIgnoreCase("OMX.google.") || componentName.startsWithIgnoreCase("c2.android.") || (!componentName.startsWithIgnoreCase("OMX.") && !componentName.startsWithIgnoreCase("c2.")); }

根据这段代码的逻辑,OMX.google和c2.android开头的就是原生的软件解码器

此外的OMX或者c2开头,就是硬件解码器,如c2.qti.avc.decoder

media_codecs.xml文件路径:
code:android/device/qcom/msm8996(平台名)或者android/frameworks/av/media/libstagefright/data
设备:/vendor/etc/media_codecs.xml

这个文件被frameworks/av/media/libstagefright/xmlparser/MediaCodecsXmlParser.cpp解析。

方法二:

在APP中从MediaCodecInfo中使用isHardwareAccelerated()获取相关信息,参考以下代码

private boolean isH265Supported() { MediaCodecList codecList = new MediaCodecList(MediaCodecList.ALL_CODECS); boolean isHardware = false; for (MediaCodecInfo codecInfo : codecList.getCodecInfos()) { String name = codecInfo.getName(); if (name.contains("hevc") && name.contains("decoder")) { Log.i("硬解", "===>分析中: " + name + " ==="); String architecture = getArchitectureType(name); Log.i("硬解", "===>类型: " + architecture); isHardware = codecInfo.isHardwareAccelerated(); Log.i("硬解", "===>支持硬件加速: " + isHardware); analyzePerformanceCharacteristics(codecInfo); } } return isHardware; } private static String getArchitectureType(String codecName) { if (codecName.startsWith("OMX.qcom.")) { return "Qualcomm VPU (Video Processing Unit) - 专用视频硬件"; } else if (codecName.startsWith("OMX.")) { return "Vendor VPU - 厂商专用视频硬件"; } else if (codecName.startsWith("c2.android.")) { return "CPU Software - 中央处理器软件解码"; } else if (codecName.startsWith("c2.")) { return "Modern VPU/DSP - 现代视频处理单元"; } else if (codecName.contains("mediacodec")) { return "GPU (罕见) - 图形处理器"; } else { return "Unknown"; } } private static void analyzePerformanceCharacteristics(MediaCodecInfo codecInfo) { try { if(codecInfo.getName().contains("c2.dolby.decoder.hevc")){ Log.i("硬解","===>" + codecInfo.getName() + " MediaCodec不支持杜比: codec does not support type"); return; } MediaCodecInfo.CodecCapabilities caps = codecInfo.getCapabilitiesForType("video/hevc"); if (caps != null) { MediaCodecInfo.VideoCapabilities videoCaps = caps.getVideoCapabilities(); assert videoCaps != null; Log.i("硬解", "===>支持最高分辨率: " + videoCaps.getSupportedWidths().getUpper() + "x" + videoCaps.getSupportedHeights().getUpper()); Log.i("硬解", "===>性能级别: " + (videoCaps.getSupportedWidths().getUpper() >= 7680 ? "8K Capable" : "4K/HDR Capable")); } } catch (Exception e) { Log.e("硬解", "===>分析出错: ", e); } }
http://www.cnnetsun.cn/news/102407.html

相关文章:

  • 魔盒项目开发纪实:移动端应用开发
  • 鸿蒙ArkTS与Vue3状态管理对比
  • EmotiVoice能否生成辩论赛语音?逻辑性强语调输出
  • 【必收藏】AI智能体(AI Agent)完全指南:从底层原理到落地实践,打造你的第一个智能体系统
  • 建议收藏:零基础也能玩转AI大模型:提示词工程+微调+RAG实战指南
  • 精度论文:【Class Attention Transfer Based Knowledge Distillation】
  • 邮件防泄露再升级!CACTER EDLP大模型破解隐秘泄露,防护更精准
  • 13、深入了解psad:端口扫描攻击检测器与可疑流量检测
  • affine+docker+postgresql+备份数据库
  • EmotiVoice语音风格迁移功能探索:跨语境情感复现
  • FDM 3D打印表面粗糙度降至2μm?这一新技术来了解一下!
  • EmotiVoice跨平台兼容性测试结果公布
  • EmotiVoice支持长文本输入吗?分段处理最佳实践
  • 第012章:进销存的萌芽——仓库里的黑洞与“永远对不上的账”(1998)
  • 0 基础挖 SRC 怕违法?保姆级封神指南!合法渠道 + 实操步骤 + 必备技能一文搞定!
  • 如何让机器说话更有感情?试试EmotiVoice多情感TTS
  • 【OpenCV】Python图像处理几何变换之透视
  • EmotiVoice语音合成结果隐私保护措施说明
  • SottPlot5曲线图学习,代码示例,最新版本使用总结(v5.1.x)
  • EmotiVoice语音合成语音压缩技术:减小文件体积不影响质量
  • 央广财经对话齐向东!网安是 “十五五” 黄金赛道,稳、宽、强 = 躺赢风口?
  • 工业互联网产业联盟:高标准数字园区建设研究报告 2025
  • 共商AI时代发展新路径 第十六届亚洲电子论坛举办
  • 软考—系统集成项目管理工程师计算公式汇总
  • AI元人文构想:在黑箱与元白箱之间的抉择分析
  • AI元人文构想:意义行为原生论——回应质疑
  • 15、网络相似度与二分网络的构建与分析
  • 1.5 LangChain vs. DeepSeek:MCP 客户端开发与框架集成的终极对决
  • 设计少儿编程逻辑训练AI助手,通过图形化编程积木操作,AI实时判断代码逻辑错误,提供引导提示,非直接给出答案,记录能力成长轨迹。
  • 开发中小商家库存智能预警系统,录入商品销售数据与库存总量,通过时间序列模型,预测补货节点,自动生成采购清单,支持导出EXCEL。