#define DEFAULT_EOS_SHUTDOWN FALSE
#define DEFAULT_BUFFER_SIZE 0x80000
#define DEFAULT_MULTICAST_GROUP "224.2.0.1"
+#define DEFAULT_MTU 0
/* define to dump received RTCP packets */
#undef DUMP_STATS
PROP_EOS_SHUTDOWN,
PROP_BUFFER_SIZE,
PROP_MULTICAST_GROUP,
+ PROP_MTU,
PROP_LAST
};
static void finish_unprepare (GstRTSPMedia * media);
static gboolean default_unprepare (GstRTSPMedia * media);
static void unlock_streams (GstRTSPMedia * media);
-static void default_handle_mtu (GstRTSPMedia * media, guint mtu);
static guint gst_rtsp_media_signals[SIGNAL_LAST] = { 0 };
"The Multicast group to send media to",
DEFAULT_MULTICAST_GROUP, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property (gobject_class, PROP_MTU,
+ g_param_spec_uint ("mtu", "MTU",
+ "The MTU for the payloaders (0 = default)",
+ 0, G_MAXUINT, DEFAULT_MTU,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
gst_rtsp_media_signals[SIGNAL_PREPARED] =
g_signal_new ("prepared", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GstRTSPMediaClass, prepared), NULL, NULL,
klass->handle_message = default_handle_message;
klass->unprepare = default_unprepare;
- klass->handle_mtu = default_handle_mtu;
}
static void
case PROP_MULTICAST_GROUP:
g_value_take_string (value, gst_rtsp_media_get_multicast_group (media));
break;
+ case PROP_MTU:
+ g_value_set_uint (value, gst_rtsp_media_get_mtu (media));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, propid, pspec);
}
case PROP_MULTICAST_GROUP:
gst_rtsp_media_set_multicast_group (media, g_value_get_string (value));
break;
+ case PROP_MTU:
+ gst_rtsp_media_set_mtu (media, g_value_get_uint (value));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, propid, pspec);
}
}
/**
+ * gst_rtsp_media_set_mtu:
+ * @media: a #GstRTSPMedia
+ * @mtu: a new MTU
+ *
+ * Set maximum size of one RTP packet on the payloaders.
+ * The @mtu will be set on all streams.
+ */
+void
+gst_rtsp_media_set_mtu (GstRTSPMedia * media, guint mtu)
+{
+ gint i;
+
+ g_return_if_fail (GST_IS_RTSP_MEDIA (media));
+
+ media->mtu = mtu;
+ for (i = 0; i < media->streams->len; i++) {
+ GstRTSPStream *stream;
+
+ GST_INFO ("Setting mtu %u for stream %d", mtu, i);
+
+ stream = g_ptr_array_index (media->streams, i);
+ gst_rtsp_stream_set_mtu (stream, mtu);
+ }
+}
+
+/**
+ * gst_rtsp_media_get_mtu:
+ * @media: a #GstRTSPMedia
+ *
+ * Get the configured MTU.
+ */
+guint
+gst_rtsp_media_get_mtu (GstRTSPMedia * media)
+{
+ g_return_val_if_fail (GST_IS_RTSP_MEDIA (media), 0);
+
+ return media->mtu;
+}
+
+/**
* gst_rtsp_media_collect_streams:
* @media: a #GstRTSPMedia
*
g_free (name);
stream = gst_rtsp_stream_new (idx, payloader, srcpad);
+ if (media->mtu)
+ gst_rtsp_stream_set_mtu (stream, media->mtu);
g_ptr_array_add (media->streams, stream);
return TRUE;
}
-
-static void
-default_handle_mtu (GstRTSPMedia * media, guint mtu)
-{
- gint i;
-
- for (i = 0; i < media->streams->len; i++) {
- GstRTSPStream *stream;
-
- GST_INFO ("Setting mtu %d for stream %d", mtu, i);
-
- stream = g_ptr_array_index (media->streams, i);
-
- g_object_set (G_OBJECT (stream->payloader), "mtu", mtu, NULL);
- }
-}
-
-/**
- * gst_rtsp_media_handle_mtu:
- * @media: a #GstRTSPMedia
- * @mtu: the mtu
- *
- * Set maximum size of one RTP packet on the payloaders.
- */
-void
-gst_rtsp_media_handle_mtu (GstRTSPMedia * media, guint mtu)
-{
- GstRTSPMediaClass *klass;
-
- klass = GST_RTSP_MEDIA_GET_CLASS (media);
-
- if (klass->handle_mtu)
- klass->handle_mtu (media, mtu);
-}
guint buffer_size;
GstRTSPAuth *auth;
gchar *multicast_group;
+ guint mtu;
GstElement *element;
GPtrArray *streams;
/* vmethods */
gboolean (*handle_message) (GstRTSPMedia *media, GstMessage *message);
gboolean (*unprepare) (GstRTSPMedia *media);
- void (*handle_mtu) (GstRTSPMedia *media, guint mtu);
/* signals */
gboolean (*prepared) (GstRTSPMedia *media);
void gst_rtsp_media_set_multicast_group (GstRTSPMedia *media, const gchar * mc);
gchar * gst_rtsp_media_get_multicast_group (GstRTSPMedia *media);
+void gst_rtsp_media_set_mtu (GstRTSPMedia *media, guint mtu);
+guint gst_rtsp_media_get_mtu (GstRTSPMedia *media);
+
/* prepare the media for playback */
gboolean gst_rtsp_media_prepare (GstRTSPMedia *media);
gboolean gst_rtsp_media_set_state (GstRTSPMedia *media, GstState state,
GPtrArray *transports);
-void gst_rtsp_media_handle_mtu (GstRTSPMedia *media, guint mtu);
-
G_END_DECLS
#endif /* __GST_RTSP_MEDIA_H__ */
return stream;
}
+/**
+ * gst_rtsp_stream_set_mtu:
+ * @stream: a #GstRTSPStream
+ * @mtu: a new MTU
+ *
+ * Configure the mtu in the payloader of @stream to @mtu.
+ */
+void
+gst_rtsp_stream_set_mtu (GstRTSPStream * stream, guint mtu)
+{
+ g_return_if_fail (GST_IS_RTSP_STREAM (stream));
+
+ g_object_set (G_OBJECT (stream->payloader), "mtu", mtu, NULL);
+}
+
+/**
+ * gst_rtsp_stream_get_mtu:
+ * @stream: a #GstRTSPStream
+ *
+ * Get the configured MTU in the payloader of @stream.
+ *
+ * Returns: the MTU of the payloader.
+ */
+guint
+gst_rtsp_stream_get_mtu (GstRTSPStream * stream)
+{
+ guint mtu;
+
+ g_return_val_if_fail (GST_IS_RTSP_STREAM (stream), 0);
+
+ g_object_get (G_OBJECT (stream->payloader), "mtu", &mtu, NULL);
+
+ return mtu;
+}
+
static gboolean
alloc_ports (GstRTSPStream * stream)
{