Commit graph

707 commits

Author SHA1 Message Date
Sebastian Dröge
2b50a338c3 qtdemux: In gap mode, consider the mdat offset when calculating the remaining mdat size
The mdat generally does not start at offset 0, we have to include the
size of the moof and whatever else was in front of the mdat.
2017-03-27 21:52:51 +03:00
Sebastian Dröge
ea4e9fc2d4 atomsrecovery: Error out when fseek() fails instead of silently ignoring
CID 1403262
2017-03-27 11:43:57 +03:00
Sebastian Dröge
e66d75ec87 qtmux: Remove some unused variables 2017-03-23 17:53:54 +02:00
Sebastian Dröge
ebdaca603c qtmux: Remove a couple of unneeded levels of indentation 2017-03-23 15:02:03 +02:00
Enrique Ocaña González
28a57d0586 qtdemux: distinguish TFDT with value 0 from no TFDT at all
TFDTs with time 0 are being ignored since commit 1fc3d42f. They're
mistaken with the case of not having TFDT, but those two cases
must be distinguished in some way.

This patch passes an extra boolean flag when the TFDT is present.
This is now the condition being evaluated, instead of checking for
0 time.

https://bugzilla.gnome.org/show_bug.cgi?id=780410
2017-03-23 08:28:53 +11:00
Sebastian Dröge
9c121b09a5 qtmux: Reset current chunk after writing out timecode
If we have multiple tracks with timecodes, or it's not the first track
that has timecodes, or not the first buffer, we already started a chunk
for media data. We now need to "close" that chunk because we wrote data
for the timecode track and a new chunk has to be started for the
original track the next time it has data.
2017-03-22 19:16:33 +02:00
Sebastian Dröge
cb6aab8685 qtmux: Do timecode handling per track, not per muxer instance
There could be multiple video tracks with timecodes.
2017-03-22 18:53:19 +02:00
Jan Schmidt
d76bd1913f qtdemux: matroskademux: Ignore repeated seek events
Similar to what was done in adaptivedemux, ignore seek
events we've already handled - such as when they are received
on every srcpad of files with lots of streams.
2017-03-22 00:40:01 +11:00
Sebastian Dröge
a56a01f15f dashdemux: Update mdatleft from overall mdatsize and offset when observing a gap
Otherwise mdatleft will have a value calculated from the initial
mdatsize minus the parts of the stream that we saw, which is not
including all the parts of the stream that might've been skipped.
2017-03-21 14:56:55 +02:00
Thiago Santos
b434ba86f1 atomsrecovery: also handle extra atoms after 'mdia' in a 'trak'
Take into account the atoms at the end of the 'trak' atom when
recovering it. So that its size (already computed and added in the trak
size) isn't making offsets wrong.

https://bugzilla.gnome.org/show_bug.cgi?id=771478
2017-03-14 20:27:48 -07:00
Thiago Santos
7e39dec391 qtmux: avoid fallthrough to moovrecovery failure section
Return before that to preserve our successfull results, otherwise no
moov recovery information would be written

https://bugzilla.gnome.org/show_bug.cgi?id=771478
2017-03-14 20:27:48 -07:00
Thiago Santos
4d9b17ad77 atomsrecovery: expect more atom types at the headers
Skip more atoms at the header until it finds the 'mdat' to continue the
moov recovery

