Commit graph

805 commits

Author SHA1 Message Date
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
Nicola Murino
c466ff4748 matroskademux: set framerate 0/1 when duration is not known
https://bugzilla.gnome.org/show_bug.cgi?id=740130
2014-12-04 18:20:37 +01:00
Sebastian Dröge
7a909917b5 matroska-mux: Use G_DEFINE_TYPE() to register the pad instead of manually registering it 2014-11-09 11:04:33 +01:00
Göran Jönsson
ec05d3b6d8 matroskamux: make GstMatroskamuxPad get_type() function thread-safe
https://bugzilla.gnome.org/show_bug.cgi?id=739722
2014-11-07 21:20:31 +00:00
Tim-Philipp Müller
85c3c36712 matroskamux: tweak writing app tag string a little 2014-11-02 19:02:35 +00:00
Jonas Holmberg
1371fa0c61 matroskademux: make demuxer reusable
Remove pads from flow combiner and reset last
flow return to FLOW_OK by resetting the flow combiner.
This prevents FLOW_FLUSHING when trying to re-use the
demuxer after setting it back to NULL/READY state.

https://bugzilla.gnome.org/show_bug.cgi?id=737359
2014-09-25 16:14:18 +01:00
Sanjay NM
26a1344f37 Miscellaneous minor cleanups
Fix redundant variables and assignments,
and unreachable breaks.

https://bugzilla.gnome.org/show_bug.cgi?id=736875
https://bugzilla.gnome.org/show_bug.cgi?id=736876
https://bugzilla.gnome.org/show_bug.cgi?id=736879
https://bugzilla.gnome.org/show_bug.cgi?id=736880
https://bugzilla.gnome.org/show_bug.cgi?id=736881
https://bugzilla.gnome.org/show_bug.cgi?id=736888
https://bugzilla.gnome.org/show_bug.cgi?id=736890
https://bugzilla.gnome.org/show_bug.cgi?id=736892
https://bugzilla.gnome.org/show_bug.cgi?id=736893
https://bugzilla.gnome.org/show_bug.cgi?id=736894
2014-09-24 00:45:31 +01:00
Anuj Jaiswal
4242495ea7 matroskamux: don't bitwise OR the same flag twice
https://bugzilla.gnome.org//show_bug.cgi?id=736543
2014-09-12 10:37:31 +01:00
Tim-Philipp Müller
4c08f2694d matroskademux: handle real audio 28_8
Fixes duplicate check for 14_4.

https://bugzilla.gnome.org//show_bug.cgi?id=736543
2014-09-12 10:35:36 +01:00
Sebastian Dröge
a3a5530518 matroska-demux: Don't handle parse errors at the end of file as an error
But only if they happen after the Matroska segment.

https://bugzilla.gnome.org/show_bug.cgi?id=735833
2014-09-05 11:36:30 +03:00
Jan Schmidt
f1c3a40547 matroska: Use gst_video_guess_framerate() function
Remove local framerate guessing function in favour of
the new gst_video_guess_framerate() function.
2014-08-15 01:17:27 +10:00
Vincent Penquerc'h
5653b1a25a matroskademux: send gap events instead of segment tricks
This fixes missing frames from being time skipped.

https://bugzilla.gnome.org/show_bug.cgi?id=732372
2014-07-01 15:14:34 +01:00
Sebastian Dröge
5500dd4a20 matroskamux: Fix compiler warnings when compiling with G_DISABLE_ASSERT 2014-06-29 19:57:57 +02:00
Tim-Philipp Müller
155a3fec93 matroskaparse: don't error out if there's not enough data in the adapter
gst_matroska_parse_take() would return FLOW_ERROR instead of
FLOW_EOS in case there's less data in the adapter than requested,
because buffer is NULL in that case which triggers the error
code path. This made the unit test fail (occasionally at least,
because of a bug in the unit test there's a race and it would
happen only sporadically).
2014-06-28 17:39:36 +01:00
Sebastian Dröge
daf25482ed matroskademux: Don't call GST_DEBUG_OBJECT() and other macros with non-GObject objects
It will crash with latest GLib GIT and was never supposed to work before
either.
2014-06-22 19:26:03 +02:00
Tim-Philipp Müller
341b691b18 matroskademux: don't leak doctype string in error code path
CID 1212145.
2014-06-02 09:57:42 +02:00
Thiago Santos
c7c25071e3 matroskademux: use GstFlowCombiner
Use the flow combiner to have the standard combination results and avoid
repeating the same code

