Commit graph

491 commits

Author SHA1 Message Date
Wim Taymans
eb6d552353 jitterbuffer: get better buffering level
When the jitterbuffer contains -1 timestamps, make sure we still calculate the
buffer fill level by skipping the -1 buffers.
Try to be more resilient to weird input timestamps.
2010-12-20 15:56:50 +01:00
Wim Taymans
6cb0efede4 jitterbuffer: provide a clock.
since we are using the clock for sync, we need to also provide a clock for good
measure. The reason is that even if downstream elements provide a clock, we
don't want to have that clock selected because it might not be running yet.
2010-12-20 11:13:09 +01:00
Wim Taymans
210f1c44c7 rtpbin: copy buffering stats
when we create an aggregate buffering message, copy the buffering stats form the
last message. At least we get correct buffering mode then.
2010-12-20 11:13:09 +01:00
Wim Taymans
0c3333da04 session: fix average RTCP packet size some more.
Fix stupid error in averaging macro.
Include udp headers in packet length estimation.
2010-12-14 18:12:43 +01:00
Wim Taymans
7ebd374766 rtpbin: correctly calculate RTCP packet size 2010-12-14 17:15:23 +01:00
Wim Taymans
ffc7cd9803 jitterbuffer: avoid leaking sink events
Avoid leaking the newsegment event when it has the wrong format.
2010-12-13 12:57:58 +01:00
Mark Nauwelaerts
46c91476eb rtpssrcdemux: do not hold custom PAD_LOCK when pushing downstream 2010-12-03 15:50:21 +01:00
Olivier Crête
077a61932a rtpbin: Use the right constant to define the "use-pipeline-clock" property
The wrong #define was being used, now use the correct one.
2010-10-14 17:41:30 -04:00
Stefan Kost
d8167e3071 various (gst): add a missing G_PARAM_STATIC_STRINGS flags 2010-10-13 18:00:28 +03:00
Tim-Philipp Müller
d65eb2b91a ext, gst: canonicalise property names where this wasn't the case
ie. "foo_bar" -> "foo-bar"
2010-10-12 16:04:21 +01:00
Vladimir Eremeev
8bf7381385 rtpjitterbuffer: improve article reference in comment block
https://bugzilla.gnome.org/show_bug.cgi?id=631082
2010-10-01 18:07:03 +01:00
Thijs Vermeir
2c2c90a723 rtpjitterbuffer: update link to documentation 2010-09-30 12:08:49 +02:00
Pascal Buhler
7a8c2a4b8a rtpmanager: packet lost should not be a warning. It happens all the time... 2010-09-24 16:00:03 +02:00
Pascal Buhler
ca6a512b5e rtpbin: Make cleaning up sources in rtp_session_on_timeout MT safe
Using _foreach_remove on the hashtable, while releasing the lock protecting
that table inside the callback is not a good idea. The hashtable might
then change (a source removed or added) while signals like on_timeout
are being sent.

This solution makes a copy of the table, performs the _foreach without
actually removing any sources, but marks them for removal on a second
iteration with the real list, but this time not letting go of the lock.

Fixes 
2010-09-24 15:38:00 +02:00
Pascal Buhler
bd8d80a8e4 rtpbin: Handle rysnc of iterator when looking for free pad name
If a new pad was added while iterating then a pad could be
returned that was already in use.

Fixes 
2010-09-24 14:10:26 +02:00
Wim Taymans
8337c89c74 rtpsession: fix compilation 2010-09-24 14:10:26 +02:00
Trond Andersen
800b4bdb26 rtpbin: Unlock before adding pad in new_payload_found
Holding internal locks while potentially calling out is a source
of deadlocks, and in this case the application might subscribe to the
pad-added signal.

Fixes 
2010-09-24 14:00:11 +02:00
Havard Graff
062568a9f5 rtpsession: relax third-party collision detection
If the source has been inactive for some time, we assume that it has
simply changed its transport source address. Hence, there is no true
third-party collision - only a simulated one.

