pleora: add support for sending/receiving KLV metadata as chunk data

This attemps to partially implement MISB ST1608.1, "Transport of Motion
Imagery and Metadata over GigE Vision". This relies on GstKLVMeta, which
is currently a merge request 124 for gst-plugins-base. For now we
include it here. Currently all KLVMeta is packed into one chunk, no
special handling of timestamps is done. Testing has only been done
between pleorasink and pleorasrc, no other MISB-compliant stream.
This commit is contained in:
Joshua M. Doe
2019-11-21 11:47:42 -05:00
parent f6509a1b4d
commit a92281c965
9 changed files with 674 additions and 10 deletions

View File

@@ -75,7 +75,8 @@ enum
PROP_VERSION,
PROP_INFO,
PROP_SERIAL,
PROP_MAC
PROP_MAC,
PROP_OUTPUT_KLV
};
#define DEFAULT_PROP_NUM_INTERNAL_BUFFERS 3
@@ -86,6 +87,7 @@ enum
#define DEFAULT_PROP_INFO "Pleora eBUS GStreamer Sink"
#define DEFAULT_PROP_SERIAL "0001"
#define DEFAULT_PROP_MAC ""
#define DEFAULT_PROP_OUTPUT_KLV TRUE
/* pad templates */
@@ -184,6 +186,12 @@ gst_pleorasink_class_init (GstPleoraSinkClass * klass)
DEFAULT_PROP_MAC,
(GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
GST_PARAM_MUTABLE_READY)));
g_object_class_install_property (gobject_class, PROP_OUTPUT_KLV,
g_param_spec_boolean ("output-klv", "Output KLV",
"Whether to output KLV as chunk data according to MISB ST1608",
DEFAULT_PROP_OUTPUT_KLV,
(GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
GST_PARAM_MUTABLE_READY)));
}
static void
@@ -198,6 +206,7 @@ gst_pleorasink_init (GstPleoraSink * sink)
sink->info = g_strdup (DEFAULT_PROP_INFO);
sink->serial = g_strdup (DEFAULT_PROP_SERIAL);
sink->mac = g_strdup (DEFAULT_PROP_MAC);
sink->output_klv = DEFAULT_PROP_OUTPUT_KLV;
sink->camera_connected = FALSE;
@@ -253,6 +262,10 @@ gst_pleorasink_set_property (GObject * object, guint property_id,
g_free (sink->mac);
sink->mac = g_strdup (g_value_get_string (value));
break;
case PROP_OUTPUT_KLV:
sink->output_klv = g_value_get_boolean (value);
sink->source->SetKlvEnabled (sink->output_klv);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
@@ -293,6 +306,9 @@ gst_pleorasink_get_property (GObject * object, guint property_id,
case PROP_MAC:
g_value_set_string (value, sink->mac);
break;
case PROP_OUTPUT_KLV:
g_value_set_boolean (value, sink->output_klv);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;