BufObjectPtr VaapiBufObject::create(const ContextPtr& context, VABufferType bufType, uint32_t size, const void *data, void **mapped_data) { BufObjectPtr buf; if (size == 0) { ERROR("buffer size is zero"); return buf; } DisplayPtr display = context->getDisplay(); VABufferID bufID; if (!vaapiCreateBuffer(display->getID(), context->getID(), bufType, size, data, &bufID, mapped_data)) { ERROR("create buffer failed"); return buf; } void *mapped = mapped_data ? *mapped_data : NULL; buf.reset(new VaapiBufObject(display, bufID, mapped, size)); return buf; }