Commit graph

140 commits

Author SHA1 Message Date
Edward Hervey 92edd82c86 mpegtsdemux: Switch to MPEG-TS SI library
* Only mpeg-ts section packetization remains.
* Improve code to detect duplicated sections as early as possible
* Add FIXME for various issues that need fixing (but are not regressions)

https://bugzilla.gnome.org/show_bug.cgi?id=702724
2013-07-03 09:17:25 +02:00
Edward Hervey 26689fc437 mpegtsbase: Only warn for added streams when needed
We use add_stream(stream_type:-1) to ensure a programs' PCR Stream is
also taken into account. For most programs this will re-use an
existing ES stream.

So only warn that we are re-adding a stream if it was already present
AND it is not to ensure the PCR stream is taken into account.
2013-06-24 08:24:58 +02:00
Edward Hervey 40bcf48b0c mpegtbase: simplify code
We don't need generic methods for push/flush since we know all the
subclass that we control
2013-06-19 12:29:47 +02:00
Edward Hervey e66d543f00 tsparse: Ensure initial events are sent in the right order
First send stream-start, then caps, then segment.

The segment we push is from upstream in push-mode. If we work in pull-mode
then we initialize the base segment to BYTES.

https://bugzilla.gnome.org/show_bug.cgi?id=702422
2013-06-19 07:40:28 +02:00
Josep Torra 28a2902a7b tsdemux: fixes seeking in pull mode
Preserve the current segment and observations in pull mode seeks with
flushing.

https://bugzilla.gnome.org/show_bug.cgi?id=698050
2013-06-12 08:01:06 +02:00
Michael Rubinstein e6c8224609 mpegtsdemux: Free memory behind GString if we don't use it
https://bugzilla.gnome.org/show_bug.cgi?id=700903
2013-05-25 15:49:21 +02:00
Edward Hervey ce441cbff7 mpegtsbase: Post an error message when EOS'ing without source pads
This ensures we don't "hang" when files can't be decoded, or contain
no valid streams.
2013-05-23 14:59:34 +02:00
Sebastian Dröge 4ca886c53b mpegtsbase: Call ::program_stopped after removing all streams
Subclasses want to access the program while removing the streams
and will currently crash because of dereferencing NULL in some cases.
2013-04-10 16:19:00 +02:00
Edward Hervey ca3146a2cd tsparse: Ensure segment events are forwarded
We skip them for tsdemux though (recreated later)

Fixes #690949
2013-03-30 13:54:37 +01:00
Sebastian Dröge acacef9fbb mpegtsdemux: Fix various compiler warnings 2013-03-03 12:30:32 +01:00
Josep Torra 1fc5fffe08 mpegtsbase: fix double unref of seek event 2012-11-12 22:57:19 +01:00
Josep Torra cc40d49bed mpegtsbase: flush in FLUSH_STOP to avoid race conditions
Ensure the chain is not running before reset the state to avoid race
conditions and random corruptions downstream.
Also fixes segfaults in the packetizer due wrong available values that
causes gst_adapter_map to return a NULL pointer.
2012-11-12 22:57:19 +01:00
Josep Torra 80dd130fb0 Revert "tsbase: add a guard with an atomic boolean when flushing"
This reverts commit e14e310f71.

Would be better move the packetizer flushing to FLUSH_STOP and avoid
the race that way. Without introducing a memory barrier that could
have impact in the performance.
2012-11-10 19:46:40 +01:00
Josep Torra e14e310f71 tsbase: add a guard with an atomic boolean when flushing 2012-11-10 00:08:35 +01:00
Edward Hervey 651203de07 mpegts: Only use timestamp-based PCR/PTS estimation when needed
When dealing with non-time based push-mode streams, we need to revert
to using the offset-based PCR/PTS estimation logic of packetizer.

This solves uses cases such as:
 pushfile:// ! tsdemux
 src ! queue ! tsdemux

