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
Sebastian Dröge
6e7b0d6061
qtmux: Print expected/actual values in debug log on mismatch in prefill mode
...
This helps debugging a lot.
2018-05-14 21:06:55 +03: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
Xavier Claessens
edd9c8f6b8
Meson: Generate pc file for all plugins in good
...
https://bugzilla.gnome.org/show_bug.cgi?id=794568
2018-04-25 11:07:06 +01:00
Edward Hervey
90244da780
qtmux: Read caption from input buffer
...
And not from unallocated output buffer GstMapInfo
CID #1435131
2018-04-25 10:37:40 +02:00
Edward Hervey
7378f1b4fd
isomp4: qtmux: Add Closed Caption support
...
Supports CEA 608 and CEA 708 CC streams
Also supports usage in "Robust Prefill" mode if the incoming caption
stream is constant (i.e. there is one incoming CC buffer for each
video frame).
https://bugzilla.gnome.org/show_bug.cgi?id=606643
2018-04-23 15:58:10 +02:00
Edward Hervey
76e32ef414
isomp4: Make 'gmhd' atom usage more generic
...
Only the 'gmin' atom is required. Any other entry within it are
optional.
https://bugzilla.gnome.org/show_bug.cgi?id=606643
2018-04-23 15:58:10 +02:00
Mathieu Duponchelle
ee99cd7037
qtmux: Fix leak
...
gst_qt_mux_can_renegotiate () gets called everywhere following
that pattern:
return gst_qt_mux_can_renegotiate (ref(self));
This means the reference must be released both in the success
and failure cases, it was only done in the success case.
2018-04-13 22:49:43 +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
7229bfd068
qtmux: Add comments and doc about prefill mode
2018-04-09 15:25:50 +02:00
Edward Hervey
cc0c27850a
qtmux: Refactor pad re-negotiation code
...
It was similar for all pads
https://bugzilla.gnome.org/show_bug.cgi?id=606643
2018-04-09 15:25:50 +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
Sebastian Dröge
e7177059e9
qtmux: Add support for muxing svmi atom for stereoscopic video information
...
https://bugzilla.gnome.org/show_bug.cgi?id=793120
2018-02-09 11:05:02 +02: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
Edward Hervey
b415358c7e
isomp4: Make 'hdlr' atom dump more flexible
...
The smallest possible is 24 (and not 25) bytes.
The last "name" field can according to QTFF specifications not be present
at all. The parser will handle this fine and so will the rest of
the qtdemux code.
2018-02-09 09:00:46 +01:00
Justin Kim
ad8a6cb639
qtmux: send stream warning when refusing video caps
...
If codec_data is changed, the stream is no longer valid.
Rather than keeping running when refusing new caps,
this patch send a warning to the bus.
Also fix up splitmuxsink to ignore this warning while changing caps.
https://bugzilla.gnome.org/show_bug.cgi?id=790000
2018-02-01 10:12:46 +00:00
Edward Hervey
0c56a80333
isomp4: Add gmhd/gmin debugging
...
* gmhd is a container, mark it as such so we can see/dump
what is contained within
* Add dumping for the Base Media Information atom (gmin)
2018-01-31 19:12:48 +01:00
Edward Hervey
0511c4c225
qtdemux_dump: Demote verbose logging to TRACE level
2018-01-31 11:38:35 +01:00
Edward Hervey
40be9f4f85
qtdemux: Re-enable full debug logging of stsz entries
...
No idea why it was disabled (was the case since 2007)
2018-01-31 11:23:07 +01:00
Seungha Yang
75241cfa6b
qtdemux: Remove white space at end of line
...
https://bugzilla.gnome.org/show_bug.cgi?id=791483
2018-01-29 18:42:47 +00: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
Vivia Nikolaidou
379059b1c7
qtmux: Make sure timecode uses the same timescale as video
...
Don't blindly derive it from the frame rate, but try to get the per-pad
configured timescale first (if it exists)
https://bugzilla.gnome.org/show_bug.cgi?id=792680
2018-01-23 16:40:36 +02:00
Sebastian Dröge
c71cd08d0e
qtmux: Allow configuring trak timescale per pad/trak
...
It generally makes not much sense to configure it for all pads/traks at
once as this value is usually different for each of them. As such, add a
new property on the pads in addition to the existing property on the
whole muxer.
https://bugzilla.gnome.org/show_bug.cgi?id=792649
2018-01-23 16:40:23 +02: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
Jan Schmidt
a260eb80fb
qtmux: Always update reserved-duration-remaining
...
If a reserved-max-duration is set, we should always track
and update the reserved-duration-remaining estimate, even
if we're not sending periodic moov updates downstream for
full robust muxing.
2017-11-25 00:56:11 +11:00