cd /opt/nvidia/vpi2/samples
cat > demo.cpp << 'EOF'
#include <stdlib.h>
#include <unistd.h>
#include <opencv2/opencv.hpp>
#include <vpi/OpenCVInterop.hpp>
#include <vpi/Image.h>
#include <vpi/Status.h>
#include <vpi/Stream.h>
#include <vpi/algo/ConvertImageFormat.h>
#include <vpi/algo/Rescale.h>
#include <cassert>
#include <cstring> // for memset
#include <iostream>
#include <sstream>
#define CHECK_STATUS(STMT) \
do \
{ \
VPIStatus status = (STMT); \
if (status != VPI_SUCCESS) \
{ \
char buffer[VPI_MAX_STATUS_MESSAGE_LENGTH]; \
vpiGetLastStatusMessage(buffer, sizeof(buffer)); \
std::ostringstream ss; \
ss << vpiStatusGetName(status) << ": " << buffer; \
throw std::runtime_error(ss.str()); \
} \
} while (0);
int main(int argc, char *argv[])
{
cv::Mat cvImage;
VPIImage image = NULL;
VPIImage imageNV12 = NULL;
VPIImage outputNV12 = NULL;
VPIImage output = NULL;
VPIStream stream = NULL;
int retval = 0;
std::string strInputFileName = argv[1];
cvImage = cv::imread(strInputFileName);
if (cvImage.empty())
{
throw std::runtime_error("Can't open '" + strInputFileName + "'");
}
cv::Mat rgbaImage;
cv::cvtColor(cvImage, rgbaImage, cv::COLOR_RGB2RGBA);
VPIBackend backend;
backend = VPI_BACKEND_VIC;
CHECK_STATUS(vpiStreamCreate(backend | VPI_BACKEND_CUDA, &stream));
//CHECK_STATUS(vpiImageCreateWrapperOpenCVMat(rgbaImage, 0, &image));
//CHECK_STATUS(vpiImageCreateWrapperOpenCVMat(cvImage, 0, &image));
CHECK_STATUS(vpiImageCreate(cvImage.cols, cvImage.rows, VPI_IMAGE_FORMAT_BGR8, 0, &image));
CHECK_STATUS(vpiImageCreate(cvImage.cols, cvImage.rows, VPI_IMAGE_FORMAT_NV12_ER, 0, &imageNV12));
//CHECK_STATUS(vpiImageCreate(cvImage.cols, cvImage.rows, VPI_IMAGE_FORMAT_NV12, 0, &imageNV12));
while(1)
{
CHECK_STATUS(vpiSubmitConvertImageFormat(stream, VPI_BACKEND_CUDA, image, imageNV12, NULL));
//CHECK_STATUS(vpiSubmitConvertImageFormat(stream, VPI_BACKEND_VIC, image, imageNV12, NULL));
CHECK_STATUS(vpiStreamSync(stream));
}
vpiStreamSync(stream);
vpiImageDestroy(image);
vpiImageDestroy(imageNV12);
vpiStreamDestroy(stream);
return retval;
}
EOF
g++ -o demo demo.cpp -I /opt/nvidia/vpi2/include \
-L /opt/nvidia/vpi2/lib64 -lnvvpi \
-Wl,-rpath=/opt/nvidia/vpi2/lib64 `pkg-config --cflags --libs opencv4`
cd /opt/nvidia/vpi2/samples
./demo ../share/backgrounds/NVIDIA_700_DarkBG.png
top - 20:16:44 up 3 days, 22:10, 0 users, load average: 1.59, 1.41, 1.54
Tasks: 469 total, 3 running, 458 sleeping, 1 stopped, 7 zombie
%Cpu(s): 8.7 us, 8.5 sy, 0.0 ni, 82.1 id, 0.0 wa, 0.6 hi, 0.1 si, 0.0 st
MiB Mem : 30587.4 total, 14196.6 free, 5991.2 used, 10399.5 buff/cache
MiB Swap: 15293.7 total, 14898.4 free, 395.2 used. 23380.3 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
7259 nvidia 20 0 47.4g 278064 153156 S 62.4 0.9 0:18.47 demo