I’ve taken the “memcopy with cuda” approach, using a combination of GStreamerEGLStreamSinkFrameSourceImpl and NvMediaCSI10640CameraFrameSourceImpl as inspiration. It’s functional and performance is decent.
I am, however, having a stability issue. After running for a minute or two, I’ll receive a crash that looks like very deep recursion, like so:
#0 0x0000007fb6378e94 in ?? () from /usr/lib/aarch64-linux-gnu/tegra/libcuda.so.1
#1 0x0000007fb64130b4 in ?? () from /usr/lib/aarch64-linux-gnu/tegra/libcuda.so.1
#2 0x0000007fb646c068 in ?? () from /usr/lib/aarch64-linux-gnu/tegra/libcuda.so.1
#3 0x0000007fb6404bac in ?? () from /usr/lib/aarch64-linux-gnu/tegra/libcuda.so.1
#4 0x0000007fb6404fbc in ?? () from /usr/lib/aarch64-linux-gnu/tegra/libcuda.so.1
#5 0x0000007fb632882c in ?? () from /usr/lib/aarch64-linux-gnu/tegra/libcuda.so.1
#6 0x0000007fb633115c in ?? () from /usr/lib/aarch64-linux-gnu/tegra/libcuda.so.1
#7 0x0000007fb6460764 in cuMemcpy3D_v2 () from /usr/lib/aarch64-linux-gnu/tegra/libcuda.so.1
#8 0x00000000004dc178 in cudart::driverHelper::driverMemcpy3D(CUDA_MEMCPY3D_st*, CUstream_st*, bool, bool) ()
#9 0x00000000004da5b4 in cudart::arrayHelper::copyToDevice2D(CUmemorytype_enum, cudaArray const*, unsigned long, unsigned long, char*, unsigned long, unsigned long, unsigned long, unsigned long, CUstream_st*, bool, bool) ()
#10 0x00000000004dc02c in cudart::driverHelper::memcpy2DFromArray(char*, unsigned long, cudaArray const*, unsigned long, unsigned long, unsigned long, unsigned long, cudaMemcpyKind, CUstream_st*, bool, bool) ()
#11 0x00000000004dc02c in cudart::driverHelper::memcpy2DFromArray(char*, unsigned long, cudaArray const*, unsigned long, unsigned long, unsigned long, unsigned long, cudaMemcpyKind, CUstream_st*, bool, bool) ()
#12 0x00000000004dc02c in cudart::driverHelper::memcpy2DFromArray(char*, unsigned long, cudaArray const*, unsigned long, unsigned long, unsigned long, unsigned long, cudaMemcpyKind, CUstream_st*, bool, bool) ()
#13 0x00000000004dc02c in cudart::driverHelper::memcpy2DFromArray(char*, unsigned long, cudaArray const*, unsigned long, unsigned long, unsigned long, unsigned long, cudaMemcpyKind, CUstream_st*, bool, bool) ()
#14 0x00000000004dc02c in cudart::driverHelper::memcpy2DFromArray(char*, unsigned long, cudaArray const*, unsigned long, unsigned long, unsigned long, unsigned long, cudaMemcpyKind, CUstream_st*, bool, bool) ()
#15 0x00000000004dc02c in cudart::driverHelper::memcpy2DFromArray(char*, unsigned long, cudaArray const*, unsigned long, unsigned long, unsigned long, unsigned long, cudaMemcpyKind, CUstream_st*, bool, bool) ()
with thousands, and thousands of stacked up calls to cudart::driverHelper::memcpy2DFromArray. It’s a little odd, and it’s obviously crashing well inside the cuda library – do you have any suggestions as to how I might debug this? Are there typical things I can look for, flags I can flip, or logs I can look at that might give me a clue as to what I’m doing that’s causing this?