https://bugzilla.gnome.org/show_bug.cgi?id=709224
2014-05-26 19:51:02 -03:00
Adrien SCH
8ac30d4c26 matroskamux: fix the memory leak of language attribute
https://bugzilla.gnome.org/show_bug.cgi?id=728418
2014-05-13 19:55:21 -03:00
Tim-Philipp Müller
9872c19491 matroskademux: don't leak doctype string in error code path
CID 1212145.
2014-05-09 14:22:42 +01:00
Vincent Penquerc'h
ec38c62563 matroska: rejig test to avoid undefined shift behavior
Coverity 1195121, 1195120
2014-05-05 14:44:57 +01:00
Vincent Penquerc'h
9589c43516 matroskamux: ensure we don't dereference a NULL pointer
while working out the codec ID.

Coverity 1195148
2014-05-05 14:32:06 +01:00
Vincent Penquerc'h
590e20cbc9 matroskamux: do not use uinitialized clut on error
If we're missing part of the clut, do not try to use it. It seems
very likely the break was meant to break out of the switch rather
than from the loop.

Coverity 1139878
2014-05-02 14:25:01 +01:00
Vincent Penquerc'h
5c22bcf6e9 matroska: blindly fix writing variable length negative values
Spotted while fixing something else in the area.

Nothing calls this with a negative value.
2014-05-02 13:33:02 +01:00
Vincent Penquerc'h
5b9fa4e63a matroska: do not lose the top bits when writing a > 32 bit value
Coverity 1139806
2014-05-02 13:29:33 +01:00
Vincent Penquerc'h
a0bc24558e matroska: do not try to call gst_pad_query_default on a NULL pad
gst_matroska_parse_query can be called explicitely with a NULL pad.
If we reach this point with a NULL pad, fail the query.

Coverity 1139715
2014-05-02 11:39:39 +01:00
Vincent Penquerc'h
3915884017 matroska: do not return GST_FLOW_OK if we did not get a buffer
Coverity 1139714 (which will likely come back in another guise,
as the _read_init call can have a failing _map)
2014-05-02 11:28:01 +01:00
Vincent Penquerc'h
f5a9f5e221 matroska: catch failure to map buffer
Avoids dereferencing NULL.

Coverity 1139712
2014-05-02 11:20:33 +01:00
Vincent Penquerc'h
d9eb5f7fde matroska: fix content encoding scope validity check
It's 3 bits, and http://matroska.org/technical/specs/index.html
says it can't be 0.

Coverity 1139660
2014-04-21 17:21:20 +01:00
Vincent Penquerc'h
54c5710adb matroskamux: fix PAR fraction sanity check
It was checking par_num twice, and never par_denum.

Coverity 1139634
2014-04-21 17:21:20 +01:00
Vincent Penquerc'h
457712b933 matroska: fix check for amount of data to read
History shows length==0 should set data to NULL and return,
so we do that too instead of trying to read nothing.

Coverity 206205
2014-04-16 17:44:51 +01:00
Tim-Philipp Müller
821c68822b matroska-mux: add mapping for Opus audio
Might want to consider adding channels/rate
requirement to template caps, but requires
fixing up of encoder and parser first.
2014-03-30 00:35:07 +00:00
Tim-Philipp Müller
b158a1c068 matroska-demux: add mapping for Opus audio codec
https://bugzilla.gnome.org/show_bug.cgi?id=727305
2014-03-30 00:31:11 +00:00
Mark Nauwelaerts
3414e3d0b9 matroskademux: segment closing not needed in 1.x
... as sender should keep track of segment base accumulation.
Rather, it may have some adverse effects as a spurious segment event,
e.g. in collectpads.
2014-03-25 21:02:45 +01:00
Mark Nauwelaerts
9a30726226 matroskademux: early sending pending codec-data for all streams
... at least before syncing across all streams might cause some gap
activity on any of those streams, notably sparse streams.

See also #712134
2014-03-25 21:02:45 +01:00
Mark Nauwelaerts
1e135a38cc matroskamux: handle both sticky and non-sticky custom event 2014-03-25 21:02:45 +01:00
Per x Johansson
2a362c6fb1 matroskademux: fix assert on fps lower than 1
Fixes assert caused by gst_duration_to_fraction calling
gst_util_uint64_scale_int with a denominator of 0 when fps is less
than 1.

https://bugzilla.gnome.org/show_bug.cgi?id=726106
2014-03-12 09:08:31 +01:00
Tim-Philipp Müller
f3163fb45f matroskademux: align raw audio memory to powers of two
https://bugzilla.gnome.org/show_bug.cgi?id=725008
2014-02-27 00:46:39 +00:00
Tim-Philipp Müller
c3dc53e551 matroskademux: calculate alignment properly for audio depths not a multiple of 8 2014-02-27 00:46:39 +00:00
Matej Knopp
d33b4dce63 matroskademux: fix crash with 24-bit raw audio
Do not try to align audio buffers to odd numbers,
which will get us a NULL buffer which we then
crash on.

