rtpjitterbuffer: Equidistant implement uses partial timer compression implementation
When equidistant packet is detected, the jitterbuffer uses TimerData compression using the ->num
member, there is two bugs in the implementation.
- When one packet of the range finally arrive, the range timer should be split in order to removed the packet from that range. there is no code doing that atm.
- When do_lost is set, only one packet lost event is sent
Some more details:
do_lost_timeout()
- If
->do-lost
is set, only one GstRTPPacketLost event is ever sent - rtp_jitter_buffer_insert() does not check if the range overlap
already_lost()
This one supports it, but that forces an o(n) lookup.
find_timer()
Only searches for a timer with the exact same time seqnum, it won't match the range. It would also force having an o(n) lookup. This is called from _chain() and in this case, if a seqnum is in the middle of a range, we would have to split the timer in two lost, in order to remove/convert the timer for the packet that just arrived.
cc @hgr