VPI - Vision Programming Interface

1.0 Release

An abstract representation of a 2D image pyramid. More...

Data Structures

struct  VPIPyramidData
 Stores the pyramid contents. More...
 

Macros

#define VPI_MAX_PYRAMID_LEVEL_COUNT   (10)
 Maximum number of pyramid levels.
 

Typedefs

typedef struct VPIPyramidImpl * VPIPyramid
 A handle to an image pyramid.
 

Functions

VPIStatus vpiPyramidCreate (int32_t width, int32_t height, VPIImageFormat fmt, int32_t numLevels, float scale, uint32_t flags, VPIPyramid *pyr)
 Create an empty image pyramid instance with the specified flags. More...
 
void vpiPyramidDestroy (VPIPyramid pyr)
 Destroy an image pyramid instance as well as all resources it owns. More...
 
VPIStatus vpiPyramidGetFlags (VPIPyramid pyr, uint32_t *flags)
 Returns the flags associated with the pyramid. More...
 
VPIStatus vpiPyramidGetFormat (VPIPyramid pyr, VPIImageFormat *fmt)
 Returns the image format of the pyramid levels. More...
 
VPIStatus vpiPyramidGetNumLevels (VPIPyramid pyr, int32_t *numLevels)
 Get the image pyramid level count. More...
 
VPIStatus vpiPyramidGetSize (VPIPyramid pyr, int32_t outSize, int32_t *outWidth, int32_t *outHeight)
 Get the image width and height in pixels (for all levels at once). More...
 
VPIStatus vpiPyramidLock (VPIPyramid pyr, VPILockMode lock, VPIPyramidData *out)
 Acquires the lock on a pyramid object and returns pointers to each level of the pyramid. More...
 
VPIStatus vpiPyramidUnlock (VPIPyramid pyr)
 Releases the lock on a image pyramid object. More...
 
VPIStatus vpiImageCreatePyramidLevelWrapper (VPIPyramid pyr, int32_t level, VPIImage *img)
 Creates an image that wraps one pyramid level. More...
 

Detailed Description

An abstract representation of a 2D image pyramid.

2D image pyramid containers are created by calling vpiPyramidCreate to allocate and initialize an empty (zeroed) VPIPyramid object. The memory for the image pyramid data is allocated and managed by VPI.

Image formats match the ones supported by image container. The pyramid is not necessarily dyadic. The scale between levels is defined in the constructor.

Parameters such as levels, scale, width, height and image format are immutable and specified at the construction time. The internal memory layout is also backend-specific. More importantly, efficient exchange of image pyramid data between different hardware blocks might force the implementation to allocate the memory in multiple memory pools (e.g. dGPU and system DRAM). In some scenarios (to optimize performance and memory use), it might be beneficial to constrain the internal allocation policy to support only a particular set of backends.

The set of vpiPyramidLock / vpiPyramidUnlock calls allows the user to read from/write to the image data from the host. These functions are non-blocking and oblivious to the device command queue, so it's up to the user to make sure that all pending operations using this image pyramid as input or output are finished. Also, depending on the enabled backends lock/unlock * operation might be time-consuming and, for example, involve copying data over PCIe bus for dGPUs.


Data Structure Documentation

◆ VPIPyramidData

struct VPIPyramidData

Stores the pyramid contents.

Every level is represented by an entire VPIImageData. There are numLevels levels, and they can be accessed from levels[0] to levels[numLevels-1].

Definition at line 110 of file Pyramid.h.

+ Collaboration diagram for VPIPyramidData:
Data Fields
VPIImageData levels[VPI_MAX_PYRAMID_LEVEL_COUNT] Contents of every pyramid level.

Only the first numLevels levels has valid data.

int32_t numLevels Number of levels (i.e.

height) of the pyramid.

Function Documentation

◆ vpiImageCreatePyramidLevelWrapper()

VPIStatus vpiImageCreatePyramidLevelWrapper ( VPIPyramid  pyr,
int32_t  level,
VPIImage img 
)

#include <vpi/Pyramid.h>

Creates an image that wraps one pyramid level.

The created image doesn't own its contents. Destroying the pyramid while there are images wrapping its levels leads to undefined behavior. If image wraps the base pyramid level, locking the pyramid will also lock the image. Once the image isn't needed anymore, call vpiImageDestroy to free resources.

Parameters
[in]pyrThe pyramid whose level will be wrapped.
[in]levelPyramid level to wrap.
[out]imgPointer to an image handle that will hold the created image.
Returns
VPI_SUCCESS if image was created successfully, or any other VPIStatus error code in case of error.

◆ vpiPyramidCreate()

VPIStatus vpiPyramidCreate ( int32_t  width,
int32_t  height,
VPIImageFormat  fmt,
int32_t  numLevels,
float  scale,
uint32_t  flags,
VPIPyramid pyr 
)

#include <vpi/Pyramid.h>

Create an empty image pyramid instance with the specified flags.

Pyramid data is zeroed.

Parameters
[in]width,heightDimensions of the finest pyramid level.
[in]numLevelsNumber of levels.
[in]scaleDownscale factor from one level and the next.
[in]fmtImage format of each level.
[in]flagsPyramid flags. Here it can be specified in what backends the pyramid can be used by or-ing together VPIBackend flags. Set flags to 0 to enable it in all backends supported by the active VPI context.
[out]pyrPointer to memory that will receive the created pyramid handle.
Returns
an error code on failure else VPI_SUCCESS

◆ vpiPyramidDestroy()

void vpiPyramidDestroy ( VPIPyramid  pyr)

#include <vpi/Pyramid.h>

Destroy an image pyramid instance as well as all resources it owns.

Parameters
[in]pyrpyramid handle

◆ vpiPyramidGetFlags()

VPIStatus vpiPyramidGetFlags ( VPIPyramid  pyr,
uint32_t *  flags 
)

#include <vpi/Pyramid.h>

Returns the flags associated with the pyramid.

Parameters
[in]pyrpyramid handle
[out]flagspointer to where the flags will be written.
Returns
VPI_SUCCESS if function was able to return the flags, or any other VPIStatus code in case of error.

◆ vpiPyramidGetFormat()

VPIStatus vpiPyramidGetFormat ( VPIPyramid  pyr,
VPIImageFormat fmt 
)

#include <vpi/Pyramid.h>

Returns the image format of the pyramid levels.

Parameters
[in]pyrpyramid handle
[out]fmtpointer to where the image format will be written.
Returns
VPI_SUCCESS if function was able to return the flags, or any other VPIStatus code in case of error.

◆ vpiPyramidGetNumLevels()

VPIStatus vpiPyramidGetNumLevels ( VPIPyramid  pyr,
int32_t *  numLevels 
)

#include <vpi/Pyramid.h>

Get the image pyramid level count.

Parameters
[in]pyran image pyramid handle
[out]numLevelsa pointer to a variable which will be set to the number of levels of the image pyramid
Returns
an error code on failure else VPI_SUCCESS

◆ vpiPyramidGetSize()

VPIStatus vpiPyramidGetSize ( VPIPyramid  pyr,
int32_t  outSize,
int32_t *  outWidth,
int32_t *  outHeight 
)

#include <vpi/Pyramid.h>

Get the image width and height in pixels (for all levels at once).

Parameters
[in]pyran image pyramid handle
[in]outSizesize of the output arrays, in elements.
[out]outWidth,outHeightPointers to a C array which will be filled widths and heights (respectively) of all image pyramid levels. If any of them is NULL, the corresponding data isn't returned.
Returns
an error code on failure else VPI_SUCCESS

◆ vpiPyramidLock()

VPIStatus vpiPyramidLock ( VPIPyramid  pyr,
VPILockMode  lock,
VPIPyramidData out 
)

#include <vpi/Pyramid.h>

Acquires the lock on a pyramid object and returns pointers to each level of the pyramid.

Depending on the internal image representation, as well as the actual location in memory, this function might have a significant performance overhead (format conversion, layout conversion, device-to-host memory copy).

Parameters
[in]pyran image pyramid handle
[in]locklock mode
[out]outa pointer to a structure that will receive the pyramid data to be accessed by host. If it's NULL, the pyramid will still be locked. This is useful to make sure wrapped image is updated.
Returns
an error code on failure else VPI_SUCCESS

◆ vpiPyramidUnlock()

VPIStatus vpiPyramidUnlock ( VPIPyramid  pyr)

#include <vpi/Pyramid.h>

Releases the lock on a image pyramid object.

This function might have a significant performance overhead (format conversion, layout conversion, host-to-device memory copy).

Parameters
[in]pyran image pyramid handle
Returns
an error code on failure else VPI_SUCCESS