Commit graph

222 commits

Author SHA1 Message Date
Sebastian Dröge
968ce701a7 matroskademux: Fix an uninitialized variable compiler warning 2010-06-17 10:44:33 +02:00
Sebastian Dröge
e4a5f0911e matroskademux: Fix possible NULL pointer dereference and assertion that could be caused by invalid files 2010-06-16 20:02:58 +02:00
Sebastian Dröge
20b9022289 matroskademux: Clean up/fix some minor error handling bugs 2010-06-16 19:50:34 +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
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
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
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
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
a4fabfb959 matroska: fix up plugin and element descriptions a bit 2010-05-21 15:06:14 +01:00
Sebastian Dröge
82e4807d10 matroska: Remove the doctype enum, it's not needed anymore 2010-05-20 21:49:43 +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
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
1daeb26df1 matroskademux: Support "webm" DocType 2010-05-19 20:31:36 +02:00
Sebastian Dröge
e5e90f6035 matroskamux: Add support for On2 VP8
...matroskademux automatically supports it through libgstriff.
2010-05-17 17:18:24 +02:00
Sebastian Dröge
1e1cf5df70 matroskademux: Set interlaced flag in the caps if the flag is set in the Matroska file 2010-05-01 14:15:49 +02:00
Tim-Philipp Müller
fa4b2938bc matroska: init variable to avoid compiler warning on OSX
Fixes (bogus) "'offset' may be used uninitialized in this function"
warning on build bot (also spotted by philn).
2010-05-01 11:15:04 +01:00
Mark Nauwelaerts
a6bb8338fd matroskademux: implement push mode seeking 2010-04-30 13:49:39 +02:00
Tim-Philipp Müller
a155deaabf matroskademux, qtdemux: minor code cleanup in avc_level_idc_to_string()
Do the same with slightly fewer LOC.
2010-04-12 15:10:11 +01:00
Mark Nauwelaerts
dc09ace2bd matroskademux: restrict resyncing to subtitle tracks
This should prevent skipping audio or video in not so well interleaved
cases.

Fixes #614460.
2010-04-07 12:40:13 +02:00
Arun Raghavan
95c6d558f0 matroska: Export h.264 profile and level in caps
This replicates the code in qtdemux to export the h.264 profile and
level in the stream caps.

https://bugzilla.gnome.org/show_bug.cgi?id=614651
2010-04-02 18:51:34 +02:00
Mark Nauwelaerts
b9f569bfd0 matroskademux: push correctly sized flac header buffers
Fixes #614353.
2010-03-30 16:51:36 +02:00
Mark Nauwelaerts
b1f3e4d0cf matroskademux: only seek when in proper state
... and data structures can be thread-safely accessed.

See #601617.
2010-03-26 11:45:47 +01:00
Mark Nauwelaerts
9157c262ba matroskademux: support (pull mode) negative seek rate 2010-03-26 11:45:41 +01:00
Mark Nauwelaerts
95e38e59a2 matroskademux: track clip duration in segment 2010-03-26 11:45:39 +01:00
Mark Nauwelaerts
6ccffcf5f1 matroskademux: prefer index of video track to perform seeking 2010-03-26 11:45:36 +01:00
Benjamin Otte
3f511ec361 Add -Wwrite-strings to the configure flags
... and fix all warnings
2010-03-21 14:17:47 +01:00
Benjamin Otte
3342b1679e Add -Wmissing-declarations -Wmissing-prototypes warning flags
And fix all the warnings.
2010-03-17 18:23:28 +01:00
Edward Hervey
869ff4263f matroskademux: Make sure we don't send invalid newsegments
Fixes #611501
2010-03-02 21:20:45 +01:00
Edward Hervey
be186bd089 matroskademux: Mark streams as being EOS at the right time.
This allows us to stop streaming only when all streams have gone past the
segment.stop and not before.

Fixes #611501
2010-03-02 21:20:31 +01:00
Sebastian Dröge
ad71d43f52 matroskademux: Advance sparse streams only as much as required to keep the gap smaller than 500ms
Changing it to the newest timestamp that was ever pushed will
increase the segment start in 500ms jumps, which could be just
after the next sparse stream buffer. E.g.

Video at 1.0s, sparse stream at 0.5s would jump the
sparse stream to 1.0s. Now a new sparse stream buffer could
appear that has a timestamp of 0.9s and this would be
dropped for no good reason because of bad luck.
2010-02-27 12:20:06 +01:00
Brian Cameron
a45b351ddf matroska: fix GST_ELEMENT_ERROR usage
Fixes #610053.
2010-02-16 01:40:19 +00:00
Tim-Philipp Müller
0233257612 matroska: fix printf format string 2010-02-15 10:33:02 +00:00
Mark Nauwelaerts
f0d6b841a2 matroskademux: improve stream synchronization
In particular, do not make it send newsegment updates that
sort-of contradict the indented playback segment (e.g. start time).
2010-02-02 16:54:05 +01:00
Mark Nauwelaerts
b527360f21 matroskademux: fix bridging (time) gaps in streams
As a side effect, avoid sending newsegment updates with start times
that go back and forth, which leads to bogus downstream running_time.

Also fixes seeking in bug #606744.
2010-02-02 16:53:56 +01:00
Mark Nauwelaerts
9bec2b1127 matroskademux: fix stream synchronization
.. by initializing streams starting at 0, as that is basically
where we 'seek to' at the start and assume streams to start elsewhere.
Also enables newsegment update events for subtitle streams.
2010-02-02 16:53:51 +01:00
Mark Nauwelaerts
891ca1f4d3 matroskademux: polish last buffer end time usage
That is, reset it upon seek, and note that (rarely) last pushed buffer
time might precede segment start.
2010-01-14 18:19:25 +01:00
Mark Nauwelaerts
59224d77f8 matroskademux: refactor eos sending when pausing loop
Also, prevent hanging if no pads yet on which to send eos by
posting a message instead.
2010-01-11 21:15:47 +01:00
Mark Nauwelaerts
ae515fead4 matroskademux: standardize seek handling
... which implies fixing some corner cases.
2010-01-11 21:15:46 +01:00
Edward Hervey
188725811f matroska: Fix unitialized variable.
Yes, it's stupid, but macosx compilers are even more stupid.
2009-12-18 12:46:06 +01:00
Mark Nauwelaerts
c9a0d2339e matroskademux: also consider BlockNumber indicated in index when seeking 2009-12-16 12:48:02 +01:00
Mark Nauwelaerts
900ff7247e matroskademux: support push based mode
Fixes #598610.
2009-12-16 12:46:40 +01:00
Tim-Philipp Müller
b66f914586 matroska: fix language code writing and extraction
Matroska uses three-letter ISO 639-2B codes, but GST_TAG_LANGUAGE is
supposed to contain two-letter ISO 639-1 codes, so use new language
code mapping functions in -base to convert between those two as
needed.

Fixes #505823.
2009-12-13 12:51:13 +00:00
Sebastian Dröge
cd888c0531 matroskademux: Clean up position/duration handling
Also use the last end time for closing the segment, not the
start time of the last buffer.
2009-12-09 20:42:44 +01:00
Sebastian Dröge
0766a54138 matroskademux: Close the segment on EOS if the real duration is known 2009-12-09 16:50:02 +01:00