Fixes 
2010-09-24 13:56:56 +02:00
Wim Taymans
ce007b244e rtpsource: whitespace fixes 2010-09-24 13:50:02 +02:00
Wim Taymans
c5203a479b rtpsource: simplify the rate estimation some more 2010-09-24 13:48:50 +02:00
Havard Graff
0fa589a3dd rtpmanager: provide additional statistics 2010-09-24 13:26:10 +02:00
Wim Taymans
2c8b725591 rtpstats: printf format fixes 2010-09-17 11:07:52 +02:00
Olivier Crête
8e73da10b3 gstrtpsession: Split getting the caps into its own function 2010-09-13 16:25:42 +02:00
Wim Taymans
8e1c9b5b33 rtpbin: small cleanup. 2010-09-13 16:25:42 +02:00
Wim Taymans
d541f5e24d rtpsession: Small cleanups
Make the property description prettier.
Actually multiple the bandwidth with the fraction.
2010-09-13 15:51:20 +02:00
Olivier Crête
1f17b334ff rtpsession: Calculate RTCP bandwidth as a fraction of the RTP bandwidth
Calculate the RTCP bandwidth to be a fraction of the RTP bandwidth if it is
specified as a value between 0 and 1.
2010-09-13 15:51:20 +02:00
Wim Taymans
8381d9788d session: improve bandwidth recalculation
Also recalculate bandwidth when one of the source bandwidths changed.
Use the newly calculated bandwidth.
2010-09-13 15:51:20 +02:00
Olivier Crête
6f53a2b240 rtpsession: Add the option to auto-discover the RTP bandwidth 2010-09-13 15:51:19 +02:00
Thijs Vermeir
f38e37470a rtpbin: set use-pipeline-clock on correct GObject 2010-09-13 14:39:51 +02:00
Olivier Crête
94e87ef8ee rtpsession: Initialise the average scaled by 16 2010-09-13 13:10:19 +02:00
Wim Taymans
e6db74764b rtpsession: add running_time argument docs 2010-09-13 12:41:56 +02:00
Olivier Crête
00fd89c074 rtpstats: Rectify description of current_time in RTPArrivalStats
It is the current time, it is unrelated to when the packet was actually received.
2010-09-13 12:37:01 +02:00
Wim Taymans
cb6de429a0 rtpsession: compute the average correctly scaled 2010-09-13 12:31:40 +02:00
Olivier Crête
64e4ffa25b rtpsession: Count sent RTCP packets after they have been finished
If they are counted before calling gst_rtcp_buffer_end(), then the
size is way too big.
2010-09-13 12:13:23 +02:00
Olivier Crête
306ee454c6 gstrtpsession: Don't unref pads in finalize
The gstrtpsession object is not holding any reference to them directly
2010-09-13 12:10:11 +02:00
Wim Taymans
93228ccd52 rtpbin: add ntp-sync property
Add an ntp-sync property that will sync the received streams to the server
NTP time. This requires synchronized NTP times between the sender and receivers,
like with ntpd.

Based on patch from Thijs Vermeir.

Fixes 
2010-09-06 11:01:57 +02:00
Wim Taymans
f03fd91400 jitterbuffer: rename a variable to avoid confusion 2010-09-06 11:01:57 +02:00
Wim Taymans
e3479630ae rtpbin: rename some variables for less confusion 2010-09-06 11:01:57 +02:00
Wim Taymans
0f59664c6a rtpjitterbuffer: move comment where it belongs 2010-09-06 11:01:57 +02:00
Wim Taymans
4fd81747f3 session: minor cleanups
Make clock snapshots more accurate by only sampling the same clock once.
2010-09-06 11:01:57 +02:00
Thijs Vermeir
51020549f0 rtpbin: add use-pipeline-clock property
With this property RTCP SR NTP times can be based
on the system clock (maybe synced with ntpd) or the
current pipeline clock.

https://bugzilla.gnome.org/show_bug.cgi?id=627796
2010-09-06 11:01:57 +02:00
Thijs Vermeir
244a35a226 rtpptdemux: fix memleak on custom downstream events
by not sending custom downstream event twice and fix memleak when
not handling the event

https://bugzilla.gnome.org/show_bug.cgi?id=623196
2010-06-30 12:39:09 +02:00
Sebastian Dröge
f16ed4a91c gst: Don't use GST_DEBUG_FUNCPTR for GObject vfuncs 2010-06-06 17:52:40 +02:00
Thijs Vermeir
0bb2be3a7e rtpjitterbuffer: fix compiler warning
unused variable ‘estimated’
2010-06-02 15:32:36 +02:00
Alessandro Decina
4b6cb93025 rtpjitterbuffer: stop buffering and emit EOS at the end of a stream
When using RTP_JITTER_BUFFER_MODE_BUFFER, make sure that the ringbuffer doesn't
get stuck buffering forever when there isn't enough data left to fill the
buffer.
2010-06-02 14:21:16 +02:00
Wim Taymans
dc2662e22b rtpbin: fix docs
Documentation error spotted by tony <caicai0119 at gmail.com>

Fixes 
2010-05-13 13:01:26 +02:00
Wim Taymans
50f26c671b rtpsession: fix return value 2010-05-07 19:06:35 +02:00
Wim Taymans
aadf4ddf7e rtpsession: add properties to configure the bandwidth
Add properties to proxy the bandwidth configuration to the session object.
2010-05-07 18:58:58 +02:00
Wim Taymans
69cde0e874 rtpsession: add properties to configure bandwidths
Add properties to configure the sender and receiver bandwidths.
Configure the bandwidths before calculating the RTCP timeout when we need to.
2010-05-07 18:57:13 +02:00
Wim Taymans
d84dc1112d rtpstats: add some debug info 2010-05-07 18:56:30 +02:00
Wim Taymans
5690331c9e rtpsession: small cleanups 2010-05-07 18:55:34 +02:00
Wim Taymans
0da5cf2e21 rtpstats: make bandwidths more configurable
Add a method to configure the various bandwidths in the session.
2010-05-07 16:55:13 +02:00
Wim Taymans
6eee730c4a rtpsession: handle NONE RTCP intervals
Prepare for handling RTCP reporting intervals of GST_CLOCK_TIME_NONE, which
means don't send RTCP at all.
2010-05-07 13:32:30 +02:00
Alessandro Decina
40899379c0 rtpjitterbuffer: move some initialization code from change_state to _init.
Set ->active to TRUE in _init so it can be set to FALSE after creating the
jitterbuffer and it won't be mistakenly reset to TRUE in the change_state
function.
This is needed to start the jitterbuffer as inactive when rtpbin is buffering.
2010-05-03 13:34:59 +02:00
Alessandro Decina
ffc2da30fc rtpbin: fix a bug handling BUFFERING messages.
If a session exists but has no streams, set the min buffering percent to 0
since it means that we haven't received anything for that session yet.
2010-05-03 11:56:58 +02:00
Alessandro Decina
f6e9f359b9 rtpbin: when a stream is created, pause the jitterbuffer if rtpbin is buffering. 2010-05-03 11:51:37 +02:00
Alessandro Decina
38a5b08ef2 rtpbin: fix a bug calculating stream offsets. 2010-05-03 11:23:59 +02:00
Stefan Kost
d6e9af2a11 docs: do proper escaping for "%" 2010-04-08 18:05:46 +03:00
Stefan Kost
9967a4112b rtpsession: remove prototype for non existing function
There is no function by that name anywhere.
2010-04-08 14:02:50 +03:00
Benjamin Otte
cccfeaa59c gst_element_class_set_details => gst_element_class_set_details_simple 2010-03-18 14:32:00 +01:00
Benjamin Otte
1055aaa9cb Add -Wredundant-decls warning flag
Also fix compile issues
2010-03-17 19:35:10 +01:00
Benjamin Otte
21f66635e8 Update for recent changes to common submodule
This just replaces every "$ERROR_CFLAGS" usage with a usage of
"$WARNING_CFLAGS $ERROR_CFLAGS" to get the same functionality as
previously.

