Lines Matching refs:sink
197 gst_rist_sink_add_bond (GstRistSink * sink) in gst_rist_sink_add_bond() argument
203 bond->session = sink->bonds->len; in gst_rist_sink_add_bond()
210 sink->missing_plugin = "udp"; in gst_rist_sink_add_bond()
221 gst_bin_add_many (GST_BIN (sink), bond->rtp_sink, bond->rtcp_src, in gst_rist_sink_add_bond()
228 gst_bin_add (GST_BIN (sink->rtxbin), bond->rtx_queue); in gst_rist_sink_add_bond()
233 sink->missing_plugin = "rtpmanager"; in gst_rist_sink_add_bond()
237 gst_bin_add (GST_BIN (sink->rtxbin), bond->rtx_send); in gst_rist_sink_add_bond()
245 gst_element_add_pad (sink->rtxbin, gpad); in gst_rist_sink_add_bond()
251 gst_element_link_pads (sink->ssrc_filter, "src", sink->rtpbin, name); in gst_rist_sink_add_bond()
259 gst_element_add_pad (sink->rtxbin, pad); in gst_rist_sink_add_bond()
262 pad = gst_element_request_pad_simple (sink->rtpbin, name); in gst_rist_sink_add_bond()
267 gst_element_link_pads (sink->rtpbin, name, bond->rtp_sink, "sink"); in gst_rist_sink_add_bond()
270 gst_element_link_pads (bond->rtcp_src, "src", sink->rtpbin, name); in gst_rist_sink_add_bond()
273 gst_element_link_pads (sink->rtpbin, name, bond->rtcp_sink, "sink"); in gst_rist_sink_add_bond()
275 g_ptr_array_add (sink->bonds, bond); in gst_rist_sink_add_bond()
280 gst_rist_sink_request_pt_map (GstRistSrc * sink, guint session_id, guint pt, in gst_rist_sink_request_pt_map() argument
302 gst_rist_sink_request_aux_sender (GstRistSink * sink, guint session_id, in gst_rist_sink_request_aux_sender() argument
305 return gst_object_ref (sink->rtxbin); in gst_rist_sink_request_aux_sender()
309 on_receiving_rtcp (GObject * session, GstBuffer * buffer, GstRistSink * sink) in on_receiving_rtcp() argument
350 bond = g_ptr_array_index (sink->bonds, session_id); in on_receiving_rtcp()
368 const gchar * name, GstBuffer * data, GstRistSink * sink) in on_app_rtcp() argument
381 g_signal_emit_by_name (sink->rtpbin, "get-session", session_id, in on_app_rtcp()
414 bond = g_ptr_array_index (sink->bonds, session_id); in on_app_rtcp()
421 GST_WARNING_OBJECT (sink, "RIST APP RTCP packet is too small," in on_app_rtcp()
439 gst_rist_sink_on_new_sender_ssrc (GstRistSink * sink, guint session_id, in gst_rist_sink_on_new_sender_ssrc() argument
458 (GCallback) on_app_rtcp, sink, 0); in gst_rist_sink_on_new_sender_ssrc()
460 (GCallback) on_receiving_rtcp, sink, 0); in gst_rist_sink_on_new_sender_ssrc()
468 gst_rist_sink_on_new_receiver_ssrc (GstRistSink * sink, guint session_id, in gst_rist_sink_on_new_receiver_ssrc() argument
476 GST_INFO_OBJECT (sink, "Got RTCP remote SSRC %u", ssrc); in gst_rist_sink_on_new_receiver_ssrc()
477 bond = g_ptr_array_index (sink->bonds, session_id); in gst_rist_sink_on_new_receiver_ssrc()
511 gst_rist_sink_set_caps (GstRistSink * sink, GstCaps * caps) in gst_rist_sink_set_caps() argument
515 if (!gst_structure_get_uint (s, "ssrc", &sink->rtp_ssrc)) { in gst_rist_sink_set_caps()
516 GST_ELEMENT_ERROR (sink, CORE, NEGOTIATION, ("No 'ssrc' field in caps."), in gst_rist_sink_set_caps()
521 if (sink->rtp_ssrc & 1) { in gst_rist_sink_set_caps()
522 GST_ELEMENT_ERROR (sink, CORE, NEGOTIATION, in gst_rist_sink_set_caps()
533 GstRistSink *sink = GST_RIST_SINK (parent); in gst_rist_sink_event() local
540 ret = gst_rist_sink_set_caps (sink, caps); in gst_rist_sink_event()
555 gst_rist_sink_init (GstRistSink * sink) in gst_rist_sink_init() argument
562 sink->rtpext = gst_element_factory_make ("ristrtpext", "ristrtpext"); in gst_rist_sink_init()
564 g_mutex_init (&sink->bonds_lock); in gst_rist_sink_init()
565 sink->bonds = g_ptr_array_new (); in gst_rist_sink_init()
575 sink->rtpbin = gst_element_factory_make ("rtpbin", "rist_send_rtpbin"); in gst_rist_sink_init()
576 if (!sink->rtpbin) { in gst_rist_sink_init()
577 sink->missing_plugin = "rtpmanager"; in gst_rist_sink_init()
582 g_object_get (sink->rtpbin, "sdes", &sdes, NULL); in gst_rist_sink_init()
585 gst_bin_add (GST_BIN (sink), sink->rtpbin); in gst_rist_sink_init()
586 g_object_set (sink->rtpbin, "do-retransmission", TRUE, in gst_rist_sink_init()
591 g_signal_connect_object (sink->rtpbin, "request-pt-map", in gst_rist_sink_init()
592 G_CALLBACK (gst_rist_sink_request_pt_map), sink, G_CONNECT_SWAPPED); in gst_rist_sink_init()
593 g_signal_connect_object (sink->rtpbin, "request-aux-sender", in gst_rist_sink_init()
594 G_CALLBACK (gst_rist_sink_request_aux_sender), sink, G_CONNECT_SWAPPED); in gst_rist_sink_init()
595 g_signal_connect_object (sink->rtpbin, "on-new-sender-ssrc", in gst_rist_sink_init()
596 G_CALLBACK (gst_rist_sink_on_new_sender_ssrc), sink, G_CONNECT_SWAPPED); in gst_rist_sink_init()
597 g_signal_connect_object (sink->rtpbin, "on-new-ssrc", in gst_rist_sink_init()
598 G_CALLBACK (gst_rist_sink_on_new_receiver_ssrc), sink, G_CONNECT_SWAPPED); in gst_rist_sink_init()
600 sink->rtxbin = gst_bin_new ("rist_send_rtxbin"); in gst_rist_sink_init()
601 g_object_ref_sink (sink->rtxbin); in gst_rist_sink_init()
604 gst_element_add_pad (sink->rtxbin, rtxbin_gpad); in gst_rist_sink_init()
606 sink->ssrc_filter = gst_element_factory_make ("capsfilter", in gst_rist_sink_init()
608 gst_bin_add (GST_BIN (sink), sink->ssrc_filter); in gst_rist_sink_init()
611 sink->rtp_ssrc = g_random_int () & ~1; in gst_rist_sink_init()
613 "ssrc", G_TYPE_UINT, sink->rtp_ssrc, NULL); in gst_rist_sink_init()
616 g_object_set (sink->ssrc_filter, "caps", ssrc_caps, NULL); in gst_rist_sink_init()
619 ssrc_filter_sinkpad = gst_element_get_static_pad (sink->ssrc_filter, "sink"); in gst_rist_sink_init()
620 sink->sinkpad = gst_ghost_pad_new_from_template ("sink", ssrc_filter_sinkpad, in gst_rist_sink_init()
622 gst_pad_set_event_function (sink->sinkpad, gst_rist_sink_event); in gst_rist_sink_init()
623 gst_element_add_pad (GST_ELEMENT (sink), sink->sinkpad); in gst_rist_sink_init()
626 gst_pad_add_probe (sink->sinkpad, GST_PAD_PROBE_TYPE_EVENT_UPSTREAM, in gst_rist_sink_init()
627 gst_rist_sink_fix_collision, sink, NULL); in gst_rist_sink_init()
629 bond = gst_rist_sink_add_bond (sink); in gst_rist_sink_init()
637 GST_ERROR_OBJECT (sink, "'%s' plugin is missing.", sink->missing_plugin); in gst_rist_sink_init()
638 sink->construct_failed = TRUE; in gst_rist_sink_init()
640 gst_element_add_pad (GST_ELEMENT (sink), in gst_rist_sink_init()
646 gst_rist_sink_setup_rtcp_socket (GstRistSink * sink, RistSenderBond * bond) in gst_rist_sink_setup_rtcp_socket() argument
705 GST_ELEMENT_ERROR (sink, RESOURCE, NOT_FOUND, in gst_rist_sink_setup_rtcp_socket()
713 gst_rist_sink_reuse_socket (GstRistSink * sink) in gst_rist_sink_reuse_socket() argument
717 for (i = 0; i < sink->bonds->len; i++) { in gst_rist_sink_reuse_socket()
718 RistSenderBond *bond = g_ptr_array_index (sink->bonds, i); in gst_rist_sink_reuse_socket()
723 g_signal_emit_by_name (sink->rtpbin, "get-session", i, &session); in gst_rist_sink_reuse_socket()
724 g_object_set (session, "rtcp-min-interval", sink->min_rtcp_interval, in gst_rist_sink_reuse_socket()
725 "rtcp-fraction", sink->max_rtcp_bandwidth, NULL); in gst_rist_sink_reuse_socket()
729 pad = gst_element_request_pad_simple (sink->dispatcher, name); in gst_rist_sink_reuse_socket()
730 gst_element_link_pads (sink->dispatcher, name, bond->rtx_queue, "sink"); in gst_rist_sink_reuse_socket()
733 if (!gst_rist_sink_setup_rtcp_socket (sink, bond)) in gst_rist_sink_reuse_socket()
741 gst_rist_sink_start (GstRistSink * sink) in gst_rist_sink_start() argument
747 if (!sink->dispatcher) { in gst_rist_sink_start()
748 switch (sink->bonding_method) { in gst_rist_sink_start()
750 sink->dispatcher = gst_element_factory_make ("tee", "rist_dispatcher"); in gst_rist_sink_start()
751 if (!sink->dispatcher) { in gst_rist_sink_start()
752 sink->missing_plugin = "coreelements"; in gst_rist_sink_start()
753 sink->construct_failed = TRUE; in gst_rist_sink_start()
757 sink->dispatcher = gst_element_factory_make ("roundrobin", in gst_rist_sink_start()
759 g_assert (sink->dispatcher); in gst_rist_sink_start()
764 if (sink->construct_failed) { in gst_rist_sink_start()
765 GST_ELEMENT_ERROR (sink, CORE, MISSING_PLUGIN, in gst_rist_sink_start()
767 sink->missing_plugin), (NULL)); in gst_rist_sink_start()
771 gst_bin_add (GST_BIN (sink), sink->rtpext); in gst_rist_sink_start()
772 rtxbin_gpad = gst_element_get_static_pad (sink->rtxbin, "sink_0"); in gst_rist_sink_start()
773 rtpext_sinkpad = gst_element_get_static_pad (sink->rtpext, "sink"); in gst_rist_sink_start()
777 gst_bin_add (GST_BIN (sink->rtxbin), sink->dispatcher); in gst_rist_sink_start()
778 gst_element_link (sink->rtpext, sink->dispatcher); in gst_rist_sink_start()
785 gst_rist_sink_create_stats (GstRistSink * sink) in gst_rist_sink_create_stats() argument
794 session_stats = g_value_array_new (sink->bonds->len); in gst_rist_sink_create_stats()
796 for (i = 0; i < sink->bonds->len; i++) { in gst_rist_sink_create_stats()
803 g_signal_emit_by_name (sink->rtpbin, "get-internal-session", i, &session); in gst_rist_sink_create_stats()
808 bond = g_ptr_array_index (sink->bonds, i); in gst_rist_sink_create_stats()
810 g_signal_emit_by_name (session, "get-source-by-ssrc", sink->rtp_ssrc, in gst_rist_sink_create_stats()
861 GstRistSink *sink = GST_RIST_SINK (user_data); in gst_rist_sink_dump_stats() local
862 GstStructure *stats = gst_rist_sink_create_stats (sink); in gst_rist_sink_dump_stats()
864 gst_println ("%s: %" GST_PTR_FORMAT, GST_OBJECT_NAME (sink), stats); in gst_rist_sink_dump_stats()
871 gst_rist_sink_enable_stats_interval (GstRistSink * sink) in gst_rist_sink_enable_stats_interval() argument
876 if (sink->stats_interval == 0) in gst_rist_sink_enable_stats_interval()
879 interval = sink->stats_interval * GST_MSECOND; in gst_rist_sink_enable_stats_interval()
883 sink->stats_cid = gst_clock_new_periodic_id (clock, start, interval); in gst_rist_sink_enable_stats_interval()
884 gst_clock_id_wait_async (sink->stats_cid, gst_rist_sink_dump_stats, in gst_rist_sink_enable_stats_interval()
885 gst_object_ref (sink), (GDestroyNotify) gst_object_unref); in gst_rist_sink_enable_stats_interval()
891 gst_rist_sink_disable_stats_interval (GstRistSink * sink) in gst_rist_sink_disable_stats_interval() argument
893 if (sink->stats_cid) { in gst_rist_sink_disable_stats_interval()
894 gst_clock_id_unschedule (sink->stats_cid); in gst_rist_sink_disable_stats_interval()
895 gst_clock_id_unref (sink->stats_cid); in gst_rist_sink_disable_stats_interval()
896 sink->stats_cid = NULL; in gst_rist_sink_disable_stats_interval()
903 GstRistSink *sink = GST_RIST_SINK (element); in gst_rist_sink_change_state() local
910 if (gst_rist_sink_start (sink) == GST_STATE_CHANGE_FAILURE) in gst_rist_sink_change_state()
913 gst_rist_sink_disable_stats_interval (sink); in gst_rist_sink_change_state()
924 ret = gst_rist_sink_reuse_socket (sink); in gst_rist_sink_change_state()
927 gst_rist_sink_enable_stats_interval (sink); in gst_rist_sink_change_state()
938 gst_rist_sink_update_bond_address (GstRistSink * sink, RistSenderBond * bond, in gst_rist_sink_update_bond_address() argument
961 gst_rist_sink_get_bonds (GstRistSink * sink) in gst_rist_sink_get_bonds() argument
966 for (i = 0; i < sink->bonds->len; i++) { in gst_rist_sink_get_bonds()
967 RistSenderBond *bond = g_ptr_array_index (sink->bonds, i); in gst_rist_sink_get_bonds()
989 gst_rist_sink_set_bonds (GstRistSink * sink, const gchar * bonds) in gst_rist_sink_set_bonds() argument
1043 if (i < sink->bonds->len) in gst_rist_sink_set_bonds()
1044 bond = g_ptr_array_index (sink->bonds, i); in gst_rist_sink_set_bonds()
1046 bond = gst_rist_sink_add_bond (sink); in gst_rist_sink_set_bonds()
1048 gst_rist_sink_update_bond_address (sink, bond, addrs[i].address, in gst_rist_sink_set_bonds()
1074 gst_rist_sink_set_multicast_loopback (GstRistSink * sink, gboolean loop) in gst_rist_sink_set_multicast_loopback() argument
1078 sink->multicast_loopback = loop; in gst_rist_sink_set_multicast_loopback()
1079 for (i = 0; i < sink->bonds->len; i++) { in gst_rist_sink_set_multicast_loopback()
1080 RistSenderBond *bond = g_ptr_array_index (sink->bonds, i); in gst_rist_sink_set_multicast_loopback()
1088 gst_rist_sink_set_multicast_ttl (GstRistSink * sink, gint ttl) in gst_rist_sink_set_multicast_ttl() argument
1092 sink->multicast_ttl = ttl; in gst_rist_sink_set_multicast_ttl()
1093 for (i = 0; i < sink->bonds->len; i++) { in gst_rist_sink_set_multicast_ttl()
1094 RistSenderBond *bond = g_ptr_array_index (sink->bonds, i); in gst_rist_sink_set_multicast_ttl()
1104 GstRistSink *sink = GST_RIST_SINK (object); in gst_rist_sink_get_property() local
1108 if (sink->construct_failed) in gst_rist_sink_get_property()
1111 g_mutex_lock (&sink->bonds_lock); in gst_rist_sink_get_property()
1113 bond = g_ptr_array_index (sink->bonds, 0); in gst_rist_sink_get_property()
1129 g_value_set_uint (value, (guint) (sink->min_rtcp_interval / GST_MSECOND)); in gst_rist_sink_get_property()
1133 g_value_set_double (value, sink->max_rtcp_bandwidth); in gst_rist_sink_get_property()
1137 g_value_set_uint (value, sink->stats_interval); in gst_rist_sink_get_property()
1141 g_value_take_boxed (value, gst_rist_sink_create_stats (sink)); in gst_rist_sink_get_property()
1145 g_object_get (sink->rtpbin, "sdes", &sdes, NULL); in gst_rist_sink_get_property()
1151 g_value_set_boolean (value, sink->multicast_loopback); in gst_rist_sink_get_property()
1159 g_value_set_int (value, sink->multicast_ttl); in gst_rist_sink_get_property()
1163 g_value_take_string (value, gst_rist_sink_get_bonds (sink)); in gst_rist_sink_get_property()
1167 g_value_set_enum (value, sink->bonding_method); in gst_rist_sink_get_property()
1171 g_value_set_object (value, sink->dispatcher); in gst_rist_sink_get_property()
1175 g_object_get_property (G_OBJECT (sink->rtpext), "drop-null-ts-packets", in gst_rist_sink_get_property()
1180 g_object_get_property (G_OBJECT (sink->rtpext), in gst_rist_sink_get_property()
1189 g_mutex_unlock (&sink->bonds_lock); in gst_rist_sink_get_property()
1196 GstRistSink *sink = GST_RIST_SINK (object); in gst_rist_sink_set_property() local
1200 if (sink->construct_failed) in gst_rist_sink_set_property()
1203 g_mutex_lock (&sink->bonds_lock); in gst_rist_sink_set_property()
1205 bond = g_ptr_array_index (sink->bonds, 0); in gst_rist_sink_set_property()
1238 sink->min_rtcp_interval = g_value_get_uint (value) * GST_MSECOND; in gst_rist_sink_set_property()
1242 sink->max_rtcp_bandwidth = g_value_get_double (value); in gst_rist_sink_set_property()
1246 sink->stats_interval = g_value_get_uint (value); in gst_rist_sink_set_property()
1250 g_object_get (sink->rtpbin, "sdes", &sdes, NULL); in gst_rist_sink_set_property()
1252 g_object_set (sink->rtpbin, "sdes", sdes, NULL); in gst_rist_sink_set_property()
1257 gst_rist_sink_set_multicast_loopback (sink, g_value_get_boolean (value)); in gst_rist_sink_set_property()
1270 gst_rist_sink_set_multicast_ttl (sink, g_value_get_int (value)); in gst_rist_sink_set_property()
1274 gst_rist_sink_set_bonds (sink, g_value_get_string (value)); in gst_rist_sink_set_property()
1278 sink->bonding_method = g_value_get_enum (value); in gst_rist_sink_set_property()
1282 if (sink->dispatcher) in gst_rist_sink_set_property()
1283 g_object_unref (sink->dispatcher); in gst_rist_sink_set_property()
1284 sink->dispatcher = g_object_ref_sink (g_value_get_object (value)); in gst_rist_sink_set_property()
1288 g_object_set_property (G_OBJECT (sink->rtpext), "drop-null-ts-packets", in gst_rist_sink_set_property()
1293 g_object_set_property (G_OBJECT (sink->rtpext), in gst_rist_sink_set_property()
1302 g_mutex_unlock (&sink->bonds_lock); in gst_rist_sink_set_property()
1308 GstRistSink *sink = GST_RIST_SINK (object); in gst_rist_sink_finalize() local
1311 g_mutex_lock (&sink->bonds_lock); in gst_rist_sink_finalize()
1313 for (i = 0; i < sink->bonds->len; i++) { in gst_rist_sink_finalize()
1314 RistSenderBond *bond = g_ptr_array_index (sink->bonds, i); in gst_rist_sink_finalize()
1319 g_ptr_array_free (sink->bonds, TRUE); in gst_rist_sink_finalize()
1321 g_clear_object (&sink->rtxbin); in gst_rist_sink_finalize()
1323 g_mutex_unlock (&sink->bonds_lock); in gst_rist_sink_finalize()
1324 g_mutex_clear (&sink->bonds_lock); in gst_rist_sink_finalize()