Commit graph

488 commits

Author SHA1 Message Date
Sebastian Dröge
5d4c71d76e matroskademux: Fix cluster searching if we search multiple times in one chunk
After finding a cluster id in the byte reader, we skip ahead the reader
position by one further byte to be able to continue searching from there
inside the same chunk if the cluster candidate was a false positive.

We have to accomodate for that additional byte when resuming the search,
otherwise all following pulls are off-by-one for every resume and we run
into an assertion.
2016-11-22 20:24:59 +02:00
Nicola Murino
0ef3a71b89 matroskademux: add support for skipping invalid data in push mode
https://bugzilla.gnome.org/show_bug.cgi?id=774566
2016-11-21 13:38:08 +02:00
Thibault Saunier
150edef830 Use the new API to post flow ERROR messages on the bus
https://bugzilla.gnome.org/show_bug.cgi?id=770158
2016-08-26 19:23:26 -03:00
Michael Olbrich
c5da4dc66a matroskademux: preserve seek flags
Without this some flags get lost in streaming mode.

https://bugzilla.gnome.org/show_bug.cgi?id=767194
2016-06-06 10:50:02 +03:00
Sebastian Dröge
0345ba78f5 matroskademux: Set seek event seqnum in EOS and SEGMENT_DONE messages/events
Also actually store the seqnum in pull mode seeks.

See https://bugzilla.gnome.org/show_bug.cgi?id=765935
2016-05-20 10:57:30 +03:00
Seungha Yang
eb09829a1c matroskademux: don't hold object lock whilst pushing out headers
matroskademux would take the GST_OBJECT_LOCK in
- gst_matroska_demux_push_codec_data_all()
- gst_matroska_demux_query()

Some parse element such as FLAC checks upstream seekability, and
there is some use cases that matroska-demux is linked to a parse element
(e.g.,FLAC format) without intermediate elements (e.g., queue).
In this case, matroska-demux never returns from _push_codec_data_all()
because the parser can return only after it receives the response to
the upstream query, but that's not going to happen because it's
deadlocked.

Elements must not hold the object lock whilst pushing out events
or data.

https://bugzilla.gnome.org/show_bug.cgi?id=766645
2016-05-19 22:01:53 +01:00
Vineeth TM
1071309870 good: use new gst_element_class_add_static_pad_template()
https://bugzilla.gnome.org/show_bug.cgi?id=763076
2016-03-24 14:32:20 +02:00
Luis de Bethencourt
5dcf1a4f69 matroska-demux: remove impossible condition
It is impossible for a guint to have a negative value, no need to check for
this. Introduced in commit 6861d11c49

CID 1354509
2016-02-29 10:11:38 +00:00
Linus Svensson
a5691af319 matroska-demux: Don't handle seek until ready
https://bugzilla.gnome.org/show_bug.cgi?id=762542
2016-02-23 17:54:43 +02:00
Linus Svensson
1a3986d016 matroska-demux: Unref seek event
https://bugzilla.gnome.org/show_bug.cgi?id=762542
2016-02-23 17:54:43 +02:00
Vincent Penquerc'h
6861d11c49 matroska-demux: make up an OpusHead block if possible when missing
https://bugzilla.gnome.org/show_bug.cgi?id=761489
2016-02-23 10:47:43 +02:00
Mark Nauwelaerts
afad769c78 matroskademux: make stream-id more readable and order-friendly
... as streams are so ordered by id by e.g. decodebin
(and as typically already honoured by other demuxers).
2016-02-22 16:06:11 +01:00
Sebastian Dröge
a7c3f353bd matroskademux: Unmap wavpack header buffer after creating it
Otherwise it will be mapped writable all the time and we can't read from it
anywhere.

https://bugzilla.gnome.org/show_bug.cgi?id=762239
2016-02-18 11:10:14 +02:00
Ognyan Tonchev
750b7c72fe matroskademux: Simple implementation of TRICKMODE_KEY_UNITS
When the trickmode key-units flag is set on the segment, simply skip
any sample on a video stream that isn't a keyframe

https://bugzilla.gnome.org/show_bug.cgi?id=762185
2016-02-17 16:17:13 +02:00
Tim-Philipp Müller
77403d0afe matroska-demux: send GAP events for lagging audio and video streams too
Send GAP events for non-subtitle streams too if they lag too much
behind, but use a higher threshold than for subtitles.

This helps with fixing prerolling with a file where one of the
audio streams only has data starting from 19s onwards. It's not
a complete fix yet, it also requires changes elsewhere, such as
in baseparse, to make sure caps are propagated.

