mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-26 06:54:49 +00:00
shout2send: error out if no caps were received
Instead of assuming that input is ogg.
This commit is contained in:
parent
d7210befdc
commit
4480a25844
2 changed files with 30 additions and 23 deletions
|
@ -84,7 +84,6 @@ enum
|
||||||
#define DEFAULT_MOUNT ""
|
#define DEFAULT_MOUNT ""
|
||||||
#define DEFAULT_URL ""
|
#define DEFAULT_URL ""
|
||||||
#define DEFAULT_PROTOCOL SHOUT2SEND_PROTOCOL_HTTP
|
#define DEFAULT_PROTOCOL SHOUT2SEND_PROTOCOL_HTTP
|
||||||
#define DEFAULT_FORMAT SHOUT_FORMAT_VORBIS
|
|
||||||
|
|
||||||
#ifdef SHOUT_FORMAT_WEBM
|
#ifdef SHOUT_FORMAT_WEBM
|
||||||
#define WEBM_CAPS "; video/webm; audio/webm"
|
#define WEBM_CAPS "; video/webm; audio/webm"
|
||||||
|
@ -255,8 +254,8 @@ gst_shout2send_init (GstShout2send * shout2send)
|
||||||
shout2send->url = g_strdup (DEFAULT_URL);
|
shout2send->url = g_strdup (DEFAULT_URL);
|
||||||
shout2send->protocol = DEFAULT_PROTOCOL;
|
shout2send->protocol = DEFAULT_PROTOCOL;
|
||||||
shout2send->ispublic = DEFAULT_PUBLIC;
|
shout2send->ispublic = DEFAULT_PUBLIC;
|
||||||
shout2send->format = DEFAULT_FORMAT;
|
|
||||||
|
|
||||||
|
shout2send->format = -1;
|
||||||
shout2send->tags = gst_tag_list_new_empty ();
|
shout2send->tags = gst_tag_list_new_empty ();
|
||||||
shout2send->conn = NULL;
|
shout2send->conn = NULL;
|
||||||
shout2send->connected = FALSE;
|
shout2send->connected = FALSE;
|
||||||
|
@ -517,17 +516,13 @@ set_failed:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static GstFlowReturn
|
||||||
gst_shout2send_connect (GstShout2send * sink)
|
gst_shout2send_connect (GstShout2send * sink)
|
||||||
{
|
{
|
||||||
const char *format =
|
GST_DEBUG_OBJECT (sink, "Connection format is: %d", sink->format);
|
||||||
(sink->format == SHOUT_FORMAT_VORBIS) ? "vorbis" :
|
|
||||||
((sink->format == SHOUT_FORMAT_MP3) ? "mp3" : "unknown");
|
if (sink->format == -1)
|
||||||
#ifdef SHOUT_FORMAT_WEBM
|
goto no_caps;
|
||||||
if (sink->format == SHOUT_FORMAT_WEBM)
|
|
||||||
format = "webm";
|
|
||||||
#endif
|
|
||||||
GST_DEBUG_OBJECT (sink, "Connection format is: %s", format);
|
|
||||||
|
|
||||||
if (shout_set_format (sink->conn, sink->format) != SHOUTERR_SUCCESS)
|
if (shout_set_format (sink->conn, sink->format) != SHOUTERR_SUCCESS)
|
||||||
goto could_not_set_format;
|
goto could_not_set_format;
|
||||||
|
@ -549,14 +544,21 @@ gst_shout2send_connect (GstShout2send * sink)
|
||||||
shout_metadata_free (pmetadata);
|
shout_metadata_free (pmetadata);
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
return GST_FLOW_OK;
|
||||||
|
|
||||||
/* ERRORS */
|
/* ERRORS */
|
||||||
|
no_caps:
|
||||||
|
{
|
||||||
|
GST_ELEMENT_ERROR (sink, CORE, NEGOTIATION, (NULL),
|
||||||
|
("No input caps received."));
|
||||||
|
return GST_FLOW_NOT_NEGOTIATED;
|
||||||
|
}
|
||||||
|
|
||||||
could_not_set_format:
|
could_not_set_format:
|
||||||
{
|
{
|
||||||
GST_ELEMENT_ERROR (sink, LIBRARY, SETTINGS, (NULL),
|
GST_ELEMENT_ERROR (sink, LIBRARY, SETTINGS, (NULL),
|
||||||
("Error setting connection format: %s", shout_get_error (sink->conn)));
|
("Error setting connection format: %s", shout_get_error (sink->conn)));
|
||||||
return FALSE;
|
return GST_FLOW_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
could_not_connect:
|
could_not_connect:
|
||||||
|
@ -566,7 +568,7 @@ could_not_connect:
|
||||||
("shout_open() failed: err=%s", shout_get_error (sink->conn)));
|
("shout_open() failed: err=%s", shout_get_error (sink->conn)));
|
||||||
g_signal_emit (sink, gst_shout2send_signals[SIGNAL_CONNECTION_PROBLEM], 0,
|
g_signal_emit (sink, gst_shout2send_signals[SIGNAL_CONNECTION_PROBLEM], 0,
|
||||||
shout_get_errno (sink->conn));
|
shout_get_errno (sink->conn));
|
||||||
return FALSE;
|
return GST_FLOW_ERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -588,6 +590,7 @@ gst_shout2send_stop (GstBaseSink * basesink)
|
||||||
}
|
}
|
||||||
|
|
||||||
sink->connected = FALSE;
|
sink->connected = FALSE;
|
||||||
|
sink->format = -1;
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -624,16 +627,18 @@ gst_shout2send_render (GstBaseSink * basesink, GstBuffer * buf)
|
||||||
GstShout2send *sink;
|
GstShout2send *sink;
|
||||||
glong ret;
|
glong ret;
|
||||||
gint delay;
|
gint delay;
|
||||||
GstFlowReturn fret;
|
GstFlowReturn fret = GST_FLOW_OK;
|
||||||
GstMapInfo map;
|
GstMapInfo map;
|
||||||
|
|
||||||
sink = GST_SHOUT2SEND (basesink);
|
sink = GST_SHOUT2SEND (basesink);
|
||||||
|
|
||||||
/* presumably we connect here because we need to know the format before
|
/* we connect here because we need to know the format before we can set up
|
||||||
* we can set up the connection, which we don't know yet in _start() */
|
* the connection, which we don't know yet in _start(), and also because we
|
||||||
|
* don't want to block the application thread */
|
||||||
if (!sink->connected) {
|
if (!sink->connected) {
|
||||||
if (!gst_shout2send_connect (sink))
|
fret = gst_shout2send_connect (sink);
|
||||||
return GST_FLOW_ERROR;
|
if (fret != GST_FLOW_OK)
|
||||||
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
delay = shout_delay (sink->conn);
|
delay = shout_delay (sink->conn);
|
||||||
|
@ -645,7 +650,7 @@ gst_shout2send_render (GstBaseSink * basesink, GstBuffer * buf)
|
||||||
|
|
||||||
fret = gst_base_sink_wait_preroll (basesink);
|
fret = gst_base_sink_wait_preroll (basesink);
|
||||||
if (fret != GST_FLOW_OK)
|
if (fret != GST_FLOW_OK)
|
||||||
return fret;
|
goto done;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
GST_LOG_OBJECT (sink, "we're %d msec late", -delay);
|
GST_LOG_OBJECT (sink, "we're %d msec late", -delay);
|
||||||
|
@ -658,7 +663,9 @@ gst_shout2send_render (GstBaseSink * basesink, GstBuffer * buf)
|
||||||
if (ret != SHOUTERR_SUCCESS)
|
if (ret != SHOUTERR_SUCCESS)
|
||||||
goto send_error;
|
goto send_error;
|
||||||
|
|
||||||
return GST_FLOW_OK;
|
done:
|
||||||
|
|
||||||
|
return fret;
|
||||||
|
|
||||||
/* ERRORS */
|
/* ERRORS */
|
||||||
send_error:
|
send_error:
|
||||||
|
@ -799,7 +806,7 @@ gst_shout2send_setcaps (GstBaseSink * basesink, GstCaps * caps)
|
||||||
if (!strcmp (mimetype, "audio/mpeg")) {
|
if (!strcmp (mimetype, "audio/mpeg")) {
|
||||||
shout2send->format = SHOUT_FORMAT_MP3;
|
shout2send->format = SHOUT_FORMAT_MP3;
|
||||||
} else if (g_str_has_suffix (mimetype, "/ogg")) {
|
} else if (g_str_has_suffix (mimetype, "/ogg")) {
|
||||||
shout2send->format = SHOUT_FORMAT_VORBIS;
|
shout2send->format = SHOUT_FORMAT_OGG;
|
||||||
#ifdef SHOUT_FORMAT_WEBM
|
#ifdef SHOUT_FORMAT_WEBM
|
||||||
} else if (g_str_has_suffix (mimetype, "/webm")) {
|
} else if (g_str_has_suffix (mimetype, "/webm")) {
|
||||||
shout2send->format = SHOUT_FORMAT_WEBM;
|
shout2send->format = SHOUT_FORMAT_WEBM;
|
||||||
|
|
|
@ -60,7 +60,7 @@ struct _GstShout2send {
|
||||||
gchar *songmetadata;
|
gchar *songmetadata;
|
||||||
gchar *songartist;
|
gchar *songartist;
|
||||||
gchar *songtitle;
|
gchar *songtitle;
|
||||||
guint16 format;
|
int format;
|
||||||
|
|
||||||
GstTagList* tags;
|
GstTagList* tags;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue