| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
| |
The tsdemux latency should always be added to the minimum
latency (which is always a valid clock time value). The
"cleanup" in commit a1f709c2 made it so that it would not
be added if upstream reported 0 as minimum latency (as
e.g. udpsrc would). This broke playback of live mpeg-ts
streaming in some cases, leading to playback stutter due
to a too-small configured latency for the pipeline.
https://bugzilla.gnome.org/show_bug.cgi?id=751508
|
|
|
|
|
|
|
| |
A variable can't be two values at once. We want to stop if it's not the
actual ts *AND* not the other ts
CID #1316475
|
|
|
|
|
| |
No need to check if done is True since break will already terminate the for
loop.
|
|
|
|
|
|
| |
We only want to do a hard reset of the observations if we're working
with TIME segments in push mode. For BYTE segment we want to keep
the observations (in order to do seeks in push-mode).
|
|
|
|
|
|
|
|
|
|
|
| |
When in push mode, we want to discard all previous observations from the
mpegtspacketizer when we get a DISCONT buffer.
This avoids trying to calculate bogus timestamps (estimating them using old
PCR observations).
We only do a hard reset in push-mode. In pull-mode we still need the observations
(in order to seek properly)
|
|
|
|
|
|
| |
This is not public API, use g_assert() instead of
g_return_if_fail(), so that it's compiled out in
releases. It's only called from our code, with &foo.
|
|
|
|
|
|
| |
There's no timestamps for these streams though, we
might want to make some up based on the last/next
video PTS or so.
|
|
|
|
|
|
|
|
| |
The segment should start at first PTS, and the vairable name lower_pts
state so correctly. Though we where using the first DTS instead. This
could lead to small desynchronization of video stream.
https://bugzilla.gnome.org/show_bug.cgi?id=740575
|
|
|
|
|
|
|
| |
Rename template to caps to keep the original intention of the code after
commit b4c9aa1c
CID #1304674
|
|
|
|
| |
This reverts commit 0635acfec041b1c664bc0770839b1a576e3598b1.
|
|
|
|
|
|
|
| |
After commit b4c9aa1c308f88bf4e1f69ab0156ed9f99815e8e template will always be
NULL. The if conditional will always be FALSE, so removing it.
CID #1304674
|
|
|
|
| |
Function goes to done before the value set in start_offset is ever used.
|
|
|
|
| |
Avoid repeating the same pad creation code everywhere
|
|
|
|
| |
Data might not exist anymore
|
|
|
|
|
|
|
|
|
| |
Chinese broadcaster encapsulate AVS video codec into MPEG2-TS. They
use the stream_id 0x42 to identify AVS video streams. It should be noted
that this id is currently within the ISO reserved range, hence it's
utilisation is unofficial.
https://bugzilla.gnome.org/show_bug.cgi?id=727731
|
|
|
|
|
|
|
|
| |
Timestamps should start at the segment start, rather than 0, so
we need to not subtract the first timestamp. This makes the sink
correctly account for running time when switching PMTs where a
stream starts not quite at zero, causing timing offsets that can
become noticeable and causing dropped frames after a few times.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
A new program object is created to replace an existing one
in the programs hash table, so its refcount needs to match.
With the default of 0 refcount on creation, the next PAT
change will cause that refcount to be both incremented and
decremented (assuming the new PAT references that stream too),
which will cause the program to be destroyed.
https://bugzilla.gnome.org/show_bug.cgi?id=748412
|
|
|
|
|
|
|
|
|
|
| |
If the stream which is about to be removed still has a ref on a tag list we
should drop it.
Fix a leak which was occasionally happening with the
validate.file.playback.change_state_intensive.tron_en_ge_aac_h264_ts scenario.
https://bugzilla.gnome.org/show_bug.cgi?id=748576
|
|
|
|
|
|
|
| |
find_subtable() returns a pointer, so return NULL and
not FALSE when nothing is found.
https://bugzilla.gnome.org/show_bug.cgi?id=748527
|
|
|
|
| |
Property enum items should be named PROP_ for consistency and readability.
|
|
|
|
| |
This is not needed any longer.
|
|
|
|
|
|
|
|
| |
No need to set the value twice.
https://bugzilla.gnome.org/show_bug.cgi?id=745102
CID #295122
|
|
|
|
|
|
| |
position of GstSegment is an unsigned int64, it can never be below zero.
CID #1295123
|
|
|
|
|
| |
The behavior changes based on the type of segment,
not on the liveness of the source.
|
|
|
|
|
| |
The minimum latency is always 0 or more. And we should
requery upstream as it may have changed.
|
|
|
|
| |
Use 0x%04x for PIDs
|
|
|
|
|
|
| |
And properly use it in the SEEKING query.
Fixes seeking with gst-play
|
|
|
|
|
|
|
| |
Different streams can have different PTS/DTS bases, and some
streams may not even have DTS.
https://bugzilla.gnome.org/show_bug.cgi?id=745102
|
|
|
|
|
|
|
|
|
| |
Such seeks are used to change playback rate and we do not want
to alter the position in that case, so we bypass the flush/seek
logic, and set things up so a new segment is scheduled to be
regenerated.
https://bugzilla.gnome.org/show_bug.cgi?id=735100
|
|
|
|
|
|
|
| |
The PCRs stay locked onto the same PID as before the change,
but the relevant PID has no reason to be the same after it.
https://bugzilla.gnome.org/show_bug.cgi?id=745102
|
|
|
|
|
|
|
|
| |
This will happen when the PMT changes, replacing streams with
new ones. In that case, we need to accumulate the running time
from the previous chain in the segment base.
https://bugzilla.gnome.org/show_bug.cgi?id=745102
|
|
|
|
|
|
| |
This allows seeking to correctly set the base on the segment.
https://bugzilla.gnome.org/show_bug.cgi?id=745102
|
|
|
|
|
|
|
|
|
|
| |
Always update the segment and not only for accurate seeking and always
send a new segment event after seeks.
For non-accurate force a reset of our segment info to start from
where our seek led us as we don't need to be accurate
https://bugzilla.gnome.org/show_bug.cgi?id=743363
|
|
|
|
| |
This is not needed in 1.x series anymore
|
|
|
|
|
|
|
|
|
| |
The flush is called on discont and we shouldn't output a new segment
each time a discont happens. So this commit remove the mark for a new
segment when flushing streams by propagating the 'hard' flag passed
on the flusing from the base class.
https://bugzilla.gnome.org/show_bug.cgi?id=743363
|
|
|
|
|
|
| |
Fixes playback of Samsung-Colorful-Variety-1080i.ts.
https://bugzilla.gnome.org/show_bug.cgi?id=729768
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
When dealing with random-access content (such as files), we initially
search for the last PCR in order to figure out duration and to handle
other position estimation such as those used in seeking.
Previously, the code looking for that last PCR would search in the last
640kB of the file going forward, and stop at the first PCR encountered.
The problem with that was two-fold:
* It wouldn't really be the last PCR (it would be the first one within
those last 640kB. In case of VBR files, this would put off duration
and seek code slightly.
* It would fail on files with bitrates higher than 52Mbit/s (not common)
Instead this patch modifies that code by:
* Scanning over the last 2048kB (allows to cope with streams up to 160Mbit/s)
* Starts by the end of the file, going over chunks of 300 MPEG-TS packets
* Doesn't stop at the first PCR detected in a chunk, but instead records all
of them, and only stop searching if there was "at least" one PCR within
that chunk
This should improve duration reporting and seeking operations on VBR files
https://bugzilla.gnome.org/show_bug.cgi?id=708532
|
|
|
|
|
| |
streams with stream_type 0xff are PCR-only streams, it's normal not
to have a pad for them.
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
As a consequence, tsdemux won't remove its pads anymore on EOS.
Fixes the case when mpegtsbase is not able to process new packets
after EOS as the corresponding pids aren't known anymore because
the programs were removed and the pes/psi were kept, preventing the
PAT to be parsed again.
https://bugzilla.gnome.org/show_bug.cgi?id=738695
|
|
|
|
|
|
|
|
|
|
| |
Assume that small backward PCR jumps are just from upstream packet
mis-ordering and don't reset timestamp tracking state - assuming that
things will be OK again shortly.
Make the threshold for detecting discont between sequential buffers
configurable and match the smoothing-latency setting on tsparse
to better cope with data bursts.
|
|
|
|
|
|
|
|
|
|
|
|
| |
When the set-timestamps property is set, use PCRs on the provided
(or autodetected) pcr-pid to apply (or replace) timestamps on the
output buffers, using piece-wise linear interpolation.
This allows tsparse to be used to stream an arbitrary mpeg-ts file,
or to smooth jittery reception timestamps from a network stream.
The reported latency is increased to match the smoothing latency if
necessary.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
playbin
Signal sparse streams properly in stream-start event and force sending
of pending sticky events which have been stored on the pad already and
which otherwise would only be sent on the first buffer or serialized
event (which means very late in case of subtitle streams). Playsink in
playbin waits for stream-start or another serialized event, and if we
don't do this it will wait for the multiqueue to run full before
starting playback, which might take a couple of seconds.
https://bugzilla.gnome.org/show_bug.cgi?id=734040
|
|
|
|
|
|
|
|
|
|
| |
All pads of a stream are now added at the beginning. In order to cope with
streams that don't get any data (forever or for a long time) we detect gaps
and push out GAP events when needed.
Cleanups and commenting by Jan Schmidt <jan@centricular.com>
https://bugzilla.gnome.org/show_bug.cgi?id=734040
|
|
|
|
|
|
|
|
| |
If a discontinuity in the stream is detected, data is discarded until
a new PES starts. If the first packet after the discontinuity is also
the start of a PES, there is no reason to discard the packets.
https://bugzilla.gnome.org/show_bug.cgi?id=737569
|
|
|
|
| |
https://bugzilla.gnome.org/show_bug.cgi?id=736531
|
|
|
|
|
|
|
|
|
|
|
| |
packet_length is defined as a guint16 in the PESHeader structure. This
definition match the specification. But since we add 6 bytes to the
packet_length value (length of start_code + stream_id + packet_length),
we can overflow the guint16 when the value in the PES header is greater
than 65529.
So use a guint32 instead of a guint16 to avoid overflow.
https://bugzilla.gnome.org/show_bug.cgi?id=736490
|
|
|
|
| |
https://bugzilla.gnome.org/show_bug.cgi?id=736390
|
|
|
|
|
|
|
| |
Otherwise the pads will be there if it is restarted and the stream
can be a completely different one.
https://bugzilla.gnome.org/show_bug.cgi?id=734394
|