rtpbin: make request_element method internally

We can use the same method to create encoder and decoder elements, they
are just internal elements that we create.
This commit is contained in:
Wim Taymans 2013-12-30 17:36:42 +01:00
parent e7912641c3
commit ae22c95881

View File

@ -408,8 +408,8 @@ struct _GstRtpBinSession
/* list of GstRtpBinStream */ /* list of GstRtpBinStream */
GSList *streams; GSList *streams;
/* list of encoders */ /* list of elements */
GSList *encoders; GSList *elements;
/* list of decoders */ /* list of decoders */
GSList *decoders; GSList *decoders;
@ -736,11 +736,8 @@ free_session (GstRtpBinSession * sess, GstRtpBin * bin)
gst_bin_remove (GST_BIN_CAST (bin), sess->session); gst_bin_remove (GST_BIN_CAST (bin), sess->session);
gst_bin_remove (GST_BIN_CAST (bin), sess->demux); gst_bin_remove (GST_BIN_CAST (bin), sess->demux);
g_slist_foreach (sess->encoders, (GFunc) remove_bin_element, bin); g_slist_foreach (sess->elements, (GFunc) remove_bin_element, bin);
g_slist_free (sess->encoders); g_slist_free (sess->elements);
g_slist_foreach (sess->decoders, (GFunc) remove_bin_element, bin);
g_slist_free (sess->decoders);
g_slist_foreach (sess->streams, (GFunc) free_stream, bin); g_slist_foreach (sess->streams, (GFunc) free_stream, bin);
g_slist_free (sess->streams); g_slist_free (sess->streams);
@ -2601,49 +2598,25 @@ gst_rtp_bin_change_state (GstElement * element, GstStateChange transition)
} }
static GstElement * static GstElement *
session_request_encoder (GstRtpBinSession * session, guint signal) session_request_element (GstRtpBinSession * session, guint signal)
{ {
GstElement *encoder = NULL; GstElement *element = NULL;
GstRtpBin *bin = session->bin; GstRtpBin *bin = session->bin;
g_signal_emit (bin, gst_rtp_bin_signals[signal], 0, session->id, &encoder); g_signal_emit (bin, gst_rtp_bin_signals[signal], 0, session->id, &element);
if (encoder) { if (element) {
if (!bin_manage_element (bin, encoder)) if (!bin_manage_element (bin, element))
goto manage_failed; goto manage_failed;
session->encoders = g_slist_prepend (session->encoders, encoder); session->elements = g_slist_prepend (session->elements, element);
} }
return encoder; return element;
/* ERRORS */ /* ERRORS */
manage_failed: manage_failed:
{ {
GST_WARNING_OBJECT (bin, "unable to manage encoder"); GST_WARNING_OBJECT (bin, "unable to manage element");
gst_object_unref (encoder); gst_object_unref (element);
return NULL;
}
}
static GstElement *
session_request_decoder (GstRtpBinSession * session, guint signal)
{
GstElement *decoder = NULL;
GstRtpBin *bin = session->bin;
g_signal_emit (bin, gst_rtp_bin_signals[signal], 0, session->id, &decoder);
if (decoder) {
if (!bin_manage_element (bin, decoder))
goto manage_failed;
session->decoders = g_slist_prepend (session->decoders, decoder);
}
return decoder;
/* ERRORS */
manage_failed:
{
GST_WARNING_OBJECT (bin, "unable to manage decoder");
gst_object_unref (decoder);
return NULL; return NULL;
} }
} }
@ -2925,7 +2898,7 @@ create_recv_rtp (GstRtpBin * rtpbin, GstPadTemplate * templ, const gchar * name)
(GCallback) caps_changed, session); (GCallback) caps_changed, session);
GST_DEBUG_OBJECT (rtpbin, "requesting RTP decoder"); GST_DEBUG_OBJECT (rtpbin, "requesting RTP decoder");
decoder = session_request_decoder (session, SIGNAL_REQUEST_RTP_DECODER); decoder = session_request_element (session, SIGNAL_REQUEST_RTP_DECODER);
if (decoder) { if (decoder) {
GstPad *decsrc; GstPad *decsrc;
GstPadLinkReturn ret; GstPadLinkReturn ret;
@ -3088,7 +3061,7 @@ create_recv_rtcp (GstRtpBin * rtpbin, GstPadTemplate * templ,
goto pad_failed; goto pad_failed;
GST_DEBUG_OBJECT (rtpbin, "getting RTCP decoder"); GST_DEBUG_OBJECT (rtpbin, "getting RTCP decoder");
decoder = session_request_decoder (session, SIGNAL_REQUEST_RTCP_DECODER); decoder = session_request_element (session, SIGNAL_REQUEST_RTCP_DECODER);
if (decoder) { if (decoder) {
GstPad *decsrc; GstPad *decsrc;
GstPadLinkReturn ret; GstPadLinkReturn ret;
@ -3243,7 +3216,7 @@ create_send_rtp (GstRtpBin * rtpbin, GstPadTemplate * templ, const gchar * name)
goto no_srcpad; goto no_srcpad;
GST_DEBUG_OBJECT (rtpbin, "getting RTP encoder"); GST_DEBUG_OBJECT (rtpbin, "getting RTP encoder");
encoder = session_request_encoder (session, SIGNAL_REQUEST_RTP_ENCODER); encoder = session_request_element (session, SIGNAL_REQUEST_RTP_ENCODER);
if (encoder) { if (encoder) {
gchar *ename; gchar *ename;
GstPad *encsink; GstPad *encsink;
@ -3384,7 +3357,7 @@ create_rtcp (GstRtpBin * rtpbin, GstPadTemplate * templ, const gchar * name)
goto pad_failed; goto pad_failed;
GST_DEBUG_OBJECT (rtpbin, "getting RTCP encoder"); GST_DEBUG_OBJECT (rtpbin, "getting RTCP encoder");
encoder = session_request_encoder (session, SIGNAL_REQUEST_RTCP_ENCODER); encoder = session_request_element (session, SIGNAL_REQUEST_RTCP_ENCODER);
if (encoder) { if (encoder) {
gchar *ename; gchar *ename;
GstPad *encsink; GstPad *encsink;