Skip to content

Commit 56edd65

Browse files
lc-spxlEmmanuelP
authored andcommitted
when TriggerMode = On do not exit if buffer is empty on gst pipeline create
1 parent 7f694f5 commit 56edd65

1 file changed

Lines changed: 38 additions & 2 deletions

File tree

gst/gstaravis.c

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -550,15 +550,51 @@ gst_aravis_create (GstPushSrc * push_src, GstBuffer ** buffer)
550550
gst_aravis = GST_ARAVIS (push_src);
551551
base_src_does_timestamp = gst_base_src_get_do_timestamp(GST_BASE_SRC(push_src));
552552

553+
// get trigger mode
554+
GError *error = NULL;
555+
556+
gboolean triggerModeEnabled = FALSE;
557+
gboolean triggerModeAvail = arv_device_is_feature_available (arv_camera_get_device (gst_aravis->camera), "TriggerMode", &error);
558+
559+
if (error != NULL) {
560+
GST_ERROR_OBJECT (gst_aravis, "Check TriggerMode avail failed: %d %s", error->code, error->message);
561+
return GST_FLOW_ERROR;
562+
}
563+
564+
if (triggerModeAvail) {
565+
566+
ArvGcNode *feature = arv_device_get_feature (arv_camera_get_device (gst_aravis->camera), "TriggerMode");
567+
const char *value = arv_gc_string_get_value (ARV_GC_STRING (feature), &error);
568+
569+
if (error != NULL) {
570+
GST_ERROR_OBJECT (gst_aravis, "Read TriggerMode failed: %d %s", error->code, error->message);
571+
return GST_FLOW_ERROR;
572+
}
573+
574+
triggerModeEnabled = strcmp(value, "On") == 0;
575+
if (triggerModeEnabled) {
576+
GST_LOG_OBJECT (gst_aravis, "TriggeMode is set to On, pipeline will wait for a stream.");
577+
}
578+
}
579+
553580
GST_OBJECT_LOCK (gst_aravis);
554581

555582
do {
556583
if (arv_buffer) arv_stream_push_buffer (gst_aravis->stream, arv_buffer);
557584
arv_buffer = arv_stream_timeout_pop_buffer (gst_aravis->stream, gst_aravis->buffer_timeout_us);
558-
} while (arv_buffer != NULL && arv_buffer_get_status (arv_buffer) != ARV_BUFFER_STATUS_SUCCESS);
559585

560-
if (arv_buffer == NULL)
586+
if (arv_buffer == NULL && triggerModeEnabled) {
587+
GST_DEBUG_OBJECT (gst_aravis, "Waiting for buffer");
588+
}
589+
590+
} while (
591+
(arv_buffer == NULL && triggerModeEnabled) ||
592+
(arv_buffer != NULL && arv_buffer_get_status (arv_buffer) != ARV_BUFFER_STATUS_SUCCESS)
593+
);
594+
595+
if (arv_buffer == NULL) {
561596
goto error;
597+
}
562598

563599
buffer_data = (char *) arv_buffer_get_data (arv_buffer, &buffer_size);
564600
arv_buffer_get_image_region (arv_buffer, NULL, NULL, &width, &height);

0 commit comments

Comments
 (0)