https://bugzilla.gnome.org/show_bug.cgi?id=614460
https://bugzilla.gnome.org/show_bug.cgi?id=753899
2016-02-16 17:11:39 +00:00
Sebastian Dröge
e618444ca7 matroskademux: Guard against no codec data in prores caps creation
CID 1346532
2015-12-29 18:05:56 +02:00
Thibault Saunier
7b026e4bc0 matroskademux: Always set the channel mask for PCM streams
Just use the gst_audio_channel_get_fallback_mask function for now as
the specification is too complicated and nobody implements it.
2015-12-21 18:34:42 +01:00
Jan Schmidt
71d43327a3 matroska-demux: Play ProRes video streams
Generate video/x-prores caps for ProRes video streams.
Every frame needs an 8 byte header prepended, as described in
http://wiki.multimedia.cx/index.php?title=Apple_ProRes#Frame_layout
so do that in a post-processing callback.

https://bugzilla.gnome.org/show_bug.cgi?id=758258
2015-12-19 03:47:49 +11:00
Sebastian Dröge
ed20b9ab90 matroskademux: Use codecutils helpers for creating Opus caps
Also fix up codec data with values from the container.

https://bugzilla.gnome.org/show_bug.cgi?id=757152
2015-11-03 20:35:27 +02:00
Sebastian Dröge
2d98348abb matroskademux: There is no multistream field for Opus anymore
https://bugzilla.gnome.org/show_bug.cgi?id=757152
2015-11-03 20:35:27 +02:00
Sebastian Dröge
d620ca4740 matroskademux: Parse and handle CodecDelay, SeekPreroll and DiscardPadding
https://bugzilla.gnome.org/show_bug.cgi?id=727305
2015-11-03 20:35:27 +02:00
Sebastian Dröge
cbf181f31b matroskademux: Read buffer timestamp *after* actually setting it
https://bugzilla.gnome.org/show_bug.cgi?id=756809
2015-10-27 18:01:32 +02:00
Sebastian Dröge
1cd4baa16a matroskademux: Remove leftover assertion from 0.10
We now allocate memory via GstAllocator and as such can handle arbitrary
alignments, not only <= G_MEM_ALIGN.

https://bugzilla.gnome.org/show_bug.cgi?id=755708
2015-09-28 18:03:51 +02:00
Sebastian Dröge
7046852e7d gst: Don't use deprecated gst_segment_to_position() 2015-09-26 00:12:46 +02:00
Jan Alexander Steffens (heftig)
3f8efd8af8 matroskademux: Align raw video frames to 32 bytes
Outputting unaligned video frames causes videoscale et al to
crash when attempting SIMD-accelerated conversion.

https://bugzilla.gnome.org/show_bug.cgi?id=736965
2015-08-31 14:35:59 +03:00
Glen Diener
cd57697a2c matroskademux: Preserve forward referenced track tags
https://bugzilla.gnome.org/show_bug.cgi?id=752850
2015-08-05 16:46:33 -04:00
Dimitrios Christidis
744167056c matroskademux: fix for subtitle buffers with NUL terminators
Commit 45892ec8 created a regression where g_utf8_validate() would fail
if the subtitle buffer had a NUL terminator as part of the data.

https://bugzilla.gnome.org/show_bug.cgi?id=752421
2015-07-21 14:25:12 +01:00
Tim-Philipp Müller
2e3a5ba227 Update mailing list address from sourceforge to freedesktop 2015-07-16 17:19:03 +01:00
Dimitrios Christidis
45892ec8be matroskademux: fix trailing '*' displayed with some text subtitles
The subtitle buffer we push out should not include a NUL terminator
as part of the data, we just add such a terminator for safety, but
it should not be included in the buffer size.

A NUL terminator is not valid UTF-8, so checks will fail if it's
included in the size, and the NUL will be replaced by the fallback
character specified when converting, i.e. '*'.