https://bugzilla.gnome.org/show_bug.cgi?id=725008
2014-02-27 00:46:28 +00:00
divhaere
19a307930a matroska: add support for GRAY8, BGR and RGB video colourspaces in V_UNCOMPRESSED codec
https://bugzilla.gnome.org/show_bug.cgi?id=723849
2014-02-11 21:22:33 +01:00
Sebastian Dröge
aafcbbb2fe matroskaparse: Comment out some unused functions used only from the commented out pull-mode code 2014-02-09 23:21:20 +01:00
Reynaldo H. Verdejo Pinochet
2f8a1aa870 matroska: factor out read context init/reset
While at this, move _track_reset() to track-ids
so it can be called from the common read context
reset routine.

https://bugzilla.gnome.org/show_bug.cgi?id=722705
2014-02-06 13:25:12 -03:00
Per x Johansson
46bc1677a4 matroskamux: Fix constantly growing used uid list
Moves the used uid list to the class to avoid having it grow forever.

https://bugzilla.gnome.org/show_bug.cgi?id=723269
2014-01-30 11:59:28 -03:00
Reynaldo H. Verdejo Pinochet
cf0c780138 matroskaparse: better default caps when none set
Uses information gathered during EBML parsing to
forge a more suitable set of caps instead of blindly
assuming everything is video/x-matroska.

For consistency, stream type reset was added to
matroska-demux too.

https://bugzilla.gnome.org/show_bug.cgi?id=722311
2014-01-21 11:11:46 -03:00
Sebastian Dröge
809d105982 matroskademux: Don't skip all video frames until the first keyframe
Instead do it like all other demuxers and let parsers and decoders
handle that. The keyframe information inside the container might
be completely wrong like in the sample file of the bug report,
and if it is correct and we push no keyframes, then the parsers
and decoders will handle that properly anyway.

https://bugzilla.gnome.org/show_bug.cgi?id=682276
2014-01-15 22:49:58 +01:00
Tim-Philipp Müller
88ac735af3 matroskademux: don't leak TOC chapter list 2014-01-10 16:50:11 +00:00
Vincent Penquerc'h
f8158baa93 matroskamux: remove obsolete write-dummy-and-overwrite-on-eos code
The need for rewriting apparently is obsolete 0.10 leftover.
We now have caps for subtitles when we create the headers,
so we always write the correct data in the first place.
2014-01-10 08:54:04 +00:00
Vincent Penquerc'h
1c6ee3fba4 matroskamux: write subtitle codec ID and data at start when known
This avoids issues with writing dummy data first, then having
to come back and write correct data later. Doing so prevents
the muxed stream from being actually streamable.

https://bugzilla.gnome.org/show_bug.cgi?id=712134
2014-01-09 18:29:32 +00:00
Wim Taymans
7f8c4dceb4 Revert "matroskamux: Use the running time for container timestamps, not buffer timestamps"
This reverts commit b3aa8755fe.

We are already using the running-time because they were placed on the
buffers with gst_collect_pads_clip_running_time(). Arguably it would be
better to not modify the incomming buffers but collectpads seems to want
to use absolute timestamps from the buffers for finding the best buffer
(this can be changed with a custom compare function..).
2014-01-08 11:32:54 +01:00
Sebastian Dröge
2cddf3a0a9 matroskamux: Error out if ADPCM caps don't contain the layout field 2014-01-08 09:57:48 +01:00
Nicola Murino
bbb5a2853e matroskamux: Add support for g726 ADPCM
https://bugzilla.gnome.org/show_bug.cgi?id=720995
2014-01-08 09:57:48 +01:00
Sebastian Dröge
5506dc3076 matroskamux: Add HEVC / h265 support 2014-01-06 14:55:36 +01:00
Sebastian Dröge
77745289c4 matroskademux: Add HEVC / h265 support 2014-01-06 14:55:36 +01:00
Sebastian Dröge
a4a7dafc32 matroskamux: Add missing semicolon from last commit 2014-01-05 10:28:34 +01:00
Sebastian Dröge
b3aa8755fe matroskamux: Use the running time for container timestamps, not buffer timestamps
Buffer timestamps have no real meaning here, and for selecting the next
buffer we already use the running time anyway.
2014-01-05 10:23:44 +01:00
Nicola Murino
5b1108dd5f matroskamux: adpcm max block align is 8192 2013-12-24 10:00:16 +01:00
Sebastian Dröge
4baf8080f2 matroskamux: Use correct codec id for ADPCM/DVI 2013-12-23 15:46:48 +01:00
Sebastian Dröge
7cae8922cb matroskademux: Check for the correct size of codec_data in the ACM case 2013-12-23 15:46:43 +01:00
Nicola Murino
00ea1cb003 matroskamux: basic adpcm support
https://bugzilla.gnome.org/show_bug.cgi?id=664339
2013-12-23 15:31:04 +01:00
Sebastian Dröge
fb14f66696 matroska-demux: Allow a bit more variation when detecting common framerates
Instead of +/- 1ns we allow 2ns now. Due to rounding errors there are
some Matroska files out there with 33.333331ms per frame for 30fps.
2013-11-26 11:17:42 +01:00
Sebastian Dröge
20ad174679 matroska-demux: Use gst_util_double_to_fraction() instead of GValue magic 2013-11-26 10:21:04 +01:00
Mark Nauwelaerts
643e6fdc36 matroskamux: correctly handle negative relative timestamps
... rather than scaling these as unsigned.

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

