Segmentation fault (core dumped) + Smart-record: Recording from multiple-source C

• Hardware Platform (Jetson / GPU): RTX-2080Ti
• DeepStream Version: 5.1-devel

I need to save separate multi-RTSP at the same time. When I create multiple NvDsSRContext to recordbin for each of sources I got an error:

This is my pipeline:

Can you support to me?
Thanks.

Please tell us how to reproduce the coredump?

After entering one rtsp (or multi-rtsp), I meet early an error “Core Dump”.

I create struct NvDsSRContext to running four recordbin as the following snippet code:

typedef struct {
  NvDsSRContext *datax[MAX_NUMBER];
} DataCtx;

static gboolean
smart_record_event_generator (gpointer data)
{
  NvDsSRSessionId sessId = 0;
  guint startTime = START_TIME;
  guint duration = SMART_REC_DURATION;

  for (int i=0; i<MAX_NUMBER; i++){
    g_printerr ("___________________SOURCE-%02d____________________ \n", i);
    DataCtx *ctx = (DataCtx *) data;
    if (ctx->datax[i]->recordOn) {
      g_print ("Recording done.\n");
      if (NvDsSRStop (ctx->datax[i], 0) != NVDSSR_STATUS_OK)
        g_printerr ("Unable to stop recording\n");
    } else {
      g_print ("Recording started..\n");
      if (NvDsSRStart (ctx->datax[i], &sessId, startTime, duration,
              NULL) != NVDSSR_STATUS_OK)
        g_printerr ("Unable to start recording\n");
    }
  }
 
  return TRUE;
}

And snippet code in main part:

 DataCtx container;
 params.containerType = SMART_REC_CONTAINER;
 params.videoCacheSize = VIDEO_CACHE_SIZE;
 params.defaultDuration = SMART_REC_DEFAULT_DURATION;
 params.callback = smart_record_callback;

for (int i=0; i <num_sources; i++){
  g_printerr("_____Starting Recordbin--%d_____ \n", i);
  char temp[3];
  g_snprintf(temp, 2, "stream_%d",i);
  params.fileNamePrefix = (gchar *)temp;

  if (NvDsSRCreate (&container.datax[i], &params) != NVDSSR_STATUS_OK) {
    g_printerr ("Failed to create smart record bin");
    return -1;
  }
  encoder_post_osd = gst_element_factory_make ("nvv4l2h264enc", "encoder-post-osd");
  parser_post_osd = gst_element_factory_make ("h264parse", "parser-post-osd");
  queue_post_osd = gst_element_factory_make ("queue", "queue-post-osd");

  gst_bin_add_many (GST_BIN (pipeline), queue_post_osd, encoder_post_osd,
      parser_post_osd, container.datax[i]->recordbin, NULL);

  if (!gst_element_link_many (tee_post_osd, queue_post_osd, encoder_post_osd,
          parser_post_osd, container.datax[i]->recordbin, NULL)) {
     g_print ("Elements not linked. Exiting. \n");
    if(NvDsSRDestroy (container.datax[i]) != NVDSSR_STATUS_OK)
    g_printerr ("Unable to destroy recording instance\n");
  }
}  

  if (container.datax[i]) {
    g_timeout_add (SMART_REC_DURATION * 1000, smart_record_event_generator,
        container.datax[i]);
  }

}

Please debug your code. You need to make sure the coredump is caused by deepstream components.

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.