Android:由 OpenGL 纹理/HardwareBuffer 支持的自定义 NDK/C++ android.media.Image 实现

问题描述 投票:0回答:1

我正在开发一个 Camera2 应用程序,其中设置了一个自定义 OpenGL 管道来处理视频帧。

在我的管道中,我使用了几个不同的第三方帧处理 API,它们需要

android.media.Image
作为参数(例如,用于检测人脸或其他模型)。

我有一个 OpenGL 纹理,我可以用它来创建和填充 AHardwareBuffer。我现在如何同步创建由我的 OpenGL 纹理/硬件缓冲区支持的

android.media.Image
实例?

  1. 我知道
    android.media.Image
    类的实现几乎完全在 NDK/C++ 中,但是
    AImage
    中的
    mediandk
    也不提供构造函数。
  2. 我说同步,因为我知道创建一个
    ImageReader
    然后流入它的Surface,但这不是我想要的,因为它们不是同步创建的,而是仅在
    setOnImageAvailableListener
    回调中创建。
android c++ opengl-es android-ndk android-image
1个回答
0
投票

虽然 Android

media.Image
实际上主要是图形缓冲区的包装器,因此在低级别上可以被视为 AHardwareBuffer(加上元数据),但不幸的是没有公共 API 可以从 AHardwareBuffer 创建 media.Image (尽管反过来也是可能的),因为
media.Image
也具有与 ImageReaders 和 Writers 相关的所有权语义。

我知道您想要一个同步解决方案,但我不相信公共 API 中有这样的解决方案。您基本上必须使用 ImageReader 作为 EGL 渲染的目标。

© www.soinside.com 2019 - 2024. All rights reserved.