https://bugzilla.gnome.org/show_bug.cgi?id=752421
2015-07-16 13:18:06 +01:00
Luis de Bethencourt
063f553275 docs: decodebin2 -> decodebin 2015-06-25 10:57:29 +01:00
Jan Schmidt
e5db2673bd matroska-demux: Use gst_video_multiview_guess_half_aspect()
Use the gst_video_multiview_guess_half_aspect() utility function
to set the half-aspect flag (or not) on stereoscopic frame-packed
videos.
2015-06-23 11:58:41 +10:00
Vineeth TM
9a1ed36b7a matroska: remove useless check
No need to check for context availability while freeing. We are inside
inside a code block with a condition that dereferences context.
if (context->type == 0 ...

https://bugzilla.gnome.org/show_bug.cgi?id=751306
2015-06-22 12:26:23 +01:00
Jan Schmidt
0c46c5c3e2 matroska-demux: Actually set detected 3D info into output caps.
Use the information read from the StereoMode info
to configure multiview-mode and multiview-flags in the
video caps.
2015-06-12 01:57:36 +10:00
Jan Schmidt
ec5bc9dccb matroska: Implement basic stereoscopic video support
Implement support for the packed video formats WebM
uses, not all the values that Matroska might use.

In practice, it's really hard to find any samples in the
wild of any.

Supported in both the muxer and demuxer.
2015-06-11 12:11:42 +10:00
Guillaume Desmottes
7f4f4131df matroskademux: fix seek event leak
gst_matroska_demux_handle_seek_event() doesn't consume the
event so we have to unref it.

https://bugzilla.gnome.org/show_bug.cgi?id=748584
2015-04-28 19:24:40 +01:00
Sebastian Dröge
9119fbd774 matroska-demux: Send pending tags when adding a new pad
We might've parsed those tags before already and tried to push them to
non-existing pads before. Now let's do it for real.
2015-04-28 15:42:49 +02:00
Luis de Bethencourt
9391622579 Rename property enums from ARG_ to PROP_
Property enum items should be named PROP_ for consistency and readability.
2015-04-27 11:22:11 +01:00
Mark Nauwelaerts
593cfa086c matroskademux: resurrect some flow return handling
https://bugzilla.gnome.org/show_bug.cgi?id=744572
2015-03-29 13:58:56 +02:00
Thiago Santos
d56b11af56 matroska: store stream tags and push as updated
New tags can be found on different parts of the file, so this patch
keeps the stream taglists around for the life cycle of the pad
and adds those new tags as found. Then a new tag is found, the
pad's is marked with a tags changed flag, making the element push
a new tag event on the next check. Before this, we were sending
only the newly found tags, as the element was losing its taglist
when pushing the event.
2015-03-28 11:20:39 -03:00
Ramiro Polla
7b2b619a8f matroskademux: send global tags incrementally
Instead of sending only new tags once they are found, merge the taglist
and send them incrementally.
2015-03-28 10:24:57 -03:00
Nicola Murino
bb3d82ef04 matroskademux: for dts only stream set pts=dts for intra only formats
https://bugzilla.gnome.org/show_bug.cgi?id=745192
2015-03-15 14:28:36 +00:00
Ramiro Polla
0fad053497 matroskademux: fix sending of tags
* Fix critical when new tags are found after segment event has already
  been sent.
* Send global tags before stream tags.
* Split sending of tags out of gst_matroska_demux_send_event() into its
  own function.

https://bugzilla.gnome.org/show_bug.cgi?id=745973
2015-03-14 18:17:48 +00:00
Nicola Murino
f727762c1f matroska: Add an helper method to get buffer timestamps
... and replace GST_BUFFER_TIMESTAMP that always return PTS with this method
that return PTS or DTS based on stream type.

https://bugzilla.gnome.org/show_bug.cgi?id=745192
2015-03-04 11:36:24 +01:00
Nicola Murino
e676b8ba9c matroskamux/demux: initialize dts_only
https://bugzilla.gnome.org/show_bug.cgi?id=745192
2015-02-27 09:56:06 +02:00
Matej Knopp
fa283f407f matroskademux: V_MS/VFW/FOURCC streams have DTS instead of PTS
When such stream is present demuxer should set DTS on buffers instead
of PTS. This is consistent with how VLC and libav/ffmpeg handle VFW
streams.

Sample file
https://s3.amazonaws.com/MatejK/Samples/Matroska-VFW-DTS-Only.mkv

https://bugzilla.gnome.org/show_bug.cgi?id=745192
2015-02-26 11:12:34 +02:00
Jan Schmidt
4a77c8a84f matroska: Fix seeking past the end of the file in reverse mode.
Snap to the end of the file when seeking past the end in reverse mode,
and also fix GST_SEEK_TYPE_END and GST_SEEK_TYPE_NONE handling
for the stop position by always seeking on a segment in stream time
2015-01-31 06:15:44 +11:00
Sebastian Dröge
67d4b85d6a matroskademux: Improve detection of being stuck at the same offset
Only error out if we read from the same position again and got the
same length. Just the same position is not necessarily enough.
2014-12-29 15:35:19 +01:00
Sebastian Dröge
e596a3b6a7 matroskademux: Don't get stuck at the same offset when searching for clusters
This could happen if there is an invalid cluster with size 0, and in that
case just error out instead of looping forever.
2014-12-29 15:02:52 +01:00
Edward Hervey
cbe56d2331 matroska-demux: Cache upstream length
Instead of constantly querying upstream, just cache the last duration,
and in the unlikelyness we might have gone over query again before
deciding we are EOS.

Cut 15% cpu off matroskademux streaming thread (srsly...)
2014-12-19 10:59:18 +01:00
Vincent Penquerc'h
b7413279d9 matroska: mux/demux the OpusHead header
This is meant to be so (https://wiki.xiph.org/MatroskaOpus - while
it is marked as a draft, this part was confirmed to be correct on
IRC), and allows one to determine whether a demuxed stream is
multistream or not, and thus set the multistream caps field
accordingly. In turn, this means downstream does not have to guess.

https://bugzilla.gnome.org/show_bug.cgi?id=740744
2014-12-18 11:38:49 +00:00