热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Android设备中几种YUV420p转rgb视频帧方法效率比较

Android设备中几种YUV420p转rgb视频帧方法效率比较编者:李国帅qq:9611153微信lgs9611153时间:202

Android设备中几种YUV420p转rgb视频帧方法效率比较

编者:李国帅

qq:9611153 微信lgs9611153

时间:2020-03-30

背景原因:

从android的camera之中获取视频帧,或者从第三方ipc比如海康大华的sdk api获取的视频帧,往往都是yuv格式的,比如yv12,i420。

这些视频帧要想显示到android的view/surface中,需要把yuv格式转换为rgb格式,通过view的canvas绘制到界面上。

正在上传…重新上传取消

中间碰到了这么个问题:因为java语言自身的效率问题,要处理高频率,大数据的数据转换往往效率很低。普通的操作很容易造成视频回显的阻塞,影响用户使用。

 

 

YUV420p转rgb通常有几个方法:

(华为平板2g内存下)

         1、常见的就是使用YuvImage间接实现,但是这种方案效率很低,通常一帧640*480的转换需要40~50毫秒。

         此方法仅可以转NV21和YUY2,还需要从先转换为NV21.

        

2、据说使用 renderscript.ScriptIntrinsicYuvToRGB效率很高,内部原理不明,实测大概20毫秒左右。不过问题是只能从nv12转rgb,要添加从yv12转nv12的操作。

        

3、yv12和rgb之间的鸿沟并不是很深,并且可以直接使用代码实现转换。如果使用java代码直接转换,大约也就40毫秒。

        

4、当然了,如果能使用jni方法嵌入程序的c语言转换函数,效率会有所提高。记得以前总结过一篇《使用ffmpeg中的转换库进行颜色转换》,应该速度比renderscript快。

 

使用代码进行测试:

写一个程序,使用纯java代码测试,创建随机图像,对几种方法进行对比。

正在上传…重新上传取消

测试结果:

正在上传…重新上传取消

03-30 11:44:20.421 32436-32436/? D/MainActivity: YuvImage处理1帧耗时=82

03-30 11:44:20.471 32436-32436/? D/MainActivity: 直接转换处理1帧耗时=49

03-30 11:44:20.491 32436-32436/? D/MainActivity: 使用renderscript.ScriptIntrinsicYuvToRGB处理1帧耗时=20

03-30 11:44:21.511 32436-32436/? D/MainActivity: YuvImage处理1帧耗时=85

03-30 11:44:21.561 32436-32436/? D/MainActivity: 直接转换处理1帧耗时=47

03-30 11:44:21.581 32436-32436/? D/MainActivity: 使用renderscript.ScriptIntrinsicYuvToRGB处理1帧耗时=23

 

正在上传…重新上传取消

 

总结:

方法没有好坏,使用在恰当的地方就是好方法。追求都是要付出成本的,就看值不值得了。

如果设定帧率在10以下,使用yuv转换也未尝不可。

 

 

 


推荐阅读
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • Android 渐变圆环加载控件实现
    本文介绍了如何在 Android 中创建一个自定义的渐变圆环加载控件,该控件已在多个知名应用中使用。我们将详细探讨其工作原理和实现方法。 ... [详细]
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
  • 深入解析Java枚举及其高级特性
    本文详细介绍了Java枚举的概念、语法、使用规则和应用场景,并探讨了其在实际编程中的高级应用。所有相关内容已收录于GitHub仓库[JavaLearningmanual](https://github.com/Ziphtracks/JavaLearningmanual),欢迎Star并持续关注。 ... [详细]
  • 嵌入式开发环境搭建与文件传输指南
    本文详细介绍了如何为嵌入式应用开发搭建必要的软硬件环境,并提供了通过串口和网线两种方式将文件传输到开发板的具体步骤。适合Linux开发初学者参考。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 数据管理权威指南:《DAMA-DMBOK2 数据管理知识体系》
    本书提供了全面的数据管理职能、术语和最佳实践方法的标准行业解释,构建了数据管理的总体框架,为数据管理的发展奠定了坚实的理论基础。适合各类数据管理专业人士和相关领域的从业人员。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 尽管某些细分市场如WAN优化表现不佳,但全球运营商路由器和交换机市场持续增长。根据最新研究,该市场预计在2023年达到202亿美元的规模。 ... [详细]
  • SQLite 动态创建多个表的需求在网络上有不少讨论,但很少有详细的解决方案。本文将介绍如何在 Qt 环境中使用 QString 类轻松实现 SQLite 表的动态创建,并提供详细的步骤和示例代码。 ... [详细]
  • 本文探讨了将类成员属性设置为私有的重要性,并通过具体代码示例展示了如何实现对这些属性的有效控制。私有成员属性有助于增强数据的安全性和完整性,确保只有经过验证的数据才能被修改。 ... [详细]
  • 在众多不为人知的软件中,这些工具凭借其卓越的功能和高效的性能脱颖而出。本文将为您详细介绍其中八款精品软件,帮助您提高工作效率。 ... [详细]
  • 深入解析TCP/IP五层协议
    本文详细介绍了TCP/IP五层协议模型,包括物理层、数据链路层、网络层、传输层和应用层。每层的功能及其相互关系将被逐一解释,帮助读者理解互联网通信的原理。此外,还特别讨论了UDP和TCP协议的特点以及三次握手、四次挥手的过程。 ... [详细]
  • 云函数与数据库API实现增删查改的对比
    本文将深入探讨使用云函数和数据库API实现数据操作(增删查改)的不同方法,通过详细的代码示例帮助读者更好地理解和掌握这些技术。文章不仅提供代码实现,还解释了每种方法的特点和适用场景。 ... [详细]
  • 深入理解ExtJS:从入门到精通
    本文详细介绍了ExtJS的功能及其在大型企业前端开发中的应用。通过实例和详细的文件结构解析,帮助初学者快速掌握ExtJS的核心概念,并提供实用技巧和最佳实践。 ... [详细]
author-avatar
mobiledu2502861465
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有