Wim Taymans [Mon, 23 Sep 2013 09:18:46 +0000 (11:18 +0200)]
rtpjitterbuffer: schedule lost event differently
Schedule the lost event by placing it inside the jitterbuffer with the seqnum
that was lost so that the pushing thread can interleave and push it properly.
Wim Taymans [Mon, 23 Sep 2013 09:17:34 +0000 (11:17 +0200)]
tests: remove timeouts from check
Timeouts make the test unreliable and are not needed.
Wim Taymans [Mon, 23 Sep 2013 09:15:30 +0000 (11:15 +0200)]
rtpjitterbuffer: remove list debug
Wim Taymans [Mon, 23 Sep 2013 09:14:01 +0000 (11:14 +0200)]
rtpjitterbuffer: add type to the item
So that the upper layer can know what data is contained in the item.
Wim Taymans [Mon, 23 Sep 2013 07:58:32 +0000 (09:58 +0200)]
rtpjitterbuffer: fix flush
Pass function to flush to properly free the queue items.
Wim Taymans [Fri, 20 Sep 2013 22:08:20 +0000 (00:08 +0200)]
rtpjitterbuffer: append seqnum -1 packets
Wim Taymans [Fri, 20 Sep 2013 21:48:20 +0000 (23:48 +0200)]
rtpjitterbuffer: use structure to hold packet information
Make the jitterbuffer operate on a structure containing all the packet
information. This avoids mapping the buffer multiple times just to get the RTP
information. It will also make it possible to store other miniobjects such as
events later.
Wim Taymans [Fri, 20 Sep 2013 15:48:52 +0000 (17:48 +0200)]
rtpjitterbuffer: update expected timer when possible
When we receive a packet and we have some missing packets, we can update their
estimated arrival times based on the timestamp difference.
Wim Taymans [Fri, 20 Sep 2013 15:18:27 +0000 (17:18 +0200)]
rtpjitterbuffer: fix order of timeout events
Improve the order of the timeout events, if there are timers with the same
timeout, we want to trigger the lowest seqnum first. For this we need to loop
over the complete array of timers to find the best one before triggering the
timeout.
Wim Taymans [Fri, 20 Sep 2013 14:58:38 +0000 (16:58 +0200)]
rtpjitterbuffer: send lost event before signaling next buffer
First send the lost event, then update the next_seqnum counter and then
send the signal to the pushing thread that it can retry to push a buffer. This
avoids pushing out buffers before the lost event is pushed.
Wim Taymans [Fri, 20 Sep 2013 13:35:25 +0000 (15:35 +0200)]
jitterbuffer: configure clock-rate on jitterbuffer
Add a get and setter to configure the clock-rate in the jitterbuffer instead of
passing it as an argument to the insert method.
Wim Taymans [Fri, 20 Sep 2013 10:29:39 +0000 (12:29 +0200)]
tests: add test for packet delay and retransmission
Wim Taymans [Fri, 20 Sep 2013 10:27:26 +0000 (12:27 +0200)]
rtpjitterbuffer: add option to reset retransmission timers
Wim Taymans [Fri, 20 Sep 2013 10:25:43 +0000 (12:25 +0200)]
rtpjitterbuffer: stop the timer thread
The timeout code could release the lock so we need to check if we are allowed to
wait for the clock some more.
Wim Taymans [Fri, 20 Sep 2013 10:25:12 +0000 (12:25 +0200)]
rtpjitterbuffer: unlock only once
Wim Taymans [Fri, 20 Sep 2013 09:30:04 +0000 (11:30 +0200)]
tests: check both PTS and DTS
Wim Taymans [Fri, 20 Sep 2013 08:55:03 +0000 (10:55 +0200)]
tests: add unit-test for multiple missing packets
Check if multiple missing packets generate retransmission events and that the
retranmission requests are canceled when the missing packet arrives.
Wim Taymans [Fri, 20 Sep 2013 08:53:29 +0000 (10:53 +0200)]
rtpjitterbuffer: improve flush and shutdown
There is no need to unschedule the timer in flush-start, flush-stop will remove
the timers and unschedule.
Unschedule the current timer before attempting to join the timer thread.
Wim Taymans [Fri, 20 Sep 2013 08:43:53 +0000 (10:43 +0200)]
tests: improve debug
Wim Taymans [Fri, 20 Sep 2013 08:42:27 +0000 (10:42 +0200)]
rtpjitterbuffer: set correct expected time
When we already have a timer for a packet, skip it but don't forget to adjust
the dts to the expected dts of the next packet.
Wim Taymans [Fri, 20 Sep 2013 08:41:59 +0000 (10:41 +0200)]
jitterbuffer: improve debug
Wim Taymans [Thu, 19 Sep 2013 14:55:25 +0000 (16:55 +0200)]
alpha: use POFFSET instead of OFFSET
Use the more correct POFFSET macro to get the offset of a component in its
plane. The offset macro gives the offset of the component relative to the start
of the frame.
Sebastian Dröge [Sat, 21 Sep 2013 16:46:29 +0000 (18:46 +0200)]
goom: Fix MMX assembly compilation with clang
clang does not want or need a clobber list for emms:
error: clobbers must be last on the x87 stack
Patch taken from the FreeBSD ports, provided by
Dan McGregor <dan.mcgregor@usask.ca>
Edward Hervey [Fri, 20 Sep 2013 14:16:57 +0000 (16:16 +0200)]
Automatic update of common submodule
From b613661 to 6b03ba7
Sebastian Dröge [Fri, 20 Sep 2013 08:19:22 +0000 (10:19 +0200)]
matroska-demux: Make sure that subtitle buffers are \0-terminated
https://bugzilla.gnome.org/show_bug.cgi?id=707933
Andoni Morales Alastruey [Tue, 17 Sep 2013 10:17:54 +0000 (12:17 +0200)]
qtmux: handle issues correctly when downstream is not seekable
The streamable property only make sense for fragmented formats.
For regular MP4, when downstream is not seekable we can't rewrite
the headers, so qtmux can only work with fast-start=TRUE, where
the headers are written finishing the file.
For fragmented MP4, when streamable is not seekable and the streamable
property is FALSE, we must enforce streamable=TRUE warning the user
about this change
https://bugzilla.gnome.org/show_bug.cgi?id=707242
Andoni Morales Alastruey [Tue, 17 Sep 2013 10:06:06 +0000 (12:06 +0200)]
qtmux: make "streamable" TRUE as default
The most common use case for fragmented MP4 (Dash and Smooth Streaming)
is producing streamable content (even for VOD). streamable=FALSE would only
be used to generate fragmented MP4 with and index of MOOF's that could
be reproduced without a playlist/manifest
https://bugzilla.gnome.org/show_bug.cgi?id=707242
Andoni Morales Alastruey [Tue, 17 Sep 2013 10:01:30 +0000 (12:01 +0200)]
qtmux: deprecate the streamable property for non-fragmented MP4
The streamable property only makes sense for fragmented MP4.
https://bugzilla.gnome.org/show_bug.cgi?id=707242
Olivier Crête [Thu, 19 Sep 2013 21:08:19 +0000 (17:08 -0400)]
v4l2: Remove commented out line
Tim-Philipp Müller [Thu, 19 Sep 2013 17:43:08 +0000 (18:43 +0100)]
Automatic update of common submodule
From 74a6857 to b613661
Tim-Philipp Müller [Thu, 19 Sep 2013 16:35:27 +0000 (17:35 +0100)]
Automatic update of common submodule
From 098c0d7 to 74a6857
Wim Taymans [Thu, 19 Sep 2013 14:50:44 +0000 (16:50 +0200)]
alpha: don't assume planar formats have just 1 block
Don't assume planar formats have just one memory block with the data but use the
macros to access the right memory block where a component can be found.
Wim Taymans [Thu, 19 Sep 2013 12:14:52 +0000 (14:14 +0200)]
tests: add retransmission jitterbuffer test
Store both DTS and PTS on buffers.
Make a queue for srcpad events.
Activate pads after linking so that we don't get RECONFIGURE events.
Add test for retransmission.
Wim Taymans [Thu, 19 Sep 2013 12:12:18 +0000 (14:12 +0200)]
rtpjitterbuffer: keep delay as a separate variable in timer
Keep a separate delay in the timer so that we still know the original timestamp
of the packet that this timer refers to. We can then place the correct
running-time in the Retransmission event.
Wim Taymans [Thu, 19 Sep 2013 12:08:56 +0000 (14:08 +0200)]
rtpjitterbuffer: fix writability of properties
Sebastian Dröge [Thu, 19 Sep 2013 09:34:57 +0000 (11:34 +0200)]
Back to development
Sebastian Dröge [Thu, 19 Sep 2013 08:50:23 +0000 (10:50 +0200)]
Release 1.1.90
Sebastian Dröge [Thu, 19 Sep 2013 08:21:42 +0000 (10:21 +0200)]
Update .po files
Sebastian Dröge [Thu, 19 Sep 2013 07:45:18 +0000 (09:45 +0200)]
po: Update translations
Olivier Crête [Wed, 11 Sep 2013 18:27:02 +0000 (14:27 -0400)]
v4l2bufferpool: dmabuf is not a singleton anymore
https://bugzilla.gnome.org/show_bug.cgi?id=707793
Thiago Santos [Mon, 16 Sep 2013 16:53:45 +0000 (13:53 -0300)]
souphttpsrc: do not do http requests in READY
HEAD requests to discover if the server is seekable shouldn't be done in
READY as it might lock the main thread that is doing the state change.
https://bugzilla.gnome.org/show_bug.cgi?id=705371
Wim Taymans [Wed, 18 Sep 2013 14:32:28 +0000 (16:32 +0200)]
rtpjitterbuffer: reevaluate the current timer after timeout
When we trigger the timeout logic of a timer, reevaluate it because it is
possible that it still has the lowest timeout.
Wim Taymans [Wed, 18 Sep 2013 14:31:26 +0000 (16:31 +0200)]
rtpjitterbuffer: don't update time when unscheduled
Don't try to estimate the current time when we got unscheduled.
Wim Taymans [Wed, 18 Sep 2013 14:29:37 +0000 (16:29 +0200)]
rtpjitterbuffer: init packet spacing on first buffer
Already init the packet spacing variables on the first buffer so that we can
calculate the spacing on the second buffer already.
Wim Taymans [Wed, 18 Sep 2013 13:08:45 +0000 (15:08 +0200)]
tests: fix comments
Wim Taymans [Wed, 18 Sep 2013 12:57:09 +0000 (14:57 +0200)]
rtpjitterbuffer: push the lost event from the timer thread
Instead of pushing the lost event from the chain function, schedule a timeout
that will push the lost event from the timer thread. This avoid blocking the
upstream thread while we push and sync the event.
Wim Taymans [Wed, 18 Sep 2013 12:23:55 +0000 (14:23 +0200)]
rtpjitterbuffer: add another test
The test is modified slightly because the late lost packets are only
generated now when a large gap is received.
Wim Taymans [Wed, 18 Sep 2013 12:12:47 +0000 (14:12 +0200)]
rtpjitterbuffer: round gap duration to multiple of duration
Make sure the gap duration in the lost event is a multiple of the packet
duration.
Enable another test.
Wim Taymans [Wed, 18 Sep 2013 10:29:38 +0000 (12:29 +0200)]
rtpjitterbuffer: keep track of duration
Keep track of the estimated duration of missing packets and use it in the lost
event.
Enable another unit test
Wim Taymans [Wed, 18 Sep 2013 09:59:28 +0000 (11:59 +0200)]
rtpjitterbuffer: handle large gaps with one lost event
When we have a large number of missing packets, generate one lost event for all
the packets that have no chance of being pushed out in time.
Fix and activate unit test for large gaps.
Wim Taymans [Wed, 18 Sep 2013 09:56:38 +0000 (11:56 +0200)]
rtpjitterbuffer: refactor lost event sending
Also make sure we only increment the expected seqnum and last
output timestamp.
Wim Taymans [Tue, 17 Sep 2013 21:21:09 +0000 (23:21 +0200)]
jitterbuffer: refactor timeout triggers
Wim Taymans [Tue, 17 Sep 2013 21:03:45 +0000 (23:03 +0200)]
jitterbuffer: simplify the timeout code
Keep track of the current time in the timeout loop.
Loop over all timers and trigger all the expired ones, we can do this in the
same loop that selects the new best timer.
Wim Taymans [Tue, 17 Sep 2013 21:01:17 +0000 (23:01 +0200)]
jitterbuffer: rearrange timer update code
Also update the timers when retransmission is disabled. We need to
do this because when we added LOST timers when we detected missing packets and
we need to remove those timers when the packet finally arrives.
Tim-Philipp Müller [Tue, 17 Sep 2013 21:02:04 +0000 (22:02 +0100)]
videomixer: link to libm for maths stuff
Fixes undefined references to rint and pow on ubuntu
build bot.
Wim Taymans [Tue, 17 Sep 2013 13:19:42 +0000 (15:19 +0200)]
jitterbuffer: release lock on shutdown
Wim Taymans [Tue, 17 Sep 2013 13:11:41 +0000 (15:11 +0200)]
check: change for videomixer renamed orc file
Matej Knopp [Sat, 14 Sep 2013 14:03:20 +0000 (16:03 +0200)]
qtmux: remove MAX_TOLERATED_LATENESS
https://bugzilla.gnome.org/show_bug.cgi?id=707411
Wim Taymans [Mon, 16 Sep 2013 13:54:37 +0000 (15:54 +0200)]
examples: we don't need the queue anymore
Wim Taymans [Mon, 16 Sep 2013 13:53:47 +0000 (15:53 +0200)]
jitterbuffer: use separate thread for timeouts
Use a separate thread for scheduling the timeouts instead of using the
downstream streaming thread that might block at any time.
Matej Knopp [Sat, 14 Sep 2013 13:56:04 +0000 (15:56 +0200)]
qtmux: set first_ts to DTS for streams that have DTS
https://bugzilla.gnome.org/show_bug.cgi?id=707340
Matej Knopp [Sat, 14 Sep 2013 13:55:22 +0000 (15:55 +0200)]
qtmux: make sure duration is a valid number for last buffer
https://bugzilla.gnome.org/show_bug.cgi?id=707340
Matej Knopp [Sat, 14 Sep 2013 13:54:29 +0000 (15:54 +0200)]
qtmux: use segment.start or last buffer end time in case of missing DTS
https://bugzilla.gnome.org/show_bug.cgi?id=707340
Matej Knopp [Tue, 3 Sep 2013 16:14:04 +0000 (18:14 +0200)]
Revert qtmux: Use buffer PTS if DTS is not set"
This reverts commit
f72c3cf71fde622067f41f31a53978ba4c94469d.
https://bugzilla.gnome.org/show_bug.cgi?id=707340
Sebastian Dröge [Mon, 16 Sep 2013 09:03:06 +0000 (11:03 +0200)]
videomixer: Update orc generated files
https://bugzilla.gnome.org/show_bug.cgi?id=708131
Olivier Crête [Fri, 13 Sep 2013 14:25:49 +0000 (16:25 +0200)]
rtpsession: Demux RTCP buffers from the RTP stream
If there are RTCP buffers in the RTP stream, process them as
RTCP. This way, we want receive streams following RFC 5761
https://bugzilla.gnome.org/show_bug.cgi?id=687657
Jan Schmidt [Fri, 13 Sep 2013 13:26:21 +0000 (23:26 +1000)]
rtp: Remove bogus extra caps from L24 template.
The extra caps entry in the template was making it sometimes
get plugged for any dynamically allocated payload type.
Wim Taymans [Fri, 13 Sep 2013 10:40:41 +0000 (12:40 +0200)]
rtpbin: use PacketInfo for the sender
Avoid mapping the packet multiple times when sending RTP.
Wim Taymans [Fri, 13 Sep 2013 10:22:36 +0000 (12:22 +0200)]
rtpbin: store more in the PacketInfo
Store all info in the PacketInfo so that we can avoid mapping the packet
multiple times.
Wim Taymans [Fri, 13 Sep 2013 09:32:52 +0000 (11:32 +0200)]
session: store more in the PacketInfo structure
Wim Taymans [Fri, 13 Sep 2013 09:08:55 +0000 (11:08 +0200)]
rtpbin: RTPArrivalStats -> RTPPacketInfo
Rename a structure because we are also going to use this for the sender
bits.
Wim Taymans [Fri, 13 Sep 2013 08:55:31 +0000 (10:55 +0200)]
source: small cleanups
Thiago Santos [Thu, 12 Sep 2013 16:31:01 +0000 (13:31 -0300)]
qtdemux: only update stop position if seek requests it
Check for GST_SEEK_TYPE_NONE for stop poistion and only update
the stop time if it is requested. Otherwise just maintain whatever
was stored at the segment
https://bugzilla.gnome.org/show_bug.cgi?id=707530
Rico Tzschichholz [Fri, 13 Sep 2013 06:53:25 +0000 (08:53 +0200)]
rtp: Add missing headers tp fix make dist
In addition to
a956a6ceb2deb87cc1361aee1d6626449f46dab2
Sebastian Dröge [Thu, 12 Sep 2013 13:07:48 +0000 (15:07 +0200)]
flacparse: Make sure we have enough data to read image tags
Thanks to iputinei for reporting this on IRC.
Wim Taymans [Thu, 12 Sep 2013 13:01:36 +0000 (15:01 +0200)]
jitterbuffer: handle segments with non-0 start
We keep the DTS and PTS in running-time inside the jitterbuffer. Make sure to
transform it back to a buffer timestamp before pushing out the buffer.
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=707931
Seán de Búrca [Wed, 11 Sep 2013 19:11:58 +0000 (13:11 -0600)]
matroskademux: Fix off-by-one in validation of UTF-8
https://bugzilla.gnome.org/show_bug.cgi?id=707933
Thibault Saunier [Wed, 11 Sep 2013 17:32:17 +0000 (14:32 -0300)]
videomixer: Do not check if caps are empty when they are NULL
In the case the caps are actually NULL, we should just concider it the
same way as empty caps in that case.
Seán de Búrca [Tue, 10 Sep 2013 22:44:53 +0000 (16:44 -0600)]
videomixer: fix build if orc is not installed
https://bugzilla.gnome.org/show_bug.cgi?id=707886
Thiago Santos [Tue, 10 Sep 2013 20:57:49 +0000 (17:57 -0300)]
matroskademux: Preserve seqnum when pushing seek upstream
After converting a seek from time to bytes, use the same seqnum
on the event that goes upstream
Thiago Santos [Thu, 5 Sep 2013 03:17:16 +0000 (00:17 -0300)]
qtdemux: track streams that are EOS on push mode to finish earlier
When the segment has a defined stop position, qtdemux should check
when streams reach this position and mark those as EOS. When all
streams are EOS it will return GST_FLOW_EOS to upstream to allow
the pipeline to finish instead of continuously consume buffers
from upstream that are not useful for the segment.
https://bugzilla.gnome.org/show_bug.cgi?id=707530
Thiago Santos [Wed, 4 Sep 2013 18:34:35 +0000 (15:34 -0300)]
qtdemux: preserve stop of segment when doing seeks in push mode
When handling seeks in push mode, qtdemux converts the seek to bytes
and pushes upstream. It needs to keep track of the seek and the
subsequent segment to be able to map them back to the requested
seek time and properly preserve the segment stop of the seek.
This is done by using the start offset in bytes of the seek,
that should be the same of the segment from upstream. And this
is also backwards compatible with what qtdemux already was using.
https://bugzilla.gnome.org/show_bug.cgi?id=707530
Mathieu Duponchelle [Fri, 26 Jul 2013 17:40:53 +0000 (19:40 +0200)]
videomixer: Add colorspace conversion
https://bugzilla.gnome.org/show_bug.cgi?id=704950
Mathieu Duponchelle [Tue, 6 Aug 2013 13:38:39 +0000 (15:38 +0200)]
videomixer: Don't send reconfigure event when formats or PAR are different
It is racy with multiple pads.
https://bugzilla.gnome.org/show_bug.cgi?id=704950
Mathieu Duponchelle [Thu, 25 Jul 2013 11:49:57 +0000 (13:49 +0200)]
videomixer: Bundle private copies of videoconvert code
Ideally, this would be part of libgstvideo.
Prefixes videoconvert symbols with videomixer_.
https://bugzilla.gnome.org/show_bug.cgi?id=704950
Mathieu Duponchelle [Wed, 21 Aug 2013 22:03:48 +0000 (00:03 +0200)]
v4l2: Use newly #defined metadata names.
Wim Taymans [Mon, 9 Sep 2013 13:11:51 +0000 (15:11 +0200)]
rtspsrc: only wait if we flushed
Only wait for the STREAM_LOCK when we flushed something when sending
a command for PAUSED or PLAYING.
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=707611
Wim Taymans [Mon, 9 Sep 2013 13:09:41 +0000 (15:09 +0200)]
rtspsrc: return when a flush was issued
Make gst_rtspsrc_loop_send_cmd() return TRUE when the current
action has been flushed
David Holroyd [Mon, 9 Sep 2013 09:16:40 +0000 (11:16 +0200)]
rtp: add L24 pay and depayloader
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=707734
Sebastian Dröge [Mon, 9 Sep 2013 12:46:42 +0000 (14:46 +0200)]
v4l2bufferpool: Fix missing condition in previous commit
Sebastian Dröge [Mon, 9 Sep 2013 12:44:58 +0000 (14:44 +0200)]
v4l2bufferpool: Also fix strides for other semi-planar video formats
Andreea Fulger [Mon, 9 Sep 2013 12:41:42 +0000 (14:41 +0200)]
v4l2bufferpool: Fix stride for NV12/NV21
https://bugzilla.gnome.org/show_bug.cgi?id=707758
Matej Knopp [Sat, 7 Sep 2013 14:37:03 +0000 (16:37 +0200)]
matroskademux: fix leaking buffer and caps
https://bugzilla.gnome.org/show_bug.cgi?id=707688
Tim-Philipp Müller [Thu, 5 Sep 2013 18:46:37 +0000 (19:46 +0100)]
udpsrc: fix build on win32
gstudpsrc.c:855:15: error: #if with no expression
Wim Taymans [Wed, 4 Sep 2013 13:50:42 +0000 (15:50 +0200)]
avidemux: handle unseekable streams
Handle streams that we can't seek in and ignore them in the
seek logic.
Wim Taymans [Wed, 4 Sep 2013 13:25:39 +0000 (15:25 +0200)]
avidemux: only check video compression for video streams
Or else we might deref a stream with a NULL strf.vids and segfault
Alex Ashley [Tue, 18 Jun 2013 12:27:20 +0000 (13:27 +0100)]
qtdemux: Add support for the avc3 sample entry format of the AVC file format
Amendment 2 of ISO/IEC 14496-15 (AVC file format) is defining a new
structure for fragmented MP4 called "avc3". The principal difference
between AVC1 and AVC3 is the location of the codec initialisation
data (e.g. SPS, PPS). In AVC1 this data is placed in the initial
MOOV box (moov.trak.mdia.minf.stbl.stsd.avc1) but in AVC3 this data
goes in the first sample of every fragment (i.e. the first sample in
each mdat box). The principal reason for avc3 is to make it easier
for client implementations, because it removes the requirement to
insert the SPS+PPS in to the decoder pipeline every time there is a
representation change.
This commit adds support for the "avc3" atom, which is almost identical
to the "avc1" atom, except it does not contain any SPS or PPS data.
https://bugzilla.gnome.org/show_bug.cgi?id=702004
Mathieu Duponchelle [Tue, 3 Sep 2013 22:27:50 +0000 (00:27 +0200)]
videomixer: Don't set EOS to FALSE when the collectpad *is* EOS
https://bugzilla.gnome.org/show_bug.cgi?id=707238
Matej Knopp [Tue, 3 Sep 2013 15:32:41 +0000 (17:32 +0200)]
flacparse: cleanup on error after state change
https://bugzilla.gnome.org/show_bug.cgi?id=707229
Sebastian Dröge [Tue, 3 Sep 2013 09:23:24 +0000 (11:23 +0200)]
udpsrc: Bind to multicast addresses on non-Windows systems
On Windows it's not possible to bind to a multicast address
but the OS will make sure to filter out all packets that
arrive not for the multicast address the socket joined.
On Linux and others it is necessary to bind to a multicast
address to let the OS filter out all packets that are received
on the same port but for different addresses than the multicast
address
And deprecate the multicast-group property and replace it with the
address property.
https://bugzilla.gnome.org/show_bug.cgi?id=707042