将uint8_t *缓冲区转换为jobject

时间:2018-08-09 16:28:41

标签: android opencv android-ndk android-camera2

我们目前正在开发一个特定的实时图像处理/效果应用程序,其中我们正在使用NDK并使用Camera2和MediaNDK API。

我正在使用AImageReader作为从相机调用当前帧并实时分配效果的方法。效果很好,我们的高清分辨率至少达到30 fps。

但是,我的工作还要求我将编辑后的图像返回给定的Java端点,即(Landroid/media/Image;)V签名方法。但是,可以将其更改为我想要的任何其他jobject,但必须是图像/位图类型。

我发现我使用的AImage只是一个c结构,因此我无法将其转换为jobject。

我们当前的流程如下:

  • AImageReader_ImageListener正在调用具有分配的this上下文的静态方法。

  • 方法使用AImageReader_acquireNextImage,如果媒体还可以,则将其发送到子类/对象。

  • 在这里,我们在多个std::thread操作中操纵图像数据,并合并生成的图像。我正在接收YUV422格式的数据,但是我正在将其转换为RGB,以便于处理。

  • 然后,我们锁定互斥锁,将结果数据返回给委托,并删除原始图像。

  • Delegate调用一个静态方法,该方法负责查找/询问Java方法。

  • 现在,我需要一个简单且资源较少的解决方案,将手头的数据转换为也可以表示为jobject的C ++对象。

我们在进程中使用OpenCv,因此我有可能返回一个Bitmap对象,但是看起来作业消耗的CPU时间超出了我的承受能力。

我该如何解决这个问题?是否有一种已知的快速方法将uint8_t *buffer转换为类似于jobject上下文的图像?

0 个答案:

没有答案