Example #1
0
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;
}