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_GENRE, /* Genre of the stream */
|
||||
|
||||
ARG_PROTOCOL, /* Protocol to connect with */
|
||||
|
||||
ARG_MOUNT, /* mountpoint of stream (icecast only) */
|
||||
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 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
|
||||
gst_shout2send_get_type(void)
|
||||
{
|
||||
|
@ -147,6 +167,11 @@ gst_shout2send_class_init (GstShout2sendClass *klass)
|
|||
g_param_spec_string("genre","genre","genre",
|
||||
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 */
|
||||
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_MOUNT,
|
||||
g_param_spec_string("mount","mount","mount",
|
||||
|
@ -181,6 +206,7 @@ gst_shout2send_init (GstShout2send *shout2send)
|
|||
shout2send->genre = g_strdup ("");
|
||||
shout2send->mount = g_strdup ("");
|
||||
shout2send->url = g_strdup ("");
|
||||
shout2send->protocol = SHOUT2SEND_PROTOCOL_HTTP;
|
||||
}
|
||||
|
||||
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));
|
||||
break;
|
||||
|
||||
case ARG_PROTOCOL: /* protocol to connect with */
|
||||
shout2send->protocol = g_value_get_enum (value);
|
||||
break;
|
||||
|
||||
case ARG_MOUNT: /* mountpoint of stream (icecast only) */
|
||||
if (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);
|
||||
break;
|
||||
|
||||
case ARG_PROTOCOL: /* protocol to connect with */
|
||||
g_value_set_enum (value, shout2send->protocol);
|
||||
break;
|
||||
|
||||
case ARG_MOUNT: /* mountpoint of stream (icecast only) */
|
||||
g_value_set_string (value, shout2send->mount);
|
||||
break;
|
||||
|
@ -347,6 +381,7 @@ gst_shout2send_change_state (GstElement *element)
|
|||
GstShout2send *shout2send;
|
||||
|
||||
guint major, minor, micro;
|
||||
gshort proto = 3;
|
||||
|
||||
gchar *version_string;
|
||||
|
||||
|
@ -361,10 +396,22 @@ gst_shout2send_change_state (GstElement *element)
|
|||
case GST_STATE_NULL_TO_READY:
|
||||
shout2send->conn = shout_new();
|
||||
|
||||
/* There are other choices for protocols (_ICE, _XAUDIOCAST and _ICY)
|
||||
adding a property to set this might be in order */
|
||||
switch (shout2send->protocol) {
|
||||
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));
|
||||
}
|
||||
|
|
|
@ -28,6 +28,14 @@
|
|||
extern "C" {
|
||||
#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. */
|
||||
typedef struct _GstShout2send GstShout2send;
|
||||
|
@ -36,6 +44,8 @@ struct _GstShout2send {
|
|||
|
||||
GstPad *sinkpad,*srcpad;
|
||||
|
||||
GstShout2SendProtocol protocol;
|
||||
|
||||
shout_t *conn;
|
||||
|
||||
gchar *ip;
|
||||
|
@ -49,6 +59,8 @@ struct _GstShout2send {
|
|||
|
||||
};
|
||||
|
||||
|
||||
|
||||
/* Standard definition defining a class for this element. */
|
||||
typedef struct _GstShout2sendClass GstShout2sendClass;
|
||||
struct _GstShout2sendClass {
|
||||
|
|
Loading…
Reference in a new issue