【问题标题】:faster camera preview using OpenGL?使用 OpenGL 更快的相机预览?
【发布时间】:2012-06-30 02:25:13
【问题描述】:

编写一个从相机获取预览帧的应用程序对其进行一些转换,然后将其显示在屏幕上。

public void onPreviewFrame(byte[] data, Camera camera) {}

我将数据在另一个线程中的 JNI 中进行 yuv2rgb 和一些像素操作。然后我从 RGB int 数组创建位图并使用

canvas.drawBitmap(bmp, 0, 0, null);

我在 HTC Nexus One 上以 640x480 获得大约 15-20FPS,在三星 Galaxy S II 上获得 30+ FPS

我想知道是否可以通过使用 Android OpenGL ES 进行绘图来加快速度? 我将遵循本指南: http://obviam.net/index.php/texture-mapping-opengl-android-displaying-images-using-opengl-and-squares/

【问题讨论】:

    标签: android opengl-es android-camera


    【解决方案1】:

    您是否将 SurfaceView 用于您的相机应用程序?您获得的预览帧是屏幕上显示的实际帧的副本。我猜你添加了另一个视图来显示回调预览帧。

    我不是图形专家,但你为什么不试试SurfaceTexture。您可以使用 setpreviewtexture() 代替 setpreviewwindow()。这样,Camera Service 将直接将缓冲区发送到应用程序,而不是制作副本并将其排队到 AndroidNativeWindow。这可能会提高您的表现。

    这就是安卓相机应用全景的工作原理。可以找到源代码here

    【讨论】:

    • 不幸的是,SurfaceTexture 只是 API >=11。此应用是为 API9+ 开发的
    【解决方案2】:

    实现了 OpenGL ES,它确实有助于提高性能

    【讨论】:

    • 嘿,我知道这是旧的,但也许你可以帮助我?我正在开发一个相机应用程序并试图找到有关如何实现 OpenGL ES 以提高性能的资源?
    • 您能说得更具体些吗?
    • 嗯基本上我只是想通过opengl实现相机预览。通过 GLSurfaceView。然后,我将使用它来使用户能够拍摄照片。我想它类似于 SnapChats 和 Instagrams 相机功能的工作方式?
    • 基本上首先你必须从相机中获取帧,我认为它在 onPreviewFrame 方法中。现在这些帧是 YUV422 格式,所以如果你想对其进行一些操作,你可能需要将它们转换为 RGB。然后你把它发送到 OpenGL
    • 可能是因为这个:stackoverflow.com/questions/8676046/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多