Commit graph

92 commits

Author SHA1 Message Date
Vincent Penquerc'h
cf74b0bc76 mpegtsdemux: fix frequent deadlock demuxing MPEG TS
A previous patch to add streams early to fix playback of
low bitrate streams causes frequent deadlock of a nature
I'm at loss how to fix.
I'm not certain whether it's a bug in decodebin2, or in
that mpegtsdemux patch.
Since it causes a major regression, let it be disabled for now.
2012-01-23 17:47:45 +00:00
Mark Nauwelaerts
552f991ba0 mpegdemux: avoid some unlikely leaks 2012-01-23 14:22:17 +01:00
Vincent Penquerc'h
b23e6bfa70 mpegtsdemux: only warn when we see a PID with unknown type
This is quite frequent, and we will just ignore that stream,
so an error is not warranted.
2011-12-19 13:18:51 +00:00
Vincent Penquerc'h
09f0860a10 mpegtsdemux: only offset timestamps when live
This code is to sync to a live source when there is a delay
between start and when we receive the first buffer, so it does
not make sense in a non live case.

This fixes playback of streams where the input timestamps are
based off some arbitrary offset.

https://bugzilla.gnome.org/show_bug.cgi?id=663756
2011-12-08 12:46:20 +00:00
Vincent Penquerc'h
f1a4791f74 mpegdemux: Try to add all streams early
This will allow us to signal no-more-pads to avoid hitting
the decodebin2 overrun.
2011-11-28 15:10:47 +00:00
Vincent Penquerc'h
fb66b3c2ac mpegtsdemux: handle pads with no data
Some streams declare PIDs but will not send data for them.
Ensure we time out on those, and both send new segments to
keep their time synchronized with the rest, and do not wait
forever before deciding to signal no-more-pads.

https://bugzilla.gnome.org/show_bug.cgi?id=659924
2011-11-28 15:08:13 +00:00
Vincent Penquerc'h
f909c57546 mpegtsdemux: signal no-more-pads when appropriate
We track streams for which a data callback is set (and for which
pads will be added only when data is received), and signal
no-more-pads when the last pad is added.

https://bugzilla.gnome.org/show_bug.cgi?id=659924
2011-11-28 15:08:06 +00:00
Vincent Penquerc'h
9715fc3189 mpegdemux: take into account offset of first buffer
This fixes playback when the source starts later than the playback
pipeline, and when a source drops for a while then restarts.

https://bugzilla.gnome.org/show_bug.cgi?id=657794
2011-11-28 14:01:43 +00:00
Vincent Penquerc'h
918d2e710f mpegdemux: fix some more video freezing
There was a second threshold, which apparently needs to be smaller
than the first, though I'm not certain of it as I don't understand
yet this nest of wtf that is the mpeg demuxer timing logic.

Fixes video freezing on one (corrupted) MPEG sample. It would
previously never think it was out of the discontinuity, and would
push buffers with no timestamp.

Now this took me more than a day's poking at the thing, for just
one constant change, and I'm scared to have to touch this again :S

https://bugzilla.gnome.org/show_bug.cgi?id=655804
2011-11-28 13:57:42 +00:00
Vincent Penquerc'h
7960280afb mpegdemux: catch smaller PTS dicontinuities
In a test stream, I get one buffer with a PTS of about 15 seconds
in the future compared to the previous one, and next buffers with
timestamps continuing where the original ones left off.

This caused the sink to wait 15 seconds to display the frame while
more frames queued up, and then dump all the subsequent frames as
they "arrived too late".

Maybe that threshold should be made configurable, but for now,
make it more smaller to catch more of these.

https://bugzilla.gnome.org/show_bug.cgi?id=655804

