| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
| |
It has been verified by use over time.
|
|
|
|
|
|
|
|
|
|
|
|
| |
qtdemux creates a samples array and gets the timestamps for buffers by
accumulating their durations. When doing reverse playback of fragments,
accumulating samples will lead to wrong timestamps as the timestamps
should go decreasing from fragment to fragment and the accumulation
will produce wrong results.
In this case, when receiving a discont for fragmented reverse playback,
the previous samples information should be flushed before new data
is processed.
|
|
|
|
|
| |
Add 'name' and 'mean' fourccs, as we handle them. Right now each use would
trigger a warning.
|
|
|
|
|
|
|
|
| |
The gst-launch script for example launch line to test qtdemux is
missing a queue before the decodebins, otherwise the gst-launch-1.0
command won't work.
https://bugzilla.gnome.org/show_bug.cgi?id=749054
|
|
|
|
|
|
|
|
| |
Based on patch by Guillaume Desmottes.
scenario: validate.http.playback.seek_with_stop.raw_h264_1_mp4
https://bugzilla.gnome.org/show_bug.cgi?id=748617
|
|
|
|
|
|
| |
data and use g_strndup() instead of g_strdup()
Thanks to Ralph Giles for reporting this.
|
|
|
|
| |
Property enum items should be named PROP_ for consistency and readability.
|
|
|
|
| |
This is not needed any longer.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
When doing key uint seek, qtdemux calls gst_qtdemux_adjust_seek
to get proper offset. And then this offset is set to
segment.position and segment.time in gst_qtdemux_perform_seek but
segment.start is not updated.
After that, application sends segment query,
qtdemux sets start and stop to query using gst_segment_to_stream_time. Due
to the wrong value in segment.start, the stop position is smaller than
it should.
https://bugzilla.gnome.org/show_bug.cgi?id=746822
|
|
|
|
|
|
| |
We always write the CTTS in qtmux. Ideally we only want to do that
for streams that need DTS, it should be present on the track information
rather than be decided based on each buffer
|
|
|
|
|
|
| |
As qt uses durations, it doesn't matter, only the difference
between consecutive buffers is important. Also, collectpads
already replaces PTS/DTS with the running times for them.
|
|
|
|
|
|
|
| |
Instead of checking various state variables around the muxer,
track the current muxing mode in a single 'mux_mode' enum.
Add some implementation notes about the different mux modes
|
|
|
|
|
|
|
|
| |
gst_segment_do_seek() does that for us already, and doing it twice
will break non-flushing seeks in interesting ways. Leftover from 1.0
porting.
Also copy over segment offset and applied_rate, just in case.
|
|
|
|
|
|
| |
It indicates the last sample parsed, not the next one to parse.
As it starts in -1, any value from 0 onwards means that it has
some valid data.
|
|
|
|
|
|
| |
For large-file atoms, guard against overflow in the size field,
which could make us jump backward in the file and cause
infinite loops.
|
|
|
|
|
|
|
|
|
| |
When not in fast-start or fragmented mode, we need to be able
to rewrite the size of the mdat atom, or else the output just
won't be playable - the mdat placeholder with size == 0 will
cover the rest of the file, including any moov atom we write out.
https://bugzilla.gnome.org/show_bug.cgi?id=708808
|
|
|
|
| |
https://bugzilla.gnome.org/show_bug.cgi?id=744572
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Unlike many other seek flags, the KEY_UNIT seek
flag is not copied over into the GstSegment,
since it's only relevant for the seek itself,
so we need to pass it explicitly to the seek
handler here.
https://bugzilla.gnome.org/show_bug.cgi?id=745339
|
|
|
|
| |
https://bugzilla.gnome.org/show_bug.cgi?id=744983
|
|
|
|
| |
gst_buffer_replace can handle NULL inputs by itself
|
|
|
|
|
| |
The tfdt should be more accurate as the buffer timestamp is provided
by the fragmented format manifest and it might just be an approximation.
|
|
|
|
|
|
| |
We need different symbol names, because these symbols are also present
in the fragmented plugin ... which will cause conflicts when doing
static linking
|
|
|
|
|
|
|
|
|
|
|
|
| |
Using the sparse streams can make the push-based seeking return
too far in the stream. It also can lead to issues as the
sparse streams will be ignored when restarting playback and,
if the sparse stream is the one that has the earliest sample,
it will confuse qtdemux's offsets as one stream will have
an earlier offset than the demuxer's one which might lead to
early EOS.
https://bugzilla.gnome.org/show_bug.cgi?id=742661
|
|
|
|
|
|
|
|
|
|
| |
Parse the 'sidx' atom and update the total duration according to the
parser result. The isoff parser code is imported from
gst-plugins-bad's dashdemux and a gst_isoff_sidx_parser_add_data()
function was factored out of the gst_isoff_sidx_parser_add_buffer()
function.
https://bugzilla.gnome.org/show_bug.cgi?id=743578
|
|
|
|
|
| |
When the trickmode key-units flag is set on the segment, simply skip
any sample on a video stream that isn't a keyframe
|
|
|
|
|
|
|
|
| |
Keep global and stream tags separately and parse the udta node
that can be found under the trak atom. The udta will contain
stream specific tags and will be pushed as such
https://bugzilla.gnome.org/show_bug.cgi?id=692473
|
|
|
|
|
|
|
|
|
| |
Tags received via events, when marked as stream tags, will
be stored on that stream's trak atom instead of being stored
in the main tags atom. This allows the resulting file to have
global and stream tags stored.
https://bugzilla.gnome.org/show_bug.cgi?id=692473
|
|
|
|
|
|
|
|
|
|
| |
Refactor the functions that were bound to the 'moov' atom to
directly pass the desired 'udta' that should receive the tags.
This allows the tags to be written to 'udta' at the 'moov' or
the 'trak' level, creating tags that are for the container or
for a stream only.
https://bugzilla.gnome.org/show_bug.cgi?id=692473
|
|
|
|
|
|
|
| |
It refers to the application name and version used to create the
file
https://bugzilla.gnome.org/show_bug.cgi?id=692473
|
|
|
|
|
|
|
|
|
|
|
| |
Remove a fix for heavily edited files added for fixing
https://bugzilla.gnome.org/show_bug.cgi?id=345830 to work
with seeks and proper gaps playback. The fix was replaced
for a more general solution that bases on using previous
segment's duration, just like it works for media segments
playback.
https://bugzilla.gnome.org/show_bug.cgi?id=743518
|
|
|
|
|
|
|
|
|
| |
For fragmented streams with extra data at the end of the mdat
qtdemux was not dropping those bytes and would try to use
that extra data as the beginning of a new atom, causing the
stream to fail.
https://bugzilla.gnome.org/show_bug.cgi?id=743407
|
|
|
|
| |
And avoid using variables that won't exist when debugging is disabled
|
|
|
|
|
| |
__gst_debug_min is the "global" lowest debug level set. There's no
guarantee the qtdemux debug category is actually set at that level.
|
| |
|
|
|
|
|
|
| |
A mutex unlock was missing.
https://bugzilla.gnome.org/show_bug.cgi?id=739975
|
| |
|
|
|
|
|
|
|
| |
Also add a few other raw video formats we support: v308, v216
and add comments for a few others we don't support yet.
https://developer.apple.com/library/mac/technotes/tn2162/
|
|
|
|
|
|
|
| |
Use the right macro to convert to the correct scale or the
segment information will be wrong
https://bugzilla.gnome.org/show_bug.cgi?id=742572
|
|
|
|
|
|
|
|
|
| |
Actually copy the codec data instead of copying nothing
and then bombing out because there's no data.
Fixes: gst-launch-1.0 audiotestsrc ! avenc_alac ! qtmux ! fakesink
https://bugzilla.gnome.org/show_bug.cgi?id=741783
|
|
|
|
|
| |
It was using the non-increasing offset variable, which made that statement
not so useful :)
|
|
|
|
|
| |
This helps make the code more readable and avoid future bad usage of
scaling function argument order.
|
|
|
|
|
| |
Preserve the segment flags of the overall demux segment on the output
segments for each pad.
|
|
|
|
| |
https://bugzilla.gnome.org/show_bug.cgi?id=741279
|
|
|
|
|
|
|
| |
Make sure we store updated segment stop/duration with the same
granularity as the duration timescale.
And add more debug
|
|
|
|
|
|
|
|
|
|
|
| |
When dealing with fragmented files, we will get more accurate duration
information via the mfra and moof atoms.
In order for playback to not stop at the initial duration (from the
moov atom), we need to check and update the various duration variables
when we find more information.
Fixes playback of fragmented files in pull mode
|
|
|
|
| |
As detected by clang/scan-build
|
|
|
|
|
|
| |
Avoids confusion with timescaled-based variables and bytes (offset)
variables.
And use GST_CLOCK_TIME_NONE where applicable
|