mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-22 15:18:21 +00:00
#fixes 101992
Original commit message from CVS: #fixes 101992
This commit is contained in:
parent
3601eef2cf
commit
7c03811a9c
2 changed files with 65 additions and 6 deletions
|
@ -49,6 +49,8 @@ enum {
|
||||||
ARG_DESCRIPTION, /* Description of the stream */
|
ARG_DESCRIPTION, /* Description of the stream */
|
||||||
ARG_GENRE, /* Genre of the stream */
|
ARG_GENRE, /* Genre of the stream */
|
||||||
|
|
||||||
|
ARG_PROTOCOL, /* Protocol to connect with */
|
||||||
|
|
||||||
ARG_MOUNT, /* mountpoint of stream (icecast only) */
|
ARG_MOUNT, /* mountpoint of stream (icecast only) */
|
||||||
ARG_URL, /* Url of stream (I'm guessing) */
|
ARG_URL, /* Url of stream (I'm guessing) */
|
||||||
};
|
};
|
||||||
|
@ -91,6 +93,24 @@ static GstElementStateReturn gst_shout2send_change_state (GstElement *element);
|
||||||
static GstElementClass *parent_class = NULL;
|
static GstElementClass *parent_class = NULL;
|
||||||
/*static guint gst_shout2send_signals[LAST_SIGNAL] = { 0 }; */
|
/*static guint gst_shout2send_signals[LAST_SIGNAL] = { 0 }; */
|
||||||
|
|
||||||
|
#define GST_TYPE_SHOUT_PROTOCOL (gst_shout2send_protocol_get_type())
|
||||||
|
static GType
|
||||||
|
gst_shout2send_protocol_get_type (void)
|
||||||
|
{
|
||||||
|
static GType shout2send_protocol_type = 0;
|
||||||
|
static GEnumValue shout2send_protocol[] = {
|
||||||
|
{ SHOUT2SEND_PROTOCOL_ICE, "1", "Ice Protocol"},
|
||||||
|
{ SHOUT2SEND_PROTOCOL_XAUDIOCAST, "2", "Xaudiocast Protocol (icecast 1.3.x)"},
|
||||||
|
{ SHOUT2SEND_PROTOCOL_ICY, "3", "Icy Protocol (ShoutCast)"},
|
||||||
|
{ SHOUT2SEND_PROTOCOL_HTTP, "4", "Http Protocol (icecast 2.x)"},
|
||||||
|
{0, NULL, NULL},
|
||||||
|
};
|
||||||
|
if (!shout2send_protocol_type) {
|
||||||
|
shout2send_protocol_type = g_enum_register_static ("GstShout2SendProtocol", shout2send_protocol);
|
||||||
|
}
|
||||||
|
return shout2send_protocol_type;
|
||||||
|
}
|
||||||
|
|
||||||
GType
|
GType
|
||||||
gst_shout2send_get_type(void)
|
gst_shout2send_get_type(void)
|
||||||
{
|
{
|
||||||
|
@ -147,6 +167,11 @@ gst_shout2send_class_init (GstShout2sendClass *klass)
|
||||||
g_param_spec_string("genre","genre","genre",
|
g_param_spec_string("genre","genre","genre",
|
||||||
NULL, G_PARAM_READWRITE)); /* CHECKME */
|
NULL, G_PARAM_READWRITE)); /* CHECKME */
|
||||||
|
|
||||||
|
g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_PROTOCOL,
|
||||||
|
g_param_spec_enum ("protocol", "protocol", "Connection Protocol to use",
|
||||||
|
GST_TYPE_SHOUT_PROTOCOL, SHOUT2SEND_PROTOCOL_HTTP, G_PARAM_READWRITE));
|
||||||
|
|
||||||
|
|
||||||
/* icecast only */
|
/* icecast only */
|
||||||
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_MOUNT,
|
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_MOUNT,
|
||||||
g_param_spec_string("mount","mount","mount",
|
g_param_spec_string("mount","mount","mount",
|
||||||
|
@ -181,6 +206,7 @@ gst_shout2send_init (GstShout2send *shout2send)
|
||||||
shout2send->genre = g_strdup ("");
|
shout2send->genre = g_strdup ("");
|
||||||
shout2send->mount = g_strdup ("");
|
shout2send->mount = g_strdup ("");
|
||||||
shout2send->url = g_strdup ("");
|
shout2send->url = g_strdup ("");
|
||||||
|
shout2send->protocol = SHOUT2SEND_PROTOCOL_HTTP;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -254,6 +280,10 @@ gst_shout2send_set_property (GObject *object, guint prop_id, const GValue *value
|
||||||
shout2send->genre = g_strdup (g_value_get_string (value));
|
shout2send->genre = g_strdup (g_value_get_string (value));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case ARG_PROTOCOL: /* protocol to connect with */
|
||||||
|
shout2send->protocol = g_value_get_enum (value);
|
||||||
|
break;
|
||||||
|
|
||||||
case ARG_MOUNT: /* mountpoint of stream (icecast only) */
|
case ARG_MOUNT: /* mountpoint of stream (icecast only) */
|
||||||
if (shout2send->mount)
|
if (shout2send->mount)
|
||||||
g_free (shout2send->mount);
|
g_free (shout2send->mount);
|
||||||
|
@ -304,6 +334,10 @@ gst_shout2send_get_property (GObject *object, guint prop_id, GValue *value, GPar
|
||||||
g_value_set_string (value, shout2send->genre);
|
g_value_set_string (value, shout2send->genre);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case ARG_PROTOCOL: /* protocol to connect with */
|
||||||
|
g_value_set_enum (value, shout2send->protocol);
|
||||||
|
break;
|
||||||
|
|
||||||
case ARG_MOUNT: /* mountpoint of stream (icecast only) */
|
case ARG_MOUNT: /* mountpoint of stream (icecast only) */
|
||||||
g_value_set_string (value, shout2send->mount);
|
g_value_set_string (value, shout2send->mount);
|
||||||
break;
|
break;
|
||||||
|
@ -347,6 +381,7 @@ gst_shout2send_change_state (GstElement *element)
|
||||||
GstShout2send *shout2send;
|
GstShout2send *shout2send;
|
||||||
|
|
||||||
guint major, minor, micro;
|
guint major, minor, micro;
|
||||||
|
gshort proto = 3;
|
||||||
|
|
||||||
gchar *version_string;
|
gchar *version_string;
|
||||||
|
|
||||||
|
@ -361,10 +396,22 @@ gst_shout2send_change_state (GstElement *element)
|
||||||
case GST_STATE_NULL_TO_READY:
|
case GST_STATE_NULL_TO_READY:
|
||||||
shout2send->conn = shout_new();
|
shout2send->conn = shout_new();
|
||||||
|
|
||||||
/* There are other choices for protocols (_ICE, _XAUDIOCAST and _ICY)
|
switch (shout2send->protocol) {
|
||||||
adding a property to set this might be in order */
|
case SHOUT2SEND_PROTOCOL_ICE:
|
||||||
|
proto = SHOUT_PROTOCOL_ICE;
|
||||||
|
break;
|
||||||
|
case SHOUT2SEND_PROTOCOL_XAUDIOCAST:
|
||||||
|
proto = SHOUT_PROTOCOL_XAUDIOCAST;
|
||||||
|
break;
|
||||||
|
case SHOUT2SEND_PROTOCOL_ICY:
|
||||||
|
proto = SHOUT_PROTOCOL_ICY;
|
||||||
|
break;
|
||||||
|
case SHOUT2SEND_PROTOCOL_HTTP:
|
||||||
|
proto = SHOUT_PROTOCOL_HTTP;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (shout_set_protocol(shout2send->conn, SHOUT_PROTOCOL_HTTP) != SHOUTERR_SUCCESS)
|
if (shout_set_protocol(shout2send->conn, proto) != SHOUTERR_SUCCESS)
|
||||||
{
|
{
|
||||||
g_error ("Error setting protocol: %s\n", shout_get_error(shout2send->conn));
|
g_error ("Error setting protocol: %s\n", shout_get_error(shout2send->conn));
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,6 +28,14 @@
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif /* __cplusplus */
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
/* Protocol type enum */
|
||||||
|
typedef enum {
|
||||||
|
SHOUT2SEND_PROTOCOL_ICE = 1,
|
||||||
|
SHOUT2SEND_PROTOCOL_XAUDIOCAST,
|
||||||
|
SHOUT2SEND_PROTOCOL_ICY,
|
||||||
|
SHOUT2SEND_PROTOCOL_HTTP
|
||||||
|
} GstShout2SendProtocol;
|
||||||
|
|
||||||
|
|
||||||
/* Definition of structure storing data for this element. */
|
/* Definition of structure storing data for this element. */
|
||||||
typedef struct _GstShout2send GstShout2send;
|
typedef struct _GstShout2send GstShout2send;
|
||||||
|
@ -36,6 +44,8 @@ struct _GstShout2send {
|
||||||
|
|
||||||
GstPad *sinkpad,*srcpad;
|
GstPad *sinkpad,*srcpad;
|
||||||
|
|
||||||
|
GstShout2SendProtocol protocol;
|
||||||
|
|
||||||
shout_t *conn;
|
shout_t *conn;
|
||||||
|
|
||||||
gchar *ip;
|
gchar *ip;
|
||||||
|
@ -49,6 +59,8 @@ struct _GstShout2send {
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Standard definition defining a class for this element. */
|
/* Standard definition defining a class for this element. */
|
||||||
typedef struct _GstShout2sendClass GstShout2sendClass;
|
typedef struct _GstShout2sendClass GstShout2sendClass;
|
||||||
struct _GstShout2sendClass {
|
struct _GstShout2sendClass {
|
||||||
|
|
Loading…
Reference in a new issue