This tutorial demonstrates how to stream an image from host (CPU) memory, to device (CUDA) memory.
The ImageStreamer module is accessed through a handle:
struct dwImageStreamerObject * dwImageStreamerHandle_t
Handle for image streamer.
Creating an Image
To create an image for streaming:
cpuProp.width = imageWidth;
cpuProp.height = imageHeight;
dwImageType type
Specifies the type of image.
struct dwImageObject * dwImageHandle_t
DW_API_PUBLIC dwStatus dwImage_create(dwImageHandle_t *const image, dwImageProperties properties, dwContextHandle_t const ctx)
Creates and allocates resources for a dwImageHandle_t based on the properties passed as input.
@ DW_IMAGE_MEMORY_TYPE_DEFAULT
the default memory layout for a given image type, can be either pitch or block
@ DW_IMAGE_FORMAT_RGB_UINT8
Not backed by NvSci.
Defines the properties of the image.
Initializing the ImageStreamer Module
Once an image is creating for streaming, an ImageStreamer must be initialized to stream the CPU image to CUDA.
In the following example, the dwImageStreamerHandle_t handle initializes the ImageCapture module to stream
an image with cpuProp
image properties to type dwImageCUDA:
DW_API_PUBLIC dwStatus dwImageStreamer_initialize(dwImageStreamerHandle_t *streamer, const dwImageProperties *from, dwImageType to, dwContextHandle_t ctx)
Creates and initializes the image streamer capable of moving images between different API types.
Streaming the Image
To stream the image:
DW_API_PUBLIC dwStatus dwImageStreamer_consumerReceive(dwImageHandle_t *image, dwTime_t const timeoutUs, dwImageStreamerHandle_t const streamer)
Receive a pointer to a dwImageHandle_t from the streamer, acting as a consumer.
DW_API_PUBLIC dwStatus dwImageStreamer_producerSend(dwImageHandle_t image, dwImageStreamerHandle_t const streamer)
Sends an image through the streamer acting as the producer.
Returning the Images
An image must be returned once streaming to CUDA memory is complete:
DW_API_PUBLIC dwStatus dwImageStreamer_consumerReturn(dwImageHandle_t *image, dwImageStreamerHandle_t const streamer)
Return the received image back to the producer.
DW_API_PUBLIC dwStatus dwImageStreamer_producerReturn(dwImageHandle_t *const image, dwTime_t const timeoutUs, dwImageStreamerHandle_t const streamer)
The producer streamer waits for the image sent to be returned by the consumer.
Releasing the Handle
To release the handle:
DW_API_PUBLIC dwStatus dwImageStreamer_release(dwImageStreamerHandle_t streamer)
Releases the image streamer.
To see a full demonstration of this workflow, please refer to Simple Image Streamer Sample.