Actually using that separation will happen later.
2010-03-10 21:53:51 +01:00
Olivier Crête
a6dfe96169 rtpsession: Make it possible to favor new sources in case of SSRC conflict
Add a "favor-new" property that tells the session to favor new sources when
there is a SSRC conflict. This is useful for SIP calls and other such cases
where a remote loop is extremely unlikely.

Fixes 
2010-03-10 11:21:19 +01:00
Olivier Crête
f336ea283f rtpsession: Move SSRC conflicts lists into RTPSource
We will also need to track SSRC conflicts in remote sources.

See 
2010-03-10 11:21:18 +01:00
Wim Taymans
529f443a61 rtpsource: use payload size to estimate bitrate
Use the length of the payload for estimating the receiver bitrate so that it
matches the calculations done on the sender side. Together with the number of
packets one can scale the bitrate with the header overhead of the lower
transport.
2010-03-08 17:48:04 +01:00
Wim Taymans
c971d1a9ab rtpsource: refactor bitrate estimation
Don't reuse the same variable we need for stats for the bitrate estimation
because we're updating it.
Refactor the bitrate estimation code so that both sender and receivers use the
same code path.
2010-03-08 17:48:00 +01:00
Tristan Matthews
a0a6d4ff3b added bitrate estimation to receiver-side stats, fixes 2010-03-08 17:47:55 +01:00
Sebastian Dröge
bcd06ea527 rtpjitterbuffer: Reset skew detection after instantiating the jitterbuffer
...not only when going to READY. This sets high_level and friends to
a more useful value.
2010-02-23 17:24:03 +01:00
Sebastian Dröge
0a12e69024 rtpjitterbuffer: Return 100 if high-level is 0 instead of dividing by zero 2010-02-23 17:20:02 +01:00
Tim-Philipp Müller
07fa73f199 docs: add Since: markers for new jitterbuffer properties 2010-02-19 12:13:07 +00:00
Wim Taymans
9d40d60960 rtpbin: remove use of ntp_ns_base 2010-02-15 21:36:29 +01:00
Wim Taymans
5a4ecc9da1 rtpbin: remove more ntpnstime and cleanups
Remove some code where we pass ntpnstime around, we can do most things with the
running_time just fine.
Rename a variable in the ArrivalStats struct so that it's clear that this is the
current system time.
2010-02-15 21:36:29 +01:00
Wim Taymans
74241e549f rtpsource: use running_time for jitter
Use the running_time to calculate the jitter instead of the ntp time. Part of
the plan to get rid of ntpnsbase.
2010-02-15 21:36:29 +01:00
Wim Taymans
83cb1aecc8 rtpbin: change how NTP time is calculated in RTCP
Don't calculate the NTP time based on the running_time of the pipeline but from
the systemclock. This allows us to generate more accurate NTP timestamps in case
the systemclock is synchronized with NTP or similar.
2010-02-15 21:36:29 +01:00
Tim-Philipp Müller
63c86ac3d8 raw1394, matroska, rtpmanager: remove padding from structures
None of these element and class structures are in public headers,
so don't need padding.
2010-02-15 00:50:10 +00:00
Wim Taymans
7f08081016 jitterbuffer: don't resync to invalid timestamps
If we detect backward timestamps on the server, don't try to resync when we
don't have an input timestamp (such as when using RTSP over TCP) instead, do
nothing but assume the timestamp was ok, it will correct itself when time goes
forwards.
2010-02-12 19:32:27 +01:00
Wim Taymans
d344754f03 rtpbin: fix typo 2010-02-12 17:22:56 +01:00
Wim Taymans
772eca5aff jitterbuffer: start out active and not buffering
There is no need to set the latency in the jittebuffer in _init, we will set
that later when going to PAUSED.
Set the jitterbuffer active and not buffering when starting.
2010-02-12 17:22:56 +01:00
Wim Taymans
8bbfd94c25 rtpbin: more buffering work
When deactivating jitterbuffers when the buffering starts, keep the current
percent of the jitterbuffer and also set the jitterbuffer in the buffering state
so that we know when it's filled again.
Add property to get the buffering percentage of the jitterbuffer.
2010-02-12 17:22:56 +01:00
Wim Taymans
e6e287cdcc rtpjitterbuffer: adjust latency in buffer mode
When we are in buffer mode, adjust the buffering low/high thresholds based on
the total configured latency. If we don't and there is a huge queue or element
with a big latency downstream we might drain the complete queue immediately and
start buffering again.
2010-02-12 17:22:55 +01:00
Wim Taymans
ab73603031 jitterbuffer: add ts-offset to timestamp
Add the ts-offset to the buffer timestamp to get the final output timestamp of
the buffer.
2010-02-12 17:22:55 +01:00
Wim Taymans
74a3be350d rtpbin: do more accurate buffer offsets
Return the next timestamp in the jitterbuffer.
Use the min-timestamp of the jitterbuffers to calculate an offset so that the
next timestamp is pushed with a timestamp equal to running_time.
Start producing timestamps from 0 in the buffering case too.
2010-02-12 17:22:55 +01:00
Wim Taymans
3efcc0fbc1 rtpbin: only start buffering when < 100%
Only start buffering when the percentage message is < 100 %.
2010-02-12 17:22:55 +01:00
Wim Taymans
0348ebe651 rtpbin: keep track of elapsed pause time
Keep track of the time we spend pausing the jitterbuffers when they were
buffering and distribute this elapsed time to the jitterbuffers.
Also keep the latency in nanosecond precision.
2010-02-12 17:22:54 +01:00
Wim Taymans
ecf6ed8fc1 jitterbuffer: keep track of offset
Keep track of an outgoing offset that we add to each outgoing buffer to
compensate for PAUSE when buffering.
Adjust the offset when activating.
2010-02-12 17:22:54 +01:00
Wim Taymans
048e5b6fbe jitterbuffer: report level using high watermark 2010-02-12 17:22:54 +01:00
Wim Taymans
8d814f3782 rtpbin: pass running_time to jitterbuffer pause
Pass the current running time to the jitterbuffer when pausing or resuming so
that it calculate the right offsets.
Small cleanups and comments.
Set the default rtspsrc latency to 2 seconds.
2010-02-12 17:22:54 +01:00
Wim Taymans
bf697b12e3 rtpbin: add some comments 2010-02-12 17:22:53 +01:00
Wim Taymans
20a27a545a rtpbin: more buffering updates
Add signal to pause the jitterbuffer. This will be emitted from gstrtpbin when
one of the jitterbuffers is buffering.
Make rtpbin collect the buffering messages and post a new buffering message with
the min value.
Remove the stats callback from jitterbuffer but pass a percent integer to
functions that affect the buffering state of the jitterbuffer. This allows us
then to post buffering messages from outside of the jitterbuffer lock.
2010-02-12 17:22:53 +01:00
Wim Taymans
a5b9d3f917 rtpbin: propagate buffer-mode property
Propagate buffer-mode property to the jitterbuffers.
Intercept BUFFERING messages in rtpbin
2010-02-12 17:22:53 +01:00
Wim Taymans
d3db9574a9 jitterbuffer: do more buffering implementation
Add callback for buffering stats.
Configure the latency in the jitterbuffer instead of passing it with _insert.
Calculate buffering levels when pushing and popping
Post buffering messages.
2010-02-12 17:22:52 +01:00
Wim Taymans
aeacbfed3e jitterbuffer: flesh out buffering mode some more
Add a buffering state to the jitterbuffer and wait until buffering ends before
pushing out packets.
2010-02-12 17:22:52 +01:00
Wim Taymans
56b29c9a6b jitterbuffer: hook up the mode property
Expose a mode property on the jitterbuffer.
Fix the case where timestamps are -1 in the check for outgoing timestamps.
2010-02-12 17:22:52 +01:00
Wim Taymans
be4517a6b8 jitterbuffer: add buffering mode options
Add getters and setters for different buffering modes that the jitterbuffer will
support. Default to the current slave mode.
2010-02-12 17:22:52 +01:00
Wim Taymans
99a581215f jitterbuffer: add some more debug info 2010-02-12 13:53:57 +01:00
Wim Taymans
05418f1687 rtpbin: avoid some structure copies
Don't make copied in the getter and setter for SDES in the RTPSource. This
avoids a couple of copies of the SDES structure when generating RTCP
packets.
2009-12-22 22:27:21 +01:00
Pascal Buhler
c3448f978e rtpmanager: improve SDES handling
Store SDES internally as a struct to support multiple PRIV values.
Include all values set in SDES struct when sending RTCP SDES.
2009-12-22 21:43:25 +01:00
Wim Taymans
9734699788 rtpbin: add property to remove pads automatically
Add a property called autoremove to automatically remove the pads of sources
that timed out.

