是否可以在 Android Java 层中 malloc Gralloc 内存?

Is it possible to malloc the Gralloc memory in Android Java layer?

我通过 MediaFormat 将 "csd-0" 和 "csd-1" 设置为 MediaCodec 如下:

byte[] sps = { 0, 0, 0, 1, 103, 100, 0, 40, -84, 52, -59, 1, -32, 17, 31, 120, 11, 80, 16, 16, 31, 0, 0, 3, 3, -23, 0, 0, -22, 96, -108 };
byte[] pps = { 0, 0, 0, 1, 104, -18, 60, -128 };
MediaFormat format = MediaFormat.createVideoFormat("video/avc", width, height);
format.setByteBuffer("csd-0", ByteBuffer.wrap(sps));
format.setByteBuffer("csd-1", ByteBuffer.wrap(pps));
...

但是我得到了这样的错误:

E/MtkOmxVenc( 6724): Error: BufferType is not Gralloc Source !!!!
F/libc    ( 6724): Fatal signal 11 (SIGSEGV) at 0x28006467 (code=1), thread 7500 (MtkOmxVencEncod)

所以我想尝试设置 Gralloc 源来修复它。有什么建议吗?

gralloc 是用于分配图形缓冲区的内存分配器。它由内核驱动程序提供。您传入宽度、高度和颜色格式,它会返回对具有必要属性的缓冲区的引用,同时考虑任何特定于平台的填充和对齐限制。

编解码器特定的数据值不应保存在 gralloc 缓冲区中。 CTS EncodeDecodeTest 会练习 setByteBuffer(),所以如果它完全损坏我会很惊讶。

我的猜测是 MtkOmxVenc 有一个错误。