我对使用Android MediaCodec解码并通过Surface将YUV输入到OpenGL纹理中有很好的理解。我想和Vulkan做些类似的事情。然而,我没有成功地找到任何文档或示例代码。
我的问题是:我将如何连接以下管道?
MediaCodec Video Decoder ⇨ Surface ⇨ texture ⇨ Vulkan详细信息
OpenGL比较
作为比较,在OpenGL的情况下,一个Android被构造并使用如下所示
textureId = glGenTextures( &textureId )
surface = new Surface( new SurfaceTexture( textureId ) )
mediaCodec.configure( surface )发布于 2017-04-21 19:43:05
目前这是不可能的,因为无法从Vulkan外部导入内存对象,也无法导入任何可以导出Surface的SDK对象。看看VK_KHX_external_memory和相关的扩展,了解这些部分将来是如何工作的。
编辑2018-05-23:现在可以使用VK_ANDROID_external_memory_android_hardware_buffer扩展和它所依赖的扩展。您可以使用AImageReader_newWithUsage()创建一个与GPU采样兼容的AImageReader。从那个ANativeWindow中获取AImageReader并使用它作为AMediaCodec的输出面,然后对于接收到的每一个图像,获取AHardwareBuffer并使用扩展将其导入到VkDeviceMemory/VkImage对中。
https://stackoverflow.com/questions/43507536
复制相似问题