Fixes 
2009-12-21 15:07:44 +01:00
Wim Taymans
c611bbaa8e ssrcdemux: fix comparison
A NULL means no pad was found.
2009-12-21 15:07:34 +01:00
Aurelien Grimaud
07f27f0efd rtpsession: avoid buffer ref/unref pairs for CSRCs
We ref the buffer before pushing it downstream in order to get the CSRCs of it
after pushing. This causes performance problems when downstream elements want to
change the metadata because the buffer needs to be subbuffered.

Instead, read and store the CSRCs of the buffer in an array before pushing it
and process the array after pushing the buffer. This allows us to remove the
ref/unref pair.

Fixes 
2009-11-30 15:59:50 +01:00
Wim Taymans
8070ae967b jitterbuffer: avoid using wrong clock-rate
Check for a valid clock-rate before attempting to estimate the npt
stop time.
2009-11-25 10:38:23 -06:00
Wim Taymans
5682e2bf01 rtpbin: fix typo in comments 2009-11-25 10:37:30 -06:00
Stefan Kost
9ee0815e85 docs: more links and better short description
Fix spelling of GstRtpSsrcDemux to get it linked. Add more links. Change
the short description to be more meaningful.
2009-11-20 11:25:49 +02:00
Wim Taymans
f52859432f jitterbuffer: release lock before emiting signals
Release the jbuf lock before emiting the request-pt-map signal to avoid
deadlocks. We also need to catch the shutdown case when locking again.

