Pyds.get_nvds_buf_surface SIGSEV

Hi,

I’m trying to pull the frames data out of the buffer and use them in the CPU by using n_frame=pyds.get_nvds_buf_surface. The function runs without any problem, but when I try to access the data inside the n_frame I encounter the SIGSEV error. After some search, according to Python DeepStream documentation and also deepstream-imagedata-multistream, I set the nvbuf-memory-type to cuda unified memory. The error changed to Bus error (core dumped) instead, which I believe is due to the fact that the CPU does not recognize the address type of the output.

Here is the pipeline I’m using:

export SRC=/opt/nvidia/deepstream/deepstream-5.1/
gst-launch-1.0 filesrc location= $SRC/samples/streams/sample_1080p_h264.mp4 ! qtdemux ! h264parse ! nvv4l2decoder cudadec-memtype=2 ! m.sink_0 nvstreammux name=m batch-size=1 width=1920 height=1080 nvbuf-memory-type=3 ! nvinfer config-file-path= $SRC/samples/configs/deepstream-app/config_infer_primary.txt batch-size=1 unique-id=1 ! nvtracker ll-lib-file=/opt/nvidia/deepstream/deepstream-5.1/lib/libnvds_mot_klt.so ! nvvideoconvert nvbuf-memory-type=3 ! ‘video/x-raw(memory:NVMM), format=RGBA’ ! nvvideoconvert nvbuf-memory-type=3 ! my_element

and in my_element (which is a sink element) I run these lines of code:

n_frame = pyds.get_nvds_buf_surface(hash(buffer), frame_meta.batch_id)
print(n_frame[0, :])

The function only works for one frame and then the bus error happens.

image

• Hardware Platform: GPU
• DeepStream Version: 5.1
• 7.2.2-1
• NVIDIA GPU Driver Version: 460.27.04
• Issue Type: bugs

I appreciate it if you could help me to fix the issue.
Thanks a lot.

Can you share your implementation of “my_element”?

@Fiona.Chen
Here you are:

import numpy as np
import gi
import pyds

gi.require_version("Gst", "1.0")
gi.require_version("GstBase", "1.0")

from gi.repository import Gst, GObject, GstBase

class MyElement(GstBase.BaseSink):
    GST_PLUGIN_NAME = "my_element"

    __gsttemplates__ = Gst.PadTemplate.new(
        "sink", Gst.PadDirection.SINK, Gst.PadPresence.ALWAYS, Gst.Caps.new_any()
    )

    def __init__(self) -> None:
        super().__init__()

    def do_render(self, buffer):
        Gst.info("timestamp(buffer):%s" % (Gst.TIME_ARGS(buffer.pts)))

        batch_meta = pyds.gst_buffer_get_nvds_batch_meta(hash(buffer))
        frame = self.get_frame_from_buffer(buffer, batch_meta)
        return Gst.FlowReturn.OK

    @staticmethod
    def get_frame_from_buffer(
        buffer: Gst.Buffer, batch_meta: pyds.NvDsBatchMeta) -> np.ndarray:
        np_frame = None
        l_frame = batch_meta.frame_meta_list
        while l_frame is not None:

            frame_meta = pyds.NvDsFrameMeta.cast(l_frame.data)
            np_frame = pyds.get_nvds_buf_surface(hash(buffer), frame_meta.batch_id)
            print(np_frame[0, :])

            try:
                l_frame = l_frame.next
            except StopIteration:
                break

        return np_frame

GObject.type_register(MyElement)
__gstelementfactory__ = (
    MyElement.GST_PLUGIN_NAME,
    Gst.Rank.NONE,
    MyElement,
)

elem.py (1.3 KB)

I should note that I have been able to run this code successfully by following the deepstream-imagedata-multistream on a Jetson NX device (without setting the nvbuf-memory-type).

So this pipeline can work on Jetson but failed with dGPU?

Yes, that’s true. I also encountered the same issue on dGPU when running the deepstream-imagedata-multistream itself.

Hi Aref, what dGPU model are you using? Please share the console output from running deepstream-imagedata-multistream. Thank you!

Hi @zhliunycm2 ,

I’m using NVIDIA GeForce GTX 960M. I suspected that the error is due to my GPU model and the fact that it is a laptop GPU. I’m planning to check again with an Nvidia GeForce GTX 1080 Ti.

Here is the output of running

export SRC=/opt/nvidia/deepstream/deepstream-5.1/
python3 deepstream_imagedata-multistream.py file://$SRC/samples/streams/sample_720p.mp4 frames

