MCPcopy Create free account
hub / github.com/CVCUDA/CV-CUDA / StartTest

Function StartTest

tests/cvcuda/system/TestOpCopyMakeBorder.cpp:248–321  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

246
247template<typename T>
248void StartTest(int srcWidth, int srcHeight, int numBatches, int topPad, int bottomPad, int leftPad, int rightPad,
249 NVCVBorderType borderType, float4 borderValue, nvcv::ImageFormat format)
250{
251 cudaStream_t stream;
252 ASSERT_EQ(cudaSuccess, cudaStreamCreate(&stream));
253
254 int dstWidth = srcWidth + leftPad + rightPad;
255 int dstHeight = srcHeight + topPad + bottomPad;
256
257 std::vector<T> srcVec;
258
259 nvcv::Tensor imgSrc(numBatches, {srcWidth, srcHeight}, format);
260 auto srcData = imgSrc.exportData<nvcv::TensorDataStridedCuda>();
261 ASSERT_NE(nullptr, srcData);
262 auto srcAccess = nvcv::TensorDataAccessStridedImagePlanar::Create(*srcData);
263 ASSERT_TRUE(srcData);
264 int srcBufSize = (srcAccess->sampleStride() / sizeof(T)) * srcAccess->numSamples();
265 srcVec.resize(srcBufSize);
266
267 std::default_random_engine randEng{0};
268 std::uniform_int_distribution<uint8_t> srcRand{0u, 255u};
269 if (std::is_same<T, float>::value)
270 std::generate(srcVec.begin(), srcVec.end(), [&]() { return srcRand(randEng) / 255.0f; });
271 else
272 std::generate(srcVec.begin(), srcVec.end(), [&]() { return srcRand(randEng); });
273
274 // Copy each input image with random data to the GPU
275 ASSERT_EQ(cudaSuccess, cudaMemcpyAsync(srcData->basePtr(), srcVec.data(), srcBufSize * sizeof(T),
276 cudaMemcpyHostToDevice, stream));
277
278 nvcv::Tensor imgDst(numBatches, {dstWidth, dstHeight}, format);
279 auto dstData = imgDst.exportData<nvcv::TensorDataStridedCuda>();
280 ASSERT_NE(nullptr, dstData);
281 auto dstAccess = nvcv::TensorDataAccessStridedImagePlanar::Create(*dstData);
282 ASSERT_TRUE(dstData);
283 int dstBufSize = (dstAccess->sampleStride() / sizeof(T)) * dstAccess->numSamples();
284 ASSERT_EQ(cudaSuccess, cudaMemsetAsync(dstData->basePtr(), 0, dstBufSize * sizeof(T), stream));
285
286 std::vector<T> testVec(dstBufSize);
287 std::vector<T> goldVec(dstBufSize);
288
289 int srcPixPitch = srcAccess->numChannels();
290 int srcRowStride = srcAccess->rowStride() / sizeof(T);
291 int srcImgPitch = srcAccess->sampleStride() / sizeof(T);
292
293 // Generate gold result
294 CopyMakeBorder(goldVec, srcVec, *dstAccess, srcWidth, srcHeight, srcRowStride, srcPixPitch, srcImgPitch, topPad,
295 leftPad, borderType, borderValue);
296
297 // Generate test result
298 cvcuda::CopyMakeBorder cpyMakeBorderOp;
299
300 EXPECT_NO_THROW(cpyMakeBorderOp(stream, imgSrc, imgDst, topPad, leftPad, borderType, borderValue));
301
302 // Get test data back
303 ASSERT_EQ(cudaSuccess, cudaStreamSynchronize(stream));
304 ASSERT_EQ(cudaSuccess, cudaStreamDestroy(stream));
305 ASSERT_EQ(cudaSuccess,

Callers

nothing calls this directly

Calls 10

sampleStrideMethod · 0.80
CopyMakeBorderFunction · 0.70
numSamplesMethod · 0.45
resizeMethod · 0.45
beginMethod · 0.45
endMethod · 0.45
basePtrMethod · 0.45
dataMethod · 0.45
numChannelsMethod · 0.45
rowStrideMethod · 0.45

Tested by

no test coverage detected