Based on patch by Krzysztof Kotlenga <pocek@users.sf.net>
2013-11-23 12:25:05 +01:00
Thibault Saunier
6ff7522ba2 matroskademux: Use GstVideoInfo helper to create caps for raw video
This way we do not miss mandatory fields in caps.
At the same time use the gst_pb_utils_get_codec_description helper to
get codec description.

https://bugzilla.gnome.org/show_bug.cgi?id=712328
2013-11-22 18:52:54 -03:00
Tim-Philipp Müller
d9c2914c90 g_memmove() is deprecated
Just use plain memmove(), g_memmove() is deprecated in
recent GLib versions.

https://bugzilla.gnome.org/show_bug.cgi?id=712811
2013-11-21 15:30:34 +00:00
Per x Johansson
b3e0b1dbca matroskademux: Avoid division by zero assert in gst_matroska_demux_search_pos
https://bugzilla.gnome.org/show_bug.cgi?id=711829
2013-11-11 11:30:54 +01:00
Sebastian Dröge
4a8082856a matroska-demux: Fix compiler warning
matroska-demux.c: In function 'gst_matroska_demux_add_stream':
matroska-demux.c:1379:7: error: format '%u' expects argument of type 'unsigned int', but argument 4 has type 'guint64' [-Werror=format=]
       "%03u", context->uid);
       ^
2013-10-30 22:13:06 +01:00
Reynaldo H. Verdejo Pinochet
38c5e5efdc matroska: Trivial grammar fix on debug msg 2013-10-06 10:02:09 -07:00
Reynaldo H. Verdejo Pinochet
1cb31eeacc matroskamux: Add context flag for WebM
WebM has a couple of specific requirements we need to handle.
Idea is to set this flag once and just rely on mux->is_webm
at run time instead of repeatedly figuring this out from
GST_MATROSKA_DOCTYPE_WEBM (which requires a strcmp()).
2013-10-06 09:54:28 -07:00
Reynaldo H. Verdejo Pinochet
edeed575ae matroska: Do not write SegmentUID for WebM mux
WebM spec states SegmentUID is Unsupported. Files produced
with gstreamer without this change will spit an error like
this when passed to mkvalidator:

ERR201: Invalid 'SegmentUID' for profile 'webm' in Info at 192
2013-10-06 08:12:50 -07:00
Matej Knopp
cf12017ef8 matroskademux: make dvd palette change event sticky
So they don't get lost.