Frames will be saved in  frames
Creating Pipeline 
 
Creating streamux 
 
Creating source_bin  0  
 
Creating source bin
source-bin-00
Creating Pgie 
 
Creating nvvidconv1 
 
Creating filter1 
 
Creating tiler 
 
Creating nvvidconv 
 
Creating nvosd 
 
Creating EGLSink 

Adding elements to Pipeline 

Linking elements in the Pipeline 

Now playing...
1 :  file:///opt/nvidia/deepstream/deepstream-5.1//samples/streams/sample_720p.mp4
Starting pipeline 

0:00:00.845747471    71      0x19ec180 INFO                 nvinfer gstnvinfer.cpp:619:gst_nvinfer_logger:<primary-inference> NvDsInferContext[UID 1]: Info from NvDsInferContextImpl::deserializeEngineAndBackend() <nvdsinfer_context_impl.cpp:1702> [UID = 1]: deserialized trt engine from :/opt/nvidia/deepstream/deepstream-5.1/samples/models/Primary_Detector/resnet10.caffemodel_b1_gpu0_fp32.engine
INFO: ../nvdsinfer/nvdsinfer_model_builder.cpp:685 [Implicit Engine Info]: layers num: 3
0   INPUT  kFLOAT input_1         3x368x640       
1   OUTPUT kFLOAT conv2d_bbox     16x23x40        
2   OUTPUT kFLOAT conv2d_cov/Sigmoid 4x23x40         

0:00:00.845873495    71      0x19ec180 INFO                 nvinfer gstnvinfer.cpp:619:gst_nvinfer_logger:<primary-inference> NvDsInferContext[UID 1]: Info from NvDsInferContextImpl::generateBackendContext() <nvdsinfer_context_impl.cpp:1806> [UID = 1]: Use deserialized engine model: /opt/nvidia/deepstream/deepstream-5.1/samples/models/Primary_Detector/resnet10.caffemodel_b1_gpu0_fp32.engine
0:00:00.846769526    71      0x19ec180 INFO                 nvinfer gstnvinfer_impl.cpp:313:notifyLoadModelStatus:<primary-inference> [UID 1]: Load new model:dstest_imagedata_config.txt sucessfully
Decodebin child added: source 

Decodebin child added: decodebin0 

Decodebin child added: qtdemux0 

Decodebin child added: multiqueue0 

Decodebin child added: h264parse0 

Decodebin child added: capsfilter0 

Decodebin child added: aacparse0 

Decodebin child added: avdec_aac0 

Decodebin child added: nvv4l2decoder0 

In cb_newpad

In cb_newpad

