Commit graph

368 commits

Author SHA1 Message Date
Zaheer Abbas Merali
e49c31fd25 matroskamux: revert change that set a reserved flag on the Block.
So matroska's Block structure has no keyframe flag, only the SimpleBlock has it.
To detect keyframes in Blocks, it is just the BlockGroup container that needs
to have a ReferenceBlock attached if it is a delta frame in video.
2010-06-14 14:28:53 +01:00
Zaheer Abbas Merali
823a514161 matroskamux: some non-delta buffers were not marked as keyframes 2010-06-10 01:32:15 +02:00
Zaheer Abbas Merali
45f711044f matroskamux: change 2 second limit per cluster
Start cluster at every keyframe or when we would overflow the previous
cluster's relative timestamp field. This would avoid as much as possible
starting clusters at non-keyframes.
2010-06-10 01:32:15 +02:00
Zaheer Abbas Merali
f22c7d0f7c matroskamux: change indexed property to streamable
The property streamable has reverse semantics to indexed.
2010-06-09 15:42:19 +02:00
Philip Jägenstedt
21c84e23e8 matroskademux: refactor delta unit handling
This allows us to skip delta units earlier and is a bit clearer in my
opinion. It also makes only video buffers ever be delta units, not
just for SimpleBlock as before.
2010-06-06 15:38:00 +02:00
Philip Jägenstedt
b2ff8042d3 matroskademux: Ignore keyframe flag for non-video streams
When the keyframe bit of SimpleBlock Flags wasn't set, the buffer was being
marked with GST_BUFFER_FLAG_DELTA_UNIT, causing all buffers to be skipped
after a seek. This may be a problem with the Sorenson Squish encoder, but
arguably the keyframe bit should only be applied to video.

Fixes bug #620358.
2010-06-06 14:59:29 +02:00
Zaheer Abbas Merali
bfaeffcfd0 matroskamux: Remove more unneeded warnings 2010-06-01 16:56:32 +01:00
Zaheer Abbas Merali
7fc21317af matroskamux: remove unneeded warning 2010-06-01 16:54:03 +01:00
Zaheer Abbas Merali
d73cecd8c0 matroskamux: remove unneeded debug statement 2010-06-01 16:49:14 +01:00
Zaheer Abbas Merali
8c165b49a7 matroskamux: change is-live property to indexed 2010-06-01 16:43:04 +01:00
Zaheer Abbas Merali
3d876d2b16 matroska: use the uint64 scaling functions
In demuxer and muxer use the gst_util_uint64 scaling functions rather than
standard integer division. Add warnings (to be changed to debug) for debugging
the timestamp and duration.
2010-06-01 16:43:04 +01:00
Zaheer Abbas Merali
ec23b22d29 matroskamux: set delta unit on all buffers except cluster start ones 2010-06-01 16:43:04 +01:00
Zaheer Abbas Merali
d3daa12473 matroskamux: store caps and set on buffers rather than using pad caps 2010-06-01 16:43:03 +01:00
Zaheer Abbas Merali
b4e6fcd051 matroskamux: make sure pads caps are set before any buffers pushed. 2010-06-01 16:43:03 +01:00
Zaheer Abbas Merali
7c402d5866 matroskamux: add streamheaders 2010-06-01 16:43:03 +01:00
Zaheer Abbas Merali
d0bf310876 matroskamux: no need to set cache twice 2010-06-01 16:43:03 +01:00
Xavier Queralt
40eda471a1 Do not create a SeekHeader, Cues, .. when doing live 2010-06-01 16:43:03 +01:00
Xavier Queralt
032d9b90ff Add is-live property 2010-06-01 16:43:02 +01:00
Mark Nauwelaerts
44fa95d5cb matroskademux: improve reverse playback
Slightly modify approach to also handle cases where cue entries do not reliably
lead to initial keyframes.

Fixes #619817.
2010-06-01 15:56:34 +02:00
Mark Nauwelaerts
b8fd1a91f1 matroskamux: use write caching also when writing buffer data
Specifically, this reduces pushing several small buffers for each
data buffer and also avoids a seek for each buffer altogether
(though a seek is still needed for each cluster).

Fixes #619273.
2010-06-01 15:54:35 +02:00
Mark Nauwelaerts
81bf657aa7 matroskamux: fix ebml write caching with bytewriter implementation
Also cache a bit more during header writing.

Fixes #619273.
2010-06-01 15:53:43 +02:00
Mark Nauwelaerts
7895ddbc38 matroskamux: use consistent debug category name for ebmlwrite 2010-06-01 15:53:37 +02:00
Mark Nauwelaerts
085e333283 matroskademux: use bytereader based GstEbmlRead as a helper
... rather than basing on it by inheritance.
Also use more common code for push and pull mode.

Fixes #619198.
Fixes #611117.
2010-06-01 15:52:12 +02:00
Mark Nauwelaerts
973c8ddfdf matroskamux: _get_pad_template result needs no unref 2010-06-01 15:51:16 +02:00
Sebastian Dröge
0d5ae784b1 matroskademux: Don't compare running times with stream times when doing QoS 2010-06-01 11:21:30 +02:00
Philip Jägenstedt
596331c6f0 matroskademux: fix deadlock introduced by video keyframe QoS 2010-06-01 11:21:29 +02:00
Philip Jägenstedt
80926a5596 matroskademux: skip buffers before a late keyframe (QoS)
Before, vp8dec had no option but to decode all frames even if some/all
of them would be late. With this change, performance when keyframes are
frequent is helped a great deal. On my Thinkpad X60s, decoding a 20 s
1080p sunflower encode with keyframes every 10 frames went from taking
42 s with 5 frames shown to 21 s with 15 frames shown (still slow
enough to count by hand). When keyframes are more sparse, you will
still be able to catch up eventually, but the results won't be as
noticable.
2010-06-01 11:21:29 +02:00
Tim-Philipp Müller
97de4b217d Revert "matroska: add temporary webm typefinder"
This reverts commit d148ec0ad2.