https://bugzilla.gnome.org/show_bug.cgi?id=771478
2017-03-14 20:27:48 -07:00
Emeric Grange
534be3313c qtmux: add CineForm support
https://bugzilla.gnome.org/show_bug.cgi?id=780024
2017-03-14 18:03:34 +02:00
Sebastian Dröge
6cb8c802f4 qtmux: Only create new chunks if we have more than a single stream
There's no point in creating multiple chunks otherwise, it only wastes
some bytes for storing the chunk offsets.
2017-03-14 15:09:44 +02:00
Emeric Grange
7bdcd57980 qtdemux: add S16L support
https://bugzilla.gnome.org/show_bug.cgi?id=780022
2017-03-14 14:55:44 +02:00
Wim Taymans
16f3fd6782 qtmux: init fourcc
Initialize the fourcc to 0 so that we can detect failure later.
2017-03-10 11:24:14 +01:00
Sebastian Dröge
98583dc944 qtmux: Free EDTS instead of just clearing it and setting it to NULL 2017-03-08 16:01:02 +02:00
Sebastian Dröge
0e62a0603d qtmux: Fix some memory leaks related to timecode tracks 2017-03-08 15:27:32 +02:00
Jan Schmidt
c82ced1868 qtdemux: Don't lose crypto info on a new moof
We parse the next moof in advance of having pushed
all samples from the previous one in some cases, and
we'll still need the crypto info from the previous
fragment so keep around any unused crypto info entries
when adding new ones
2017-03-04 00:35:32 +11:00
Sebastian Dröge
7709920ca3 qtmux: Update modification times when sending the moov
https://bugzilla.gnome.org/show_bug.cgi?id=779422
2017-03-02 20:33:30 +02:00
Sebastian Dröge
ce2070c092 qtdemux: Protect against NULL pointer dereference for streams without caps
CID 1363332
2017-02-28 15:20:31 +02:00
Sebastian Dröge
4c30cbfe22 qtdemux: Fix compilation with gcc 7
qtdemux.c: In function ‘qtdemux_parse_samples’:
qtdemux.c:8450:39: error: ‘*’ in boolean context, suggest ‘&&’ instead [-Werror=int-in-bool-context]
         if (stream->samples_per_frame * stream->bytes_per_frame) {
             ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
2017-02-27 21:02:51 +02:00
Jan Schmidt
488e8edba4 Revert "qtdemux: Always snap to the start of the keyframe"
This reverts commit 107902ec51.

This commit intended to ensure that keyframe seeks land at the
start timestamp of a keyframe, rather than in the middle of one,
but they cause trouble on files with sparse streams, or with
JPEG 'cover art' tracks that have only one or a few JPEG samples
with very long durations.

That's still desirable for doing seamless cutting of videos,
but needs a rethink for implementation.

https://bugzilla.gnome.org/show_bug.cgi?id=778690
2017-02-17 13:19:58 +11:00
Jan Schmidt
2987e66f22 qtmux: Add a comment about how atom_trak_set_elst_entry() works 2017-02-09 11:29:43 +11:00
Tim-Philipp Müller
c7aa449e58 qtdemux: demote some log messages to TRACE level
Don't spam debug log with uninteresting stuff.
2017-02-09 11:17:02 +11:00
Sebastian Dröge
1426a55a83 qtmux: Clear edit lists every time we recalculate them
We recalculate them, so any old information has to be forgotten.
Otherwise we write invalid edit lists when writing headers multiple
times.

https://bugzilla.gnome.org/show_bug.cgi?id=778330
2017-02-08 17:26:21 +02:00
Tim-Philipp Müller
19c9600ea6 qtdemux: sanity check number of segments in edit list
Fixes crash with fuzzed file.

https://bugzilla.gnome.org/show_bug.cgi?id=777940
2017-01-31 20:46:41 +00:00
Seungha Yang
7a6752a7e0 qtdemux: Skip seeking query if upstream format is time
Don't need to querying byte-format seeking for time-format
upstream case

https://bugzilla.gnome.org/show_bug.cgi?id=776715
2017-01-31 17:09:29 +01:00
Seungha Yang
d3f5aa2689 qtdemux: Use upstream's StreamFlags if there are
When multiple demuxer's are used, upstream might want to indicate
default streams using GST_STREAM_FLAG_{SELECT, UNSELECT}

https://bugzilla.gnome.org/show_bug.cgi?id=775440
2017-01-31 16:20:42 +01:00
Vivia Nikolaidou
af47e93b97 qtmux: Timecode track fixes for STSD entry
The n_frames field (frames per second) should follow the nominal frame
rate for drop-frame timecodes.

Also, the trak's timescale (and duration, accordingly) should follow the
STSD entry's timescale and frame duration (fps_n and fps_d accordingly),
not the other way around.

https://bugzilla.gnome.org/show_bug.cgi?id=777832
2017-01-27 16:41:34 +02:00
Brendan Shanks
a9056a8a7e qtmux: Fix debug typo and remove misleading warning
https://bugzilla.gnome.org/show_bug.cgi?id=777362
2017-01-26 15:05:24 +02:00
Sebastian Dröge
d1ce68e840 qtmux: Only write 4 byte zero padding to the Video Sample Description in MOV
For MP4 this is not defined, and it actually breaks things for MSE in
Chrome if we do this. For MOV this is required by some broken software
but the official specification says it's optional:
https://developer.apple.com/library/content/documentation/QuickTime/QTFF/QTFFChap3/qtff3.html

https://bugzilla.gnome.org/show_bug.cgi?id=777540
2017-01-24 17:59:59 +02:00
Sebastian Dröge
1ffef8bf60 qtdemux: Increment current stts index whenever we finished one stts entry
Otherwise we could read more chunks than there are available, doing an
out of bounds read and potentially crash.

https://bugzilla.gnome.org/show_bug.cgi?id=777469
2017-01-19 13:46:58 +02:00
Sebastian Dröge
db1757503d Revert "qtdemux: Increment current stts index in all code paths after reading one chunk"
This reverts commit 99d5d7570d. It broke
playback of various valid files.
2017-01-19 13:25:53 +02:00
Sebastian Dröge
99d5d7570d qtdemux: Increment current stts index in all code paths after reading one chunk
Otherwise we could read more chunks than there are available, doing an
out of bounds read and potentially crash.

https://bugzilla.gnome.org/show_bug.cgi?id=777469
2017-01-19 12:25:41 +02:00
David Warman
642331fd7f qtdemux: avoid XMP tag parsing fatal error.
qtdemux_handle_xmp_taglist() requires a writable taglist,
but qtdemux->tag_list can become non-writable, specifically
after sending global tags (qtdemux.c:958), which adds a
second reference.  Ensure the list is made writable before
calling (make_writable will copy the list if necessary).

https://bugzilla.gnome.org/show_bug.cgi?id=766177
2017-01-17 23:26:02 -03:00
Thiago Santos
5bb7ca8a62 qtdemux: rework taglist handling
Keep taglist around during element existance to avoid having to
create it at different places before usage. Makes code simpler to handle.

https://bugzilla.gnome.org/show_bug.cgi?id=766177
2017-01-17 22:41:43 -03:00
Aurélien Zanelli
6769dce5c1 qtmux: add 4444 and 4444xq variants to video/x-prores pad template caps
They are handled since commit 7b565475bf
(qt: Add support for ProRes 4444 XQ).

https://bugzilla.gnome.org/show_bug.cgi?id=777377
2017-01-17 12:52:05 +02:00
Georg Lippitsch
d71c06c8fe qtmux: Don't write Sync Sample Atom for ProRes
https://bugzilla.gnome.org/show_bug.cgi?id=777331
2017-01-16 19:29:08 +02:00
Tim-Philipp Müller
5404304fac qtdemux: boldly assume that first 'covr' image is the front cover 2017-01-14 15:16:53 +00:00
Tim-Philipp Müller
59fd44a56f qtdemux: extract cover art images into GST_TAG_IMAGE not PREVIEW_IMAGE
These are usually much bigger than icon size and required by
iTunes to be certain fairly large sizes. In qtmux it is also
the IMAGE tags which we write out as 'covr' atoms.
2017-01-14 15:13:39 +00:00
Jan Schmidt
b0e38ed374 qtmux: Don't reset request pad numbering across uses
When reset, don't restart request pad numberings, as
request pads can survive across state changes. Only
restart at 0 if all request pads are handed back first.

https://bugzilla.gnome.org/show_bug.cgi?id=777174
2017-01-13 10:37:21 +11:00
Aurélien Zanelli
52d1355d87 qtmux: simplify video/x-h264 caps handling
'stream-format' and 'alignment' are defined in pad template caps so
there is no need to check them again here. Also remove bitrate parsing from
caps as bitrate in caps doesn't make sense but from tags, which is
actually the case.

https://bugzilla.gnome.org/show_bug.cgi?id=777181
2017-01-12 19:16:57 +02:00
Aurélien Zanelli
4c6a69fdff qtmux: add basic HEVC/H.265 muxing support
https://bugzilla.gnome.org/show_bug.cgi?id=736752
2017-01-12 19:16:23 +02:00
Georg Lippitsch
fcdba65302 qtmux: Calculate clean aperture size
Calculate clean aperture dimensions by first guessing
display aspect ratio based on pixel aspect ratio and
frame size.

https://bugzilla.gnome.org/show_bug.cgi?id=777100
2017-01-12 19:09:22 +02:00
Sebastian Dröge
e12c94065d qtmux: Write tapt atom for MOV files if PAR not 1/1
Needed for QuickTime 7 to properly play files.

Also write the clap atom for MOV files always, not only when ProRes is
used as a video codec. It's mandatory for MOV.

https://bugzilla.gnome.org/show_bug.cgi?id=777100
2017-01-12 19:09:22 +02:00
Andre McCurdy
29433495d6 qtdemux: free seqh after calling qtdemux_parse_svq3_stsd_data()
The seqh buffer allocated in qtdemux_parse_svq3_stsd_data() needs to
be freed by the caller after use.

https://bugzilla.gnome.org/show_bug.cgi?id=777157

Signed-off-by: Andre McCurdy <armccurdy@gmail.com>
2017-01-12 11:10:50 +02:00
Edward Hervey
4a279f4499 isomp4: Don't spam debug log with knonw/padding atoms
Only output WARNING messages for atoms we don't know how to handle
instead of for padding/known atoms we don't need to do any processing
on

https://bugzilla.gnome.org/show_bug.cgi?id=777095
2017-01-10 16:03:00 +01:00
Jan Schmidt
12ad37fdb3 qtmux: Write tfdt atom into fragmented files.
The DASH spec requires that tfdt atoms be present, so
write one out. ISO/IEC 23009-1:2014 6.3.4.2

https://bugzilla.gnome.org/show_bug.cgi?id=708221
2017-01-08 01:23:52 +11:00
Jan Schmidt
1fc3d42f8a qtdemux: Don't reset output timestamps when no tfdt
If a fragmented stream doesn't have a tfdt, don't
reset the output timestamps at each fragment boundary
by erroneously using the default value of 0. Introduced
by commit 69fc48

https://bugzilla.gnome.org/show_bug.cgi?id=754230
2017-01-07 23:57:35 +11:00
Thibault Saunier
9d1942f286 meson: Install presets files 2017-01-05 09:49:21 -03:00
Jan Schmidt
107902ec51 qtdemux: Always snap to the start of the keyframe
When performing a key-unit seek, always snap to the start ts
of the keyframe buffer we landed on so that the keyframe is
entirely within the resulting outgoing segment. That seems
the most sensible result, since the user requested snapping
to the keyframe position.
2017-01-03 01:34:02 +11:00
Jan Schmidt
f415730fdf qtdemux: Omit cslg_shift when snapping seeks
Segments times and seek requests are stored and handled
in raw 'PTS' time, without the cslg_shift - which only applies
to outgoing samples. Omit the cslg_shift portion when
extracting PTS to compare for internal seek snaps.

If the cslg_shift is included, then keyframe+snap-before seeks
generate a segment start/stop time that already includes the
cslg_shift, and it's then added a 2nd time, causing the
first buffer(s) to have timestamps that are out of segment.
2017-01-03 01:34:02 +11:00
Jan Schmidt
db0eddb10f qtmux: Remove bogus check in atom_stsc_add_new_entry()
Remove an old check from atom_stsc_add_new_entry() that
extends the last entry in the STSC if the samples per chunk
matches, as the new interleave merging logic requires that
the final entry by updateable. There's already code
below which simply merges the final entry into the previous
one when needed, so rely on that instead.

Fixes asserts like:

ERROR:atoms.c:2940:atom_stsc_update_entry: assertion failed:
(atom_array_index (&stsc->entries, len - 1).first_chunk == first_chunk)
2017-01-03 01:34:02 +11:00
Seungha Yang
65c5d6d080 qtdemux: Fix key_time in gst_qtdemux_adjust_seek()
time in segment should be PTS based (not DTS).

https://bugzilla.gnome.org/show_bug.cgi?id=765498
2017-01-03 01:34:02 +11:00
Mark Nauwelaerts
867ce71922 qtdemux: implement pull mode SNAP flag seeking 2016-12-29 12:48:56 +01:00
Sebastian Dröge
76c007dd25 qtdemux: Check if we have enough data available when parsing edit lists
Also consume the data entry by entry to get complicated indexing out of
the code.

https://bugzilla.gnome.org/show_bug.cgi?id=776107
2016-12-14 21:48:24 +02:00
Sebastian Dröge
35748dc8f2 qtdemux: Check that the XiTh size is big enough
https://bugzilla.gnome.org/show_bug.cgi?id=775794
2016-12-14 10:17:41 +02:00
Heekyoung Seo
f7c033f4ec qtdemux: Check node length of video sample description
Add check for node length of video sample description and its fields and
for the XiTh atom.

Also unify the code a bit.

https://bugzilla.gnome.org/show_bug.cgi?id=775794
2016-12-14 10:17:41 +02:00
Heekyoung Seo
a5bfaf8a79 qtdemux: Enable xvid/mp2 codec support
Add support for xvid video and mp2 audio, add m2v1 fourcc.

https://bugzilla.gnome.org/show_bug.cgi?id=775794
2016-12-14 10:17:23 +02:00
Edward Hervey
50bb6630f5 qtdemux: Sanitize unknown codec caps
We might have non-printable characters in the unknown fourcc, replace
them with '_', in the same way we do it for unknown tags.
2016-12-02 08:52:06 +01:00
Sebastian Dröge
6939399e96 qtdemux: Increase inflate buffer in bigger steps
1024 bytes is quite small, let's do 4096 bytes (or one page).
Also remove redundant if, we're always in that case when getting here.
2016-12-01 14:44:26 +02:00
Sebastian Dröge
b79655d3c9 qtdemux: Ensure that size of the pasp atom is as much as we need
https://bugzilla.gnome.org/show_bug.cgi?id=775455
2016-12-01 14:30:49 +02:00
Sebastian Dröge
d46cc8df6c qtdemux: Free compressed moov node and it's corresponding decompressed data
https://bugzilla.gnome.org/show_bug.cgi?id=775455
2016-12-01 14:30:10 +02:00
Sebastian Dröge
b4d6b2af8e qtdemux: Check size of compressed MOOV header against available data
And actually read the size of the cmvd atom from the right position.

https://bugzilla.gnome.org/show_bug.cgi?id=775455
2016-12-01 14:29:21 +02:00
Sebastian Dröge
5e4883094b qtdemux: Fix zlib inflate loop
Handle errors cleanly, deallocate all memory and return the actual size
of the inflated data.

https://bugzilla.gnome.org/show_bug.cgi?id=775455
2016-12-01 14:27:55 +02:00
Sebastian Dröge
d0949baf3d qtdemux: Fix out of bounds read in tag parsing code
We can't simply assume that the length of the tag value as given
inside the stream is correct but should also check against the amount of
data we have actually available.

https://bugzilla.gnome.org/show_bug.cgi?id=775451
2016-12-01 13:32:22 +02:00
Vivia Nikolaidou
f8bf3a84ef qtdemux: Read interlacing information from 'fiel' atom
Read interlacing and TFF/BFF information from the 'fiel' atom and pass it
into the caps

https://bugzilla.gnome.org/show_bug.cgi?id=775414
2016-11-30 18:52:20 +02:00
Sebastian Dröge
499c5139bd qtdemux: Fix compiler warning
qtdemux.c: In function ‘qtdemux_parse_trak’:
qtdemux.c:10184:38: error: format ‘%lu’ expects argument of type ‘long unsigned int’, but argument 9 has type ‘gint {aka const int}’ [-Werror=format=]
           GST_DEBUG_OBJECT (qtdemux, "Found jpeg: len %u, need %lu", len,
                                      ^
2016-11-29 13:55:40 +02:00
Scott D Phillips
4ec5daba5f qtdemux: Change off_t type to gint
off_t is a signed integer type provided by sys/types.h on posix systems.
Replace with gint for building on non-posix systems (like windows).

https://bugzilla.gnome.org/show_bug.cgi?id=775287
2016-11-29 13:12:24 +02:00
Sebastian Dröge
01682ae95b qtmux: Make sure to only change DTS of writable buffers
And trivial cleanup

https://bugzilla.gnome.org/show_bug.cgi?id=774840
2016-11-23 18:17:06 +02:00
Sebastian Dröge
01e45b25b7 qtmux: Error out much earlier if we don't have a valid PTS
https://bugzilla.gnome.org/show_bug.cgi?id=774840
2016-11-23 18:17:06 +02:00
Sebastian Dröge
6fb5f85354 qtmux: Only use buffer durations if they are actually valid
https://bugzilla.gnome.org/show_bug.cgi?id=774840
2016-11-23 18:17:06 +02:00
Sebastian Dröge
351f2fca0a qtmux: Revert commits that set DTS and duration on buffers unconditionally
39f7e52266 was setting the buffer duration
to 0 if is not valid, under the assumption that this is "the last"
buffer and no others are coming next. This is wrong, last_buf is the
previous buffer and not the very last one.

4e3c13c87c was setting DTS to 0 if there
was none. This will set DTS to 0 for all e.g. audio streams, completely
messing up calculations if streams don't start at 0.

https://bugzilla.gnome.org/show_bug.cgi?id=774840
2016-11-23 18:17:06 +02:00
Sebastian Dröge
9acc0b5d0e qtmux: Only write "gap" edit list if there is a non-zero gap
https://bugzilla.gnome.org/show_bug.cgi?id=774840
2016-11-23 18:17:06 +02:00
Vivia Nikolaidou
91de259b74 qtmux: Enable up to 16 unpositioned raw audio channels
https://bugzilla.gnome.org/show_bug.cgi?id=774789
2016-11-22 14:05:35 +02:00
David Evans
45843ab9a2 qtdemux: Be sure not to read off end of FLAC dfLa box
https://bugzilla.gnome.org/show_bug.cgi?id=773712
2016-11-21 17:51:14 +02:00
christophecvr
fc3022da1c qtdemux: Fix wrong compiler warning with gcc 6.2
| ../../../git/gst/isomp4/qtdemux.c: In function 'qtdemux_parse_tree':
| ../../../git/gst/isomp4/qtdemux.c:10224:24: error: 'size' may be used uninitialized in this function [-Werror=maybe-uninitialized]
|                  offset += size;
|                         ^~
| ../../../git/gst/isomp4/qtdemux.c:10197:25: note: 'size' was declared here
|                  guint32 size, tag;
|                          ^~~~

https://bugzilla.gnome.org/show_bug.cgi?id=774747
2016-11-21 09:33:05 +02:00
Sebastian Dröge
bb35f15d44 qtdemux: Ensure that raw audio and video have properly aligned buffers
That is, aligned to the basic type for audio and to 32 bytes for video.
Fixes crashes if the raw buffers are passed to SIMD processing functions.

https://bugzilla.gnome.org/show_bug.cgi?id=774428
2016-11-20 13:08:27 +02:00
Sebastian Dröge
7fb278d7d2 qtmux: Always write edit lists for the tracks to give a more accurate duration
Always write an edit list for the whole track. In general this is not
necessary except for the case of having a gap or DTS adjustment but
it allows to give the whole track's duration in the usually more
accurate media timescale.

https://bugzilla.gnome.org/show_bug.cgi?id=774403
2016-11-19 13:53:34 +02:00
Seungha Yang
7d2a07076e qtdemux: Remove useless return variable
qtdemux_expose_streams() returns flow error immediately, if there is an error.
So, the variable for the flow return is not needed.

https://bugzilla.gnome.org/show_bug.cgi?id=774674
2016-11-18 18:05:23 +02:00
David Evans
2ad30254c3 qtdemux: Add support for FLAC encapsulated in ISOBMFF
As defined by
https://git.xiph.org/?p=flac.git;a=blob_plain;f=doc/isoflac.txt

https://bugzilla.gnome.org/show_bug.cgi?id=773712
2016-11-18 18:03:30 +02:00
Seungha Yang
e5b3d9257d qtdemux: Don't modify upstream TIME segment
TIME segment implies that stream/running time is being handled by upstream.
So, we shouldn't override it without any clue.
This patch is for fixing seek in DASH streaming.

https://bugzilla.gnome.org/show_bug.cgi?id=774196
2016-11-15 14:46:34 +02:00
Sebastian Dröge
09c4cc55f2 qtmux: Don't deref NULL pads in debug output
That tends to crash.
2016-11-02 14:33:28 +02:00
Jan Schmidt
324cc4dc4a isomp4: Don't use gst_video_colorimetry_to_string_full()
The API was reverted. Just use the plain
gst_video_colorimetry_to_string() function.
2016-11-02 11:46:07 +11:00
Sebastian Dröge
68b0441a5e qtdemux: Fix compiler warning
qtdemux.c: In function ‘qtdemux_parse_tree’:
qtdemux.c:10139:16: error: ‘color_table_id’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
             if (color_table_id != 0) {
                ^
qtdemux.c:10121:19: note: ‘color_table_id’ was declared here
           guint16 color_table_id;
                   ^~~~~~~~~~~~~~
2016-11-01 21:00:15 +02:00
Sebastian Dröge
c709abbb99 qtmux: Use a default interleave of 250ms for all codecs
https://bugzilla.gnome.org/show_bug.cgi?id=773217
2016-11-01 20:41:22 +02:00
Sebastian Dröge
4eaf5ea062 qtmux: Use a default interleave when ProRes is used
The ProRes guidelines suggest an interleave of 0.5s is common, but
specifies that for ProRes at most 2MB (for SD) and 4MB (for HD) should
be used per chunk.

It might also make sense to use similar numbers in general.

https://bugzilla.gnome.org/show_bug.cgi?id=773217
2016-11-01 20:41:22 +02:00
Sebastian Dröge
c2225781bb qtmux: Allow configuring the interleave size in bytes/time
Previously we were switching from one chunk to another on every single
buffer. This wastes some space in the headers and, depending on the
software, might depend in more reads (e.g. if the software is reading
multiple samples in one go if they're in the same chunk).

The ProRes guidelines suggest an interleave of 0.5s is common, but
specifies that for ProRes at most 2MB (for SD) and 4MB (for HD) should
be used per chunk. This will be handled in a follow-up commit.

https://bugzilla.gnome.org/show_bug.cgi?id=773217
2016-11-01 20:41:22 +02:00
Sebastian Dröge
cba6cc4fd4 qtmux: Set compressor name, horizontal/vertical resolution and depth for ProRes
This is also required by some software to handle ProRes files.

https://bugzilla.gnome.org/show_bug.cgi?id=769048
2016-11-01 20:41:22 +02:00
Sebastian Dröge
7b565475bf qt: Add support for ProRes 4444 XQ
And also 4444 in the muxer.

https://bugzilla.gnome.org/show_bug.cgi?id=769048
2016-11-01 20:41:22 +02:00
Sebastian Dröge
a2c6921482 qtmux: Write 'clap' atom for ProRes
It's required for ProRes to work with other software.

It is also in the MP4 standard, but inventing values here seems a bit
tricky for the general case and it does not really give any extra
information.

https://bugzilla.gnome.org/show_bug.cgi?id=769048
2016-11-01 20:41:22 +02:00
Sebastian Dröge
ec7f699604 qtdemux: Read colorimetry information from colr atom if available
https://bugzilla.gnome.org/show_bug.cgi?id=772181
2016-11-01 20:41:22 +02:00
Sebastian Dröge
53e436883a qtmux: Always write colr atom with the colorimetry information
https://bugzilla.gnome.org/show_bug.cgi?id=772181
2016-11-01 20:41:22 +02:00
Sebastian Dröge
0584a71123 qtmux: Fix writing of the 'fiel' extension atom
This was also wrong for JPEG2000. Also write it for all MOV files and
JPEG2000, not only for ProRes.

https://bugzilla.gnome.org/show_bug.cgi?id=769048
2016-11-01 20:41:22 +02:00
Sebastian Dröge
b815c41b7e qtmux: Write 4 bytes of zeroes at the end of the sample description extensions
This is working around some broken software.

https://bugzilla.gnome.org/show_bug.cgi?id=769048
2016-11-01 20:41:22 +02:00
Sebastian Dröge
4cff5093ee atoms: 'pasp' atom is also part of MP4, write it always
https://bugzilla.gnome.org/show_bug.cgi?id=769048
2016-11-01 20:41:22 +02:00
Vivia Nikolaidou
fe38414412 qtmux: Write additional atoms for prores video
These required atoms are: colorimetry, field information, spatial/temporal
quality, and vendor.

https://bugzilla.gnome.org/show_bug.cgi?id=769048
2016-11-01 20:41:22 +02:00
Sebastian Dröge
e0aec317ff qtmux: Use a better default value for the movie header timescale
Take the maximum video timescale, or if no video track is present the
previous value of 1800.

https://bugzilla.gnome.org/show_bug.cgi?id=769041
2016-11-01 20:11:12 +02:00
Sebastian Dröge
727fa1c7c3 qtmux: Be more clever with the default video track timescale
Use the number of milliframes per second for integral and drop-frame
framerates, as suggested by the QT file format specification and other
places. We already did that for integral framerates before, but not for
drop-frame framerates. This now keeps precision better.

For all other framerates, check if it's close to a well-known framerate
and use that instead.

https://bugzilla.gnome.org/show_bug.cgi?id=769041
2016-11-01 20:11:12 +02:00