edtpdvsrc: add config-file property

This commit is contained in:
Joshua M. Doe 2013-11-14 14:02:17 -05:00
parent da31713498
commit 2357ea369f
2 changed files with 54 additions and 1 deletions

View File

@ -65,7 +65,8 @@ enum
{ {
PROP_0, PROP_0,
PROP_UNIT, PROP_UNIT,
PROP_CHANNEL PROP_CHANNEL,
PROP_CONFIG_FILE
}; };
#define DEFAULT_PROP_UNIT 0 #define DEFAULT_PROP_UNIT 0
@ -126,6 +127,12 @@ gst_edt_pdv_src_class_init (GstEdtPdvSrcClass * klass)
G_MAXUINT, DEFAULT_PROP_CHANNEL, G_MAXUINT, DEFAULT_PROP_CHANNEL,
(GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
GST_PARAM_MUTABLE_READY))); GST_PARAM_MUTABLE_READY)));
g_object_class_install_property (gobject_class, PROP_CONFIG_FILE,
g_param_spec_string ("config-file", "Config file",
"Camera configuration path (empty or NULL to use previous config)",
NULL,
(GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
GST_PARAM_MUTABLE_READY)));
} }
static void static void
@ -140,6 +147,7 @@ gst_edt_pdv_src_init (GstEdtPdvSrc * src)
/* initialize properties */ /* initialize properties */
src->unit = DEFAULT_PROP_UNIT; src->unit = DEFAULT_PROP_UNIT;
src->channel = DEFAULT_PROP_CHANNEL; src->channel = DEFAULT_PROP_CHANNEL;
src->config_file_path = NULL;
gst_edt_pdv_src_reset (src); gst_edt_pdv_src_reset (src);
} }
@ -167,6 +175,12 @@ gst_edt_pdv_src_set_property (GObject * object, guint property_id,
case PROP_CHANNEL: case PROP_CHANNEL:
src->channel = g_value_get_uint (value); src->channel = g_value_get_uint (value);
break; break;
case PROP_CONFIG_FILE:
if (src->config_file_path) {
g_free (src->config_file_path);
}
src->config_file_path = g_strdup (g_value_get_string (value));
break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break; break;
@ -189,6 +203,9 @@ gst_edt_pdv_src_get_property (GObject * object, guint property_id,
case PROP_CHANNEL: case PROP_CHANNEL:
g_value_set_uint (value, src->channel); g_value_set_uint (value, src->channel);
break; break;
case PROP_CONFIG_FILE:
g_value_set_string (value, src->config_file_path);
break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break; break;
@ -228,6 +245,41 @@ gst_edt_pdv_src_start (GstBaseSrc * bsrc)
GST_DEBUG_OBJECT (src, "start"); GST_DEBUG_OBJECT (src, "start");
if (src->config_file_path && strlen (src->config_file_path)) {
Dependent *dd_p;
Edtinfo edtinfo;
EdtDev *edt_p;
char bitdir[256];
*bitdir = '\0';
dd_p = pdv_alloc_dependent ();
g_assert (dd_p != NULL);
if (pdv_readcfg (src->config_file_path, dd_p, &edtinfo)) {
GST_ERROR_OBJECT (src, "Failed to read config file: '%s'",
src->config_file_path);
goto fail;
}
edt_p = edt_open_channel (EDT_INTERFACE, src->unit, src->channel);
if (edt_p == NULL) {
GST_ERROR_OBJECT (src, "Failed to open channel to perform configuration");
edt_perror ("error message");
free (dd_p);
goto fail;
}
if (pdv_initcam (edt_p, dd_p, src->unit, &edtinfo, src->config_file_path,
bitdir, 0)) {
GST_ERROR_OBJECT (src, "Failed to initialize camera");
free (dd_p);
edt_close (edt_p);
goto fail;
}
edt_close (edt_p);
}
src->dev = pdv_open_channel (EDT_INTERFACE, src->unit, src->channel); src->dev = pdv_open_channel (EDT_INTERFACE, src->unit, src->channel);
if (src->dev == NULL) { if (src->dev == NULL) {
GST_ERROR_OBJECT (src, "Failed to open EDT PDV unit %d channel %d)", GST_ERROR_OBJECT (src, "Failed to open EDT PDV unit %d channel %d)",

View File

@ -54,6 +54,7 @@ struct _GstEdtPdvSrc
/* properties */ /* properties */
guint unit; guint unit;
guint channel; guint channel;
gchar *config_file_path;
PdvDev *dev; PdvDev *dev;
gboolean acq_started; gboolean acq_started;