summaryrefslogtreecommitdiffstats
path: root/gst/rtpmanager/rtpsession.c
Commit message (Collapse)AuthorAgeFilesLines
* rtpsession: whitespace fixesWim Taymans2009-09-031-8/+8
|
* rtpsession: avoid doing lip-sync in BYEWim Taymans2009-08-111-0/+2
| | | | | When we get a BYE packet, don't do lip-sync with the SR inside because some senders have trouble constructing valid SR packets after BYE.
* rtpbin: don't do lip-sync after a BYEWim Taymans2009-08-111-5/+10
| | | | | | | After a BYE packet from a source, stop forwarding the SR packets for lip-sync to rtpbin. Some senders don't update their SR packets correctly after sending a BYE and then we break lip-sync. We prefer to let the jitterbuffers drain with the current lip-sync instead.
* rtpbin: only reconsider once for BYEWim Taymans2009-08-111-5/+11
| | | | | When iterating the sources of a BYE packet, don't signal a reconsideration for each of them but signal after we handled all sources.
* rtpsession: Free conflicting addresses on finalizeOlivier Crête2009-08-111-0/+3
|
* rtpsession: add a commentWim Taymans2009-08-111-1/+1
|
* rtpbin: add SDES property that takes GstStructureWim Taymans2009-08-111-102/+49
| | | | | | Remove all individual SDES properties and use one sdes property that takes a GstStructure instead. This will allow us to add more custom stuff to the SDES messages later.
* rtpbin: add support for buffer-listBranko Subasic2009-08-111-15/+22
| | | | | | | Add support for sending buffer-lists. Add unit test for testing that the buffer-list passed through rtpbin. fixes #585839
* rtpsession: notify when SSRC changesOlivier Crete2009-08-111-0/+7
| | | | | Emit a g_object_notify when the SSRc changes because of a collision. Fixes #580144
* gst/rtpmanager/: When an SSRC is found on the caps of the sender RTP, use ↵Olivier Crete2009-08-111-0/+5
| | | | | | | | | | | | this as the internal SSRC. Fixes #565910. Original commit message from CVS: Patch by: Olivier Crete <tester at tester dot ca> * gst/rtpmanager/gstrtpsession.c: (gst_rtp_session_setcaps_send_rtp), (create_send_rtp_sink): * gst/rtpmanager/rtpsession.c: (rtp_session_set_internal_ssrc): When an SSRC is found on the caps of the sender RTP, use this as the internal SSRC. Fixes #565910.
* gst/rtpmanager/: Rename a method to better reflect what it really does.Wim Taymans2009-08-111-17/+7
| | | | | | | | | | | Original commit message from CVS: * gst/rtpmanager/gstrtpsession.c: (gst_rtp_session_event_send_rtp_sink), (gst_rtp_session_getcaps_send_rtp): * gst/rtpmanager/rtpsession.c: (check_collision), (rtp_session_schedule_bye_locked), (rtp_session_schedule_bye): * gst/rtpmanager/rtpsession.h: Rename a method to better reflect what it really does.
* gst/rtpmanager/gstrtpsession.c: Use method to get the internal SSRC.Wim Taymans2009-08-111-0/+12
| | | | | | | | | | | Original commit message from CVS: * gst/rtpmanager/gstrtpsession.c: (gst_rtp_session_getcaps_send_rtp): Use method to get the internal SSRC. * gst/rtpmanager/rtpsession.c: (rtp_session_class_init), (rtp_session_set_property), (rtp_session_get_property): Add property to congiure the internal SSRC of the session. Fixes #565910.
* gst/rtpmanager/rtpsession.c: Only change the SSRC of the session and reset ↵Wim Taymans2009-08-111-6/+8
| | | | | | | | | the internal source when the SSRC actually... Original commit message from CVS: * gst/rtpmanager/rtpsession.c: (rtp_session_set_internal_ssrc): Only change the SSRC of the session and reset the internal source when the SSRC actually changed. See #565910.
* gst/rtpmanager/rtpsession.c: Make obtain_source return an aditional ref so ↵Wim Taymans2009-08-111-9/+18
| | | | | | | | | | | | | | that we don't lose our ref to it when a se... Original commit message from CVS: * gst/rtpmanager/rtpsession.c: (obtain_source), (rtp_session_create_source), (rtp_session_process_rtp), (rtp_session_process_sr), (rtp_session_process_rr), (rtp_session_process_sdes), (rtp_session_process_bye): Make obtain_source return an aditional ref so that we don't lose our ref to it when a session cleanup occurs when we are emiting a signal. Emit the on_new_ssrc signal for the CSRC, not the SSRC. Fixes #562319.
* gst/rtpmanager/rtpsession.c: Add property to configure the RTCP MTU.Wim Taymans2009-08-111-1/+15
| | | | | | | | Original commit message from CVS: * gst/rtpmanager/rtpsession.c: (rtp_session_class_init), (rtp_session_init), (rtp_session_set_property), (rtp_session_get_property): Add property to configure the RTCP MTU.
* gst/rtpmanager/rtpsession.c: Add G_PARAM_STATIC_STRINGS.Wim Taymans2009-08-111-12/+79
| | | | | | | | | | | | | | | | | Original commit message from CVS: * gst/rtpmanager/rtpsession.c: (rtp_session_class_init), (copy_source), (rtp_session_create_sources), (rtp_session_get_property): Add G_PARAM_STATIC_STRINGS. Add property to return a GValueArray of all known RTPSources in the session. * gst/rtpmanager/rtpsource.c: (rtp_source_class_init), (rtp_source_create_sdes), (rtp_source_set_property), (rtp_source_get_property): Remove properties to set the various SDES items, an application is never supposed to change the RTPSource data. Change the SDES getter properties to one SDES property that returns all SDES items in a GstStructure.
* gst/rtpmanager/gstrtpsession.c: Pass the running time to the session when ↵Wim Taymans2009-08-111-15/+22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | processing RTP packets. Original commit message from CVS: * gst/rtpmanager/gstrtpsession.c: (get_current_times), (rtcp_thread), (gst_rtp_session_chain_recv_rtp): Pass the running time to the session when processing RTP packets. Improve the time function to provide more info. * gst/rtpmanager/rtpsession.c: (rtp_session_class_init), (rtp_session_init), (update_arrival_stats), (rtp_session_process_rtp), (rtp_session_process_sdes), (rtp_session_process_rtcp), (session_start_rtcp), (rtp_session_on_timeout): * gst/rtpmanager/rtpsession.h: Mark the internal source with a flag. Use running_time instead of the more useless timestamp. Validate a source when a valid SDES has been received. Pass the current system time when processing SR packets. * gst/rtpmanager/rtpsource.c: (rtp_source_class_init), (rtp_source_init), (rtp_source_create_stats), (rtp_source_get_property), (rtp_source_send_rtp), (rtp_source_process_rb), (rtp_source_get_new_rb), (rtp_source_get_last_rb): * gst/rtpmanager/rtpsource.h: Add property to get source stats. Mark params as STATIC_STRINGS. Calculate the bitrate at the sender SSRC. Avoid negative values in the round trip time calculations. * gst/rtpmanager/rtpstats.h: Update some docs and change some variable name to more closely reflect what it contains.
* gst/rtpmanager/gstrtpbin-marshal.list: Add marshaller for new action signal.Håvard Graff2009-08-111-2/+19
| | | | | | | | | | | | | | | | | | | Original commit message from CVS: Patch by: Håvard Graff <havard dot graff at tandberg dot com> * gst/rtpmanager/gstrtpbin-marshal.list: Add marshaller for new action signal. * gst/rtpmanager/gstrtpbin.c: (gst_rtp_bin_get_internal_session), (gst_rtp_bin_class_init): * gst/rtpmanager/gstrtpbin.h: Add action signal to retrieve the internal RTPSession object. * gst/rtpmanager/gstrtpsession.c: (gst_rtp_session_class_init), (gst_rtp_session_get_property), (gst_rtp_session_release_pad): Add property to access the internal RTPSession object. * gst/rtpmanager/rtpsession.c: (rtp_session_class_init), (check_collision): * gst/rtpmanager/rtpsession.h: Add action signal to retrieve an RTPSource object by SSRC. See #555396.
* gst/rtpmanager/rtpsession.c: Ref the rtpsource object before we release the ↵Wim Taymans2009-08-111-0/+18
| | | | | | | | | | | session lock when we emit the signals. Original commit message from CVS: * gst/rtpmanager/rtpsession.c: (on_new_ssrc), (on_ssrc_collision), (on_ssrc_validated), (on_ssrc_active), (on_ssrc_sdes), (on_bye_ssrc), (on_bye_timeout), (on_timeout), (on_sender_timeout): Ref the rtpsource object before we release the session lock when we emit the signals.
* gst/rtpmanager/: Fix some docs.Wim Taymans2009-08-111-0/+1
| | | | | | | | | | Original commit message from CVS: * gst/rtpmanager/rtpjitterbuffer.c: (rtp_jitter_buffer_insert), (rtp_jitter_buffer_get_sync): * gst/rtpmanager/rtpsession.c: (on_sender_timeout), (session_cleanup): * gst/rtpmanager/rtpsource.c: Fix some docs.
* gst/rtpmanager/gstrtpbin.*: Add signal to notify listeners when a sender ↵Wim Taymans2009-08-111-8/+28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | becomes a receiver. Original commit message from CVS: * gst/rtpmanager/gstrtpbin.c: (on_sender_timeout), (create_session), (gst_rtp_bin_associate), (gst_rtp_bin_sync_chain), (gst_rtp_bin_class_init), (gst_rtp_bin_request_new_pad): * gst/rtpmanager/gstrtpbin.h: Add signal to notify listeners when a sender becomes a receiver. Tweak lip-sync code, don't store our own copy of the ts-offset of the jitterbuffer, don't adjust sync if the change is less than 4msec. Get the RTP timestamp <-> GStreamer timestamp relation directly from the jitterbuffer instead of our inaccurate version from the source. * gst/rtpmanager/gstrtpjitterbuffer.c: (gst_rtp_jitter_buffer_chain), (gst_rtp_jitter_buffer_loop), (gst_rtp_jitter_buffer_get_sync): * gst/rtpmanager/gstrtpjitterbuffer.h: Add G_LIKELY macros, use global defines for max packet reorder and dropouts. Reset the jitterbuffer clock skew detection when packets seqnums are changed unexpectedly. * gst/rtpmanager/gstrtpsession.c: (on_sender_timeout), (gst_rtp_session_class_init), (gst_rtp_session_init): * gst/rtpmanager/gstrtpsession.h: Add sender timeout signal. * gst/rtpmanager/rtpjitterbuffer.c: (rtp_jitter_buffer_reset_skew), (calculate_skew), (rtp_jitter_buffer_insert), (rtp_jitter_buffer_get_sync): * gst/rtpmanager/rtpjitterbuffer.h: Add some G_LIKELY macros. Keep track of the extended RTP timestamp so that we can report the RTP timestamp <-> GStreamer timestamp relation for lip-sync. Remove server timestamp gap detection code, the server can sometimes make a huge gap in timestamps (talk spurts,...) see #549774. Detect timetamp weirdness instead by observing the sender/receiver timestamp relation and resync if it changes more than 1 second. Add method to report about the current rtp <-> gst timestamp relation which is needed for lip-sync. * gst/rtpmanager/rtpsession.c: (rtp_session_class_init), (on_sender_timeout), (check_collision), (rtp_session_process_sr), (session_cleanup): * gst/rtpmanager/rtpsession.h: Add sender timeout signal. Remove inaccurate rtp <-> gst timestamp relation code, the jitterbuffer can now do an accurate reporting about this. * gst/rtpmanager/rtpsource.c: (rtp_source_init), (rtp_source_update_caps), (calculate_jitter), (rtp_source_process_rtp): * gst/rtpmanager/rtpsource.h: Remove inaccurate rtp <-> gst timestamp relation code. * gst/rtpmanager/rtpstats.h: Define global max-reorder and max-dropout constants for use in various subsystems.
* gst/rtpmanager/gstrtpsession.c: Send EOS when the session object instructs ↵Wim Taymans2009-08-111-2/+6
| | | | | | | | | | | | | | | | us to. Original commit message from CVS: * gst/rtpmanager/gstrtpsession.c: (gst_rtp_session_send_rtcp), (gst_rtp_session_event_send_rtp_sink): Send EOS when the session object instructs us to. * gst/rtpmanager/rtpsession.c: (rtp_session_on_timeout): * gst/rtpmanager/rtpsession.h: Make it possible for the session manager to instruct us to send EOS. We currently will EOS when the session is a sender and when the sender part goes EOS. This is not entirely correct behaviour because the session could still participate as a receiver. Fixes #549409.
* gst/rtpmanager/gstrtpbin.c: Reset rtp timestamp interpollation when we ↵Wim Taymans2009-08-111-4/+50
| | | | | | | | | | | | | | | | | | | | | | detect a gap when the clock_base changed. Original commit message from CVS: * gst/rtpmanager/gstrtpbin.c: (gst_rtp_bin_associate), (gst_rtp_bin_sync_chain), (new_ssrc_pad_found): Reset rtp timestamp interpollation when we detect a gap when the clock_base changed. Don't try to adjust the ts-offset when it's too big (> 3seconds) * gst/rtpmanager/gstrtpsession.c: (gst_rtp_session_set_ssrc): * gst/rtpmanager/gstrtpsession.h: Add method to set session SSRC. * gst/rtpmanager/rtpsession.c: (check_collision), (rtp_session_set_internal_ssrc), (rtp_session_get_internal_ssrc), (rtp_session_on_timeout): * gst/rtpmanager/rtpsession.h: Added debugging for the collision checks. Add method to change the internal SSRC of the session. * gst/rtpmanager/rtpsource.c: (rtp_source_process_rtp): Reset the clock base when we detect large jumps in the seqnums.
* gst/rtpmanager/gstrtpjitterbuffer.c: Make the buffer metadata writable ↵Olivier Crete2009-08-111-0/+6
| | | | | | | | | | | | | | | | | | before inserting it in the jitterbuffer becaus... Original commit message from CVS: Based on patch by: Olivier Crete <tester at tester dot ca> * gst/rtpmanager/gstrtpjitterbuffer.c: (gst_rtp_jitter_buffer_chain), (gst_rtp_jitter_buffer_loop): Make the buffer metadata writable before inserting it in the jitterbuffer because the jitterbuffer will modify the timestamps. * gst/rtpmanager/rtpjitterbuffer.c: Update method comment about requiring writable metadata on buffers. * gst/rtpmanager/rtpsession.c: (rtp_session_process_sr), (rtp_session_process_rtcp): Make the RTCP buffer metadata writable because we want to modify the metadata. Fixes #546312.
* gst/rtpmanager/: Changed some GST_DEBUG() to GST_LOG() to reduce the spam ↵Peter Kjellerstedt2009-08-111-3/+3
| | | | | | | | | | | | | | | | when a pipeline is running normally. Original commit message from CVS: * gst/rtpmanager/gstrtpsession.c: (gst_rtp_session_process_rtp), (gst_rtp_session_send_rtp), (gst_rtp_session_send_rtcp), (gst_rtp_session_sync_rtcp), (gst_rtp_session_chain_recv_rtp), (gst_rtp_session_chain_recv_rtcp), (gst_rtp_session_chain_send_rtp): * gst/rtpmanager/rtpsession.c: (source_push_rtp), (rtp_session_send_rtp): * gst/rtpmanager/rtpsource.c: (push_packet), (calculate_jitter), (rtp_source_process_rtp), (rtp_source_send_rtp): Changed some GST_DEBUG() to GST_LOG() to reduce the spam when a pipeline is running normally.
* gst/rtpmanager/: Do not mix the use of g_get_current_time() with ↵Peter Kjellerstedt2009-08-111-54/+54
| | | | | | | | | | | | | | | | | | | gst_clock_get_time(). Original commit message from CVS: * gst/rtpmanager/gstrtpsession.c: (gst_rtp_session_init), (gst_rtp_session_finalize), (rtcp_thread), (gst_rtp_session_chain_recv_rtp), (gst_rtp_session_chain_recv_rtcp), (gst_rtp_session_event_send_rtp_sink), (gst_rtp_session_chain_send_rtp): * gst/rtpmanager/rtpsession.c: (check_collision), (update_arrival_stats), (rtp_session_process_rtp), (rtp_session_process_rtcp), (rtp_session_send_rtp), (rtp_session_send_bye_locked), (rtp_session_send_bye), (rtp_session_next_timeout), (session_report_blocks), (session_cleanup), (is_rtcp_time), (rtp_session_on_timeout): * gst/rtpmanager/rtpsession.h: Do not mix the use of g_get_current_time() with gst_clock_get_time().
* gst/rtpmanager/rtpsession.c: Unlock the session lock when calling one of our ↵Olivier Crete2009-08-111-0/+8
| | | | | | | | | | | callbacks. Original commit message from CVS: Patch by: Olivier Crete <tester at tester dot ca> * gst/rtpmanager/rtpsession.c: (source_clock_rate), (rtp_session_process_bye), (rtp_session_send_bye_locked): Unlock the session lock when calling one of our callbacks. Fixes #532011.
* gst/rtpmanager/: Also keep track of the first buffer timestamp together with ↵Wim Taymans2009-08-111-0/+2
| | | | | | | | | | | | | | | | | | | the first Original commit message from CVS: * gst/rtpmanager/gstrtpbin.c: (gst_rtp_bin_associate), (gst_rtp_bin_sync_chain): * gst/rtpmanager/rtpsession.c: (update_arrival_stats), (rtp_session_process_sr), (rtp_session_on_timeout): * gst/rtpmanager/rtpsource.c: (rtp_source_init), (calculate_jitter): * gst/rtpmanager/rtpsource.h: * gst/rtpmanager/rtpstats.h: Also keep track of the first buffer timestamp together with the first RTP timestamp as they both are needed to construct the timing of outgoing packets in the jitterbuffer and are therefore also needed to manage lip-sync. This fixes lip-sync if the first RTP packets arrive with a wildly different gap.
* gst/rtpmanager/rtpsession.*: Implement collision and loop detection in ↵Olivier Crete2009-08-111-17/+213
| | | | | | | | | | | | | | | | | | | | | rtpmanager. Original commit message from CVS: Patch by: Olivier Crete <tester at tester dot ca> * gst/rtpmanager/rtpsession.c: (find_add_conflicting_addresses), (check_collision), (obtain_source), (rtp_session_create_new_ssrc), (rtp_session_create_source), (rtp_session_process_rtp), (rtp_session_process_sr), (rtp_session_process_rr), (rtp_session_process_sdes), (rtp_session_process_bye), (rtp_session_send_bye_locked), (rtp_session_send_bye), (rtp_session_on_timeout): * gst/rtpmanager/rtpsession.h: Implement collision and loop detection in rtpmanager. Fixes #520626. * gst/rtpmanager/rtpsource.c: (rtp_source_reset), (rtp_source_init): * gst/rtpmanager/rtpsource.h: Add method to reset stats.
* gst/rtpmanager/: Make it possible to use different user_data for each of the ↵Youness Alaoui2009-08-111-15/+141
| | | | | | | | | | | | | | | | | | | | | callbacks. Original commit message from CVS: Patch by: Youness Alaoui <youness dot alaoui at collabora dot co dot uk> * gst/rtpmanager/gstrtpsession.c: (gst_rtp_session_clock_rate): * gst/rtpmanager/rtpsession.c: (rtp_session_set_callbacks), (rtp_session_set_process_rtp_callback), (rtp_session_set_send_rtp_callback), (rtp_session_set_send_rtcp_callback), (rtp_session_set_sync_rtcp_callback), (rtp_session_set_clock_rate_callback), (rtp_session_set_reconsider_callback), (source_push_rtp), (source_clock_rate), (rtp_session_process_bye), (rtp_session_process_rtcp), (rtp_session_send_bye), (rtp_session_on_timeout): * gst/rtpmanager/rtpsession.h: Make it possible to use different user_data for each of the callbacks. Fixes #508587.
* gst/rtpmanager/: Fix some leaks.Wim Taymans2009-08-111-0/+3
| | | | | | | | | | | Original commit message from CVS: * gst/rtpmanager/gstrtpbin.c: (gst_rtp_bin_finalize), (gst_rtp_bin_set_sdes_string), (gst_rtp_bin_get_sdes_string), (gst_rtp_bin_handle_message): * gst/rtpmanager/rtpsession.c: (rtp_session_finalize), (rtp_session_send_bye): * gst/rtpmanager/rtpsource.c: (rtp_source_finalize): Fix some leaks.
* gst/rtpmanager/: Post a message when the SDES infor changes for a source.Wim Taymans2009-08-111-1/+1
| | | | | | | | | | | | Original commit message from CVS: * gst/rtpmanager/gstrtpbin.c: (gst_rtp_bin_class_init), (gst_rtp_bin_handle_message): * gst/rtpmanager/gstrtpsession.c: (source_get_sdes_structure), (on_ssrc_sdes): Post a message when the SDES infor changes for a source. * gst/rtpmanager/rtpsession.c: * gst/rtpmanager/rtpsource.c: Update some comments.
* gst/rtpmanager/: Add signal to notify of an SDES change.Wim Taymans2009-08-111-12/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | Original commit message from CVS: * gst/rtpmanager/gstrtpbin.c: (on_ssrc_sdes), (create_session), (gst_rtp_bin_class_init): * gst/rtpmanager/gstrtpbin.h: * gst/rtpmanager/gstrtpclient.c: * gst/rtpmanager/gstrtpclient.h: * gst/rtpmanager/gstrtpjitterbuffer.h: * gst/rtpmanager/gstrtpmanager.c: * gst/rtpmanager/gstrtpptdemux.c: * gst/rtpmanager/gstrtpptdemux.h: * gst/rtpmanager/gstrtpsession.c: (on_ssrc_sdes), (gst_rtp_session_class_init), (gst_rtp_session_init): * gst/rtpmanager/gstrtpsession.h: * gst/rtpmanager/gstrtpssrcdemux.c: * gst/rtpmanager/gstrtpssrcdemux.h: * gst/rtpmanager/rtpjitterbuffer.c: * gst/rtpmanager/rtpjitterbuffer.h: * gst/rtpmanager/rtpsession.c: (rtp_session_class_init), (on_ssrc_sdes), (rtp_session_process_sdes): * gst/rtpmanager/rtpsession.h: * gst/rtpmanager/rtpsource.c: * gst/rtpmanager/rtpsource.h: * gst/rtpmanager/rtpstats.c: * gst/rtpmanager/rtpstats.h: Add signal to notify of an SDES change. Fix object type in the signal callbacks.
* gst/rtpmanager/: Update comment.Wim Taymans2009-08-111-227/+287
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Original commit message from CVS: * gst/rtpmanager/gstrtpbin.c: (create_session): * gst/rtpmanager/rtpjitterbuffer.c: Update comment. * gst/rtpmanager/gstrtpsession.c: (gst_rtp_session_class_init), (gst_rtp_session_set_property), (gst_rtp_session_get_property): Define some GObject properties to set SDES and other configuration. * gst/rtpmanager/rtpsession.c: (rtp_session_class_init), (rtp_session_init), (rtp_session_finalize), (rtp_session_set_property), (rtp_session_get_property), (on_ssrc_sdes), (rtp_session_set_bandwidth), (rtp_session_get_bandwidth), (rtp_session_set_rtcp_fraction), (rtp_session_get_rtcp_fraction), (rtp_session_set_sdes_string), (rtp_session_get_sdes_string), (obtain_source), (rtp_session_get_internal_source), (rtp_session_process_sdes), (rtp_session_send_rtp), (rtp_session_next_timeout), (session_sdes), (is_rtcp_time): * gst/rtpmanager/rtpsession.h: Add signal when new SDES infor has been found for a source. Create properties for SDES and other info. Simplify the SDES API. Add method for getting the internal source object of the session. * gst/rtpmanager/rtpsource.c: (rtp_source_class_init), (rtp_source_finalize), (rtp_source_set_property), (rtp_source_get_property), (rtp_source_set_callbacks), (rtp_source_get_ssrc), (rtp_source_set_as_csrc), (rtp_source_is_as_csrc), (rtp_source_is_active), (rtp_source_is_validated), (rtp_source_is_sender), (rtp_source_received_bye), (rtp_source_get_bye_reason), (rtp_source_set_sdes), (rtp_source_set_sdes_string), (rtp_source_get_sdes), (rtp_source_get_sdes_string), (rtp_source_get_new_sr), (rtp_source_get_new_rb): * gst/rtpmanager/rtpsource.h: Add GObject properties for various things. Don't leak the bye reason.
* gst/rtpmanager/rtpsession.c: When reconsidering RTCP timeouts, set the next ↵Wim Taymans2009-08-111-11/+32
| | | | | | | | | | timeout against the last report time inst... Original commit message from CVS: * gst/rtpmanager/rtpsession.c: (rtp_session_next_timeout), When reconsidering RTCP timeouts, set the next timeout against the last report time instead of the current clock time so that we don't end up reconsidering forever.
* gst/rtpmanager/: Add notification of active SSRCs to various RTP elements. ↵Wim Taymans2009-08-111-0/+23
| | | | | | | | | | | | | | | | | Fixes #478566. Original commit message from CVS: * gst/rtpmanager/gstrtpbin.c: (on_ssrc_active), (create_session), (gst_rtp_bin_class_init): * gst/rtpmanager/gstrtpbin.h: * gst/rtpmanager/gstrtpsession.c: (on_ssrc_active), (gst_rtp_session_class_init), (gst_rtp_session_init), (gst_rtp_session_event_send_rtp_sink): * gst/rtpmanager/gstrtpsession.h: * gst/rtpmanager/rtpsession.c: (rtp_session_class_init), (on_ssrc_active), (rtp_session_process_rb): * gst/rtpmanager/rtpsession.h: Add notification of active SSRCs to various RTP elements. Fixes #478566.
* gst/rtpmanager/: Various leak fixes.Wim Taymans2009-08-111-0/+5
| | | | | | | | | | | | | | | | | | | | Original commit message from CVS: * gst/rtpmanager/gstrtpbin.c: (create_session), (free_session), (get_client), (free_client), (gst_rtp_bin_associate), (free_stream), (gst_rtp_bin_class_init), (gst_rtp_bin_dispose), (gst_rtp_bin_finalize): * gst/rtpmanager/gstrtpjitterbuffer.c: (gst_rtp_jitter_buffer_class_init), (gst_rtp_jitter_buffer_finalize): * gst/rtpmanager/gstrtpptdemux.c: (gst_rtp_pt_demux_release): * gst/rtpmanager/gstrtpsession.c: (gst_rtp_session_finalize), (gst_rtp_session_set_property), (gst_rtp_session_chain_recv_rtp), (gst_rtp_session_chain_send_rtp): * gst/rtpmanager/gstrtpssrcdemux.c: (gst_rtp_ssrc_demux_class_init), (gst_rtp_ssrc_demux_dispose): * gst/rtpmanager/rtpsession.c: (rtp_session_finalize): * gst/rtpmanager/rtpsession.h: Various leak fixes.
* gst/rtpmanager/gstrtpbin.c: Calculate and configure the NTP base time so ↵Wim Taymans2009-08-111-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | that we can generate better Original commit message from CVS: * gst/rtpmanager/gstrtpbin.c: (calc_ntp_ns_base), (gst_rtp_bin_change_state), (new_payload_found), (create_send_rtp): Calculate and configure the NTP base time so that we can generate better NTP times in SR packets. Set caps on new ghostpad. * gst/rtpmanager/gstrtpjitterbuffer.c: (gst_rtp_jitter_buffer_loop): Clean debug statement. * gst/rtpmanager/gstrtpsession.c: (gst_rtp_session_class_init), (gst_rtp_session_init), (gst_rtp_session_set_property), (gst_rtp_session_get_property), (get_current_ntp_ns_time), (rtcp_thread), (gst_rtp_session_event_recv_rtp_sink), (gst_rtp_session_internal_links), (gst_rtp_session_chain_recv_rtp), (gst_rtp_session_event_send_rtp_sink), (gst_rtp_session_chain_send_rtp), (create_recv_rtp_sink), (create_send_rtp_sink): * gst/rtpmanager/gstrtpsession.h: Add ntp-ns-base property to convert running_time to NTP time. Handle NEWSEGMENT events on send and recv RTP pads so that we can calculate the running time and thus NTP time of the packets. Simplify getting the current NTP time using the pipeline clock. Implement internal links functions. Use the buffer timestamp to calculate the NTP time instead of the clock. * gst/rtpmanager/gstrtpssrcdemux.c: (create_demux_pad_for_ssrc), (gst_rtp_ssrc_demux_init), (gst_rtp_ssrc_demux_sink_event), (gst_rtp_ssrc_demux_chain), (gst_rtp_ssrc_demux_rtcp_chain), (gst_rtp_ssrc_demux_internal_links), (gst_rtp_ssrc_demux_src_query): * gst/rtpmanager/gstrtpssrcdemux.h: Implement internal links function. Calculate the diff between different streams, this might be used later to get the inter stream latency. * gst/rtpmanager/rtpsession.c: (rtp_session_send_rtp): Simple cleanup. * gst/rtpmanager/rtpsource.c: (rtp_source_init), (calculate_jitter), (rtp_source_send_rtp), (rtp_source_get_new_sr): Make the clock skew window a little bigger. Apply the clock skew to all buffers, not just one with a new timestamp. Calculate and debug sender clock drift. Use extended last timestamp to interpollate for SR reports.
* gst/rtpmanager/: Updated example pipelines in docs.Wim Taymans2009-08-111-197/+98
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Original commit message from CVS: * gst/rtpmanager/gstrtpbin-marshal.list: * gst/rtpmanager/gstrtpbin.c: (gst_rtp_bin_get_client), (gst_rtp_bin_associate), (gst_rtp_bin_sync_chain), (create_stream), (gst_rtp_bin_init), (caps_changed), (new_ssrc_pad_found), (create_recv_rtp), (create_recv_rtcp), (create_send_rtp): * gst/rtpmanager/gstrtpbin.h: Updated example pipelines in docs. Handle sync_rtcp buffers from the SSRC demuxer to perform lip-sync. Set the default latency correctly. Add some more points where we can get caps. * gst/rtpmanager/gstrtpjitterbuffer.c: (gst_rtp_jitter_buffer_class_init), (gst_jitter_buffer_sink_parse_caps), (gst_rtp_jitter_buffer_loop), (gst_rtp_jitter_buffer_query), (gst_rtp_jitter_buffer_set_property), (gst_rtp_jitter_buffer_get_property): Add ts-offset property to control timestamping. * gst/rtpmanager/gstrtpsession.c: (gst_rtp_session_class_init), (gst_rtp_session_init), (gst_rtp_session_set_property), (gst_rtp_session_get_property), (get_current_ntp_ns_time), (rtcp_thread), (stop_rtcp_thread), (gst_rtp_session_change_state), (gst_rtp_session_send_rtcp), (gst_rtp_session_sync_rtcp), (gst_rtp_session_cache_caps), (gst_rtp_session_clock_rate), (gst_rtp_session_sink_setcaps), (gst_rtp_session_chain_recv_rtp), (gst_rtp_session_event_send_rtp_sink), (gst_rtp_session_chain_send_rtp), (create_recv_rtp_sink), (create_recv_rtcp_sink), (create_send_rtp_sink), (create_send_rtcp_src): Various cleanups. Feed rtpsession manager with NTP time based on pipeline clock when handling RTP packets and RTCP timeouts. Perform all RTCP with the system clock. Set caps on RTCP outgoing buffers. * gst/rtpmanager/gstrtpssrcdemux.c: (find_demux_pad_for_ssrc), (create_demux_pad_for_ssrc), (gst_rtp_ssrc_demux_base_init), (gst_rtp_ssrc_demux_init), (gst_rtp_ssrc_demux_sink_event), (gst_rtp_ssrc_demux_rtcp_sink_event), (gst_rtp_ssrc_demux_chain), (gst_rtp_ssrc_demux_rtcp_chain): * gst/rtpmanager/gstrtpssrcdemux.h: Also demux RTCP messages. * gst/rtpmanager/rtpsession.c: (rtp_session_set_callbacks), (update_arrival_stats), (rtp_session_process_rtp), (rtp_session_process_rb), (rtp_session_process_sr), (rtp_session_process_rr), (rtp_session_process_rtcp), (rtp_session_send_rtp), (rtp_session_send_bye), (session_start_rtcp), (session_report_blocks), (session_cleanup), (rtp_session_on_timeout): * gst/rtpmanager/rtpsession.h: Remove the get_time callback, the GStreamer part will feed us with enough timing information. Split sync timing and RTCP timing information. Factor out common RB handling for SR and RR. Send out SR RTCP packets for lip-sync. Move SR and RR packet info generation to the source. * gst/rtpmanager/rtpsource.c: (rtp_source_init), (rtp_source_update_caps), (get_clock_rate), (calculate_jitter), (rtp_source_process_rtp), (rtp_source_send_rtp), (rtp_source_process_sr), (rtp_source_process_rb), (rtp_source_get_new_sr), (rtp_source_get_new_rb), (rtp_source_get_last_sr): * gst/rtpmanager/rtpsource.h: * gst/rtpmanager/rtpstats.h: Use caps on incomming buffers to get timing information when they are there. Calculate clock scew of the receiver compared to the sender and adjust the rtp timestamps. Calculate the round trip in sources. Do SR and RR calculations in the source.
* gst/rtpmanager/gstrtpsession.*: Distribute synchronisation parameters to the ↵Wim Taymans2009-08-111-4/+74
| | | | | | | | | | | | | | | | | | | | | session manager so that it can generate ... Original commit message from CVS: * gst/rtpmanager/gstrtpsession.c: (stop_rtcp_thread), (gst_rtp_session_change_state), (gst_rtp_session_event_send_rtp_sink): * gst/rtpmanager/gstrtpsession.h: Distribute synchronisation parameters to the session manager so that it can generate correct SR packets for lip-sync. * gst/rtpmanager/rtpsession.c: (rtp_session_set_base_time), (rtp_session_set_timestamp_sync), (session_start_rtcp): * gst/rtpmanager/rtpsession.h: Add methods for setting sync parameters. Set correct RTP time in SR packets using the sync params. * gst/rtpmanager/rtpsource.c: (rtp_source_send_rtp): * gst/rtpmanager/rtpsource.h: Record last RTP <-> GST timestamp so that we can use them to convert NTP to RTP timestamps in SR packets.
* gst/rtpmanager/gstrtpbin.c: Add some more advanced example pipelines.Wim Taymans2009-08-111-0/+1
| | | | | | | | | | | | | | | Original commit message from CVS: * gst/rtpmanager/gstrtpbin.c: (gst_rtp_bin_clear_pt_map): Add some more advanced example pipelines. * gst/rtpmanager/gstrtpsession.c: (rtcp_thread), (stop_rtcp_thread), (gst_rtp_session_send_rtcp): Add some debug and FIXME. Release LOCK when performing session cleanup. * gst/rtpmanager/rtpsession.c: (session_report_blocks): Add some debug. * gst/rtpmanager/rtpsource.c: (calculate_jitter), (rtp_source_send_rtp): Make sure we always send RTP packets with the session SSRC.
* gst/rtpmanager/gstrtpjitterbuffer.c: Fix EOS handling.Wim Taymans2009-08-111-0/+12
| | | | | | | | | | | | | | | | Original commit message from CVS: * gst/rtpmanager/gstrtpjitterbuffer.c: (gst_rtp_jitter_buffer_sink_event), (gst_rtp_jitter_buffer_chain), (gst_rtp_jitter_buffer_loop): Fix EOS handling. Convert some DEBUG into WARNINGs. Pause task when flushing. * gst/rtpmanager/gstrtpsession.c: (gst_rtp_session_class_init), (rtcp_thread), (gst_rtp_session_event_recv_rtcp_sink): Use system clock for RTCP session management timeouts. * gst/rtpmanager/rtpsession.c: (on_new_ssrc), (on_ssrc_collision), (on_ssrc_validated), (on_bye_ssrc), (on_bye_timeout), (on_timeout): Release the session lock when emiting signals.
* gst/rtpmanager/: Remove complicated async queue and replace with more simple ↵Wim Taymans2009-08-111-2/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | jitterbuffer code while also fixing some... Original commit message from CVS: * gst/rtpmanager/Makefile.am: * gst/rtpmanager/async_jitter_queue.c: * gst/rtpmanager/async_jitter_queue.h: * gst/rtpmanager/rtpjitterbuffer.c: (rtp_jitter_buffer_class_init), (rtp_jitter_buffer_init), (rtp_jitter_buffer_finalize), (rtp_jitter_buffer_new), (compare_seqnum), (rtp_jitter_buffer_insert), (rtp_jitter_buffer_pop), (rtp_jitter_buffer_flush), (rtp_jitter_buffer_num_packets), (rtp_jitter_buffer_get_ts_diff): * gst/rtpmanager/rtpjitterbuffer.h: Remove complicated async queue and replace with more simple jitterbuffer code while also fixing some bugs. * gst/rtpmanager/gstrtpbin-marshal.list: * gst/rtpmanager/gstrtpbin.c: (on_new_ssrc), (on_ssrc_collision), (on_ssrc_validated), (on_bye_ssrc), (on_bye_timeout), (on_timeout), (create_session), (gst_rtp_bin_class_init), (create_recv_rtp), (create_send_rtp): * gst/rtpmanager/gstrtpbin.h: * gst/rtpmanager/gstrtpjitterbuffer.c: (gst_rtp_jitter_buffer_init), (gst_rtp_jitter_buffer_dispose), (gst_jitter_buffer_sink_parse_caps), (gst_rtp_jitter_buffer_flush_start), (gst_rtp_jitter_buffer_flush_stop), (gst_rtp_jitter_buffer_change_state), (gst_rtp_jitter_buffer_sink_event), (gst_rtp_jitter_buffer_chain), (gst_rtp_jitter_buffer_loop), (gst_rtp_jitter_buffer_set_property): * gst/rtpmanager/gstrtpsession.c: (on_new_ssrc), (on_ssrc_collision), (on_ssrc_validated), (on_bye_ssrc), (on_bye_timeout), (on_timeout), (gst_rtp_session_class_init), (gst_rtp_session_init): * gst/rtpmanager/gstrtpsession.h: * gst/rtpmanager/rtpsession.c: (on_bye_ssrc), (session_cleanup): Use new jitterbuffer code. Expose some new signals in preparation for handling EOS.
* gst/qtdemux/qtdemux.c (gst_qtdemux_move_stream, ↵Stefan Kost2009-08-111-11/+13
| | | | | | | | | | | | | | | | | | | | | gst_qtdemux_loop_state_header, gst_qtdemux_activate_segment, gst_qtde... Original commit message from CVS: * gst/qtdemux/qtdemux.c (gst_qtdemux_move_stream, gst_qtdemux_loop_state_header, gst_qtdemux_activate_segment, gst_qtdemux_prepare_current_sample, gst_qtdemux_combine_flows, gst_qtdemux_loop_state_movie, gst_qtdemux_loop, qtdemux_parse_segments, qtdemux_parse_trak): * gst/rtpmanager/rtpsession.c (rtp_session_get_bandwidth, rtp_session_get_rtcp_bandwidth, rtp_session_get_cname, rtp_session_get_name, rtp_session_get_email, rtp_session_get_phone, rtp_session_get_location, rtp_session_get_tool, rtp_session_process_bye, session_report_blocks): * gst/rtpmanager/rtpsource.c (rtp_source_process_rtp, rtp_source_send_rtp, rtp_source_process_sr, rtp_source_process_rb): More format arg fixing (spotted by Ali Sabil <ali.sabil@gmail.com>). * gst/switch/Makefile.am: Add require libraries(spotted by Ali Sabil <ali.sabil@gmail.com>).
* gst/rtpmanager/gstrtpjitterbuffer.c: Add some debug info.Wim Taymans2009-08-111-2/+2
| | | | | | | | | | Original commit message from CVS: * gst/rtpmanager/gstrtpjitterbuffer.c: (gst_rtp_jitter_buffer_query): Add some debug info. * gst/rtpmanager/rtpsession.c: (rtp_session_init), (rtp_session_send_rtp): Store real user name in the session.
* gst/rtpmanager/async_jitter_queue.c: Fix the case where the buffer underruns ↵Wim Taymans2009-08-111-3/+40
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | and does not block. Original commit message from CVS: * gst/rtpmanager/async_jitter_queue.c: (signal_waiting_threads), (async_jitter_queue_pop_intern_unlocked): Fix the case where the buffer underruns and does not block. * gst/rtpmanager/gstrtpbin.c: (gst_rtp_bin_base_init), (create_recv_rtcp), (create_send_rtp), (create_rtcp), (gst_rtp_bin_request_new_pad): Rename RTCP send pad, like in the session manager. Allow getting an RTCP pad for receiving even if we don't receive RTP. fix handling of send_rtp_src pad. * gst/rtpmanager/gstrtpptdemux.c: (gst_rtp_pt_demux_chain): When no pt map could be found, fall back to the sinkpad caps. * gst/rtpmanager/gstrtpsession.c: (gst_rtp_session_process_rtp), (gst_rtp_session_send_rtp), (create_recv_rtp_sink), (create_recv_rtcp_sink), (create_send_rtp_sink), (create_send_rtcp_src): Fix pad names. * gst/rtpmanager/rtpsession.c: (source_push_rtp), (rtp_session_create_source), (rtp_session_process_sr), (rtp_session_send_rtp), (session_start_rtcp): * gst/rtpmanager/rtpsession.h: Unlock session when performing a callback. Add callbacks for the internal session object. Fix sending of RTP packets. first attempt at adding NTP times in the SR packets. Small debug and doc improvements. * gst/rtpmanager/rtpsource.c: (rtp_source_send_rtp): Update stats for SR reports.
* gst/rtpmanager/gstrtpsession.c: Remove debug.Wim Taymans2009-08-111-8/+14
| | | | | | | | | | | | Original commit message from CVS: * gst/rtpmanager/gstrtpsession.c: (gst_rtp_session_send_rtcp): Remove debug. * gst/rtpmanager/rtpsession.c: (rtp_session_process_sr), (rtp_session_process_sdes), (calculate_rtcp_interval), (rtp_session_next_timeout), (session_report_blocks): * gst/rtpmanager/rtpstats.c: (rtp_stats_calculate_rtcp_interval): Improve debugging Fix interval for BYE/RTCP packets.
* gst/rtpmanager/gstrtpsession.c: Move reconsideration code to the rtpsession ↵Wim Taymans2009-08-111-71/+470
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | object. Original commit message from CVS: * gst/rtpmanager/gstrtpsession.c: (rtcp_thread), (gst_rtp_session_send_rtcp), (gst_rtp_session_reconsider): Move reconsideration code to the rtpsession object. Simplify timout handling and add reconsideration. * gst/rtpmanager/rtpsession.c: (rtp_session_class_init), (rtp_session_init), (rtp_session_finalize), (on_bye_ssrc), (on_bye_timeout), (on_timeout), (rtp_session_set_callbacks), (obtain_source), (rtp_session_create_source), (update_arrival_stats), (rtp_session_process_rtp), (rtp_session_process_sr), (rtp_session_process_rr), (rtp_session_process_bye), (rtp_session_process_rtcp), (calculate_rtcp_interval), (rtp_session_send_bye), (rtp_session_next_timeout), (session_start_rtcp), (session_report_blocks), (session_cleanup), (session_sdes), (session_bye), (is_rtcp_time), (rtp_session_on_timeout): * gst/rtpmanager/rtpsession.h: Handle timeout of inactive sources and senders. Implement BYE scheduling. * gst/rtpmanager/rtpsource.c: (calculate_jitter), (rtp_source_process_sr), (rtp_source_get_last_sr), (rtp_source_get_last_rb): * gst/rtpmanager/rtpsource.h: Add members to check for timeouts. * gst/rtpmanager/rtpstats.c: (rtp_stats_init_defaults), (rtp_stats_calculate_rtcp_interval), (rtp_stats_add_rtcp_jitter), (rtp_stats_calculate_bye_interval): * gst/rtpmanager/rtpstats.h: Use RFC algorithm for calculating the reporting interval.
* gst/rtpmanager/gstrtpsession.c: Implement forward and reverse reconsideration.Wim Taymans2009-08-111-5/+5
| | | | | | | | | | | Original commit message from CVS: * gst/rtpmanager/gstrtpsession.c: (rtcp_thread): Implement forward and reverse reconsideration. * gst/rtpmanager/rtpsession.c: (rtp_session_get_num_sources), (rtp_session_get_num_active_sources), (rtp_session_process_sr), (session_report_blocks): * gst/rtpmanager/rtpsession.h: Small cleanups.
* gst/rtpmanager/gstrtpjitterbuffer.c: Report NO_PREROLL when going to PAUSED.Wim Taymans2009-08-111-20/+34
| | | | | | | | | | | | | | | | | | | | Original commit message from CVS: * gst/rtpmanager/gstrtpjitterbuffer.c: (gst_rtp_jitter_buffer_change_state): Report NO_PREROLL when going to PAUSED. * gst/rtpmanager/gstrtpsession.c: (rtcp_thread): Don't send RTCP right before we are shutting down. * gst/rtpmanager/rtpsession.c: (rtp_session_process_rtp), (rtp_session_process_sr), (session_report_blocks), (rtp_session_perform_reporting): Improve report blocks. * gst/rtpmanager/rtpsource.c: (calculate_jitter), (init_seq), (rtp_source_process_rtp), (rtp_source_process_sr), (rtp_source_process_rb), (rtp_source_get_last_sr), (rtp_source_get_last_rb): * gst/rtpmanager/rtpsource.h: * gst/rtpmanager/rtpstats.h: Cleanups, add methods to access stats.