【发布时间】:2012-05-01 22:30:04
【问题描述】:
我创建了一个基于 FFmpeg 的电影播放器。它工作正常。解码速度非常快,在 LG P970(带有 Neon 的 Cortex A8)上,我的平均 70 fps 和 640 x 424 分辨率视频流包括 YUV2RGB 转换。但是,有一个瓶颈。它在画布上绘图。
我使用jnigraphics原生库将图片数据填充到原生端的位图中,然后我在SurfaceView的Canvas上绘制这个位图。这是一种非常简单和常见的方法,但是对于 640 x 424 分辨率的位图绘制需要 44 毫秒,这会将 fps 降低到 23 并使这种技术无法使用......它需要比整个 A/V 帧解码更多的时间!
有什么方法可以显着加快绘制位图的速度吗?我更喜欢使用 OpenGLES 2 在本机代码中完全渲染,但我读过它也可能是 slow。那么现在呢?...
如何尽可能快地渲染位图?
【问题讨论】:
-
没有办法直接从native代码访问SurfaceView的缓冲区吗?相机预览做到了这一点。
-
AFAIK 不,至少没有使用 NDK 的标准方式。当然可以链接安卓源,但是会造成兼容性的问题……
标签: android opengl-es android-ndk ffmpeg