Fixes 
2009-11-18 10:50:44 +01:00
Stefan Kost
e43eb89449 tests: add a jitterbuffer test
Tests pushing a few buffers in various order and asserting the order sent by the
jitterbuffer. Contains two disabled tests that need more work.
2009-10-22 13:35:57 +03:00
Stefan Kost
6904e46ef2 build: use gst-glib-gen.mak to fix the glib build rules.
The build rules in glib-gen.mak were using pattern rules in a non save way.
2009-10-16 11:53:38 +03:00
Håvard Graff
58b9de4cca rtpptdemux: only forward the lost-event to the last seen pt-number
forward all events on all pads except for the PacketLost event, which we want to
forward to the last seen pt pad.

Fixes 
2009-10-14 12:28:55 +02:00
Stefan Kost
e0cdd879b4 build: fprintf, sprintf, sscanf need stdio.h 2009-10-07 14:03:20 +03:00
Wim Taymans
0040d01265 rtpbin: use locking around the sessions 2009-10-05 16:07:24 +02:00
Wim Taymans
8fb77403c5 jitterbuffer: cache latency in nanoseconds
Cache the latency in nanoseconds units to avoid having to convert the
milliseconds value to nanoseconds all the time.
2009-10-01 12:52:40 +02:00
Wim Taymans
c262735164 jitterbuffer: handle -1 input timestamps
Don't try to check a -1 timestamp against the max delay.
2009-10-01 12:12:09 +02:00
Stefan Kost
0a7ef67ad0 docs: fix gtk-doc warnings 2009-09-10 10:28:48 +03:00
Marc Leeman
6b46aeb6a3 rtpbin: add ignore-pt parameter
Add a parameter 'ignore-pt' that disables creating a gstrtpptdemux module and
ghosts the pads of gstrtpjitterbuffer instead of the ones of gstrtpptdemux.

Fixes 
2009-09-08 17:38:32 +02:00
Håvard Graff
2912b21d14 rtpbin: propagate payload-type-change signal from demuxer
fixes 
2009-09-08 13:59:56 +02:00
Havard Graff
a52309eff7 jitterbuffer: change severity of clock-rate change debug
Make log GST_DEBUG under normal circumstances, GST_WARNING otherwise.

Fixes 
2009-09-08 13:44:49 +02:00
Håvard Graff
40549278c3 jitterbuffer: avoid throwing reordered buffers with same timestamps
When we receive a reordered packet with the same timestamp as the previous one
(which can happen for fragmented packets) don't consider the packet as lost but
instead wait for the reordered packet to arrive.

Switch the warning-level, so that a reordering does not get a warning, only
an actual produced lost-packet.

Fixes 
2009-09-08 13:39:31 +02:00
Stig Sandnes
8f3299c547 rtpbin: make free_session() remove stream references
When receiving a sync-packet, all sessions with the same cname will be compared
and synced together. In this process, there could still be references to a
session that has been shut down in the meanwhile.

This patch makes sure that these references are removed when shutting down a
session, so that the syncing can be done safely.

Fixes 
2009-09-08 13:18:29 +02:00
Havard Graff
e08e610db0 rtpbin: use locked state on internal bins
Set the locked state on internal elements to make sure that they don't change
back to another state when shutting down.

Fixes 
2009-09-08 12:41:52 +02:00
Laurent Glayal
371875c57a rtpsource: fix memleak
Don't leak the input buffer when the received and expected seqnum are different when
in probation.

fixes 
2009-09-03 19:37:10 +02:00
Olivier Crête
f542f710cf rtpjitterbuffer: Lock clock_rate variable
The priv->clock_rate variable could become -1 between when its checked to not
be -1 and when its used, causing an assertion. Fixed by taking the mutex
earlier in the chain() function.

Fixes 
2009-09-03 19:17:00 +02:00
Wim Taymans
3fcde4486d rtpsource: whitespace fixes 2009-09-03 19:17:00 +02:00
Wim Taymans
3f629f6001 rtpsession: whitespace fixes 2009-09-03 19:16:59 +02:00
Peter Kjellerstedt
fdf18653b7 rtpmanager: Fixed a copy & paste error 2009-09-01 15:06:46 +02:00
Peter Kjellerstedt
dc4f9575be rtpmanager: Removed unused variable priv
The variable priv was initialized in a lot of functions but then never
used for anything.
2009-09-01 13:21:23 +02:00
Peter Kjellerstedt
57adc2a803 rtpmanager: A little clean up
Make the code flow of gst_rtp_session_send_rtcp() and
gst_rtp_session_sync_rtcp() identical.
2009-09-01 13:04:14 +02:00
Peter Kjellerstedt
923b5b495a rtpmanager: Make sure that used caps are not freed already (take 2)
This reintroduces the fix for bug . It also applies it in
gst_rtp_session_sync_rtcp() which has very similar code to
gst_rtp_session_send_rtcp().
2009-09-01 13:04:14 +02:00
Wim Taymans
8d924611e7 jitterbuffer: make sure time does not go backwards
When we construct a timestamp that would result in a timestamp that is earlier
than when the packet was received, reset the skew calculation as this is
probably a sign that the sender restarted or paused.

