Commit graph

242 commits

Author SHA1 Message Date
Wim Taymans
bdd3c31902 qtdemux: simplify some helpers
Some helper functions are not needed anymore or can be simplified.
2013-07-19 17:26:54 +02:00
Wim Taymans
61a8937ced qtdemux: for non-raw video, move palette in caps
We only need to append the palette to raw video buffers, non-raw video has the
palette in the caps still.

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=704292
2013-07-19 17:14:46 +02:00
Arnaud Vrac
40ab78825c qtdemux: nitpicking in esds parsing 2013-07-19 14:26:18 +02:00
Arnaud Vrac
d0d25a5e1f qtdemux: set proper caps for mpeg-1 audio
Remove AAC specific fields from mpeg-1 audio caps, remove assumption
that the mpeg1 audio layer is 3, and set `parsed' field.

https://bugzilla.gnome.org/show_bug.cgi?id=704548
2013-07-19 14:26:08 +02:00
Arnaud Vrac
5def061d20 qtdemux: remove chapter stream
Remove all streams that are actually table of contents, since we will
never need the data after parsing them.
2013-07-18 11:48:12 +02:00
Arnaud Vrac
ae67c13416 qtdemux: send gap event for sparse streams in push mode
This allows to pre-roll at least if the next subtitle buffer
is far away.
2013-07-18 11:48:11 +02:00
Arnaud Vrac
1237898351 qtdemux: do not use indexes from sparse stream when seeking in push mode
This makes seeking more accurate in push mode, since the previous
keyframe on a sparse stream might be far away.
2013-07-18 11:48:11 +02:00
Arnaud Vrac
e561d12655 qtdemux: advertise subtitle streams as sparse 2013-07-18 11:48:11 +02:00
Wim Taymans
4c97701650 qtdemux: extract the palette from stsd
Sometimes a palette is inside the stsd, extract it instead of always using
the default one
2013-07-17 15:17:19 +02:00
Wim Taymans
6b82c89562 qtdemux: add support for WRAW
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=704292
2013-07-17 09:57:17 +02:00
Wim Taymans
f698483bb3 qtdemux: palette is appended to buffers, not in caps
Fix the palette handling, in 1.0 we append the palette to the buffer instead of
placing it on the caps.

See also https://bugzilla.gnome.org/show_bug.cgi?id=704292
2013-07-17 09:57:16 +02:00
Arnaud Vrac
54bba4f60c qtdemux: reset segment on flush stop
cca2f555d1 introduces a regression, where the demux segment is not
reset on flush stop, so the next upstream segment event will calculate
an invalid base time on the new segment to be sent downstream.

https://bugzilla.gnome.org/show_bug.cgi?id=704255
2013-07-16 10:47:20 +02:00
Matej Knopp
ca32442f86 qtdemux: offset samples according to edit list
https://bugzilla.gnome.org/show_bug.cgi?id=700264
2013-07-15 09:59:23 +02:00
Matej Knopp
3111161e8a qtdemux: unselect instead of ignoring disabled track, detect chapter track
https://bugzilla.gnome.org/show_bug.cgi?id=704007
2013-07-12 11:45:33 +02:00
Matej Knopp
7b69f427f1 qtdemux: correct argument order in gst_util_uint64_scale_int_round
https://bugzilla.gnome.org/show_bug.cgi?id=703350
2013-07-10 09:20:17 +02:00
Matej Knopp
4053e1d6ac qtdemux: compute framerate from average sample duration
https://bugzilla.gnome.org/show_bug.cgi?id=703350
2013-07-01 12:53:17 +02:00
Wim Taymans
8428423c04 qtdemux: handle SEGMENT query 2013-06-20 11:31:22 +02:00
Sebastian Dröge
b001da2926 qtdemux: Disable usage of allocation queries
This can only reliably work if demuxers have a
separate streaming thread per srcpad. This should be
done in a demuxer base class, which integrates parts
of multiqueue

https://bugzilla.gnome.org/show_bug.cgi?id=701856
2013-06-19 11:07:48 +02:00
Alex Ashley
46a137c810 Avoid skipping moov atoms for fragmented MP4 files.
bug #700505

Following a representation change that causes a resolution change,
the video decoder fails to decode correctly. Dashdemux detects the
representation change and pushes a new caps event and an
initialization segment (a new moov atom) to the downstream qtdemux,
but it doesn't handle this new moov yet, it will only parse the
first one it receives.

This commit changes qtdemux to accept a new moov in a dash bitstream
switching scenario.
2013-06-19 01:44:22 -03:00
Thiago Santos
384e8f6c34 qtdemux: send stream-start only once for each stream
Do not send stream start again when reconfiguring a pad for new caps.
That is common for adaptive streams
2013-06-19 00:55:30 -03:00
Sebastian Dröge
adc9f0bd10 qtdemux: Do allocation query after exposing all pads and no-more-pads
Also configure video streams as early as possible.

Related https://bugzilla.gnome.org/show_bug.cgi?id=701856
but not fixing that.
2013-06-11 12:27:19 +02:00
Thiago Santos
7c12435f9b qtdemux: make sure taglist is writable before adding tags
Avoids assertions
2013-06-02 15:37:06 -03:00
Thiago Santos
78dfdee2aa qtdemux: effectively skip tracks that weren't listed on the 1st moov
Without this, stream is NULL and the code will try to access it, leading
to segfaults.
2013-06-02 13:06:15 -03:00
Thiago Santos
70fca21c28 qtdemux: skip redundant check
!got_moov is already checked the line above
2013-06-02 13:06:15 -03:00
David Schleef
318cd39c3e qtdemux: Add error if file has playready drm 2013-05-21 18:21:49 -07:00
Thiago Santos
55caa99ccd qtdemux: Do not expect EOS after a segment event if upstream is mss
In case qtdemux is handling a mss stream, do not mark the stream to wait
for EOS after a segment. Even if it seems to be the last one according to
the current streams information.

MSS handling is different here because there is another demuxer driving
the pipeline
2013-05-16 16:50:49 -03:00
Thiago Santos
5517e352ab qtdemux: only set channels and rate if qtdemux knows it
Setting both of those to 0 is pointless and means that qtdemux
doesn't know the real value. Avoid setting it in this case.
2013-05-16 16:50:49 -03:00
Arnaud Vrac
6edcc564ba qtdemux: set alac caps using info from codec buffer
The samplerate field in the STSD atom is not right for some ALAC files
(usually when audio is 96kHz/24bits), so the audio caps must be
extracted from the codec data.

https://bugzilla.gnome.org/show_bug.cgi?id=700382
2013-05-15 18:42:11 +01:00
Thiago Santos
a0e934e72e qtdemux: push new caps events when caps change
Whenever the demuxer has a new caps on a stream, it should set the
new_caps variable to true and a new caps event will be pushed before
the next buffer
2013-05-07 19:29:17 -03:00
Thiago Santos
725faab590 qtdemux: do not push discont buffers if they aren't discont
qtdemux takes its buffers from a GstAdapter. Those buffers are created
from the larger buffer that it obtained from upstream and they carry
the same flags, including DISCONT if it is set. In these cases, all
buffers that qtdemux is going to push would be marked as DISCONT.

This scenario can make parsers/decoders flush on every buffer leading
to no decoding at all hapenning. This patch prevents this by unsetting
the flag if it shouldn't be set.
2013-05-07 19:29:17 -03:00
Thiago Santos
4d073beeee qtdemux: some code cleanup for mss handling code
* Explicitly init variables for fragmented formats at init
* Do not use GstClockTime type if the variable isn't a timestamp
* Fix a style/readability issue at an if block
* Group 2 mss mode conditional blocks together to improve readability

Conflicts:
	gst/isomp4/qtdemux.c
2013-05-07 19:29:17 -03:00
Thiago Santos
d1b91c755c qtdemux: avoid storing non-time newsegments to push later
This can confuse downstream when they get a byte segment after receiving
the natural time segment from qtdemux that it sends when starting to
push buffers. This is specially the case with parsers that try to
convert the position from byte to time format and might miss the
correct position for playback to start.
2013-05-07 19:29:17 -03:00
Thiago Santos
895525b5cb qtdemux: avoid setting fields to non-writable caps 2013-05-07 19:29:17 -03:00
Wim Taymans
544d926732 qtdemux: don't send so many segment events
Only send one segment event in the beginning of the stream, not
after each moov and moof atom.

Conflicts:
	gst/isomp4/qtdemux.c
2013-05-07 19:29:17 -03:00
Wim Taymans
d9cd4fcc17 qtdemux: place incomming timestamps on output
Place the incomming timestamp (if any) directly onto the outgoing buffers
and interpollate other timestamps.

Conflicts:
	gst/isomp4/qtdemux.c
2013-05-07 19:29:17 -03:00
Thiago Santos
cca2f555d1 qtdemux: improve reset of internal status
Reset different variables on state changes to ready and when
handling a flush-stop. For handling flush stops we should check
if there is an upstream adaptive demuxer driving the pipeline as this
means that qtdemux will get a new moov atom. For 'standard' isomedia
streams this isn't true and qtdemux should keep the previous moov
information around.

Conflicts:
	gst/isomp4/qtdemux.c
2013-05-07 19:29:17 -03:00
Thiago Santos
6c69e59677 qtdemux: prepare qtdemux to accept multiple dash moovs in a row
Whenever dashdemux switches bitrates it sends a new moov with the
new stream configuration. qtdemux should now handle this by splitting
the exposing and configuration of streams into separate functions. When
the stream is new it is configured and exposed, when it is a new bitrate
of an existing stream it is only reconfigured.

Conflicts:
	gst/isomp4/qtdemux.c
2013-05-07 19:25:30 -03:00
Andre Moreira Magalhaes (andrunko)
2a7d3d1598 qtdemux: Move FLUSH_STOP/PAUSED_TO_READY handling to a reset method.
Conflicts:
	gst/isomp4/qtdemux.c
2013-05-07 19:18:03 -03:00
Louis-Francis Ratté-Boulianne
d499b461da qtdemux: Remove old pads when exposing streams and other general fixes.
Conflicts:
	gst/isomp4/qtdemux.c
2013-05-07 19:18:03 -03:00
Thiago Santos
a3c19eeea1 qtdemux: handle mss streams
smoothstreaming streams should be handled as a special kind of
fragmented isomedia. In MSS the fragments will not contain a
'moov' atom with the media descriptions, this has to be extracted
from the caps.

Additionally, there should be another demuxer upstream that is likely
going to be the one to answer/act on queries and events, so qtdemux has
to forward those upstream.
2013-05-07 19:18:03 -03:00
Yury Delendik
4bc06859d1 qtdemux: add support for VP6F VP6 flash codec
https://bugzilla.gnome.org/show_bug.cgi?id=699010
2013-04-27 09:39:45 +01:00
Sebastian Dröge
b0b0557c48 gst: Add better support for static plugins 2013-04-15 15:54:11 +02:00
David Schleef
a55ccff854 qtdemux: check value inside enda to set endianness 2013-04-09 13:30:17 -07:00
Matej Knopp
5686512b77 qtmux: use timestamp delta as duration if possible
https://bugzilla.gnome.org/show_bug.cgi?id=696437
2013-03-30 15:18:45 -07:00
David Schleef
53f8b05b08 Use %03u for format in gst_pad_create_stream_id_printf() 2013-03-25 18:57:08 -07:00
Matej Knopp
f29e62c131 qtdemux: make empty subtitle buffer recognition more robust
https://bugzilla.gnome.org/show_bug.cgi?id=696244
2013-03-23 11:24:23 +00:00
David Schleef
c0443a17c4 qtmux: Fix test regression with one buffer streams 2013-03-22 15:14:15 -07:00
David Schleef
5bd2864101 qtdemux: split large raw audio samples
In order to deal with a file that has samples that are 24 seconds
long.  Seeking still doesn't work with such files.
2013-03-22 14:14:05 -07:00
David Schleef
364433c105 qtmux: Remove documentation for dts-method 2013-03-22 14:14:04 -07:00
David Schleef
6571e388be qtmux: deprecate dts-method property 2013-03-22 14:14:04 -07:00