From ee440aa927b9833f1df2a9443de73eb8f24f8f22 Mon Sep 17 00:00:00 2001 From: Thor Tomasarson Date: Tue, 3 Aug 2021 12:24:59 +0000 Subject: [PATCH] pylonsrc: add in the testimagesource parameter to allow for custom image source --- sys/pylon/gstpylonsrc.c | 41 +++++++++++++++++++++++++++++++++++++++++ sys/pylon/gstpylonsrc.h | 2 +- 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/sys/pylon/gstpylonsrc.c b/sys/pylon/gstpylonsrc.c index 0b54994..b021064 100644 --- a/sys/pylon/gstpylonsrc.c +++ b/sys/pylon/gstpylonsrc.c @@ -144,6 +144,7 @@ typedef enum _GST_PYLONSRC_PROP PROP_GAMMA, PROP_RESET, PROP_TESTIMAGE, + PROP_TESTIMAGESOURCE, PROP_CONTINUOUSMODE, PROP_PIXEL_FORMAT, PROP_USERID, @@ -340,6 +341,7 @@ ascii_strdown (gchar * *str, gssize len) #define DEFAULT_PROP_GAMMA 1.0 #define DEFAULT_PROP_RESET "off" #define DEFAULT_PROP_TESTIMAGE 0 +#define DEFAULT_PROP_TESTIMAGESOURCE "" #define DEFAULT_PROP_CONTINUOUSMODE TRUE #define DEFAULT_PROP_PIXEL_FORMAT "auto" #define DEFAULT_PROP_USERID "" @@ -588,6 +590,11 @@ gst_pylonsrc_class_init (GstPylonSrcClass * klass) "(1-6) Specifies a test image to show instead of a video stream. Useful for debugging. Will be disabled by default.", 0, 6, DEFAULT_PROP_TESTIMAGE, (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS))); + g_object_class_install_property (gobject_class, PROP_TESTIMAGESOURCE, + g_param_spec_string ("testimagesource", "Test image source", + "Specifies a test image (or image directory) to show instead of a video stream. Useful for debugging. Will be disabled by default.", + DEFAULT_PROP_TESTIMAGESOURCE, + (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS))); g_object_class_install_property (gobject_class, PROP_CONTINUOUSMODE, g_param_spec_boolean ("continuous", "Continuous mode", "(true/false) Used to switch between triggered and continuous mode. To switch to triggered mode this parameter has to be switched to false.", @@ -829,6 +836,7 @@ gst_pylonsrc_init (GstPylonSrc * src) src->cameraId = DEFAULT_PROP_CAMERA; src->maxBandwidth = DEFAULT_PROP_MAXBANDWIDTH; src->testImage = DEFAULT_PROP_TESTIMAGE; + src->testImageSource = g_strdup (DEFAULT_PROP_TESTIMAGESOURCE); src->sensorMode = g_strdup (DEFAULT_PROP_SENSORREADOUTMODE); src->lightsource = g_strdup (DEFAULT_PROP_LIGHTSOURCE); @@ -998,6 +1006,10 @@ gst_pylonsrc_set_property (GObject * object, guint property_id, case PROP_TESTIMAGE: src->testImage = g_value_get_int (value); break; + case PROP_TESTIMAGESOURCE: + g_free (src->testImageSource); + src->testImageSource = g_value_dup_string (value); + break; case PROP_SENSORREADOUTMODE: g_free (src->sensorMode); src->sensorMode = g_value_dup_string (value); @@ -1273,6 +1285,9 @@ gst_pylonsrc_get_property (GObject * object, guint property_id, case PROP_TESTIMAGE: g_value_set_int (value, src->testImage); break; + case PROP_TESTIMAGESOURCE: + g_value_set_string (value, src->testImageSource); + break; case PROP_SENSORREADOUTMODE: g_value_set_string (value, src->sensorMode); break; @@ -2156,6 +2171,31 @@ error: return FALSE; } +static gboolean +gst_pylonsrc_set_test_image_source (GstPylonSrc * src) +{ + if (is_prop_implicit (src, PROP_TESTIMAGESOURCE)) { + // Set whether test image will be shown + if (feature_supported (src, "ImageFilename")) { + GENAPIC_RESULT res; + res = PylonDeviceFeatureFromString(src->deviceHandle, "TestImageSelector", "Off"); + PYLONC_CHECK_ERROR(src, res); + /* Enable custom test images */ + res = PylonDeviceFeatureFromString(src->deviceHandle, "ImageFileMode", "On"); + PYLONC_CHECK_ERROR(src, res); + + GST_DEBUG_OBJECT (src, "Test image source enabled and set to %s", src->testImageSource); + res = PylonDeviceFeatureFromString(src->deviceHandle, "ImageFilename", src->testImageSource); + PYLONC_CHECK_ERROR (src, res); + } + reset_prop (src, PROP_TESTIMAGESOURCE); + } + return TRUE; + +error: + return FALSE; +} + static gboolean gst_pylonsrc_set_readout (GstPylonSrc * src) { @@ -4056,6 +4096,7 @@ gst_pylonsrc_set_properties (GstPylonSrc * src) gst_pylonsrc_set_reverse (src) && gst_pylonsrc_set_pixel_format (src) && gst_pylonsrc_set_test_image (src) && + gst_pylonsrc_set_test_image_source (src) && gst_pylonsrc_set_packetsize (src) && gst_pylonsrc_set_interPacketDelay (src) && gst_pylonsrc_set_frameTransDelay (src) && diff --git a/sys/pylon/gstpylonsrc.h b/sys/pylon/gstpylonsrc.h index 904e896..aed6aa5 100644 --- a/sys/pylon/gstpylonsrc.h +++ b/sys/pylon/gstpylonsrc.h @@ -108,7 +108,7 @@ struct _GstPylonSrc gint maxSize[2]; gint offset[2]; gchar *pixel_format, *sensorMode, *lightsource, *reset, *autoprofile, - *transformationselector, *userid; + *transformationselector, *userid, *testImageSource; gchar *autoFeature[GST_PYLONSRC_NUM_AUTO_FEATURES]; gchar *configFile; GST_PYLONSRC_PROPERTY_STATE propFlags[GST_PYLONSRC_NUM_PROPS];