https://bugzilla.gnome.org/show_bug.cgi?id=687178
2012-11-09 12:15:24 +01:00
Tim-Philipp Müller 9e1b75fda3 Fix FSF address
https://bugzilla.gnome.org/show_bug.cgi?id=687520
2012-11-04 00:09:59 +00:00
Sebastian Dröge e5eceaaa73 mpegtsdemux: First push EOS, then destroy all programs
And also properly remove the program from the subclass
2012-10-12 15:38:44 +02:00
Mark Nauwelaerts b807753453 ext, gst: only activate in pull mode if upstream is seekable 2012-09-11 17:47:33 +02:00
Edward Hervey e3c0bbe5f6 mpegtbase: reset element in READY=>PAUSED
Ensures all subclass reset vmethods are called
2012-08-14 19:06:04 +02:00
Edward Hervey 558beab1b4 mpegtbase: vmethod to notify when we're done processing input
This can be used to notify subclasses no more data is expected this
round.
tsparse will use it to push whole buffers (without copy) on the main
source pad.
It could also be used later to decide whether to push pending data
in order to reduce latency.
2012-08-14 19:05:37 +02:00
Tim-Philipp Müller 489b102a43 gst_tag_list_free -> gst_tag_list_unref 2012-08-04 16:31:30 +01:00
Edward Hervey d3271381ee mpegtsbase: Move known PSI PIDs to where they belong
This avoids tsdemux parsing data is doesn't really care about

Conflicts:

	gst/mpegtsdemux/mpegtsparse.c
2012-06-29 10:02:30 +02:00
Edward Hervey ada9990092 mpegtbase: Add more known default SI PIDs 2012-06-29 09:59:13 +02:00
Edward Hervey a8dd05742a mpegtbase: Always send EOS
subclass will take care of handling it more if needed
2012-06-21 11:25:17 +01:00
Wim Taymans dbed726057 update for task api change 2012-06-20 10:40:42 +02:00
Edward Hervey 8fd2d43d60 mpegtbase: Avoid copying GstStructure 2012-06-19 10:49:37 +01:00
Edward Hervey e2576f0e86 mpegtsdemux: Also parse TOT (Time Offset Section)
It's the same as TDT, except with descriptors at the end
2012-06-05 10:54:27 +02:00
Edward Hervey d9121c38ea mpegtsdemux: FIXME/Comment about issues/errors 2012-06-05 10:54:26 +02:00
Edward Hervey f0867c7247 mpegtspacketizer: Avoid alloc/free where possible
Helps for streams with a lot of sections, like EIT
2012-06-05 10:54:26 +02:00
Edward Hervey aab8c46f10 mpegtbase: Add more sections that don't have a CRC 2012-06-05 10:54:26 +02:00
Edward Hervey 25f6c78d79 mpegdefs: Add list of known table_id
Along with the specifications from which they come. Avoids having
to search for which spec a table_id belongs to
2012-06-05 10:54:26 +02:00
Edward Hervey 63f8b970af mpegtsbase/packetizer: Add CAT section handling
Allows reporting the global EMM
2012-06-05 10:54:25 +02:00
Edward Hervey dfe6863387 mpegtbase: Add more debug in PSI handling
Allows us to identify which SI we don't handle
2012-06-05 10:47:49 +02:00
Edward Hervey d47d1713d9 mpegtbase: Add more default known PSI table_id 2012-06-05 10:47:49 +02:00
Edward Hervey 9924c178c8 mpegtbase: Refactor PSI detection 2012-06-05 10:47:49 +02:00
Edward Hervey 9f7e70f754 mpegtbase: ECM/CA sections don't have a CRC
So don't check for it :)

Also add a bit more info in the warning message to speed up detecting
whether it's a false-positive or not.
2012-06-01 16:42:41 +02:00
Edward Hervey 7784c0d350 mpegtsbase: Check before getting descriptors from structure
Avoids spurious warnings. Not having those descriptors is nothing
fatal, so check their presence before trying to get them.
2012-05-26 15:54:44 +02:00
Edward Hervey a633347ed1 mpegtsbase: Speed up _is_psi()
By making it inline and simplifying the bit macros
2012-05-23 09:37:49 +02:00
Edward Hervey 3c73d29162 mpegtsbase: Adapt to new packetizer behaviour 2012-05-22 17:43:38 +02:00
Wim Taymans 7394deef33 tsbase: unref bad packets too
Conflicts:

	gst/mpegtsdemux/mpegtsbase.c
