static void kms_remb_remote_update (KmsRembRemote * rm, KmsRTCPPSFBAFBREMBPacket * remb_packet) { guint32 br_send; if (remb_packet->n_ssrcs == 0) { GST_WARNING_OBJECT (KMS_REMB_BASE (rm)->rtpsess, "REMB packet without any SSRC"); return; } else if (remb_packet->n_ssrcs > 1) { GST_WARNING_OBJECT (KMS_REMB_BASE (rm)->rtpsess, "REMB packet with %" G_GUINT32_FORMAT " SSRCs." " A inconsistent management could take place", remb_packet->n_ssrcs); } br_send = remb_packet->bitrate; if (!rm->probed) { if ((remb_packet->bitrate < rm->remb_on_connect) && (remb_packet->bitrate >= rm->remb)) { GST_DEBUG_OBJECT (KMS_REMB_BASE (rm)->rtpsess, "Not probed: sending remb_on_connect value"); br_send = rm->remb_on_connect; rm->remb = remb_packet->bitrate; } else { rm->probed = TRUE; } } send_remb_event (rm, br_send, remb_packet->ssrcs[0]); rm->remb = remb_packet->bitrate; }
static void kms_remb_remote_update (KmsRembRemote * rm, KmsRTCPPSFBAFBREMBPacket * remb_packet) { if (remb_packet->n_ssrcs == 0) { GST_WARNING_OBJECT (KMS_REMB_BASE (rm)->rtpsess, "REMB packet without any SSRC"); return; } else if (remb_packet->n_ssrcs > 1) { GST_WARNING_OBJECT (KMS_REMB_BASE (rm)->rtpsess, "REMB packet with %" G_GUINT32_FORMAT " SSRCs." " A inconsistent management could take place", remb_packet->n_ssrcs); } if (!rm->probed) { /* FIXME: if no event is sent until this condition, * the restriction of this br will be removed by event manager * in 10secs*/ if ((remb_packet->bitrate < REMB_ON_CONNECT) && (remb_packet->bitrate >= rm->remb)) { rm->remb = remb_packet->bitrate; return; } rm->probed = TRUE; } send_remb_event (rm, remb_packet->bitrate, remb_packet->ssrcs[0]); rm->remb = remb_packet->bitrate; }
static GstPadProbeReturn send_remb_event_probe (GstPad * pad, GstPadProbeInfo * info, gpointer user_data) { KmsRembRemote *rm = user_data; GstEvent *event = GST_PAD_PROBE_INFO_EVENT (info); if (GST_EVENT_TYPE (event) != GST_EVENT_CAPS) { return GST_PAD_PROBE_OK; }; send_remb_event (rm, rm->remb_on_connect, rm->local_ssrc); return GST_PAD_PROBE_REMOVE; }