Nvbufsurface: mapping of memory type (0) not supported when accessing frame

Continuing the discussion from RTSP camera access frame issue:

Please provide complete information as applicable to your setup.

• Hardware Platform (Jetson / GPU) GPU
• DeepStream Version 5.0
• TensorRT Version 7
• NVIDIA GPU Driver Version (valid for GPU only) 440
• Issue Type( questions, new requirements, bugs) question

I’m trying to save the frame in deepstream-app as per RTSP camera access frame issue - #19 by DaneLLL, but getting the following error.

I’ve tried the above code in gie_processing_done_buf_prob and analytics_done_buf_prob, but getting the same error.

Batch Size : 1, resolution : 1280x720 
nvbufsurface: mapping of memory type (0) not supported
terminate called after throwing an instance of 'cv::Exception'
  what():  OpenCV(4.2.0-openvino) /opt/intel/openvino_2020.1.023/opencv//include/opencv2/core/mat.inl.hpp:548: error: (-215:Assertion failed) total() == 0 || data != NULL in function 'Mat'

The config is

[application]
enable-perf-measurement=1
perf-measurement-interval-sec=5
#gie-kitti-output-dir=streamscl

[tiled-display]
enable=1
rows=1
columns=1
width=1280
height=720
gpu-id=0
#(0): nvbuf-mem-default - Default memory allocated, specific to particular platform
#(1): nvbuf-mem-cuda-pinned - Allocate Pinned/Host cuda memory, applicable for Tesla
#(2): nvbuf-mem-cuda-device - Allocate Device cuda memory, applicable for Tesla
#(3): nvbuf-mem-cuda-unified - Allocate Unified cuda memory, applicable for Tesla
#(4): nvbuf-mem-surface-array - Allocate Surface Array memory, applicable for Jetson
nvbuf-memory-type=0

[source0]
enable=1
#Type - 1=CameraV4L2 2=URI 3=MultiURI
type=3
uri=file:///opt/nvidia/deepstream/deepstream/samples/streams/sample_720p.h264
num-sources=1
gpu-id=0
# (0): memtype_device   - Memory type Device
# (1): memtype_pinned   - Memory type Host Pinned
# (2): memtype_unified  - Memory type Unified
cudadec-memtype=0

[sink0]
enable=1
# 1=Fakesink, 2=EGL (nveglglessink), 3=Filesink, 4=RTSP, 5=Overlay (Jetson only)
type=3
#1=mp4 2=mkv
container=1
#1=h264 2=h265
codec=1
#encoder type 0=Hardware 1=Software
enc-type=0
sync=0
#iframeinterval=10
bitrate=2000000
#H264 Profile - 0=Baseline 2=Main 4=High
#H265 Profile - 0=Main 1=Main10
profile=0
output-file=out.mp4
source-id=0

[osd]
enable=1
gpu-id=0
border-width=1
text-size=15
text-color=1;1;1;1;
text-bg-color=0.3;0.3;0.3;1
font=Serif
show-clock=0
clock-x-offset=800
clock-y-offset=820
clock-text-size=12
clock-color=1;0;0;0
nvbuf-memory-type=0

[streammux]
gpu-id=0
##Boolean property to inform muxer that sources are live
live-source=0
batch-size=1
##time out in usec, to wait after the first buffer is available
##to push the batch even if the complete batch is not formed
batched-push-timeout=40000
## Set muxer output width and height
width=1280
height=720
##Enable to maintain aspect ratio wrt source, and allow black borders, works
##along with width, height properties
enable-padding=0
nvbuf-memory-type=0

# config-file property is mandatory for any gie section.
# Other properties are optional and if set will override the properties set in
# the infer config file.
[primary-gie]
enable=1
gpu-id=0
#interval=2
gie-unique-id=1
nvbuf-memory-type=0
config-file=dstensor_pgie_config.txt

[tracker]
enable=1
# For the case of NvDCF tracker, tracker-width and tracker-height must be a multiple of 32, respectively
tracker-width=640
tracker-height=384
#ll-lib-file=/opt/nvidia/deepstream/deepstream-5.0/lib/libnvds_mot_iou.so
ll-lib-file=/opt/nvidia/deepstream/deepstream-5.0/lib/libnvds_nvdcf.so
#ll-lib-file=/opt/nvidia/deepstream/deepstream-5.0/lib/libnvds_mot_klt.so
#ll-config-file required for DCF/IOU only
ll-config-file=tracker_config.yml
#ll-config-file=iou_config.txt
gpu-id=0
#enable-batch-process applicable to DCF only
enable-batch-process=1

[secondary-gie0]
enable=1
gpu-id=0
gie-unique-id=2
operate-on-gie-id=1
operate-on-class-ids=2;
config-file=dstensor_sgie1_config.txt

[secondary-gie1]
enable=1
gpu-id=0
gie-unique-id=3
operate-on-gie-id=1
operate-on-class-ids=0;
config-file=dstensor_sgie2_config.txt

[secondary-gie2]
enable=1
gpu-id=0
gie-unique-id=4
operate-on-gie-id=1
operate-on-class-ids=2;
config-file=dstensor_sgie3_config.txt

[tests]
file-loop=0

Hi,
Please set nvbuf-memory-type=3 and try again. For dGPU platforms, we have seen a similar issue:

Hi @DaneLLL, where do I put nvbuf-memory-type=3 in config file, because if I put it in [streammux] only, it doesn’t work (gives another error).

I got it working by modifying the code:

from

nvbufsurface_create_params.memType = NVBUF_MEM_DEFAULT

to

nvbufsurface_create_params.memType = NVBUF_MEM_CUDA_UNIFIED

Also, after running the deepstream-app for few hours on RTSP, I encountered the following issue:

GPUassert: an illegal memory access was encountered src/modules/cuDCF/cudaCropScaleInTexture2D.cu 1254 
Cuda failure: status=700 
Cuda failure: status=700 in DeleteTextureObj at line 2558 
nvbufsurface: NvBufSurfaceMemSet: Invalid arguments 
NvBufSurfTransform failed with error -3 while converting buffer 
nvbufsurface: invalid argument 
Segmentation fault (core dumped)

Any idea what could be the cause?

Hi,
Could you check if the issue is present if you enable dsexample plugin. The patch is similar to the demo code in dsexample. Would like to know if it works. Please follow README to enable it for a try:

/opt/nvidia/deepstream/deepstream-5.0/sources/gst-plugins/gst-dsexample/README

Okay, will enable it and get back to you.