我想从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

09-11 19:00