Non AV streams keep using the larger threshold (10 minutes), as
subtitles may arrive only every so often.
2011-11-28 13:57:29 +00:00
Vincent Penquerc'h
e4856a2965 mpegtsdemux: fix scanning stopping too early
https://bugzilla.gnome.org/show_bug.cgi?id=648245
2011-10-03 11:15:16 +02:00
Vincent Penquerc'h
38cdb54112 mpegtsdemux: keep CRC table in .rodata
https://bugzilla.gnome.org/show_bug.cgi?id=660118
2011-09-26 13:00:03 +02:00
Tim-Philipp Müller
0777b678f5 gst: some more unused-but-set-variable warning fixes 2011-06-04 20:35:03 +01:00
Rafael Diniz
83b5b29639 mpeg[pt]sdemux: Add support for AAC LATM/LOAS streams
Fixes bug #615681.
2011-05-20 10:00:02 +02:00
David Schleef
40f3b4a651 mpegtsdemux,tsdemux: Add byte-stream to h264 caps
Fixes #606662.
2011-04-24 19:40:08 -07:00
René Stadler
379d5adfce mpegtsdemux: ensure cleanup of pes/section filter helper structures
In particular, the section_filter would not be cleared for a private section
stream, leaking a GstAdapter. Seen on bug #645502.
2011-03-24 22:42:08 +02:00
René Stadler
1d8482c0c6 mpegtsdemux: don't leak pad name
As seen on bug #645502.
2011-03-24 22:41:12 +02:00
Tim-Philipp Müller
89fed534e8 mpegtsdemux: fix PAT and PMT info-related object leaks 2011-01-07 02:12:11 +00:00
David Schleef
edd1f791ca mpegdemux: Fix c99-ism 2010-12-30 19:25:46 -08:00
Vincent Penquerc'h
29c6a95417 mpegdemux: do not use the pad buffer allocation functions in demuxers
https://bugzilla.gnome.org/show_bug.cgi?id=637931
2010-12-24 14:17:51 +01:00
Sebastian Dröge
18061222b9 mpegtsdemux: Rename DVB subtitling media type to subpicture/x-dvb 2010-12-15 21:11:11 +01:00
Sebastian Dröge
61c2b173c6 mpegtsdemux: Mark array static const and use G_N_ELEMENTS instead of sizeof 2010-12-15 20:49:57 +01:00
Janne Grunau
431ea2c697 mpegtsdemux: add DESC_DVB_SUBTITLING descriptor for language parsing 2010-12-15 20:47:25 +01:00
Janne Grunau
eaf1b316b0 mpegtsdemux: enable gather_pes only for DVB subtitle private streams 2010-12-15 20:47:25 +01:00
Mart Raudsepp
1db547f0b6 gstmpegtsdemux: add temporary **HACK** for dvb subs testing so dvbsuboverlay gets whole packets
<tpm> leio, what's the mpegts demux hack about?
<leio> my libdvbsub code can't handle cut packets
<leio> so the hack instructs the demuxer to gather full packets before pushing down, but it applies that to more PES packet types than just dvbsub, but I'm not sure if that's a bad thing
<leio> either way, needs a cleaner solution, either in demuxer, or I need to handle cut packets
<tpm> ok, but really it should be fixed in the overlay, right?
<tpm> or a parser be inserted
<leio> the problem is that I don't know from the first packet beforehand if it is a cut one or no
<leio> not
<leio> err, first buffer
<leio> just when I receive the next one I see if it has a valid timestamp on it or not
<leio> so I can't very well queue it up in the chain either, I might be blocking the very last subtitle for no reason or something
<tpm> but you could just drop/ignore packets until you find one, right?
<leio> find what?
<tpm> a complete packet?
<leio> the problem isn't that they aren't complete
<leio> the problem is that they are cut across multiple GstBuffers by the demuxer without the hack
<tpm> sure, I understand that
<tpm> but you can't easily determine if a GstBuffer contains he start fragment of a packet or not?
<leio> I guess I could parse the packet and see if its length is enough, just like the libdvbsub code eventually does too
<leio> I can, it has a timestamp if it's the first chunk
<leio> I just never know if I need to wait for more, without some parsing
<tpm> ah ok
<leio> while the demuxer could just give me an uncut one in the first place
<leio> like it always does for program streams
<leio> that gather_pes is always set in gstmpegdemux, but not in gstmpegtsdemux
2010-12-08 16:30:09 +01:00
Stefan Kost
0c22e1b954 various (gst): add missing G_PARAM_STATIC_STRINGS flags
Canonicalize property names as needed.
2010-10-19 15:47:17 +03:00
Sebastian Dröge
f407d51ae8 mpegdemux: Don't use GST_FLOW_IS_FATAL()
And fix some minor issues related to its usage.
2010-09-21 12:26:35 +02:00
Sebastian Dröge
b1a12c3a2d mpegtsdemux: Don't use liboil functions
glibc memcpy() will be faster than liboil's/orc's for now anyway
and we can use orc's later, after orc has support for loop unrolling.
2010-06-14 14:48:02 +02:00
Arun Raghavan
e5a37377ae mpegtsdemux: Some checks to avoid asserts
gst_mpeg_descriptor_find() expects the description field to be non-NULL.
This fixes a couple of calls where the value being passed is not
verified to be non-NULL first.

