Commit graph

228 commits

Author SHA1 Message Date
Alessandro Decina
8fb0beaf00 mpegpsdemux: limit the amount of scanning done on duration queries
Limit the amount of data scanned when looking for PTSes in duration queries as a
failsafe for kinda broken, potentially large files with sparse or no PTSes.
2012-01-25 13:06:46 +01:00
Alessandro Decina
0961e2f494 mpegpsdemux: don't scan for the last PTS if the first wasn't found 2012-01-25 13:06:45 +01:00
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
f1810502a7 mpegdemux: avoid NULL manipulation if invalid input 2012-01-23 14:22:18 +01:00
Mark Nauwelaerts
552f991ba0 mpegdemux: avoid some unlikely leaks 2012-01-23 14:22:17 +01:00
Tim-Philipp Müller
27354f065d mpegpsdemux: handle corner-case of short read in pull_buffer better
It's extremely unlikely, but there are corner cases where a short
read might happen, so handle that, just in case.
2012-01-19 15:56:12 +00:00
Vincent Penquerc'h
31cb57fbb7 mpegdemux: fix missing finalize chaining to parent
This code does not seem to trigger on my test streams, so it's
a bit of a blind fix, but seems safe enough to push.
2012-01-16 17:10:30 +00: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
Julien Isorce
f21ea162ad mpegtsparse: check offset when retrieving table_id on malformed packets
Fix bug #665988
2011-12-13 10:44:47 +01:00
Sebastian Dröge
0d40afa9f0 Revert "mpegtsparse: check offset when retrieving table_id on malformed packets"
This reverts commit e62978d045.
2011-12-13 10:44:42 +01:00
Julien Isorce
e62978d045 mpegtsparse: check offset when retrieving table_id on malformed packets 2011-12-12 15:05:16 +01: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
Alexey Fisher
2099a39459 mpegpsdemux: recalculate adjust if difference is negative
One of my dvds jump on some position and miss about 1 minute of stream.
The reason was mpeg timestamps. On some position scr difference is negative.
It produced negative timestamps. Since it was converted to unsigned value,
gstreamer timestamps was invalid. Instead of increasing mpeg ts,
they was decreasing till it started to be positive.

The jump in timestamps caused mpeg2dec to skip frames to make QoS happy.

This patch just make diff unsigned to avoid negative values.

Signed-off-by: Alexey Fisher <bug-track@fisher-privat.net>

https://bugzilla.gnome.org/show_bug.cgi?id=656115
2011-11-29 11:35:11 +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
7521b597f4 various: fix pad template ref leaks
https://bugzilla.gnome.org/show_bug.cgi?id=662664
2011-11-28 13:08:27 +00:00
Sebastian Pölsterl
9759d66407 mpegtsparse: support more character set encodings
Support UTF-16BE, EUC-KR (KSX1001), GB2312 and ISO-10646/UTF8 text
encoding and fixed new line for multibyte encoding

https://bugzilla.gnome.org/show_bug.cgi?id=664257
2011-11-22 11:35:00 +00:00
Vincent Penquerc'h
4275a70cb5 mpegdemux: catch section lengths extending past the buffer length
This is probably the cause for an occasional crash while streaming
MPEG. Blind fix after staring at the code and following logic, so
may or may not fix the issue, I cannot test.
2011-11-07 11:59:12 +00:00
Vincent Penquerc'h
b3d751667d mpegpsdemux: fix zero length packet handling
https://bugzilla.gnome.org/show_bug.cgi?id=631416
2011-11-07 11:17:00 +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
46dd7941f3 mpegpsdemux: take into account SCR offset when seeking
Since the seeking byte offset is chosen by linear interpolation
from SCR values, we need to take that first SCR into account
to end up near the correct offset. Otherwise, as the code does
a linear search after that first seek, it will take a LOOOOOONG
time to get there for streams which don't start at zero.

https://bugzilla.gnome.org/show_bug.cgi?id=659485
2011-09-30 15:15:06 +01:00
Vincent Penquerc'h
49d1121101 mpegdemux: answer position query with a stream time position
https://bugzilla.gnome.org/show_bug.cgi?id=659485
2011-09-30 15:11:12 +01:00
Vincent Penquerc'h
71f28c44a0 mpegpsdemux: remove unused field
https://bugzilla.gnome.org/show_bug.cgi?id=659485
2011-09-30 15:05:31 +01: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
Olivier Crête
ad97807497 mpegdemux: Restore erroneously removed data++
Also, put back some unused code in comment and replace // comments by /* */
2011-07-13 13:38:31 -04:00
Olivier Crête
dcd54fced1 mpegtsdemux: Fix unused-but-set warnings 2011-07-12 17:50:27 -04:00
Tim-Philipp Müller
0777b678f5 gst: some more unused-but-set-variable warning fixes 2011-06-04 20:35:03 +01:00
Gabriel Strimtu
d8fd874f52 mpegtsparse: Fix parsing of PSI table IDs
Fixes bug #635917.
2011-05-26 09:46:58 +02: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
Tim-Philipp Müller
5d6bdf6052 Fix some unused-but-set-variable warnings with gcc 4.6 2011-04-15 00:24:47 +01:00
Thibault Saunier
17fd7ebcb4 android: make it ready for androgenizer
Remove the android/ top dir
Fixe the Makefile.am to be androgenized

To build gstreamer for android we are now using androgenizer which generates the needed Android.mk files.
Androgenizer can be found here: http://git.collabora.co.uk/?p=user/derek/androgenizer.git
2011-04-11 07:27:11 +02: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
Mart Raudsepp
b69450af92 mpegtspacketizer: Handle all ISO8859-x encodings in get_encoding()
... according to ETSI EN 300 468, "Selection of character table"
2011-03-21 19:57:39 +01:00
Edward Hervey
ee0c9ae2f3 mpegtspacketizer: Don't forget the GType when using caps_new_simple() 2011-01-10 19:11:22 +01:00
Tim-Philipp Müller
d4441a3025 mpegtsdemux: fix silly way of creating caps 2011-01-10 11:25:47 +00:00
Karol Sobczak
0b4dfa685d mpegtsdemux: fix re-syncing on invalid data after seek
Or possibly even at startup. If we couldn't find a sync within
the first few bytes, we'd just push more data into the adapter
but never discard any of the invalid data at the beginning, so
would never be able to re-sync.

https://bugzilla.gnome.org/show_bug.cgi?id=639063
2011-01-10 11:18:52 +00: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