我想从 OMXCodec
解码输出中转储 YUV
数据。
它是 MediaBuffer
类型。无法访问 data() 指针。
如果我尝试访问数据,由于下面的检查代码而发生崩溃。
frameworks/av/media/libstagefright/MediaBuffer.cpp:119 CHECK(mGraphicBuffer == NULL) failed.
请告诉我从这个 MediaBuffer
中提取 YUV
数据的解决方案。
最佳答案
从MediaBuffer
来看,感觉下面的应该是函数式的。我还没有尝试过相同的方法,并且已经使用了 rg2 的解决方案,即直接基于 gralloc
句柄,但感觉以下内容也应该起作用。
sp<GraphicBuffer> mCurrGraphicBuffer;
void *vaddr;
err = source->read(&buffer, &options); // Where buffer is of MediaBuffer type
mCurrGraphicBuffer = buffer->graphicBuffer();
width = mCurrGraphicBuffer->getWidth();
height = mCurrGraphicBuffer->getWidth();
format = mCurrGraphicBuffer->getFormat();
mCurrGraphicBuffer->lock(GRALLOC_USAGE_SW_READ_OFTEN, &vaddr);
//Dump the YUV file based on the vaddr, width, height, format
mCurrGraphicBuffer->unlock();
编辑:
为了使上述解决方案起作用,实际的 GraphicBuffer
应该创建或分配适当的使用标志,即创建缓冲区时应提示 CPU 将访问该缓冲区。否则,-EINVAL
将根据 documentation in gralloc
返回.
关于android - 如何从 OMXCodec 解码输出中转储 YUV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21717728/