NvSciBuf and NvMediaImage API Usage

    NvMediaDevice *device ;
    NvMediaStatus status;
    NvSciError  err;
    NvSciBufModule module;
    NvSciBufAttrList attrlist, conflictlist;
    NvSciBufObj bufObj;
    NvMediaImage *image;
    NvMediaSurfaceType nvmsurfacetype;
    NvMediaSurfAllocAttr surfAllocAttrs[8];
    NVM_SURF_FMT_DEFINE_ATTR(surfFormatAttrs);
    /*NvMedia related initialization */
    device = NvMediaDeviceCreate();
    status = NvMediaImageNvSciBufInit();
    /*NvSciBuf related initialization*/  
    err = NvSciBufModuleOpen(&module);
    /*Create NvSciBuf attribute list*/
    err = NvSciBufAttrListCreate(module, &attrlist);
    /*Initialize surfFormatAttrs and surfAllocAttrs as required */
    ....
    ....
    /* Get NvMediaSurfaceType */
    nvmsurfacetype = NvMediaSurfaceFormatGetType
(surfFormatAttrs, NVM_SURF_FMT_ATTR_MAX);
    /*Ask NvMedia to fill NvSciBufAttrs corresponding 
to nvmsurfacetype and surfAllocAttrs*/
    status = NvMediaImageFillNvSciBufAttrs(device, 
nvmsurfacetype, surfAllocAttrs, numsurfallocattrs, 0, attrlist);
    /*Reconcile the NvSciBufAttrs and then allocate
 a NvSciBufObj */
    err = NvSciBufAttrListReconcileAndObjAlloc
(&attrlist, 1, bufobj,  &conflictlist);
    /*Create NvMediaImage from NvSciBufObj */
    status = NvMediaImageCreateFromNvSciBuf
(device, bufobj, &image);
    /*Free the NvSciBufAttrList which is no 
longer required */
    err = NvSciBufAttrListFree(attrlist);
    /*Use the image as input or output for 
any of the Nvmedia */
    ....
    ....
    /*Free the resources after use*/
    /*Destroy NvMediaImage */
    NvMediaImageDestroy(image);
    /*NvMedia related Deinit*/
    NvMediaImageNvSciBufDeinit();
    NvMediaDeviceDestroy(device);
    /*NvSciBuf related deinit*/
    NvSciBufObjFree(bufobj);
    NvSciBufModuleClose(module);