Commit graph

761 commits

Author SHA1 Message Date
Wim Taymans f11c2c9b3b jitterbuffer: forward flush before stopping dataflow
First forward the flush event and then stop our loop function.
2013-08-14 16:19:32 +02:00
Wim Taymans 48174164eb session: add NACK feedback in RTCP 2013-08-06 15:50:19 +02:00
Wim Taymans 4379ed1dee source: add methods to register NACK
Add a method to register a missing packet for an ssrc along with
methods to get the missing packets and clear them.
2013-08-06 15:50:19 +02:00
Wim Taymans 50638b8106 session: handle Retransmission event and schedule NACK
Handle the retransmission event from downstream and use it to schedule a NACK
request.
2013-08-06 15:50:19 +02:00
Wim Taymans 0bddbd682d session: pass data to remove func
Pass the data to the remove function because we are going to deref it when there
is pli or fir.
2013-08-06 15:50:19 +02:00
Wim Taymans 3c82de59f9 session: use common send_rtcp method
Reuse the send_rtcp method that already asks for the current time when
requesting a keyframe.
2013-08-05 15:02:59 +02:00
Wim Taymans 3c14c6021c session: Don't use ClockTimeDiff for unsigned delays 2013-08-05 15:02:59 +02:00
Tim-Philipp Müller 7469cd3a4c rtpmanager: use generic marshaller 2013-08-04 11:03:07 +01:00
Wim Taymans 7584f91f31 jitterbuffer: send event in right direction 2013-08-04 00:24:36 +02:00
Wim Taymans 9613e481ad session: add FIR and PLI like other RTCP packets
Add the FIR and PLI packets like the other RTCP packet instead of from the
on-sending-rtcp default signal handler.
2013-08-03 00:33:24 +02:00
Wim Taymans 743e1b1191 jitterbuffer: fix property ranges 2013-08-02 17:22:55 +02:00
Wim Taymans cd0164f4cc jitterbuffer: push retransmission events 2013-08-02 16:43:59 +02:00
Wim Taymans 9a13267e85 jitterbuffer: add support for retransmission retry
When we didn't receive a packet after requesting retransmission, retry
asking for retransmission for a certain period.
2013-08-02 14:54:56 +02:00
Wim Taymans e9ad5126db jitterbuffer: add properties
Add properties to control retransmission parameters
2013-08-02 14:47:56 +02:00
Wim Taymans a8c7ff7489 jitterbuffer: use corrected timeout when rescheduling
When we recalculate the timeout, use the corrected timeout value depending on
the timer type.
2013-08-02 12:44:58 +02:00
Wim Taymans 9c7e3e3455 jitterbuffer: update timers after queueing
Else we might update the timer needlessly for duplicates.
2013-08-02 12:43:00 +02:00
Wim Taymans ebd6b8f8ab jitterbuffer: move method up 2013-08-02 12:42:08 +02:00
Wim Taymans f6b6797874 jitterbuffer: small cleanup 2013-08-02 06:28:32 +02:00
Wim Taymans 0e41414926 jitterbuffer: unschedule old expected packets
When we receive a new packet, unschedule old outstanding packets when their
seqnum is too far away.
2013-08-01 23:36:07 +02:00
Wim Taymans 70695466ed jitterbuffer: refactor timer update 2013-08-01 23:32:00 +02:00
Wim Taymans 4ab3f5d3da jitterbuffer: update timers when removing
Update the timers when we remove a timer.
Handle canceled timers, make them unschedule the current timer and
trigger the timeout code.
2013-08-01 23:24:29 +02:00
Wim Taymans b983cf675b jitterbuffer: fix typo 2013-08-01 23:22:02 +02:00
Wim Taymans f3c658cbe6 jitterbuffer: improve timeout management
If we change the seqnum of an existing timer and we were waiting for
that timer, unschedule it. If we change the timeout of an existing timer and we
were waiting on it, only unschedule when the new time is smaller.
2013-08-01 15:40:52 +02:00
Wim Taymans 77e5d320ab jitterbuffer: install timer for expected arrival
Install a timer that is triggered when the expected arrival time of a packet
expired.
2013-08-01 15:11:13 +02:00
Wim Taymans f08d98404e jitterbuffer: improve unschedule of timers
Conflicts:
	gst/rtpmanager/gstrtpjitterbuffer.c