https://bugzilla.gnome.org/show_bug.cgi?id=620456
2010-06-03 20:11:29 +02:00
Zaheer Abbas Merali
5208d030b3 mpegtsdemux: fix memory corruption when parsing adaptation field 2010-05-17 16:26:03 +01:00
Sebastian Dröge
1306160b79 mpegtsdemux: Add support for BlueRay style DTS
Fixes bug #614259.
2010-04-05 10:33:26 +02:00
Sebastian Dröge
074d20cf99 mpegtsdemux: Add support for the two DTS HD stream types
Fixes bug #614259.
2010-04-04 20:23:00 +02:00
Tim-Philipp Müller
eb34b2015b mpegtsdemux: add missing space to debug message 2010-03-26 12:04:48 +00:00
Benjamin Otte
775c7584fd gst_element_class_set_details => gst_element_class_set_details_simple 2010-03-18 22:46:41 +01:00
Tim-Philipp Müller
cadb0526d5 mpegtsdemux: fix minor memory leak in property getter
Don't leak the string returned by g_strjoinv(). While we're at it,
use GString to assemble the string to be returned.
2010-03-15 19:21:52 +00:00
Sebastian Dröge
e1c1a6c874 mpegtsdemux: Never flush more bytes than available
This could happen if the input doesn't contain any MPEG TS
data and the complete adapter content should be skipped.
2010-02-09 15:24:28 +01:00
Tim-Philipp Müller
b32305d015 mpegtsdemux: fix language extraction
The descriptor contains ISO 639-2 language codes, but we want
two-letter ISO 639-1 codes in GST_TAG_LANGUAGE.
2010-01-06 01:57:01 +00:00
Arnaud Patard
24965dc415 mpegtsdemux: Handle eac3 in PMT
When the stream type is set to private data, gst-mpegtsdemux is trying to find
audio descriptors in PMT and look for AC3 (tag 0x6a) but doesn't look for EAC3
(tag 0x7a). Handle this case too.

Fixes bug #605904.
2010-01-04 10:15:29 +01:00
Jan Schmidt
91499fd9a7 mpegtsdemux: Don't send new-segment with start time == -1
When sending new-segment to a stream, ensure that there is either a valid
PCR, or else wait until there's a PTS on the stream (dropping packets if
needed) in order to avoid generating an invlaid new-segments event.

https://bugzilla.gnome.org/show_bug.cgi?id=595161
2009-10-29 10:53:10 +00:00
Alessandro Decina
a17393fd34 Fix warnings with gcc 4.0.1. 2009-09-23 12:34:47 +02:00
David Schleef
2506c3567c mpegtsdemux: Set DISCONT on buffers 2009-09-17 17:03:40 -07:00
Zaheer Abbas Merali
712ee57190 mpegtsdemux: add pad for DVB Subtitling pads 2009-09-15 14:35:15 +01:00
Edward Hervey
92ec711733 mpegtsdemux: Use GST_TIME_FORMAT in debug statement. 2009-09-11 15:19:17 +02:00
Edward Hervey
ddcd0e60b1 mpegtsdemux: Reset stream->last_time when flushing.
This fixes naive seeking a tiny bit (by basically hinting at _data_cb
that it shouldn't expect the incoming buffers to be the ones just after
the previous ones).

Without this, seeking by more than 10mins forward would just end up in an
endless loop.
2009-09-11 15:18:58 +02:00
Edward Hervey
7057f285cc mpegtsdemux: Sprinkle branch prediction macros. 2009-09-11 15:16:17 +02:00
Sebastian Dröge
15796d66bb mpegtsdemux: Fix usage of __always_inline__ attribute
This attribute can't be used for function declarations because
it needs the function body. Instead of a forward declaration of
functions, move the function itself above it's first use.

Fixes bug #594489 and compilation with gcc 4.3 and earlier.
2009-09-08 15:20:14 +02:00
Josep Torra
b60d71482f mpegtsdemux: set specific caps for lpcm in private stream
In the clips that I've found those streams, the lpcm header is
different than the DVD case.
Then the decoder need to know this in order to be able parse it.
2009-09-04 12:35:31 +02:00
Josep Torra
659e90f8f6 mpegtsdemux: added autodetect of packet size and removed m2ts mode property 2009-09-04 12:30:18 +02:00
Josep Torra
c67dc212bf mpegtsdemux: some more handling of VC1 and EAC3
If the PMT have the register descriptor HDMV assume EAC3
For VC1 make the code more aligned to RP227.
2009-09-04 12:02:18 +02:00
Sebastian Dröge
77fa16cf44 mpegtsdemux: If stream type is AC3 and no EAC3 descriptor is found assume AC3 2009-09-03 15:46:27 +02:00