static gboolean get_info_from_tags (GstPad * pad, GstEvent ** event, gpointer user_data) { GstSDPMedia *media = (GstSDPMedia *) user_data; if (GST_EVENT_TYPE (*event) == GST_EVENT_TAG) { GstTagList *tags; guint bitrate = 0; gst_event_parse_tag (*event, &tags); if (gst_tag_list_get_scope (tags) != GST_TAG_SCOPE_STREAM) return TRUE; if (!gst_tag_list_get_uint (tags, GST_TAG_MAXIMUM_BITRATE, &bitrate) || bitrate == 0) if (!gst_tag_list_get_uint (tags, GST_TAG_BITRATE, &bitrate) || bitrate == 0) return TRUE; /* set bandwidth (kbits/s) */ gst_sdp_media_add_bandwidth (media, GST_SDP_BWTYPE_AS, bitrate / 1000); return FALSE; } return TRUE; }
static gboolean kms_sdp_media_handler_add_answer_attributes_impl (KmsSdpMediaHandler * handler, const GstSDPMedia * offer, GstSDPMedia * answer, GError ** error) { GError *err = NULL; GSList *l; gint i; /* Add bandwidth attributes */ for (i = 0; i < handler->priv->bwtypes->len; i++) { GstSDPBandwidth *bw; bw = &g_array_index (handler->priv->bwtypes, GstSDPBandwidth, i); gst_sdp_media_add_bandwidth (answer, bw->bwtype, bw->bandwidth); } for (l = handler->priv->extensions; l != NULL; l = g_slist_next (l)) { KmsISdpMediaExtension *ext = KMS_I_SDP_MEDIA_EXTENSION (l->data); if (!kms_i_sdp_media_extension_add_answer_attributes (ext, offer, answer, &err)) { GST_ERROR_OBJECT (ext, "%s", err->message); g_clear_error (&err); } } return TRUE; }