2012-05-01 11:50:39 +02:00
Wim Taymans eaf4d97815 mpegtsbase: don't push events upstream in pull mode
In pull mode, don't push the seek event upstream.
2012-05-01 11:43:07 +02:00
Gil Pedersen fcd8155d87 mpegtsdemux: port to 0.11
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=674397
2012-04-20 11:25:31 +02:00
Gil Pedersen 095a17ad03 mpegtsdemux: fix memory leaks
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=674393
2012-04-20 11:25:31 +02:00
Edward Hervey cd728627af mpegtsbase: Don't leak corrupt section packet buffer 2012-04-02 15:25:16 +02:00
Edward Hervey 881350f34c tsdemux: Fix several leaks
* dont' leak buffers when a stream is in discont state
* don't leak buffers when a program is removed/deactivated
* remove all programs when disposing
2012-03-30 19:20:17 +02:00
Edward Hervey d798cb7be3 tsdemux: printf fix 2012-03-05 11:27:51 +01:00
Tim-Philipp Müller 0bb5a01639 tsdemux: fix confusing variable name 2012-03-03 15:47:01 +00:00
Edward Hervey a3ae51be29 mpegtsbase: Flush out the packetizer on flushing seeks
... else we end up with bogus data/offsets
2012-03-02 17:19:45 +01:00
Edward Hervey 671550714f mpegtsbase: Check harder for program changes
And don't just rely on the section crc/version_number changing to
indicate that the program actually changed.
2012-03-02 10:54:48 +01:00
Edward Hervey 097f09b823 mpegtsbase/tsdemux: Refactor seek and segment handling
All calculations go through the mpegtspacketizer
Remove unused variables/code
2012-03-01 18:15:51 +01:00
Edward Hervey 77ece06a3f mpegtsbase: Error out on EOS without any pad
Avoids ending up with hanging pipelines
2012-03-01 18:15:51 +01:00
Edward Hervey c10fc17a1e Revert "mpegtsdemux: Not apply various time the same PMT to a program when repetead"
This reverts commit 8cb0e87f56.

mpegtspacketizer already checks if it's a new PMT or not
2012-03-01 18:15:51 +01:00
Edward Hervey d920d9d64f tsdemux: Remove all seeking code
It was more than bogus
2012-03-01 18:15:51 +01:00
Thibault Saunier 336710d355 tsbase: Fix parsing of PSI table IDs
(Ported from mpegtsdemux d8fd874f52)
2012-02-24 19:08:40 -03:00
Thibault Saunier 6a8d2c45f6 mpegtspacketizer: Estimate clock skew and retimestamps buffers more precisly
Apply the EPTLA algotithm to estimate clock skew.
Reusing code from  -good/gst/rtpmanager/rtpjitterbuffer.c
2012-02-24 10:57:09 +01:00
Edward Hervey c492b00b69 mpegtsbase: Query whether upstream is live or not 2012-02-23 16:39:48 +01:00
Thibault Saunier 8cb0e87f56 mpegtsdemux: Not apply various time the same PMT to a program when repetead
Sometimes their are several times the same PMT applying to a same program in a stream,
tsdemux was totally baffled when this was happening, we now keep the one we
already applied so it works properly.
2012-02-17 12:19:20 -03:00
Thibault Saunier 6094ec27b1 tsdemux: Minor refactoring/code cleaning
... add some debugging symbols in the mean time.
2012-02-15 15:48:44 -03:00
Vincent Penquerc'h 8147669971 plenty: fixup glib deprecations 2012-01-27 15:47:07 +00:00
Mark Nauwelaerts b00ed32c5a mpegtsdemux: avoid NULL manipulation if invalid input 2012-01-23 14:22:18 +01: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
Youness Alaoui 894ac8f493 hlsdemux/tsdemux: Add HP copyright on work done on HLS 2011-09-09 12:12:12 +02:00
Youness Alaoui 59c61209cf tsdemux: Need to flush all streams when we receive a flush-start 2011-08-30 16:17:47 +02:00
Youness Alaoui e380fbb019 tsdemux: In push mode, do not start pull loop if upstream seek fails 2011-08-26 09:51:46 +02:00
Youness Alaoui cfd28a6f90 tsdemux: Forward seek/duration query/event to the sinkpad 2011-08-24 07:48:52 +02:00
Sebastian Dröge 6edff48378 mpegtsbase: First try if upstream handles seeking in TIME format before seeking in the demuxer 2011-08-23 09:52:20 +02:00
Youness Alaoui 4cc1dfb360 tsdemux: interpolate gap and fix timestamps depending on upstream segment 2011-08-22 15:55:47 +02:00
Youness Alaoui 02bc614163 tsbase: reinitiate segment at flush-stop event only 2011-08-18 14:54:22 +02:00
Edward Hervey adfb090b59 mpegtsbase: Remove programs on EOS
Allows subclasses to properly flush out pending data.
2011-08-01 15:46:12 +02:00
Nicolas Dufresne cbc0a2f056 mpegtsbase: Prevent stack gardening by using the right type
stream_type is stored as guint inside the GstStructure but was retreived
using valist with a pointer to guint16. This would cause stack gardening
when code is compiled without optimisation (e.g. in -O0 the compiler wont
pad the stack to optimise out required mask).

