我们目前正在开发一个特定的实时图像处理/效果应用程序,其中我们正在使用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上下文的图像?