Please provide complete information as applicable to your setup.
• Hardware Platform (Jetson / GPU) GPU
• DeepStream Version 6.2*
• Issue Type( questions, new requirements, bugs) error
While attempting to extract a JPEG image within a probe, I encountered a segmentation fault
Pipeline code
def make_element( element, name):
logger.info(f"creating element {element} ----- {name}")
element = Gst.ElementFactory.make(element, name)
if not element:
logger.error(f" Unable to create {element} ----- {name}")
return element
Gst.init(None)
pipeline = Gst.Pipeline()
logger.info("Creating Pipeline")
if not pipeline:
logger.error("Unable to initialize Pipeline")
streammux = make_element("nvstreammux", "Stream-muxer")
pipeline.add(streammux)
for idx, uri in stream_list.items():
logger.info(f"Creating source_bin for uri {uri} ID {idx}")
# Create first source bin and add to pipeline
source_bin = create_uridecode_bin(idx, uri)
logger.info("Creating source_bin")
if not source_bin:
logger.error(f"Failed to create source bin for uri {uri} ID {idx}.")
# API hit fot not connecting
else:
pipeline.add(source_bin)
# queue1 = make_element("queue", "queue1")
# pipeline.add(queue1)
streammux.set_property("batched-push-timeout", 25000)
streammux.set_property("batch-size", MAX_SOURCE)
streammux.set_property("gpu_id", gpu_id)
streammux.set_property("live-source", 1) # need to check
streammux.set_property('width', frame_width)
streammux.set_property('height', frame_height)
pgie = make_element("nvinfer", "primary-inference")
pgie.set_property('config-file-path', "model_config.txt")
pgie.set_property("gpu_id", gpu_id)
pgie.set_property("batch-size", MAX_SOURCE)
pipeline.add(pgie)
nvvidconv = make_element("nvvideoconvert", "convertor")
nvvidconv.set_property("gpu_id", gpu_id)
pipeline.add(nvvidconv)
caps = Gst.Caps.from_string("video/x-raw(memory:NVMM), format=RGBA")
filter = make_element("capsfilter", "filter")
filter.set_property("caps", caps)
pipeline.add(filter)
encoder = make_element("jpegenc", "encoder")
pipeline.add(encoder)
tee = make_element("tee", "tee")
# nvstreamdemux = make_element("nvstreamdemux", "nvstreamdemux")
pipeline.add(tee)
if (not is_aarch64()):
# sink.set_property("gpu_id", gpu_id)
mem_type = int(pyds.NVBUF_MEM_CUDA_UNIFIED)
# streammux.set_property("nvbuf-memory-type", mem_type)
nvvidconv.set_property("nvbuf-memory-type", mem_type)
streammux.set_property("nvbuf-memory-type", int(pyds.NVBUF_MEM_CUDA_DEVICE))
streammux.link(pgie)
pgie.link(nvvidconv)
nvvidconv.link(encoder)
encoder.link(tee)
for ID, uri in stream_list.items():
# creating queue
queue = make_element("queue", f"queue-{ID}")
queue.set_property("leaky", 2)
pipeline.add(queue)
sink = make_element("filesink", f"filesink-{ID}")
sink.set_property("location", "image_%05d.jpg")
pipeline.add(sink)
# connect tee -> queue
padname = "src_%u" % ID
teesrcpad = tee.get_request_pad(padname)
if not teesrcpad:
logger.error("Unable to create demux src pad ")
queuesinkpad = queue.get_static_pad("sink")
if not queuesinkpad:
logger.error("Unable to create queue sink pad ")
teesrcpad.link(queuesinkpad)
# connect queue -> fakesink
queue.link(sink)
sinkpad = sink.get_static_pad("sink")
prob_func = partial(sink_pad_buffer_probe, ID=ID)
sinkpad.add_probe(Gst.PadProbeType.BUFFER, prob_func, 0)
probe code
def osd_sink_pad_buffer_probe( pad, info,udata, ID=0):
gst_buffer = info.get_buffer()
if not gst_buffer:
logger.error("Unable to get GstBuffer ")
return
batch_meta = pyds.gst_buffer_get_nvds_batch_meta(hash(gst_buffer))
if not batch_meta:
return Gst.PadProbeReturn.OK
l_frame = batch_meta.frame_meta_list
while l_frame is not None:
try:
frame_meta = pyds.NvDsFrameMeta.cast(l_frame.data)
except StopIteration:
logger.error("debug1------------------------------->at the except ")
continue
source_id = frame_meta.source_id
print("debug------------->", source_id, frame_meta.source_frame_height)
n_frame = pyds.get_nvds_buf_surface(hash(gst_buffer), frame_meta.batch_id)
print(type(n_frame))
try:
l_frame = l_frame.next
except StopIteration:
break