2013-08-01 14:57:11 +02:00
Wim Taymans 9d3b824e2a jitterbuffer: move code around 2013-08-01 12:21:53 +02:00
Wim Taymans fe32e80c92 jitterbuffer: estimate inter packet spacing
When we see two packets with consecutive seqnums and a different RTP time, use
the DTS difference as the inter packet spacing estimate.
2013-08-01 12:07:11 +02:00
Wim Taymans 255b7106f5 jitterbuffer: keep track of current timeout 2013-08-01 12:01:15 +02:00
Wim Taymans 7e43dba19b jitterbuffer: cleanup timer handling 2013-08-01 11:49:10 +02:00
Wim Taymans 9d88ac9cbb jitterbuffer: reset is only possible with a GAP 2013-08-01 11:40:41 +02:00
Wim Taymans f864131227 jitterbuffer: operate on DTS
Make the jitterbuffer schedule the timeouts based on the DTS instead
of the PTS. This makes it all smoother with reordered frames and gives
the decoder time to reorder the frames in time.
2013-08-01 11:36:56 +02:00
Wim Taymans 80c5934290 jitterbuffer: rename timout variable 2013-08-01 11:14:12 +02:00
Wim Taymans aa951433ee jitterbuffer: small cleanup 2013-07-31 17:08:58 +02:00
Wim Taymans 69c78f72d5 jitterbuffer: block output in paused or buffering 2013-07-31 16:59:58 +02:00
Wim Taymans 4fbbc53a49 jitterbuffer: store pts in timer
Only store the pts in the timer so that we can both do timeouts with timings on
the input and output of the jitterbuffer.
2013-07-31 16:59:09 +02:00
Wim Taymans 77846d35c6 rtpjitterbuffer: refactor jitterbuffer
Refactor the jitterbuffer code. Make separate function for peeking a buffer,
pushing the next buffer, waiting for timeouts and handling the timeouts.

The main loop now tries to push as many buffers as it can until it runs out of
buffers or when it detects a seqnum discont. Then it will wait for some event to
happen before attempting to push more buffers.

Make methods to register timeouts in an array. These timeouts are registered
when we detect a missing packet, sync for the first packet or when we find an
estimation for the end-of-stream.

This greatly simplifies and clarifies the code and also makes it possible to
register more complicated timeout schemes later.
2013-07-30 23:24:23 +02:00
Wim Taymans ea931d4f57 rtpjitterbuffer: use NULL to ignore percent
If we pass NULL to pop and push we ignore the percent result.
2013-07-30 23:24:23 +02:00
Wim Taymans b3e8a85a54 jitterbuffer: refactor
Move eos estimation into separate function
2013-07-30 23:24:22 +02:00
Wim Taymans 02359f9219 session: don't make buffer writable prematurely
There is no reason to make the SR buffer writable at this point. This is better
delayed until needed.
2013-07-26 22:31:41 +02:00
Wim Taymans 0261199fc4 session: ignore RTCP for inactive sources 2013-07-26 22:31:23 +02:00
Wim Taymans a4b4ca53c0 session: small cleanup 2013-07-26 22:25:17 +02:00
Wim Taymans e0abd2e9b5 session: handle partial RTCP report blocks
When we have more SSRCs to report than what fit in an RTCP packet, use a
generation counter to make sure all of them end up in a packet eventually.
2013-07-26 17:29:10 +02:00
Wim Taymans 6cce6fb04c session: create SSRC before doing session cleanup
Make the internal source before we do session cleanup
2013-07-26 17:29:10 +02:00
Wim Taymans 5b0298c63e session: reorganize the report block code 2013-07-26 17:29:10 +02:00
Wim Taymans 3c44cd7c83 session: refactor active and sender checks 2013-07-26 14:21:40 +02:00
Wim Taymans e952f7ba43 session: remove internal sources on timeout
When an internal source times out and becomes a receiver, remove it.
2013-07-26 12:18:01 +02:00
Wim Taymans e9e2fe3950 session: create an internal source for RTCP
When we need to do RTCP and we don't have an internal source yet,
make one.
2013-07-26 12:18:01 +02:00
Wim Taymans bd0709c15c session: remove old code to change SSRC
Remove code used to change the SSRC after a collision. We now send
a RECONFIGURE event upstream to make the upstream element change the SSRC.
2013-07-26 12:18:01 +02:00
Wim Taymans 88f5a5f355 source: don't update packet SSRC
Remove the code to update the SSRC in packets, it can never be called now that
we always use a source with matching packet SSRC.
2013-07-26 12:18:01 +02:00
Wim Taymans abc90da1dc session: delay allocation of internal source
Allocate the internal source when we receive a caps with the SSRC or when we see
a buffer with the SSRC.
2013-07-26 12:18:01 +02:00