https://bugzilla.gnome.org/show_bug.cgi?id=655540
2011-08-01 09:33:25 +02:00
Edward Hervey 634d29cd88 mpegtsbase/tsdemux: Fix stream/pad activation order
We first activate new streams before shutting down old ones.
We emit no-more-pads after we add new streams and emit EOS before
removing old ones.
Also cleanup/refactor a bit more of the code accordingly
2011-07-25 18:56:49 +02:00
Edward Hervey a960e72efa mpegtsbase/tsdemux: Add more comments and removal unused variable 2011-07-19 09:49:40 +02:00
Edward Hervey 2b127601e9 mpegtsbase: Avoid double removal of streams
This can happen if the PCR pid is the same as a audio/video PID.
2011-07-19 09:49:40 +02:00
Edward Hervey b170b2020c mpegtsbase: Add a GList of streams to the program
Allows faster iteration of all program streams.

We still keep the Array to allow fast retrieval of stream by PID.
2011-07-19 09:49:40 +02:00
Edward Hervey dc18e2b16d mpegtsbase: Use a bit array instead of an array of gboolean
Makes know_psi and is_pes 32 times smaller
2011-07-19 09:49:39 +02:00
Edward Hervey b73679e13d mpegtsbase: Store incoming newsegments 2011-07-16 12:27:50 +02:00
Alessandro Decina d439f2d38d mpegtsbase: actually set seen_pat=TRUE when we see a PAT 2011-07-15 00:03:52 +02:00
Edward Hervey a82483e367 mpegtsbase: Split up whether we saw a PAT and its offset
Fixes the issue with streams that don't set an offset on their buffers,
like those coming from hlsdemux.

Fixes #653481
2011-07-14 22:10:27 +02:00
Janne Grunau ff15d6fa80 mpegtsdemux: implement key_unit seeking for MPEG2 video 2011-06-07 20:50:34 +02:00
Janne Grunau 3ce1ec7c9c mpegtsdemux: accurate seeking
* pes header parsing for pts is ugly, refactor
 * timestamps/newsegment after seeking is still off
2011-06-07 20:50:34 +02:00
Janne Grunau 15391b29e1 mpegtsdemux: push based seeking based on PCR
buffer timestamps are converted to GstClockTime to cover pcr/pts wraps.
multiple pcr/pts wraps are handled with an index which ensures at most
a single pcr wraparound between two entries.
the last seen pcr is recorded to have a nearby index point for short seeks
resuming playback might be delayed if the postion is not a keyframe

TODO: replace manual packet scanning and parsing in the initial duration estimation
2011-06-07 20:50:34 +02:00
Edward Hervey e3839f0241 mpegtsbase: Don't call program_stopped with a NULL program 2011-05-31 12:58:11 +02:00
Edward Hervey 565f068049 mpegtsbase: Unref buffers we don't use.
Avoids a massive leak :)

https://bugzilla.gnome.org/show_bug.cgi?id=648929
2011-04-29 12:47:34 +02:00
Edward Hervey c26ca36cf0 mpegtsbase: Don't forget to free the program streams array
https://bugzilla.gnome.org/show_bug.cgi?id=648929
2011-04-29 12:47:34 +02: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
Janne Grunau bc91adcf55 mpegtsdemux: fix stream_info descriptor parsing 2011-03-24 15:18:34 +01:00
Janne Grunau 3ebc8a43e2 mpegtsdemux: do not try to parse packets containing section data as PES 2011-03-21 19:30:17 +01:00
Janne Grunau 74a8e966f5 mpegtsdemux: fix playback if PMT is seen before PAT
The stream for the PMT pid has to be cleared since the version checking
in the packetizer won't emit the same PMT again otherwise.
2011-03-21 19:24:08 +01:00
Janne Grunau 92d5ea2926 mpegtsdemux: use G_GUINT64_FORMAT as format specifier for guint64
fixes compilation on 32bit
2011-02-17 12:51:07 -08:00
Janne Grunau 22ecf13e42 mpegtsdemux: add MPEG TS demuxer rewrite from Edward Hervey
with contributions from Miquel Angel Farre Guiu and Zaheer Abbas Merali
2011-02-17 17:56:59 +01:00