https://bugzilla.gnome.org/show_bug.cgi?id=709454
2013-10-05 10:55:03 +01:00
Ognyan Tonchev
30f62a2eec matroskademux: Fix memory leak
https://bugzilla.gnome.org/show_bug.cgi?id=709266
2013-10-02 16:17:33 +02:00
Matej Knopp
40c0586c17 matroskademux: move the check for subtitle buffer being null terminated before validating UTF-8
https://bugzilla.gnome.org/show_bug.cgi?id=707933
2013-09-27 14:38:19 +02:00
Matej Knopp
a1a493dae4 matroskademux: update stream->pos when sending buffers so that gap events are not sent unnecessarily
https://bugzilla.gnome.org/show_bug.cgi?id=708505
2013-09-24 15:12:44 -07:00
Sebastian Dröge
d8841b4832 matroska-demux: Make sure that subtitle buffers are \0-terminated
https://bugzilla.gnome.org/show_bug.cgi?id=707933
2013-09-20 10:22:40 +02:00
Seán de Búrca
9d3dbd6581 matroskademux: Fix off-by-one in validation of UTF-8
https://bugzilla.gnome.org/show_bug.cgi?id=707933
2013-09-12 09:19:15 +02:00
Thiago Santos
193ce9110e matroskademux: Preserve seqnum when pushing seek upstream
After converting a seek from time to bytes, use the same seqnum
on the event that goes upstream
2013-09-10 17:57:49 -03:00
Matej Knopp
a5ceab82dd matroskademux: fix leaking buffer and caps
https://bugzilla.gnome.org/show_bug.cgi?id=707688
2013-09-07 15:50:36 +01:00
Wim Taymans
2a8566ddec matroska-mux: remove framerate restriction
Remove the framerate restriction on the caps.
2013-08-27 15:25:16 +02:00
Sebastian Dröge
9863e08839 matroskademux: Don't print warnings during flushing and stop as soon as possible
https://bugzilla.gnome.org//show_bug.cgi?id=705442
2013-08-08 11:53:15 +02:00
Sebastian Dröge
2e35b36aab gst: Don't swap start/stop for negative rates in the SEGMENT query 2013-07-29 12:12:41 +02:00
Sebastian Dröge
722ef42196 matroskademux: Implement SEGMENT query 2013-07-29 10:53:54 +02:00
Matej Knopp
7335b81c47 matroskademux: fix memory leak in check_subtitle_buffer
https://bugzilla.gnome.org/show_bug.cgi?id=704921
2013-07-26 17:11:31 +02:00
Thiago Santos
8bd12e12b3 matroskademux: fix seqnum handling for seeks
Use the same seqnum as the seek for flushes/segments that are
caused by the seek. Also do the same for segment events

Fixes #676242
2013-07-25 15:24:31 -03:00
Sebastian Dröge
57dd1189d5 matroskademux: Add support for group-id in the stream-start event 2013-07-22 15:30:13 +02:00
Arnaud Vrac
6e26f1d067 mastrokademux: do not push discont buffers if they aren't discont
Unset the discont flag instead of posssibly pushing a buffer with
a flag that's still set.

https://bugzilla.gnome.org/show_bug.cgi?id=682110
2013-07-17 18:10:11 +01:00
Jonas Holmberg
beebe2b7af matroskademux: Unlock stream lock after use
Stream lock of sink pad was not unlocked after non-updating seek.
2013-07-09 11:25:14 +02:00
Sebastian Dröge
75b5a54f17 matroskademux: Add MPEG4 video profile/level to the caps 2013-07-01 11:01:13 +02:00
Sebastian Dröge
423bddac6a matroskademux: Add AAC profile/level to the caps
https://bugzilla.gnome.org/show_bug.cgi?id=703312
2013-07-01 11:01:13 +02:00
Sebastian Dröge
3c9aba91dc matroska: Add initial VP9 support 2013-06-21 18:22:13 +02:00
Bruno Gonzalez
e89a48616b matroskademux: Don't unlock stream lock without locking it first
https://bugzilla.gnome.org/show_bug.cgi?id=702167
2013-06-14 14:10:13 +02:00
Tim-Philipp Müller
213cd2777b matroskademux: mark subtitle streams as sparse in stream-start event
And also mark the streams that should be selected by default if
marked so in the headers.

https://bugzilla.gnome.org/show_bug.cgi?id=600648
2013-06-12 15:31:22 +01:00
Sebastian Dröge
e2b46a776f matroskademux: Send stream headers after the segment event
https://bugzilla.gnome.org/show_bug.cgi?id=700799
2013-06-11 13:54:53 +02:00
Sebastian Dröge
4fdbf88a65 matroskaparse: Make sure to send a segment event before dataflow 2013-05-14 13:52:18 +02:00
Ognyan Tonchev
0584d5c4c9 matroskademux: add stream-format=raw to aac caps
https://bugzilla.gnome.org/show_bug.cgi?id=699303
2013-05-01 15:47:15 +02:00
Sebastian Dröge
b0b0557c48 gst: Add better support for static plugins 2013-04-15 15:54:11 +02:00
Tim-Philipp Müller
078ff16abe matroskademux: fix some debug messages 2013-04-03 00:49:37 +01:00
Arnaud Vrac
00b46b4744 matroskademux: handle TrueHD audio codec id
https://bugzilla.gnome.org/show_bug.cgi?id=697113
2013-04-02 22:47:54 +01:00
David Schleef
53f8b05b08 Use %03u for format in gst_pad_create_stream_id_printf() 2013-03-25 18:57:08 -07:00