【问题标题】:Android Camera Frame RenderingAndroid 相机帧渲染
【发布时间】:2015-03-04 20:00:13
【问题描述】:

我正在尝试在 Android 中渲染我的相机帧,并使用 canvas、bitmap、onDraw() 在我的 Surfaceview 上显示帧。然而,我在 Native 端进行渲染的代码性能占用了我的 CPU 的 70%。渲染速度不错,但 CPU 消耗很差。问题是我在渲染和捕获相机时有另一个覆盖的表面视图(surfaceview2)来显示其他内容。我想知道如何减少 cpu 消耗并更多地使用 gpu 等等。到目前为止可能的解决方案是: a)使用opengl在surfaceview上绘制我的框架,但资源和示例代码有限 b) 使用原生端来绘制我的框架,但资源也有限

有谁知道如何使用上述技术执行 YV12 到 rbg?

【问题讨论】:

  • 这和stackoverflow.com/questions/28706700是同一个项目吗?你想做什么?似乎您是从那里的答案直接将其发送到 SurfaceView 或 TextureView ;你想在这里做什么?
  • Fadden,我有 Surfaceview1 正在显示某些东西,而 Surfaceview2(覆盖表面)正在做相机捕捉。我想从我的相机中抓取帧并渲染它们。我使用了性能很好的本机代码,但我的 cpu 百分比上升了。我正在寻找降低 CPU 使用率的解决方案。我在 Opengl 上找不到任何具体的内容。你认为openGl是解决方案吗? opengl 不是用原生的吗?
  • “OpenGL ES”和“native”不是同义词。正如 Isogen74 的回答中所指出的,相机数据可以被视为“外部”纹理。这用于 Grafika (github.com/google/grafika) 中的一些活动,例如“来自相机的纹理”。 Grafika 不会在应用程序本身中使用任何本机 (NDK) 代码。
  • 我无法在我的设备上部署 Grafika...
  • 我找到了这个,但我不确定如何在 GlSurfaceview 顶部使用覆盖表面

标签: android opengl-es android-ndk android-camera surfaceview


【解决方案1】:

许多现代 GPU 可以原生解码 YUV;问题是如何让 YUV 表面进入 OpenGL ES,因为这通常不是 Open GL ES 所做的事情......

大多数操作系统(包括 Android)允许您通过 EGL_image_external 扩展将外部表面导入 OpenGL ES,并且这些外部表面可以标记为 YUV。

唯一的问题是我不完全确定这在 Android 端是如何工作的(抱歉) - 所以其他人必须回答这个问题。我只知道图形驱动程序方面 - 只知道它在大多数现代移动 GPU 上都是可能的。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2021-08-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-24
  • 1970-01-01
  • 1970-01-01
  • 2014-12-11
  • 1970-01-01
相关资源
最近更新 更多