mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-10-03 01:02:19 +00:00
Update for GstURIHandler get_protocols() changes
This commit is contained in:
parent
7b80e0773f
commit
357d7bdfed
7 changed files with 98 additions and 63 deletions
|
@ -68,7 +68,7 @@ static gboolean gst_mms_do_seek (GstBaseSrc * src, GstSegment * segment);
|
||||||
static GstFlowReturn gst_mms_create (GstPushSrc * psrc, GstBuffer ** buf);
|
static GstFlowReturn gst_mms_create (GstPushSrc * psrc, GstBuffer ** buf);
|
||||||
|
|
||||||
static gboolean gst_mms_uri_set_uri (GstURIHandler * handler,
|
static gboolean gst_mms_uri_set_uri (GstURIHandler * handler,
|
||||||
const gchar * uri);
|
const gchar * uri, GError ** error);
|
||||||
|
|
||||||
#define gst_mms_parent_class parent_class
|
#define gst_mms_parent_class parent_class
|
||||||
G_DEFINE_TYPE_WITH_CODE (GstMMS, gst_mms, GST_TYPE_PUSH_SRC,
|
G_DEFINE_TYPE_WITH_CODE (GstMMS, gst_mms, GST_TYPE_PUSH_SRC,
|
||||||
|
@ -476,7 +476,7 @@ gst_mms_set_property (GObject * object, guint prop_id,
|
||||||
switch (prop_id) {
|
switch (prop_id) {
|
||||||
case PROP_LOCATION:
|
case PROP_LOCATION:
|
||||||
gst_mms_uri_set_uri (GST_URI_HANDLER (mmssrc),
|
gst_mms_uri_set_uri (GST_URI_HANDLER (mmssrc),
|
||||||
g_value_get_string (value));
|
g_value_get_string (value), NULL);
|
||||||
break;
|
break;
|
||||||
case PROP_CONNECTION_SPEED:
|
case PROP_CONNECTION_SPEED:
|
||||||
GST_OBJECT_LOCK (mmssrc);
|
GST_OBJECT_LOCK (mmssrc);
|
||||||
|
@ -528,20 +528,21 @@ gst_mms_uri_get_type (GType type)
|
||||||
return GST_URI_SRC;
|
return GST_URI_SRC;
|
||||||
}
|
}
|
||||||
|
|
||||||
static gchar **
|
static const gchar *const *
|
||||||
gst_mms_uri_get_protocols (GType type)
|
gst_mms_uri_get_protocols (GType type)
|
||||||
{
|
{
|
||||||
static const gchar *protocols[] = { "mms", "mmsh", "mmst", "mmsu", NULL };
|
static const gchar *protocols[] = { "mms", "mmsh", "mmst", "mmsu", NULL };
|
||||||
|
|
||||||
return (gchar **) protocols;
|
return protocols;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const gchar *
|
static gchar *
|
||||||
gst_mms_uri_get_uri (GstURIHandler * handler)
|
gst_mms_uri_get_uri (GstURIHandler * handler)
|
||||||
{
|
{
|
||||||
GstMMS *src = GST_MMS (handler);
|
GstMMS *src = GST_MMS (handler);
|
||||||
|
|
||||||
return src->uri_name;
|
/* FIXME: make thread-safe */
|
||||||
|
return g_strdup (src->uri_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
static gchar *
|
static gchar *
|
||||||
|
@ -593,14 +594,18 @@ gst_mms_src_make_valid_uri (const gchar * uri)
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
gst_mms_uri_set_uri (GstURIHandler * handler, const gchar * uri)
|
gst_mms_uri_set_uri (GstURIHandler * handler, const gchar * uri,
|
||||||
|
GError ** error)
|
||||||
{
|
{
|
||||||
GstMMS *src = GST_MMS (handler);
|
GstMMS *src = GST_MMS (handler);
|
||||||
gchar *fixed_uri;
|
gchar *fixed_uri;
|
||||||
|
|
||||||
fixed_uri = gst_mms_src_make_valid_uri (uri);
|
fixed_uri = gst_mms_src_make_valid_uri (uri);
|
||||||
if (!fixed_uri && uri)
|
if (!fixed_uri && uri) {
|
||||||
|
g_set_error (error, GST_URI_ERROR, GST_URI_ERROR_BAD_URI,
|
||||||
|
"Invalid MMS URI");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
GST_OBJECT_LOCK (src);
|
GST_OBJECT_LOCK (src);
|
||||||
if (src->uri_name)
|
if (src->uri_name)
|
||||||
|
|
|
@ -1136,11 +1136,12 @@ gst_neonhttp_src_uri_get_type (void)
|
||||||
return GST_URI_SRC;
|
return GST_URI_SRC;
|
||||||
}
|
}
|
||||||
|
|
||||||
static gchar **
|
static const gchar *const *
|
||||||
gst_neonhttp_src_uri_get_protocols (void)
|
gst_neonhttp_src_uri_get_protocols (void)
|
||||||
{
|
{
|
||||||
static const gchar *protocols[] = { "http", "https", NULL };
|
static const gchar *protocols[] = { "http", "https", NULL };
|
||||||
return (gchar **) protocols;
|
|
||||||
|
return protocols;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const gchar *
|
static const gchar *
|
||||||
|
|
|
@ -170,10 +170,10 @@ rsn_dvdbin_uri_get_type (void)
|
||||||
return GST_URI_SRC;
|
return GST_URI_SRC;
|
||||||
}
|
}
|
||||||
|
|
||||||
static gchar **
|
static const gchar *const *
|
||||||
rsn_dvdbin_uri_get_protocols (void)
|
rsn_dvdbin_uri_get_protocols (void)
|
||||||
{
|
{
|
||||||
static gchar *protocols[] = { (char *) "dvd", NULL };
|
static const gchar *protocols[] = { "dvd", NULL };
|
||||||
|
|
||||||
return protocols;
|
return protocols;
|
||||||
}
|
}
|
||||||
|
|
|
@ -251,31 +251,35 @@ gst_rtmp_sink_uri_get_type (GType type)
|
||||||
return GST_URI_SINK;
|
return GST_URI_SINK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static gchar **
|
static const gchar *const *
|
||||||
gst_rtmp_sink_uri_get_protocols (GType type)
|
gst_rtmp_sink_uri_get_protocols (GType type)
|
||||||
{
|
{
|
||||||
static gchar *protocols[] =
|
static const gchar *protocols[] =
|
||||||
{ (char *) "rtmp", (char *) "rtmpt", (char *) "rtmps", (char *) "rtmpe",
|
{ "rtmp", "rtmpt", "rtmps", "rtmpe", "rtmfp", "rtmpte", "rtmpts", NULL };
|
||||||
(char *) "rtmfp", (char *) "rtmpte", (char *) "rtmpts", NULL
|
|
||||||
};
|
|
||||||
return protocols;
|
return protocols;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const gchar *
|
static gchar *
|
||||||
gst_rtmp_sink_uri_get_uri (GstURIHandler * handler)
|
gst_rtmp_sink_uri_get_uri (GstURIHandler * handler)
|
||||||
{
|
{
|
||||||
GstRTMPSink *sink = GST_RTMP_SINK (handler);
|
GstRTMPSink *sink = GST_RTMP_SINK (handler);
|
||||||
|
|
||||||
return sink->uri;
|
/* FIXME: make thread-safe */
|
||||||
|
return g_strdup (sink->uri);
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
gst_rtmp_sink_uri_set_uri (GstURIHandler * handler, const gchar * uri)
|
gst_rtmp_sink_uri_set_uri (GstURIHandler * handler, const gchar * uri,
|
||||||
|
GError ** error)
|
||||||
{
|
{
|
||||||
GstRTMPSink *sink = GST_RTMP_SINK (handler);
|
GstRTMPSink *sink = GST_RTMP_SINK (handler);
|
||||||
|
|
||||||
if (GST_STATE (sink) >= GST_STATE_PAUSED)
|
if (GST_STATE (sink) >= GST_STATE_PAUSED) {
|
||||||
|
g_set_error (error, GST_URI_ERROR, GST_URI_ERROR_BAD_STATE,
|
||||||
|
"Changing the URI on rtmpsrc when it is running is not supported");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
g_free (sink->uri);
|
g_free (sink->uri);
|
||||||
sink->uri = NULL;
|
sink->uri = NULL;
|
||||||
|
@ -290,6 +294,8 @@ gst_rtmp_sink_uri_set_uri (GstURIHandler * handler, const gchar * uri)
|
||||||
!host.av_len || !playpath.av_len) {
|
!host.av_len || !playpath.av_len) {
|
||||||
GST_ELEMENT_ERROR (sink, RESOURCE, OPEN_WRITE,
|
GST_ELEMENT_ERROR (sink, RESOURCE, OPEN_WRITE,
|
||||||
("Failed to parse URI %s", uri), (NULL));
|
("Failed to parse URI %s", uri), (NULL));
|
||||||
|
g_set_error (error, GST_URI_ERROR, GST_URI_ERROR_BAD_URI,
|
||||||
|
"Could not parse RTMP URI");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
sink->uri = g_strdup (uri);
|
sink->uri = g_strdup (uri);
|
||||||
|
@ -320,7 +326,7 @@ gst_rtmp_sink_set_property (GObject * object, guint prop_id,
|
||||||
switch (prop_id) {
|
switch (prop_id) {
|
||||||
case PROP_LOCATION:
|
case PROP_LOCATION:
|
||||||
gst_rtmp_sink_uri_set_uri (GST_URI_HANDLER (sink),
|
gst_rtmp_sink_uri_set_uri (GST_URI_HANDLER (sink),
|
||||||
g_value_get_string (value));
|
g_value_get_string (value), NULL);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
|
|
|
@ -166,31 +166,35 @@ gst_rtmp_src_uri_get_type (GType type)
|
||||||
return GST_URI_SRC;
|
return GST_URI_SRC;
|
||||||
}
|
}
|
||||||
|
|
||||||
static gchar **
|
static const gchar *const *
|
||||||
gst_rtmp_src_uri_get_protocols (GType type)
|
gst_rtmp_src_uri_get_protocols (GType type)
|
||||||
{
|
{
|
||||||
static gchar *protocols[] =
|
static const gchar *protocols[] =
|
||||||
{ (char *) "rtmp", (char *) "rtmpt", (char *) "rtmps", (char *) "rtmpe",
|
{ "rtmp", "rtmpt", "rtmps", "rtmpe", "rtmfp", "rtmpte", "rtmpts", NULL };
|
||||||
(char *) "rtmfp", (char *) "rtmpte", (char *) "rtmpts", NULL
|
|
||||||
};
|
|
||||||
return protocols;
|
return protocols;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const gchar *
|
static gchar *
|
||||||
gst_rtmp_src_uri_get_uri (GstURIHandler * handler)
|
gst_rtmp_src_uri_get_uri (GstURIHandler * handler)
|
||||||
{
|
{
|
||||||
GstRTMPSrc *src = GST_RTMP_SRC (handler);
|
GstRTMPSrc *src = GST_RTMP_SRC (handler);
|
||||||
|
|
||||||
return src->uri;
|
/* FIXME: make thread-safe */
|
||||||
|
return g_strdup (src->uri);
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
gst_rtmp_src_uri_set_uri (GstURIHandler * handler, const gchar * uri)
|
gst_rtmp_src_uri_set_uri (GstURIHandler * handler, const gchar * uri,
|
||||||
|
GError ** error)
|
||||||
{
|
{
|
||||||
GstRTMPSrc *src = GST_RTMP_SRC (handler);
|
GstRTMPSrc *src = GST_RTMP_SRC (handler);
|
||||||
|
|
||||||
if (GST_STATE (src) >= GST_STATE_PAUSED)
|
if (GST_STATE (src) >= GST_STATE_PAUSED) {
|
||||||
|
g_set_error (error, GST_URI_ERROR, GST_URI_ERROR_BAD_STATE,
|
||||||
|
"Changing the URI on rtmpsrc when it is running is not supported");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
g_free (src->uri);
|
g_free (src->uri);
|
||||||
src->uri = NULL;
|
src->uri = NULL;
|
||||||
|
@ -204,6 +208,8 @@ gst_rtmp_src_uri_set_uri (GstURIHandler * handler, const gchar * uri)
|
||||||
if (!RTMP_ParseURL (uri, &protocol, &host, &port, &playpath, &app) ||
|
if (!RTMP_ParseURL (uri, &protocol, &host, &port, &playpath, &app) ||
|
||||||
!host.av_len || !playpath.av_len) {
|
!host.av_len || !playpath.av_len) {
|
||||||
GST_ERROR_OBJECT (src, "Failed to parse URI %s", uri);
|
GST_ERROR_OBJECT (src, "Failed to parse URI %s", uri);
|
||||||
|
g_set_error (error, GST_URI_ERROR, GST_URI_ERROR_BAD_URI,
|
||||||
|
"Could not parse RTMP URI");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
src->uri = g_strdup (uri);
|
src->uri = g_strdup (uri);
|
||||||
|
@ -236,7 +242,7 @@ gst_rtmp_src_set_property (GObject * object, guint prop_id,
|
||||||
switch (prop_id) {
|
switch (prop_id) {
|
||||||
case PROP_LOCATION:{
|
case PROP_LOCATION:{
|
||||||
gst_rtmp_src_uri_set_uri (GST_URI_HANDLER (src),
|
gst_rtmp_src_uri_set_uri (GST_URI_HANDLER (src),
|
||||||
g_value_get_string (value));
|
g_value_get_string (value), NULL);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -71,10 +71,10 @@ static gboolean gst_data_uri_src_start (GstBaseSrc * src);
|
||||||
static void gst_data_uri_src_handler_init (gpointer g_iface,
|
static void gst_data_uri_src_handler_init (gpointer g_iface,
|
||||||
gpointer iface_data);
|
gpointer iface_data);
|
||||||
static GstURIType gst_data_uri_src_get_uri_type (GType type);
|
static GstURIType gst_data_uri_src_get_uri_type (GType type);
|
||||||
static gchar **gst_data_uri_src_get_protocols (GType type);
|
static const gchar *const *gst_data_uri_src_get_protocols (GType type);
|
||||||
static const gchar *gst_data_uri_src_get_uri (GstURIHandler * handler);
|
static gchar *gst_data_uri_src_get_uri (GstURIHandler * handler);
|
||||||
static gboolean gst_data_uri_src_set_uri (GstURIHandler * handler,
|
static gboolean gst_data_uri_src_set_uri (GstURIHandler * handler,
|
||||||
const gchar * uri);
|
const gchar * uri, GError ** error);
|
||||||
|
|
||||||
|
|
||||||
#define gst_data_uri_src_parent_class parent_class
|
#define gst_data_uri_src_parent_class parent_class
|
||||||
|
@ -145,7 +145,7 @@ gst_data_uri_src_set_property (GObject * object, guint prop_id,
|
||||||
switch (prop_id) {
|
switch (prop_id) {
|
||||||
case PROP_URI:
|
case PROP_URI:
|
||||||
gst_data_uri_src_set_uri (GST_URI_HANDLER (src),
|
gst_data_uri_src_set_uri (GST_URI_HANDLER (src),
|
||||||
g_value_get_string (value));
|
g_value_get_string (value), NULL);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
|
@ -276,24 +276,26 @@ gst_data_uri_src_get_uri_type (GType type)
|
||||||
return GST_URI_SRC;
|
return GST_URI_SRC;
|
||||||
}
|
}
|
||||||
|
|
||||||
static gchar **
|
static const gchar *const *
|
||||||
gst_data_uri_src_get_protocols (GType type)
|
gst_data_uri_src_get_protocols (GType type)
|
||||||
{
|
{
|
||||||
static gchar *protocols[] = { (char *) "data", 0 };
|
static const gchar *protocols[] = { "data", 0 };
|
||||||
|
|
||||||
return protocols;
|
return protocols;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const gchar *
|
static gchar *
|
||||||
gst_data_uri_src_get_uri (GstURIHandler * handler)
|
gst_data_uri_src_get_uri (GstURIHandler * handler)
|
||||||
{
|
{
|
||||||
GstDataURISrc *src = GST_DATA_URI_SRC (handler);
|
GstDataURISrc *src = GST_DATA_URI_SRC (handler);
|
||||||
|
|
||||||
return src->uri;
|
/* FIXME: make thread-safe */
|
||||||
|
return g_strdup (src->uri);
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
gst_data_uri_src_set_uri (GstURIHandler * handler, const gchar * uri)
|
gst_data_uri_src_set_uri (GstURIHandler * handler, const gchar * uri,
|
||||||
|
GError ** error)
|
||||||
{
|
{
|
||||||
GstDataURISrc *src = GST_DATA_URI_SRC (handler);
|
GstDataURISrc *src = GST_DATA_URI_SRC (handler);
|
||||||
gboolean ret = FALSE;
|
gboolean ret = FALSE;
|
||||||
|
@ -413,16 +415,23 @@ wrong_state:
|
||||||
GST_WARNING_OBJECT (src, "Can't set URI in %s state",
|
GST_WARNING_OBJECT (src, "Can't set URI in %s state",
|
||||||
gst_element_state_get_name (GST_STATE (src)));
|
gst_element_state_get_name (GST_STATE (src)));
|
||||||
GST_OBJECT_UNLOCK (src);
|
GST_OBJECT_UNLOCK (src);
|
||||||
|
g_set_error (error, GST_URI_ERROR, GST_URI_ERROR_BAD_STATE,
|
||||||
|
"Changing the 'uri' property on dataurisrc while it is running "
|
||||||
|
"is not supported");
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
invalid_uri:
|
invalid_uri:
|
||||||
{
|
{
|
||||||
GST_WARNING_OBJECT (src, "invalid URI '%s'", uri);
|
GST_WARNING_OBJECT (src, "invalid URI '%s'", uri);
|
||||||
|
g_set_error (error, GST_URI_ERROR, GST_URI_ERROR_BAD_URI,
|
||||||
|
"Invalid data URI");
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
invalid_uri_encoded_data:
|
invalid_uri_encoded_data:
|
||||||
{
|
{
|
||||||
GST_WARNING_OBJECT (src, "Failed to parse data encoded in URI '%s'", uri);
|
GST_WARNING_OBJECT (src, "Failed to parse data encoded in URI '%s'", uri);
|
||||||
|
g_set_error (error, GST_URI_ERROR, GST_URI_ERROR_BAD_URI,
|
||||||
|
"Could not parse data encoded in data URI");
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -958,45 +958,53 @@ dvb_base_bin_uri_get_type (GType type)
|
||||||
return GST_URI_SRC;
|
return GST_URI_SRC;
|
||||||
}
|
}
|
||||||
|
|
||||||
static gchar **
|
static const gchar *const *
|
||||||
dvb_base_bin_uri_get_protocols (GType type)
|
dvb_base_bin_uri_get_protocols (GType type)
|
||||||
{
|
{
|
||||||
static gchar *protocols[] = { (char *) "dvb", NULL };
|
static const gchar *protocols[] = { "dvb", NULL };
|
||||||
|
|
||||||
return protocols;
|
return protocols;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const gchar *
|
static gchar *
|
||||||
dvb_base_bin_uri_get_uri (GstURIHandler * handler)
|
dvb_base_bin_uri_get_uri (GstURIHandler * handler)
|
||||||
{
|
{
|
||||||
return "dvb://";
|
return g_strdup ("dvb://");
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
dvb_base_bin_uri_set_uri (GstURIHandler * handler, const gchar * uri)
|
dvb_base_bin_uri_set_uri (GstURIHandler * handler, const gchar * uri,
|
||||||
|
GError ** error)
|
||||||
{
|
{
|
||||||
gboolean ret;
|
|
||||||
gchar *protocol;
|
|
||||||
DvbBaseBin *dvbbasebin = GST_DVB_BASE_BIN (handler);
|
DvbBaseBin *dvbbasebin = GST_DVB_BASE_BIN (handler);
|
||||||
|
gchar *location;
|
||||||
|
|
||||||
protocol = gst_uri_get_protocol (uri);
|
location = gst_uri_get_location (uri);
|
||||||
|
|
||||||
if (strcmp (protocol, "dvb") != 0) {
|
if (location == NULL)
|
||||||
ret = FALSE;
|
goto no_location;
|
||||||
} else {
|
|
||||||
gchar *location = gst_uri_get_location (uri);
|
|
||||||
|
|
||||||
if (location != NULL) {
|
if (!set_properties_for_channel (G_OBJECT (dvbbasebin), location))
|
||||||
ret = set_properties_for_channel (G_OBJECT (dvbbasebin), location);
|
goto set_properties_failed;
|
||||||
g_free (location);
|
|
||||||
} else
|
/* FIXME: here is where we parse channels.conf */
|
||||||
ret = FALSE;
|
|
||||||
|
g_free (location);
|
||||||
|
return TRUE;
|
||||||
|
/* ERRORS */
|
||||||
|
no_location:
|
||||||
|
{
|
||||||
|
g_set_error (error, GST_URI_ERROR, GST_URI_ERROR_BAD_URI,
|
||||||
|
"No details to DVB URI");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
set_properties_failed:
|
||||||
|
{
|
||||||
|
g_set_error (error, GST_URI_ERROR, GST_URI_ERROR_BAD_URI,
|
||||||
|
"Could not set properties from DVB URI");
|
||||||
|
g_free (location);
|
||||||
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* here is where we parse channels.conf */
|
|
||||||
g_free (protocol);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
Loading…
Reference in a new issue