Fixes 
2009-09-01 12:48:28 +02:00
Peter Kjellerstedt
bfb1260af4 rtpmanager: Set caps in gst_rtp_session_send_rtcp() correctly again
The test for when to set an RTCP caps on the output pad in
gst_rtp_session_send_rtcp() accidentally got inverted in the last commit.
2009-09-01 11:32:41 +02:00
Wim Taymans
a74c385b7b rtpsession: use proper locking for pads and caps
Use the sesion lock and shotdown variable to protect and ref the pads we are
going to push on.

fixes 
2009-08-31 16:38:27 +02:00
Wim Taymans
a522a2d4d2 rtpbin: whitespace fixes 2009-08-31 16:33:26 +02:00
Wim Taymans
a26a2a9ff5 jitterbuffer: add slope estimation code and debug
Add some code to measure the sender speed vs the receiver speed. This can be
used to detect bursts.
2009-08-31 13:02:16 +02:00
Wim Taymans
4814d899c2 jitterbuffer: reset skew when timestamps change
Refactor the jitterbuffer resync code.
Reset the skew correction when we detect a big timestamp discont.

See 
2009-08-31 12:57:32 +02:00
Wim Taymans
e254936e34 jitterbuffer: make sure time never goes invalid
Since the skew can be negative, we might end up with invalid timestamps. Check
for negative results and clamp to 0.

See 
2009-08-31 12:47:15 +02:00
Sebastian Dröge
041fa82179 rtpsession: Make sure that used caps are not freed already
Fixes bug .
2009-08-31 08:09:09 +02:00
Sebastian Dröge
000a483d31 rtp: Use new gst_iterator_new_single() for the internal linked pads iteration 2009-08-31 08:09:09 +02:00
Sebastian Dröge
a1cddb3fd6 rtpsession: Use iterate internal links instead of deprecated get internal links 2009-08-31 08:09:09 +02:00
Sebastian Dröge
c8c02d2c7a jitterbuffer: Use iterate internal links instead of deprecated get internal links 2009-08-31 08:09:08 +02:00
Sebastian Dröge
97cb7bdb6c rtpssrcdemux: Use iterate internal links instead of deprecated get internal links 2009-08-31 08:09:08 +02:00
Olivier Crête
7f569ca9c8 rtpbin: Fix reference leak
Fixes .
2009-08-14 13:47:18 +01:00
ric
92abe07e80 rtpsource: avoid buffer leak on bad seqnum
Fixes 
2009-08-11 02:30:47 +01:00
Wim Taymans
9f68303a2e rtpsource: allow for NULL caps on buffers
Add the NULL caps check where it matters and also cover another case of
potential NULL caps.

Fixes 
2009-08-11 02:30:47 +01:00
Olivier Crête
e37844fdc7 rtpsource: Incoming buffers do not always have caps 2009-08-11 02:30:47 +01:00
Wim Taymans
3091137217 rtpsession: avoid doing lip-sync in BYE
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.
2009-08-11 02:30:47 +01:00
Wim Taymans
3747ede14a rtpbin: don't do lip-sync after a BYE
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.
2009-08-11 02:30:47 +01:00
Wim Taymans
d2ef095b80 rtpbin: only reconsider once for BYE
When iterating the sources of a BYE packet, don't signal a reconsideration for
each of them but signal after we handled all sources.
2009-08-11 02:30:47 +01:00
Olivier Crête
e8c6bcdf8d rtpsession: Free conflicting addresses on finalize 2009-08-11 02:30:46 +01:00
Wim Taymans
428368b44a rtpbin: use new method for netaddress to string 2009-08-11 02:30:46 +01:00
Wim Taymans
512ba93159 rtpbin: do better cleanup of the src ghostpads
Connect to the pad-removed signal of the ptdemux elements so that we remove the
ghostpads for them. Fixes cleanup when going to NULL as well as when releasing
the sinkpads.

Fixes 
2009-08-11 02:30:46 +01:00
Wim Taymans
d7a8663e05 rtpsession: add a comment 2009-08-11 02:30:46 +01:00
Wim Taymans
c53e595d23 rtpbin: add SDES property
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.
2009-08-11 02:30:46 +01:00
Wim Taymans
9f330992f5 rtpbin: add SDES property that takes GstStructure
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.
2009-08-11 02:30:46 +01:00
Wim Taymans
d8496fb105 rtpbin: removed old gstrtpclient 2009-08-11 02:30:45 +01:00
Branko Subasic
779f67adc4 rtpbin: add support for buffer-list
Add support for sending buffer-lists.
Add unit test for testing that the buffer-list passed through rtpbin.