We depend on -base git now, which has a webm typefinder in the usual
place.
2010-06-01 09:39:38 +01:00
Tim-Philipp Müller
d51576b14c Revert "avimux, flvmux, matroskamux: don't crash if tags arrive on multiple input pads at the same time"
This reverts commit 6a9983cd20.

Rely on locking done in GstTagSetter in core git.
2010-06-01 09:39:38 +01:00
Tim-Philipp Müller
a9c13cd4f7 docs: remove unnecessary videorate element from webmmux example pipeline 2010-05-28 15:14:32 +01:00
Tim-Philipp Müller
6a9983cd20 avimux, flvmux, matroskamux: don't crash if tags arrive on multiple input pads at the same time
This is a temporary fix for the release only.

Fixes #619533.
2010-05-26 00:05:54 +01:00
Tim-Philipp Müller
d148ec0ad2 matroska: add temporary webm typefinder
Add webm typefinder just for the release, so webm works for
people whose distros don't patch gst-plugins-base as well.
We'll remove this again after the release.
2010-05-25 15:40:01 +01:00
Tim-Philipp Müller
9bdfc7254a docs: add some pipeline examples to webmmux docs 2010-05-23 11:17:27 +01:00
Tim-Philipp Müller
a4fabfb959 matroska: fix up plugin and element descriptions a bit 2010-05-21 15:06:14 +01:00
Tim-Philipp Müller
0e12bf83a3 matroska: move webmmux into own source files
Makes things easier for gtk-doc.
2010-05-21 15:04:48 +01:00
Sebastian Dröge
82e4807d10 matroska: Remove the doctype enum, it's not needed anymore 2010-05-20 21:49:43 +02:00
Sebastian Dröge
6a25cd475c webmmux: Add new webmmux element that only supports muxing of WebM
...and remove the doctype property from matroskamux again.
2010-05-20 21:49:43 +02:00
Philip
9c59da8601 ebmlread: rm floatcast.h include (not used) 2010-05-19 20:38:50 +02:00
Philip Jägenstedt
cbde946768 matroskamux: bump default doctype version to 2
In this day and age this should be safe. There's otherwise a risk people
will be creating unneccessarily big WebM files as they can't use
SimpleBlock in v1.
2010-05-19 20:38:31 +02:00
Philip Jägenstedt
9610c7f354 matroska: handle matroska and webm doctype versions equally
The original plan was to let WebM v1 be the same as Matroska v2 (with
extra constraints), but for simplicity it was decided to handle the
versions equally, such that e.g. SimpleBlock is only allowed in WebM v2.
2010-05-19 20:38:16 +02:00
Philip Jägenstedt
081f2d00aa matroskademux: Verify lace size in _parse_blockgroup_or_simpleblock
Failure to do this for corrupt input can cause a subbuffer bigger
than the actual buffer to be created, quickly leading to segfault.
Test case:
bug_s222005751_r0.001____memcpy.webm
2010-05-19 20:35:52 +02:00
Philip Jägenstedt
c659c92091 ebml: crude hack to avoid crashing on unexpected metadata
The comment says this cannot happen, but it did and I don't know
why. This is not the correct fix, needs investigation. Test case:
bug_s555010094_r0.0005:0.008____IA__g_assertion_message_expr.webm
2010-05-19 20:35:28 +02:00
Philip Jägenstedt
9c1267b1a9 ebml: don't modify out str if returning an error in _read_ascii
This is a regression from ASCII validation changes. Test case:
bug_s66876390_r0.001____malloc_printerr.webm
2010-05-19 20:35:06 +02:00
Philip Jägenstedt
c712d28796 ebml: Validate 7-bit ASCII in gst_ebml_read_ascii
This was triggering an UTF-8 assertion in gst_caps_set_simple for
corrupt files with garbage as codec id. Test case:
gstreamer_error_trying_to_set_invalid_utf8_as_codec_id.webm

Old gst_ebml_read_ascii renamed to gst_ebml_read_string, also used by
gst_ebml_read_utf8. Unlike for UTF-8, failure to validate is an error,
as gst_ebml_read_ascii is used for reading doctype and codec id and we
might just as well give up early in those cases.
2010-05-19 20:33:38 +02:00
Philip Jägenstedt
d146971128 matroskademux: Ignore unexpected CodecState
Because GstMatroskaTrackContext *stream is set up in the first
SimpleBlock or Block, a rogue CodecState otherwise causes a segfault on
derefencing the NULL pointer. Test case:
bug_s5506167_r0.001____gst_matroska_demux_parse_blockgroup_or_simpleblock.webm
2010-05-19 20:33:35 +02:00
Philip Jägenstedt
9dc7889eea matroskademux: Add video/webm sink caps 2010-05-19 20:32:13 +02:00
Philip Jägenstedt
ad05dfc032 matroskamux: Use SimpleBlock for WebM when possible 2010-05-19 20:32:02 +02:00
Philip Jägenstedt
1daeb26df1 matroskademux: Support "webm" DocType 2010-05-19 20:31:36 +02:00
Philip Jägenstedt
3b4759de18 matroskamux: rename matroska_version to doctype_version 2010-05-19 20:29:19 +02:00
Philip Jägenstedt
27069088db matroskamux: Support "webm" DocType 2010-05-19 20:28:42 +02:00