pleorasrc: add packet-size property
Also, if auto-negotiate (packet-size=0) is used (the default), and negotiation fails, use the safe packet size of 1476 bytes.
This commit is contained in:
parent
351aab12d8
commit
e4ae64b44b
@ -76,7 +76,8 @@ enum
|
|||||||
PROP_DETECTION_TIMEOUT,
|
PROP_DETECTION_TIMEOUT,
|
||||||
PROP_MULTICAST_GROUP,
|
PROP_MULTICAST_GROUP,
|
||||||
PROP_PORT,
|
PROP_PORT,
|
||||||
PROP_RECEIVER_ONLY
|
PROP_RECEIVER_ONLY,
|
||||||
|
PROP_PACKET_SIZE
|
||||||
};
|
};
|
||||||
|
|
||||||
#define DEFAULT_PROP_DEVICE ""
|
#define DEFAULT_PROP_DEVICE ""
|
||||||
@ -87,7 +88,7 @@ enum
|
|||||||
#define DEFAULT_PROP_MULTICAST_GROUP "0.0.0.0"
|
#define DEFAULT_PROP_MULTICAST_GROUP "0.0.0.0"
|
||||||
#define DEFAULT_PROP_PORT 1042
|
#define DEFAULT_PROP_PORT 1042
|
||||||
#define DEFAULT_PROP_RECEIVER_ONLY FALSE
|
#define DEFAULT_PROP_RECEIVER_ONLY FALSE
|
||||||
|
#define DEFAULT_PROP_PACKET_SIZE 0
|
||||||
|
|
||||||
#define VIDEO_CAPS_MAKE_BAYER8(format) \
|
#define VIDEO_CAPS_MAKE_BAYER8(format) \
|
||||||
"video/x-bayer, " \
|
"video/x-bayer, " \
|
||||||
@ -191,6 +192,11 @@ gst_pleorasrc_class_init (GstPleoraSrcClass * klass)
|
|||||||
"Only open video stream, don't open as controller",
|
"Only open video stream, don't open as controller",
|
||||||
DEFAULT_PROP_RECEIVER_ONLY,
|
DEFAULT_PROP_RECEIVER_ONLY,
|
||||||
(GParamFlags) (G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE)));
|
(GParamFlags) (G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE)));
|
||||||
|
g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_PACKET_SIZE,
|
||||||
|
g_param_spec_int ("packet-size", "Packet size",
|
||||||
|
"Packet size (0 to auto negotiate)", 0, 65535,
|
||||||
|
DEFAULT_PROP_PACKET_SIZE,
|
||||||
|
(GParamFlags) (G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE)));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -269,6 +275,9 @@ gst_pleorasrc_set_property (GObject * object, guint property_id,
|
|||||||
case PROP_RECEIVER_ONLY:
|
case PROP_RECEIVER_ONLY:
|
||||||
src->receiver_only = g_value_get_boolean (value);
|
src->receiver_only = g_value_get_boolean (value);
|
||||||
break;
|
break;
|
||||||
|
case PROP_PACKET_SIZE:
|
||||||
|
src->packet_size = g_value_get_int (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;
|
||||||
@ -309,6 +318,9 @@ gst_pleorasrc_get_property (GObject * object, guint property_id,
|
|||||||
case PROP_RECEIVER_ONLY:
|
case PROP_RECEIVER_ONLY:
|
||||||
g_value_set_boolean (value, src->receiver_only);
|
g_value_set_boolean (value, src->receiver_only);
|
||||||
break;
|
break;
|
||||||
|
case PROP_PACKET_SIZE:
|
||||||
|
g_value_set_int (value, src->packet_size);
|
||||||
|
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;
|
||||||
@ -622,14 +634,25 @@ gst_pleorasrc_setup_stream (GstPleoraSrc * src)
|
|||||||
const PvStreamGEV *lStreamGEV = static_cast < PvStreamGEV * >(src->stream);
|
const PvStreamGEV *lStreamGEV = static_cast < PvStreamGEV * >(src->stream);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Negotiate packet size
|
if (src->packet_size == 0) {
|
||||||
pvRes = lDeviceGEV->NegotiatePacketSize ();
|
/* Negotiate packet size, use safe default if it fails */
|
||||||
|
pvRes = lDeviceGEV->NegotiatePacketSize (0, 1476);
|
||||||
if (!pvRes.IsOK ()) {
|
if (!pvRes.IsOK ()) {
|
||||||
GST_ELEMENT_ERROR (src, RESOURCE, SETTINGS,
|
GST_ELEMENT_ERROR (src, RESOURCE, SETTINGS,
|
||||||
("Failed to negotiate packet size: %s",
|
("Failed to negotiate packet size: %s",
|
||||||
pvRes.GetDescription ().GetAscii ()), (NULL));
|
pvRes.GetDescription ().GetAscii ()), (NULL));
|
||||||
goto stream_config_failed;
|
goto stream_config_failed;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
pvRes = lDeviceGEV->SetPacketSize (src->packet_size);
|
||||||
|
if (!pvRes.IsOK ()) {
|
||||||
|
GST_ELEMENT_ERROR (src, RESOURCE, SETTINGS,
|
||||||
|
("Failed to set packet size to %d: %s", src->packet_size,
|
||||||
|
pvRes.GetDescription ().GetAscii ()), (NULL));
|
||||||
|
goto stream_config_failed;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Configure device streaming destination
|
// Configure device streaming destination
|
||||||
pvRes = lDeviceGEV->SetStreamDestination (lStreamGEV->GetLocalIPAddress (),
|
pvRes = lDeviceGEV->SetStreamDestination (lStreamGEV->GetLocalIPAddress (),
|
||||||
lStreamGEV->GetLocalPort ());
|
lStreamGEV->GetLocalPort ());
|
||||||
|
|||||||
@ -55,6 +55,7 @@ struct _GstPleoraSrc
|
|||||||
gchar *multicast_group;
|
gchar *multicast_group;
|
||||||
gint port;
|
gint port;
|
||||||
gboolean receiver_only;
|
gboolean receiver_only;
|
||||||
|
gint packet_size;
|
||||||
|
|
||||||
guint32 last_frame_count;
|
guint32 last_frame_count;
|
||||||
guint32 total_dropped_frames;
|
guint32 total_dropped_frames;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user