Android 最大的摄像头抓取和显示性能
我对这个话题做了很多研究,但似乎我做错了什么,或者我的理解有点偏离了方向 我只是想获得最佳性能(例如,以FPS为单位),从我的Android驱动的智能手机上抓取高质量图像,并直接向用户显示,无需任何修改 因为我有一部功能相当强大的智能手机(Nexus4),所以我认为这应该是一项微不足道的任务。但我所有的努力都没有得到回报。例如,使用最新的OpenCV框架,对于800x480流,我只实现了约10 FPS 那么,仅仅从我手机的摄像头抓取和显示高质量的视频就可以达到>25FPS的速度吗?如果是,那么最好的策略是什么?也欢迎考虑特定于设备的因素 我使用的资源:Android 最大的摄像头抓取和显示性能,android,c++,opencv,opengl-es,android-ndk,Android,C++,Opencv,Opengl Es,Android Ndk,我对这个话题做了很多研究,但似乎我做错了什么,或者我的理解有点偏离了方向 我只是想获得最佳性能(例如,以FPS为单位),从我的Android驱动的智能手机上抓取高质量图像,并直接向用户显示,无需任何修改 因为我有一部功能相当强大的智能手机(Nexus4),所以我认为这应该是一项微不足道的任务。但我所有的努力都没有得到回报。例如,使用最新的OpenCV框架,对于800x480流,我只实现了约10 FPS 那么,仅仅从我手机的摄像头抓取和显示高质量的视频就可以达到>25FPS的速度吗?如果是,那么最
不过,我会继续研究,并随时通知你。各种信息仍然欢迎 限制因素是移动大量数据的速度有多快。也有类似的讨论。您有三个任务:(1)获取图像,(2)保存图像(“捕获”),和(3)显示图像。(如果我误解了你的问题,而你不需要#2,那么相机的
曲面
预览模式将以高速完成你想要的功能。)
Android 4.3上提供的一种内存带宽有效的方法是将相机的表面预览输入AVC编码器,保存编码的MPEG流,然后解码帧以显示。摄像机的缓冲区可以输入到MediaCodec
编码器,而无需复制缓冲区或将数据转换为其他格式。(参见示例。)此方法可能与您声明的目标之一不兼容:应用于每个帧的压缩可能会将质量降低到可接受的水平以下
如果需要保持帧的“完整”,则必须复制数据,可能需要多次,然后将其写入磁盘。帧越大,需要移动的数据越多,移动速度也越慢。例如,相机捕获数据并将其写入本机缓冲区;将本机缓冲区复制到Dalvik VM的托管缓冲区;将缓冲区写入磁盘;YUV转换为RGB;通过将数据上传到纹理并进行渲染,RGB将显示在屏幕上。不知道,只需添加注释即可获得结果通知;)(相比之下,我廉价的trekstor平板电脑的速度为15fps(640x480)在没有任何处理的情况下,ocv245openCV在我看来一直是草率的-当你尝试在没有它的情况下进行流式处理时会发生什么?另一个要使用的资源:你看了吗?你也可以在openGL中使用SurfaceTexture和你自己的纹理。希望这可以提供很好的速度,因为它使用硬件加速,但没有衡量我的性能自我思考非常感谢“记录提示”提示!!感谢您的详细解释,我将研究一下,看看这与我目前的方法相比如何。