fixes 
2009-08-11 02:30:45 +01:00
Tim-Philipp Müller
c5793a6a45 Make build without warnings with debugging disabled 2009-08-11 02:30:45 +01:00
Olivier Crête
cf873498d2 rtpbin: Transform the right session sdes message
Fixes 
2009-08-11 02:30:45 +01:00
Olivier Crête
dee142a945 Add ssrc to application/x-rtp-source-sdes structure 2009-08-11 02:30:45 +01:00
Wim Taymans
bf15048f42 rtpsouce: the network address is in network order
Bring the network address in netowkr byte order to the host order.
2009-08-11 02:30:45 +01:00
Wim Taymans
91eef69131 rtpsource: byteswap the port from GstNetAddress
Since the port in GstNetAddress is in network order we might need to byteswap it
before adding it to the source statistics.
2009-08-11 02:30:45 +01:00
Wim Taymans
51251d0fa8 rtpbin: remove ptdemux ghostpads 2009-08-11 02:30:44 +01:00
Wim Taymans
7d9c2d20df rtpbin: add to new signal to remove SSRC pads 2009-08-11 02:30:44 +01:00
Ali Sabil
6c684e59c6 ssrcdemux: emit signal when pads are removed
Add action signal to clear an SSRC in the ssrc demuxer.
Add signal to notify of removed ssrc.

See 
2009-08-11 02:30:44 +01:00
Wim Taymans
48872d8215 rtpbin: use our ghostpads instead of its target
Since we keep a reference to our ghostpads, we can use them to track sessions.
This avoid us having to mess with the target of the ghostpad.
2009-08-11 02:30:44 +01:00
Wim Taymans
901b7f3b69 rtpbin: don't warn when getting request pads twice
Allow getting the request pads multiple times, just return the previously
created pads.
2009-08-11 02:30:44 +01:00
Wim Taymans
0ae6e3603b rtpsource: add RTP and RTCP source address
Add the RTP and RTCP sender addresses in the stats structure.
2009-08-11 02:30:44 +01:00
Wim Taymans
62727e8fab rtpsession: reuse source code for SDES
Reuse the RTPSource object property instead of duplicating code.
2009-08-11 02:30:44 +01:00
Wim Taymans
1719af9113 rtpbin: set target state on new elements
Set the state on newly added elements to the state of the parent.
Add some debug info and do some cleanups
2009-08-11 02:30:43 +01:00
Wim Taymans
9c92ee6209 rtpbin: unref requests pads after releasing 2009-08-11 02:30:43 +01:00
Olivier Crête
a1c0bb2488 rtpbin: Implement releasing the streams
See 
2009-08-11 02:30:43 +01:00
Olivier Crête
e77542d350 rtpbin: Keep jb signals handler
Keep the signal handlers so they can be disconnected at release time

See 
2009-08-11 02:30:43 +01:00
Wim Taymans
59d0590cd7 rtpbin: use the right lock for the sessions
Use the right lock when iterating the sessions.
2009-08-11 02:30:42 +01:00
Olivier Crête
a9d6f3558c rtpbin: Free session if request pads are released
Free the session when all the request pads are released.
Don't mess with the session list in free_session as it is called from a foreach
on that list.
Set the state of the upstream element to NULL first.

See 
2009-08-11 02:30:42 +01:00
Olivier Crête
46388b767f rtpbin: Implement relasing of the rtp recv pad 2009-08-11 02:30:42 +01:00
Olivier Crête
3509098468 rtpbin: Implement releasing of rtp send pads 2009-08-11 02:30:42 +01:00
Olivier Crête
2f6e9d7bf2 rtpbin: Implement release of the recv rtcp pad
See 
2009-08-11 02:30:42 +01:00
Olivier Crête
47d4bb90c1 rtpbin: Implement releasing of rtcp src pad
See 
2009-08-11 02:30:41 +01:00
Wim Taymans
11607c4d63 rtpssrcdemux: drop unexpected RTCP packets
We usually only get SR packets in our chain function but if an invalid packet
contains the SR packet after the RR packet, we must not fail but simply ignore
the malformed packet.

Fixes 
2009-08-11 02:30:41 +01:00
Olivier Crete
3482b47666 rtpsouce: make WARNING into LOG
Since neither rtpmanager nor any of the payloaders properly implement
pad allocation, there is no way for the rtpmanager to inform downstream elements
of the new SSRC if there is an SSRC collision. So the warning is emitted all the
time and it is confusing.

