我想从YUV
解码输出中转储OMXCodec
数据。
它是MediaBuffer
类型。访问data()指针是不可能的。
如果我尝试访问数据,则由于以下检查代码而导致崩溃。
frameworks/av/media/libstagefright/MediaBuffer.cpp:119 CHECK(mGraphicBuffer == NULL) failed.
请让我知道从此
YUV
提取MediaBuffer
数据的解决方案。 最佳答案
从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将对其进行访问。否则,将根据documentation in -EINVAL
返回gralloc
。