Frame Number= 0 Number of Objects= 8 Vehicle_count= 6 Person_count= 2
Frame Number= 1 Number of Objects= 7 Vehicle_count= 5 Person_count= 2
Frame Number= 2 Number of Objects= 7 Vehicle_count= 5 Person_count= 2
Frame Number= 3 Number of Objects= 7 Vehicle_count= 4 Person_count= 3
Frame Number= 4 Number of Objects= 8 Vehicle_count= 6 Person_count= 2
Frame Number= 5 Number of Objects= 5 Vehicle_count= 3 Person_count= 2
Frame Number= 6 Number of Objects= 5 Vehicle_count= 3 Person_count= 2
Frame Number= 7 Number of Objects= 6 Vehicle_count= 4 Person_count= 2
Frame Number= 8 Number of Objects= 6 Vehicle_count= 4 Person_count= 2
Frame Number= 9 Number of Objects= 6 Vehicle_count= 4 Person_count= 2
Frame Number= 10 Number of Objects= 7 Vehicle_count= 5 Person_count= 2
Frame Number= 11 Number of Objects= 8 Vehicle_count= 6 Person_count= 2
Frame Number= 12 Number of Objects= 8 Vehicle_count= 6 Person_count= 2
Frame Number= 13 Number of Objects= 8 Vehicle_count= 6 Person_count= 2
Frame Number= 14 Number of Objects= 7 Vehicle_count= 5 Person_count= 2
Frame Number= 15 Number of Objects= 7 Vehicle_count= 5 Person_count= 2
Frame Number= 16 Number of Objects= 7 Vehicle_count= 5 Person_count= 2
Frame Number= 17 Number of Objects= 6 Vehicle_count= 4 Person_count= 2
Frame Number= 18 Number of Objects= 7 Vehicle_count= 5 Person_count= 2
Frame Number= 19 Number of Objects= 8 Vehicle_count= 6 Person_count= 2
Frame Number= 20 Number of Objects= 6 Vehicle_count= 4 Person_count= 2
Frame Number= 21 Number of Objects= 9 Vehicle_count= 6 Person_count= 3
Frame Number= 22 Number of Objects= 9 Vehicle_count= 7 Person_count= 2
Frame Number= 23 Number of Objects= 7 Vehicle_count= 5 Person_count= 2
Frame Number= 24 Number of Objects= 8 Vehicle_count= 6 Person_count= 2
Frame Number= 25 Number of Objects= 8 Vehicle_count= 6 Person_count= 2
Frame Number= 26 Number of Objects= 9 Vehicle_count= 7 Person_count= 2
Frame Number= 27 Number of Objects= 8 Vehicle_count= 6 Person_count= 2
Frame Number= 28 Number of Objects= 7 Vehicle_count= 5 Person_count= 2
Frame Number= 29 Number of Objects= 9 Vehicle_count= 7 Person_count= 2
Frame Number= 30 Number of Objects= 9 Vehicle_count= 6 Person_count= 3
Frame Number= 31 Number of Objects= 10 Vehicle_count= 7 Person_count= 3
Frame Number= 32 Number of Objects= 11 Vehicle_count= 8 Person_count= 3
Frame Number= 33 Number of Objects= 10 Vehicle_count= 8 Person_count= 2
Frame Number= 34 Number of Objects= 10 Vehicle_count= 8 Person_count= 2
Frame Number= 35 Number of Objects= 10 Vehicle_count= 8 Person_count= 2
Frame Number= 36 Number of Objects= 13 Vehicle_count= 9 Person_count= 4
Frame Number= 37 Number of Objects= 14 Vehicle_count= 10 Person_count= 4
Frame Number= 38 Number of Objects= 11 Vehicle_count= 8 Person_count= 3
Frame Number= 39 Number of Objects= 10 Vehicle_count= 8 Person_count= 2
Frame Number= 40 Number of Objects= 10 Vehicle_count= 7 Person_count= 3
Frame Number= 41 Number of Objects= 10 Vehicle_count= 8 Person_count= 2
Frame Number= 42 Number of Objects= 13 Vehicle_count= 10 Person_count= 3
Frame Number= 43 Number of Objects= 13 Vehicle_count= 9 Person_count= 4
Frame Number= 44 Number of Objects= 14 Vehicle_count= 10 Person_count= 4
Frame Number= 45 Number of Objects= 12 Vehicle_count= 9 Person_count= 3
Frame Number= 46 Number of Objects= 9 Vehicle_count= 6 Person_count= 3
Frame Number= 47 Number of Objects= 9 Vehicle_count= 6 Person_count= 3
Frame Number= 48 Number of Objects= 10 Vehicle_count= 6 Person_count= 4
Frame Number= 49 Number of Objects= 9 Vehicle_count= 6 Person_count= 3
Frame Number= 50 Number of Objects= 10 Vehicle_count= 7 Person_count= 3
Frame Number= 51 Number of Objects= 11 Vehicle_count= 8 Person_count= 3
Frame Number= 52 Number of Objects= 9 Vehicle_count= 6 Person_count= 3
Frame Number= 53 Number of Objects= 9 Vehicle_count= 6 Person_count= 3
Frame Number= 54 Number of Objects= 10 Vehicle_count= 7 Person_count= 3
Frame Number= 55 Number of Objects= 10 Vehicle_count= 7 Person_count= 3
Frame Number= 56 Number of Objects= 11 Vehicle_count= 8 Person_count= 3
Frame Number= 57 Number of Objects= 11 Vehicle_count= 8 Person_count= 3
Frame Number= 58 Number of Objects= 13 Vehicle_count= 10 Person_count= 3
Frame Number= 59 Number of Objects= 12 Vehicle_count= 9 Person_count= 3
A print just before pyds.get_nvds_buf_surface
Bus error (core dumped)

I just added a print right before the line that causes the error.

Thanks.

@Aref Can you share your application script with the new element? We need to reproduce your problem in out platform.

Hi @Aref, have you tried the GTX 1080 Ti yet? Is this resolved for you?

Hi. @zhliunycm2

Sorry for my delayed response. One of my colleagues reported that he could run the deepstream-imagedata-multistream on GTX 1080 Ti with no problem, so I concluded that the error was due to my GPU model.

Many thanks for your follow-up.