We need to keep the lock held because we don't want a push before the "new-ssrc-pad"
handler has completed. But we may want to push an event from inside that handler, hence
the recursive mutex.
https://bugzilla.gnome.org/show_bug.cgi?id=650916
Some h264 payloaders are unfortunately buggy and don't correctly set the
E bit in FU-A NAL when they have ended. Work around this by assuming
such a fragmentation unit has ended when there was no packet loss and a
new NAL is started
When pushing out buffers over S/PDIF or HDMI, IEC 61937 payloading
requires each buffer to contain 6 blocks from each substream. This adds
code to collect all the frames needed to meet this requirement before
pushing out a buffer.
https://bugzilla.gnome.org/show_bug.cgi?id=650313
Using the current RTCP interval to timeout SSRC collision can lead to
collisions being timed out immediately if a BYE packet is sent because
it is sent immediately, so the interval is 0. This is not what we
want. So just set a static 10 times the default RTCP interval, it
should be enough
https://bugzilla.gnome.org/show_bug.cgi?id=648642
... which is particularly needed when merging NAL units, where not resetting
would lead to output of an older (pre-flush) AU (with unintended timestamp).
Current matroska demux calculates the pixel aspect ratio only if both
DisplayHeight and DisplayWidth are set, but it is legal to use only
one variable if the other is equal to PixelWidth or PixelHeight, at
least the mkclean utility is doing that. So this makse mkcleaned
files play correctly.
https://bugzilla.gnome.org/show_bug.cgi?id=654744
A missing sys/param.h include results in:
/usr/include/sys/proc.h:64: error: 'MAXLOGNAME' undeclared here (not in a
function)
/usr/include/sys/proc.h:285: error: 'MAXCOMLEN' undeclared here (not in a
function)
when compiling goom on openbsd/ppc. We can just remove the two sys/ includes
here, they are not needed for anything.
https://bugzilla.gnome.org/show_bug.cgi?id=654749
... introduced when shuffling around code for the async implementation
by setting state of source (and udp sources) in _play before downstream
flushing is undone.
The gst_base_parse_set_frame_rate call was predicated on a change to
sample rate, duration or profile. However, the block count per frame can
also change between packets, which would result in incorrect buffer
durations.
Some video frames, for example alt-ref frame in VP8, will be
never displayed. This is why it has duration=0.
This patch allow to use this duration.
Bug: 654175
Signed-off-by: Alexey Fisher <bug-track@fisher-privat.net>
Fixes: #652144.
gstudpnetutils.h:32:0: error: "WINVER" redefined
/usr/i686-w64-mingw32/sys-root/mingw/include/_mingw.h:231:0: note: this is the
location of the previous definition
Move the following function to matroska-read-common.[ch] from
matroska-demux.c and matroska-parse.c:
- gst_matroska_{demux,parse}_parse_attachments
https://bugzilla.gnome.org/show_bug.cgi?id=650877
Move the following function to matroska-read-common.[ch] from
matroska-demux.c and matroska-parse.c:
- gst_matroska_{demux,parse}_parse_attached_file
https://bugzilla.gnome.org/show_bug.cgi?id=650877
Move the following function to matroska-read-common.[ch] from
matroska-demux.c and matroska-parse.c:
- gst_matroska_{demux,parse}_parse_metadata_id_tag
https://bugzilla.gnome.org/show_bug.cgi?id=650877
Move the following function to matroska-read-common.[ch] from
matroska-demux.c and matroska-parse.c:
- gst_matroska_{demux,parse}_parse_metadata_id_simple_tag
https://bugzilla.gnome.org/show_bug.cgi?id=650877
AUTHOR only existed in an old version of the spec and ARTIST is
the new replacement for this. We are still reading both to still
be compatible with old files.
Fixes bug #644875.
Move the following functions to matroska-read-common.[ch] from
matroska-demux.c and matroska-parse.c:
- gst_matroska_{demux,parse}_get_seek_track
- gst_matroska_{demux,parse}_reset_streams
https://bugzilla.gnome.org/show_bug.cgi?id=650877
Move the following functions to matroska-read-common.[ch] from
matroska-demux.c and matroska-parse.c:
- gst_matroska_index_seek_find
- gst_matroska{demux,parse}_do_index_seek
https://bugzilla.gnome.org/show_bug.cgi?id=650877
Move the following function to matroska-read-common.[ch] from
matroska-demux.c and matroska-parse.c:
- gst_matroska_{demux,parse}_tracknumber_unique
https://bugzilla.gnome.org/show_bug.cgi?id=650877
It does not work at all (A/V sync issues), is not very useful,
other containers work much better with Dirac and Dirac in AVI
is not supported by other software.
Fixes bug #541215.
Move the following functions to matroska-read-common.[ch] from
matroska-demux.c and matroska-parse.c:
- gst_matroska_{demux,parse}_encoding_cmp
- gst_matroska_{demux,parse}_read_track_encodings
https://bugzilla.gnome.org/show_bug.cgi?id=650877
Move the following functions to matroska-read-common.[ch] from
matroska-demux.c and matroska-parse.c:
- gst_matroska_{demux,parse}_peek_id_length_pull
- gst_matroska_{demux,parse}_peek_id_length_push
https://bugzilla.gnome.org/show_bug.cgi?id=650877
Move the following functions to matroska-read-common.[ch] from
matroska-demux.c and matroska-parse.c:
- gst_matroska_{demux,parse}_encoding_order_unique
- gst_matroska_{demux,parse}_read_track_encoding
https://bugzilla.gnome.org/show_bug.cgi?id=650877
Move the following functions to matroska-read-common.[ch] from
matroska-demux.c and matroska-parse.c:
- gst_matroska_decode_content_encodings
- gst_matroska_decompress_data
https://bugzilla.gnome.org/show_bug.cgi?id=650877
Replace the following functions with their gst_matroska_read_common_*
counterparts:
- gst_matroska_{demux,parse}_parse_index
- gst_matroska_{demux,parse}_parse_skip
- gst_matroska_{demux,parse}_stream_from_num
Introduce GstMatroskaReadCommon to contain those members of
GstMatroskaDemux and GstMatroskaParse that were used by the above
functions.
https://bugzilla.gnome.org/show_bug.cgi?id=650877
Tell GstBaseParse the duration in samples instead of time, so that
a duration query in DEFAULT format will return the correct number
of samples without rounding errors. Baseparse will convert this
into time itself when needed.
https://bugzilla.gnome.org/show_bug.cgi?id=650785
When not using the fieldanalysis element immediately upstream of deinterlace,
behaviour should remain unchanged. fieldanalysis will set the caps and flags on
the buffers such that they can be interpreted and acted upon to produce
progressive output.
There are two main modes of operation:
- Passive pattern locking
Passive pattern locking is a non-blocking, low-latency mode of operation that
is suitable for close-to-live usage. Initially a telecine stream will be
output as variable framerate with naïve timestamp adjustment. With each
incoming buffer, an attempt is made to lock onto a pattern. When a lock is
obtained, the src pad and output buffer caps will reflect the pattern and
timestamps will be accurately interpolated between pattern repeats. This
means that initially and at pattern transitions there will be short periods
of inaccurate timestamping.
- Active pattern locking
Active pattern locking is a blocking, high-latency mode of operation that is
targeted at use-cases where timestamp accuracy is paramount. Buffers will be
queued until enough are present to make a lock. When locked, timestamps will
be accurately interpolated between pattern repeats. Orphan fields can be
dropped or deinterlaced. If no lock can be obtained, a single field might be
pushed through to be deinterlaced.
Locking can also be disabled or 'auto' chooses between passive and active
locking modes depending on whether upstream is live.
... since the TEARDOWN sequence might not have had a chance to even start,
but at least connections should be closed (synchronously) and state cleaned up.
See #632504.
Simplify the command handling; passing a command to thread means we really
want it to get the message, which means to always flush provided the command
can handle being interrupted. Command thread indicates whether command
allows interruption and ensure non-flushing connection as it subsequently
needs it.
In particular, this also makes the TEARDOWN sequence interruptable
and also prevents races where _loop_ could miss a command and would
continue receiving (or at least trying to).
See #632504.
With the async state changes, it is possible that we need to open the stream
before play and pause.
Also make sure we remember a previous open failure so that we don't keep trying
again.