通过camera的onPreviewFrame实现自定义预览的性能问题

gangAndgang 2016-04-17 10:18:58
为了实现一些特殊的显示效果,通过camera的onPreviewFrame返回的byte[]数据来实现一个自定义的预览界面,遇到一个性能问题!
与系统自带的setPreviewDisplay方法同样使用suffaceview作为绘制组件,如果应用是横屏显示的话,在1920x1080分辨率下,将取得的byte[](yuv420sp)格式的数据转为bitmap8888,然后绘制至suffaceview上,能达到30fps的帧率;
但当app是竖屏时,其图像是倒置的,如果将byte[]数据先旋转90度,再转为bitmap8888绘制,则帧率仅达到5fps,主要时间都花在了旋转过程中!

不知有什么办法能加速这个旋转过程?
另:系统自带的预览界面,如果设置setDisplayOrientation(90),仍能达到30fps的帧率,系统在预览界面也应该实现了旋转,具体是如何实现的呢?
...全文
543 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jklwan 2016-04-21
  • 打赏
  • 举报
回复
引用 6 楼 darkinger 的回复:
我还真不知道如何快速的旋转呢,现在我用的是一段for来旋转的,1080P分辨率下只能达到5fps 不知底层有什么接口或API可以快速的旋转?你能给个例子么?
系统的就是camera.setDisplayOrientation(90);,你先别处理数据,直接显示摄像头的数据,看看显示出来的fps有多少。你的是因为处理旋转数据再绘制导致的fps降低。
gangAndgang 2016-04-21
  • 打赏
  • 举报
回复
我知道是因为旋转降低了FPS,现在就是想知道为什么系统自带的camera.setDisplayOrientation(90)这个旋转没有降低FPS,
gangAndgang 2016-04-20
  • 打赏
  • 举报
回复
我还真不知道如何快速的旋转呢,现在我用的是一段for来旋转的,1080P分辨率下只能达到5fps 不知底层有什么接口或API可以快速的旋转?你能给个例子么?
引用 5 楼 jklwan 的回复:
[quote=引用 3 楼 darkinger 的回复:] 我想知道的是,为什么系统的camera的preview明显也应该是旋转了的,也应该是和onPreviewFrame的数据源一致,为什么他的不慢?他是调用了什么特殊的硬件接口么?
旋转camera肯定不慢,那都是底层的接口,你是因为旋转数据的问题[/quote]
jklwan 2016-04-19
  • 打赏
  • 举报
回复
引用 3 楼 darkinger 的回复:
我想知道的是,为什么系统的camera的preview明显也应该是旋转了的,也应该是和onPreviewFrame的数据源一致,为什么他的不慢?他是调用了什么特殊的硬件接口么?
旋转camera肯定不慢,那都是底层的接口,你是因为旋转数据的问题
jklwan 2016-04-18
  • 打赏
  • 举报
回复
你这个特殊的显示效果是怎么样的,对数据进行旋转肯定慢的。
gangAndgang 2016-04-18
  • 打赏
  • 举报
回复
我想知道的是,为什么系统的camera的preview明显也应该是旋转了的,也应该是和onPreviewFrame的数据源一致,为什么他的不慢?他是调用了什么特殊的硬件接口么?
引用 1 楼 jklwan 的回复:
你这个特殊的显示效果是怎么样的,对数据进行旋转肯定慢的。
gangAndgang 2016-04-18
  • 打赏
  • 举报
回复
onPreviewFrame就是每一帧的数据,你存下来就是截图
引用 2 楼 sjy0118 的回复:
顺带大哥的帖子问个问题, 若是onPreviewFrame预览视频,怎样做可以实现自动截图(拍照功能)?
Dash_Yagi 2016-04-18
  • 打赏
  • 举报
回复
顺带大哥的帖子问个问题, 若是onPreviewFrame预览视频,怎样做可以实现自动截图(拍照功能)?

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