Fixes 
2009-08-11 02:30:41 +01:00
Olivier Crete
63636b1290 rtpsession: notify when SSRC changes
Emit a g_object_notify when the SSRc changes because of a collision.
Fixes 
2009-08-11 02:30:41 +01:00
Wim Taymans
d45d18c735 rtpsession: join the RTCP thread
Avoid a case where a joinable thread would be left unjoined, which leaked the
thread structure.
Fixes .
2009-08-11 02:30:41 +01:00
Wim Taymans
64046416cc jitterbuffer: prevent overflow in EOS estimation
Use a guint64 instead of a guint to hold a 64bit value to prevent completely
bogues EOS estimation values due to overflows.
2009-08-11 02:30:41 +01:00
Wim Taymans
d6c623e90c rtpbin: we should not provide a clock
There is no need to provide a clock.
2009-08-11 02:30:41 +01:00
Wim Taymans
5ece6ae4e3 jitterbuffer: more estimated EOS fixes
Do more accurate EOS estimate and guard against backward timestamps.
2009-08-11 02:30:41 +01:00
Wim Taymans
cbad89600c jitterbuffer: release lock before pushing EOS
Make sure we release the jitterbuffer lock before we start pushing out data
because else we might deadlock.
2009-08-11 02:30:41 +01:00
Wim Taymans
918c9448f2 rtpbin: add on_npt_stop signal
Add the on_npt_stop signal to rtpbin and rtpjitterbuffer to notify the
application that the NPT stop position has been reached.
2009-08-11 02:30:41 +01:00
Wim Taymans
55c3da71c1 rtpbin: don't return FALSE on seek events
Silently ignore the seek event instead of returning FALSE.
2009-08-11 02:30:41 +01:00
Olivier Crête
109874ed50 gstrtpbin: Don't forward revc events to sender
Don't send events from the receiver to the sender side.
Fixes .
2009-08-11 02:30:40 +01:00
Stefan Kost
7ae3923ac6 docs: various doc fixes
No short-desc as we have them in the element details.
Also keep things (Makefile.am and sections.txt) sorted.
Reword ambigous returns. No text after since please.
2009-08-11 02:30:40 +01:00
Wim Taymans
2c6ab34114 Send BYE packets immediatly for small sessions
When the number of participants is less than 50, the RFC allows for sending the
BYE packet immediatly instead of using the regular BYE timeout.
Fixes .
2009-08-11 02:30:40 +01:00
Wim Taymans
7f0b100db5 Unlock the jitterbuffer before pushing out the packet-lost events.
Move some code before we do the unlock to make the jitterbuffer state
consistent while we are unlocked.
2009-08-11 02:30:40 +01:00
Olivier Crete
dfdc9b6662 gst/rtpmanager/: When an SSRC is found on the caps of the sender RTP, use this as the internal SSRC. Fixes .
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 .
2009-08-11 02:30:40 +01:00
Wim Taymans
0ad92e7da6 gst/rtpmanager/: Rename a method to better reflect what it really does.
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.
2009-08-11 02:30:40 +01:00
Wim Taymans
06d1532024 gst/rtpmanager/gstrtpsession.c: Use method to get the internal SSRC.
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 .
2009-08-11 02:30:40 +01:00
Wim Taymans
1786eb1e25 gst/rtpmanager/rtpsession.c: Only change the SSRC of the session and reset 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 .
2009-08-11 02:30:40 +01:00
Wim Taymans
3fe87f7eab gst/rtpmanager/rtpsource.*: When no payload was specified on the caps but there was a clock-rate, assume the clock-ra...
Original commit message from CVS:
* gst/rtpmanager/rtpsource.c: (rtp_source_init),
(rtp_source_update_caps), (get_clock_rate):
* gst/rtpmanager/rtpsource.h:
When no payload was specified on the caps but there was a clock-rate,
assume the clock-rate corresponds to the first payload type found in the
RTP packets. Fixes .
2009-08-11 02:30:40 +01:00
Arnout Vandecappelle
2142edd399 gst/rtpmanager/rtpjitterbuffer.*: Keep track of the last outgoing timestamp and of the last sender-side time. Timest...
Original commit message from CVS:
Patch by: Arnout Vandecappelle <arnout at mind dot be>
* gst/rtpmanager/rtpjitterbuffer.c: (rtp_jitter_buffer_reset_skew),
(calculate_skew):
* gst/rtpmanager/rtpjitterbuffer.h:
Keep track of the last outgoing timestamp and of the last sender-side
time.  Timestamps can only go forward if they do at the sender
side, can only go back if they do at the sender side, and remain the
same if they remain the same at the sender side. Fixes .
2009-08-11 02:30:40 +01:00
Wim Taymans
5b6700a022 gst/rtpmanager/rtpsession.c: Make obtain_source return an aditional ref so 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 .
2009-08-11 02:30:39 +01:00
Wim Taymans
a80f7dc19a gst/rtpmanager/gstrtpbin.c: Reset the sync parameters when clearing the payload type map too.
Original commit message from CVS:
* gst/rtpmanager/gstrtpbin.c: (gst_rtp_bin_reset_sync),
(gst_rtp_bin_clear_pt_map):
Reset the sync parameters when clearing the payload type map too.
Fixes .
2009-08-11 02:30:39 +01:00
Wim Taymans
a2d7487ee1 gst/rtpmanager/gstrtpbin.*: Remove a lot of per stream state that is not needed and pass new info in the method call.
Original commit message from CVS:
* gst/rtpmanager/gstrtpbin.c: (get_client),
(gst_rtp_bin_reset_sync), (gst_rtp_bin_associate),
(gst_rtp_bin_handle_sync), (create_stream),
(gst_rtp_bin_class_init), (new_ssrc_pad_found):
* gst/rtpmanager/gstrtpbin.h:
Remove a lot of per stream state that is not needed and pass new info in
the method call.
Add signal to reset sync parameters.
Avoid parsing the caps to get a clock_base, we get this from the sync
signal now.
2009-08-11 02:30:39 +01:00
Wim Taymans
b8408946b7 gst/rtpmanager/gstrtpsession.c: Fix event leak.
Original commit message from CVS:
* gst/rtpmanager/gstrtpsession.c:
(gst_rtp_session_event_send_rtcp_src):
Fix event leak.
2009-08-11 02:30:39 +01:00
Wim Taymans
ae346d9a6d gst/rtpmanager/rtpsession.c: Add property to configure the RTCP MTU.
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.
2009-08-11 02:30:39 +01:00