Alicia Boya García
d35f893715
qtdemux: Don't send gaps bigger than 1 second (now in push mode too)
...
This applies the same workaround to gaps that is being used in pull
mode.
https://bugzilla.gnome.org/show_bug.cgi?id=778426
2018-05-24 11:09:53 +02:00
Seungha Yang
f61c2bc301
qtdemux: Properly handle edit list in push mode
...
If there are empty segments in edit list, demux should
adjust "accumulated_base" to apply it into running time.
https://bugzilla.gnome.org/show_bug.cgi?id=778426
2018-05-24 11:09:53 +02:00
Alicia Boya García
ee78825eae
qtdemux: fix buggy duration in edits with duration=0 in fragmented files without a mehd
...
https://bugzilla.gnome.org/show_bug.cgi?id=794858
2018-05-23 14:25:56 +02:00
Seungha Yang
c69ccf60d8
qtdemux: Clarify variable name
...
As defined by spec, use "empty edit". It's more straightforward.
https://bugzilla.gnome.org/show_bug.cgi?id=778426
2018-05-22 11:29:44 +02:00
Xabier Rodriguez Calvar
ee4b45da24
qtdemux: add context for a preferred protection
...
qtdemux selected the first system corresponding to a working GStreamer
decryptor. With this change, before selecting that decryptor, qtdemux
will check if it has context (a preferred decryptor id) and if not, it
will request it.
The request includes track-id, available key system ids for the
available decryptors and even the events so that the init data is
accessible.
[eocanha@igalia.com: select the preferred protection system even if not available]
Test "4. ClearKeyVideo" in YouTube leanback EME conformance tests 2016 for
H.264[1] uses a media file[2] with cenc encryption which embeds 'pssh' boxes
with the init data for the Playready and Widevine encryption systems, but not
for the ClearKey encryption system (as defined by the EMEv0.1b spec[3] and with
the encryption system id defined in [4]).
Instead, the ClearKey encryption system is manually selected by the web page
code (even if not originally detected by qtdemux) and the proper decryption key
is dispatched to the decryptor, which can then decrypt the video successfully.
[1] http://yt-dash-mse-test.commondatastorage.googleapis.com/unit-tests/2016.html?test_type=encryptedmedia-test&webm=false
[2] http://yt-dash-mse-test.commondatastorage.googleapis.com/unit-tests/media/car_cenc-20120827-86.mp4
[3] https://dvcs.w3.org/hg/html-media/raw-file/eme-v0.1b/encrypted-media/encrypted-media.html#simple-decryption-clear-key
[4] https://www.w3.org/Bugs/Public/show_bug.cgi?id=24027#c2
https://bugzilla.gnome.org/show_bug.cgi?id=770107
2018-05-21 17:36:17 +02:00
Enrique Ocaña González
844423ff99
qtdemux: also push buffers without encryption info instead of dropping them
...
Test "17. PlayReadyH264Video" in YouTube leanback EME conformance tests 2016
for H.264[1] uses a media file[2] with cenc encryption whose first two 'moof'
boxes have no encryption information (no 'saiz' and 'saio' boxes).
Those boxes are actually not encrypted and the current qtdemux implementation
was just dropping them, breaking the test use case.
This patch detects those kind of situations and just lets the unencrypted
buffers pass. Of course, this needs some collaboration by the decryptors,
which should also do the same and not to try to decrypt those clear buffers.
[1] http://yt-dash-mse-test.commondatastorage.googleapis.com/unit-tests/2016.html?test_type=encryptedmedia-test&webm=false
[2] http://yt-dash-mse-test.commondatastorage.googleapis.com/unit-tests/media/oops_cenc-20121114-142.mp4
https://bugzilla.gnome.org/show_bug.cgi?id=770107
2018-05-21 17:36:17 +02:00
Alicia Boya García
c097289725
qtdemux_parse_segments: remove superfluous variable
...
https://bugzilla.gnome.org/show_bug.cgi?id=793751
2018-05-18 11:29:47 -04:00
Edward Hervey
4253c51c5f
qtdemux: Initialize riff library
...
Avoids debugging message issues. Also just use the main riff header
2018-05-10 13:59:36 +02:00
Seungha Yang
7651036530
qtdemux: Protect _expose_streams() from flush event
...
Flush during stream change can break autoplugging or the
flush event could be dropped.
https://bugzilla.gnome.org/show_bug.cgi?id=684790
2018-05-10 08:09:20 +02:00
Seungha Yang
d72a7c038c
qtdemux: Try to expose whenever got new moov or new stream-start
...
Whenever got new moov or new stream-start,
demux will try to expose new pad by following rule.
Comparing stream-id in the current moov with previous one, then
* If matched stream-id is found from previous one,
reuse existing pad (most common case)
* Otherwise, expose new pad with new stream-start
* No more used stream will be freed
https://bugzilla.gnome.org/show_bug.cgi?id=684790
2018-05-10 08:09:20 +02:00
Seungha Yang
0bd3459053
qtdemux: Remove duplication of initializing member variables
...
Most initialization of variables in gst_qtdemux_init() are duplicated in
gst_qtdemux_reset() function.
https://bugzilla.gnome.org/show_bug.cgi?id=684790
2018-05-10 08:09:20 +02:00
Seungha Yang
553607756b
qtdemux: Create stream whenever got new moov
...
Whenever demux got moov, demux will create new stream. Only exception is
duplicated track-id in a moov box. In that case the first stream
will be accepted. This patch is pre-work for rework of moov handling.
https://bugzilla.gnome.org/show_bug.cgi?id=684790
2018-05-10 08:09:20 +02:00
Seungha Yang
96a6aab6a1
qtdemux: Store stream-id to manage streams
...
In order to figure out stream change such as
track-id change or stream-id change, demux will store
stream-id per QtDemuxStream structure.
https://bugzilla.gnome.org/show_bug.cgi?id=684790
2018-05-10 08:09:20 +02:00
Seungha Yang
b5245be1b1
qtdemux: Use GList to manage QtDemuxStream
...
* Move to GList from static array
* Logging track-id instead of array index. It's more meaningful.
https://bugzilla.gnome.org/show_bug.cgi?id=684790
2018-05-10 08:09:20 +02:00
Seungha Yang
aca8d32437
qtdemux: Adjust the number of args of some functions
...
To be used with g_list_free_full in the next patch
https://bugzilla.gnome.org/show_bug.cgi?id=684790
2018-05-10 08:09:20 +02:00
Seungha Yang
80f391aa3b
qtdemux: Add parentheses in macro
...
https://bugzilla.gnome.org/show_bug.cgi?id=684790
2018-05-10 08:09:20 +02:00
Marinus Schraal
c2cce8a9fc
isomp4: Use full date time if available
...
The ©day tag contains a full date time, use it for the DATE_TIME tag
instead of just the DATE tag. This overrules the unreliable qt creation
time.
https://bugzilla.gnome.org/show_bug.cgi?id=731029
2018-05-09 15:49:30 +02:00
Edward Hervey
2662f58cc9
qtdemux: Fix comparision for extra caption atom
...
We want to make sure we have *enough* data for the potential 2nd
caption atom.
CID #1434161
2018-04-11 08:51:32 +02:00
Edward Hervey
8213fc2edf
qtdemux: Handle bogus caption samples
...
Corrupted files could potentially have multiple cdat/cdt2 atoms in
a sample entry, which is unclear how to handle.
Ignore repeated ones.
CID #1434162
CID #1434159
2018-04-11 08:45:06 +02:00
Edward Hervey
2869edeea2
qtdemux: Detect and expose CEA 608/708 Closed Caption tracks
...
https://bugzilla.gnome.org/show_bug.cgi?id=606643
2018-04-09 15:25:50 +02:00
Edward Hervey
d7038b9bb0
qtdemux: Handle variant of vorbis in mp4
...
Comes from gpac apparently. The codec_data uses the same packing
mechanism as matroska.
https://bugzilla.gnome.org/show_bug.cgi?id=738244
2018-03-22 15:22:33 +01:00
Edward Hervey
60bc77cc35
qtdemux: Check sample count is valid in PIFF parsing
...
The value stored in cenc_aux_sample_count wasn't in sync with the
parsing code that followed which checks whether all entries are
valid and present.
Only write the actual sample count when we know for sure.
CID #1427087
2018-03-22 15:22:24 +01:00
Sebastian Dröge
850e678813
qtdemux: Fix seeking on streams with frame reordering
...
The samples table is sorted by DTS, not PTS. As such we can only get the
correct result when using a binary search on it, if we search for the
DTS.
Also if we only ever search for the frame, where the following frame is
the first one with a PTS after the search position, we will generally
stop searching too early if frames are reordered.
In forwards playback this is not really a problem (after the decoder
reordered the frames, clipping is happening), in reverse playback
it means that we can output one or more frames too few as we stop too
early and the decoder would never receive it.
https://bugzilla.gnome.org/show_bug.cgi?id=782118
2018-03-20 12:08:28 +02:00
Edward Hervey
192b447e0b
qtdemux: Fix comment typo in previous commit
2018-02-09 11:26:56 +01:00
Edward Hervey
e16be12e37
qtdemux: More 'meta' atom parsing fixes
...
Turns out everybody is doing it their own way, so peek into the
meta atom itself to figure out which spec it is following
2018-02-09 11:22:38 +01:00
Edward Hervey
4fd8635983
qtdemux: Minor cleanup
...
Just move variables to the blocks where they are used.
That function is massive, could do with some splitting up for
readability :(
2018-02-09 09:00:46 +01:00
Edward Hervey
357d77cf55
qtdemux: Cope with difference between QTFF and ISO BMFF specs
...
The 'meta' atom is defined differently in QTFF and BMFF, so try
to guess which spec the current stream applies to by looking
at the major file type.
2018-02-09 09:00:46 +01:00
Seungha Yang
1551759cec
qtdemux: Apply qtdemux debug category to gstisoff
...
.. instead of the use of default debug category.
And, make new header to declare the debug category
https://bugzilla.gnome.org/show_bug.cgi?id=791483
2018-01-29 18:40:02 +00:00
Alicia Boya García
ac46d5c2a3
qtdemux: Add more prose to the comment of gst_qtdemux_find_sample()
...
https://bugzilla.gnome.org/show_bug.cgi?id=792910
2018-01-25 20:40:46 +00:00
Edward Hervey
6e21faffe7
qtdemux: Push a GAP event if there's a second *or more*
...
And not "more than a second"
2017-12-13 12:06:49 +01:00
Edward Hervey
2e45926a96
qtdemux: Don't push GAP event if first buffer is within 1s
...
If we saw empty segments, we previously unconditionally pushed a
GAP event downstream regardless of the duration of that empty
segment.
In order to avoid issues with initial negotiation of downstream elements
(which would negotiate to something before receiving any data due to
that initial GAP event), check if there's at least a second of difference
(like we do for other GAP-related checks in qtdemux) before
deciding to push a GAP event downstream.
2017-12-13 11:35:37 +01:00
Edward Hervey
5c341f0980
qtdemux: Don't set pared=True on underspecified audio/mpeg
...
This *really* needs to go through a parser to figure out what the
exact content type is.
2017-12-13 10:21:17 +01:00
Florian Zwoch
b4ca81591c
qtdemux: fix debug log for 'hvcC' codec_data
...
https://bugzilla.gnome.org/show_bug.cgi?id=784749
2017-12-02 13:46:29 +00:00
Edward Hervey
22ab222dbc
qtdemux: Run gst-indent
2017-11-23 08:00:58 +01:00
Edward Hervey
d08e155ec8
qtdemux: Check presence of bitrate tags
...
Check whether the tag was present before printing it out
CID #1418501
2017-11-23 07:57:44 +01:00
Jan Schmidt
3ba556a54d
qtdemux: Use new GST_SEQNUM_INVALID constant
2017-11-18 02:33:01 +11:00
Jun Xie
7c8aeff262
qtdemux: reset reused QtDemuxStream while parsing a new 'trak'
...
if QtDemuxStream is reused, then we need to reset it.
https://bugzilla.gnome.org/show_bug.cgi?id=788759
2017-11-17 11:49:24 +02:00
Seungha Yang
8aa5c59b5f
isomp4: Add official fourcc for VP8 codec
...
fourcc for VP8 codec is "vp08" defined by spec. To follow it,
add it to demux and change legacy VP8 fourcc "VP80" to "vp08" in mux.
Also, enable sync table in case of VP8 codec.
See also https://www.webmproject.org/vp9/mp4/
https://bugzilla.gnome.org/show_bug.cgi?id=790026
2017-11-13 10:08:14 -05:00
Seungha Yang
93f19b19d2
isomp4: Add support VP9 codec
...
Add fourcc for VP9 codec and support it by qtdemux and qtmux
See also https://www.webmproject.org/vp9/mp4/
https://bugzilla.gnome.org/show_bug.cgi?id=790026
2017-11-13 10:08:14 -05:00
Sebastian Dröge
728a1629cf
qtdemux: Fix compiler warning
...
qtdemux.c: In function ‘gst_qtdemux_configure_stream’:
qtdemux.c:7764:34: error: suggest parentheses around ‘&&’ within ‘||’ [-Werror=parentheses]
if ((stream->n_samples == 1) && (stream->first_duration == 0)
~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2017-10-10 18:04:50 +03:00
Nael Ouedraogo
5874bafa4f
qtdemux: fix assert when moof containing one sample
...
Avoid computing frame rate when a stream contain moof with only one
sample, to avoid an assert. The moof is considered as still picture.
The same is already done for one sample given in the moov.
https://bugzilla.gnome.org/show_bug.cgi?id=782217
2017-10-10 18:03:42 +03:00
Michael Olbrich
61429a78a8
qtdemux: allow larger files
...
For really long files such as contiguous recordings of a whole day, the
50MB limit is not sufficient.
https://bugzilla.gnome.org/show_bug.cgi?id=781458
2017-08-10 16:17:56 +03:00
Sebastian Dröge
7d89e73336
qtdemux: Fix offsets for reading lpcm specific fields
...
We were reading at the completely wrong positions, 16 bytes later in the
data.
Also add support for high-aligned samples.
2017-08-10 16:13:05 +03:00
Mark Nauwelaerts
7bd439efb5
qtdemux: preferably send open-ended segment rather than repeated segment events
2017-07-19 18:35:58 +02:00
Mark Nauwelaerts
854f85acb4
qtdemux: fix seeking in fragmented file without mfra random access info
...
... which no longer worked due to unconditionally clearing sample info and
ending up in inconsistent state. Let's tread a bit more carefully and also
allow for the old seek handling that resorts to scanning if no mfra info
is available.
2017-07-19 18:35:49 +02:00
Sebastian Dröge
c0318f3d60
qtdemux: Fix parsing of RLE depth
...
Regression introduced by 86b427dc70
https://bugzilla.gnome.org/show_bug.cgi?id=784812
2017-07-13 12:47:27 +03:00
Tim-Philipp Müller
3a0fe9c2f5
qtmux: add support for muxing PNG
...
Demuxer already supported it.
2017-06-15 23:31:24 +01:00
Jimmy Ohn
55e0b18186
qtdemux: remove not needed code
...
remove not needed code about res variable.
https://bugzilla.gnome.org/show_bug.cgi?id=783422
2017-06-06 11:02:59 +02:00
Edward Hervey
4f713717de
isomp4: Safely ignore [skip] atoms
...
Instead of warning about them
2017-05-18 18:12:15 +02:00
Seungha Yang
66448be77f
qtdemux: Fix crash on mss stream caused by invalid stsd entry access
...
Since mss has no moov, default stsd entry should be created with media-caps.
https://bugzilla.gnome.org/show_bug.cgi?id=782042
2017-05-02 14:20:02 +03:00