Commit graph

295 commits

Author SHA1 Message Date
Rob Clark
02cb1dd7b5 matroska-demux: add stream-format and alignment properties for h264 2010-12-23 16:12:51 -06:00
Sebastian Dröge
1d74f568a3 matroskademux: Don't use gst_pad_alloc_buffer()
Using this in a demuxer will cause deadlocks if there's
a pad with a pending pad-block downstream, no matter if
there is a queue between the pad or not. Queues pass
bufferalloc downstream from the same thread and only
act as a thread boundary for events and buffers.
2010-12-22 20:01:16 +01:00
Tim-Philipp Müller
d73440cb97 matroska-demux: put unrecognised RIFF format IDs into the unknown caps
Extra info can't hurt. Field names aren't necessarily consistent with
what's used elsewhere though (e.g. avidemux), but then neither are the
caps.

https://bugzilla.gnome.org/show_bug.cgi?id=623178
2010-12-11 14:53:28 +00:00
Mark Nauwelaerts
7be2ee8710 matroskademux: normalize empty Cues to no Cues
... to trigger indexless seeking.
2010-12-03 15:50:30 +01:00
Philip Jägenstedt
7fcd7d8cf2 matroskademux: Remove useless clearing of send_xiph_headers for Dirac
This looks like a mistake when copy-pasting the Theora code.

https://bugzilla.gnome.org/show_bug.cgi?id=632682
2010-10-23 16:10:14 +01:00
Philip Jägenstedt
6cf398cdf3 matroskademux: don't crash if vorbis/theora codec data is missing
Error out properly in this case instead of crashing.

https://bugzilla.gnome.org/show_bug.cgi?id=632682
2010-10-23 14:05:46 +01:00
Mark Nauwelaerts
4085f12058 ac3: demuxers provide framed output 2010-10-14 17:29:26 +02:00
Mark Nauwelaerts
bb9a8a9b7d matroskademux: only unref buffer when no longer needed for cluster scanning
Fixes #629047.
2010-10-05 16:03:10 +02:00
Mark Nauwelaerts
e0d11f0644 matroskademux: avoid infinite cluster scanning 2010-10-05 16:03:08 +02:00
Arun Raghavan
9e786de9c8 matroskademux: Use pbutils for H.264 profile/level extraction
The functions used to extract this data have been moved to gstpbutils to
facilitate reuse.

https://bugzilla.gnome.org/show_bug.cgi?id=617318
2010-10-01 16:58:46 +01:00
Mark Nauwelaerts
91a60245b7 matroskademux: QoS handling logic only applies to forward playback
Fixes #628894.
2010-09-08 17:51:34 +02:00
Mark Nauwelaerts
13b553bce7 matroskademux: attempt more resync upon (cluster) parse error
That is, if parse error occurs in state requiring to move to next cluster,
and doing so to the expected next position of cluster fails, then scan for a
next cluster from present position and resume from there.

Fixes #620790.
2010-09-06 14:45:40 +02:00
Mark Nauwelaerts
4d9c1e99f2 matroskademux: not so fatal error handling
If some bits out of place in block(group) parsing, forego and move to next.
Also skip large blocks in pull mode, but need to give up in push mode.

Fixes #626463.
Improves #620790.
2010-09-06 14:45:37 +02:00
Mark Nauwelaerts
680eb51b68 matroskademux: additional parse recovery
In particular, upon parse failure in one cluster, we may forego remaining
content and try resuming from next cluster onwards.

Fixes #620790.
2010-09-06 14:45:30 +02:00
Pavel Kostyuchenko
6940559c46 matroskademux: Relax parsing of date tags
Before we required a complete date in matroskademux but in
id3demux for example only the year or year and month was possible too.

Fixes bug #628454.
2010-09-04 14:52:11 +02:00
Sebastian Dröge
e8743b3789 matroskademux: Don't use GST_FLOW_IS_FATAL() 2010-09-04 14:52:09 +02:00
Mark Nauwelaerts
8419df627b matroskademux: proper handling of streaming upstream without duration
Fixes #625371.
2010-07-28 14:45:25 +02:00
Tim-Philipp Müller
a0de5e8a4f matroskademux: initialize some variables to fix compiler warnings on OSX build bot 2010-07-26 18:33:09 +02:00
Mark Nauwelaerts
c626e90fda matroskademux: pull mode non-cue seeking
That is, in files that have no index (Cue), perform seek by scanning for
nearest cluster with timecode before requested position.  Scanning is done
as a combination of interpolation and sequential scan.

Fixes #617368.
2010-07-22 12:18:14 +02:00
Mark Nauwelaerts
fd959ca77f matroskademux: add missing argument in debug message 2010-07-16 18:05:21 +02:00
Mark Nauwelaerts
39268f10d3 matroskademux: remove bogus UNLOCK 2010-07-16 14:00:40 +02:00
Mark Nauwelaerts
16b57b49c9 matroskademux: handle bogus files storing ADTS AAC data 2010-07-16 13:59:22 +02:00
Mark Nauwelaerts
18f37ffc9a matroskademux: do not error out on a block with unknown tracknumber 2010-07-16 13:58:39 +02:00
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
Sebastian Dröge
5ca96043ff matroskademux: Update duration if current buffer is already after the old duration 2009-12-09 16:46:18 +01:00
Sebastian Dröge
c9b1ab53fe matroskademux: Drop buffers that are after segment stop
...and if this happened for all streams go EOS.
2009-12-09 16:43:41 +01:00
Sebastian Dröge
276a61ab2a matroskademux: Fix position tracking and sending of filler segments 2009-12-09 16:41:04 +01:00
Sebastian Dröge
3ddb75e3c5 matroskademux: Keep the segment stop position for update newsegment events 2009-12-08 17:34:15 +01:00
Tim-Philipp Müller
d0b25845ec matroskademux: only send pending tags with newsegment events
Send pending tags only from the streaming thread, just after we've sent
the newsegment event, not with e.g. flush-start. This not only does the
right thing, but also makes sure we're not trampling over variables set
up in the streaming thread from the seeking thread in case someone tries
to issue a seek just as the demuxer is parsing the headers.

Fixes #601617. Spotted by Ognyan Tonchev.
2009-12-04 11:13:31 +00:00
Thiago Santos
959a3f9c95 matroskademux: Fix late tags finding
Use the correct taglist variable when notifying of late tags.
2009-10-14 11:33:24 -03:00
René Stadler
c40cb18762 matroskademux: fix strstr() usage on possibly unterminated string 2009-10-08 23:31:07 +03:00
Sebastian Dröge
650292706d matroskademux: Change one GST_WARNING to a GST_DEBUG 2009-10-03 12:21:34 +02:00
Mark Nauwelaerts
02581dd2a5 matroskademux: use proper order for no-more-pads and newsegment and tag sending 2009-09-23 17:24:22 +02:00
Mark Nauwelaerts
702df566c3 matroskademux: sprinkle a few branch prediction macros 2009-09-23 17:24:22 +02:00
David Schleef
55d2754098 Remove Ronald Bultje from Authors field
Replaced with "GStreamer maintainers
<gstreamer-devel@lists.sourceforge.net>" or just removed,
depending on the number of other authors.
2009-09-05 20:53:10 -07:00
Sebastian Dröge
b35b752c41 matroskademux: Correctly handle NULL GstIndex 2009-09-04 07:10:03 +02:00
Edward Hervey
d29ba8d48f matroska: remove dead assignments 2009-08-10 09:58:33 +02:00
Thiago Santos
08862850a7 matroska: Adds support to muxing/demuxing WMA
Adds support for muxing wma audio family and fixes
demuxing of wma family in matroskademux. matroskademux
was broken because it missed codec_data.
2009-08-09 20:34:05 -03:00
Vincent Penquerc'h
19b7001bf9 matroska: add kate subtitle support to matroska muxer and demuxer
See #525743.
2009-08-08 12:54:48 +01:00
Sebastian Dröge
b7bf2f6820 matroskademux: Answer SEEKING queries in the original format 2009-07-21 07:52:00 +02:00
Sebastian Dröge
bb03d8ff18 matroskademux: Implement SEEKING query 2009-07-20 16:52:19 +02:00
Wim Taymans
8a4dc37544 matroske: fix compiler error
change gpointer to guint8 * for codec_state and codec_priv as some
functions operate on those types and it avoids breaking strict-aliasing
rules.
2009-06-23 14:32:43 +02:00
Wim Taymans
9600c54938 matroskademux: avoid leaking buffers
Don't leak buffers when resyncing to a keyframe.
Avoid leaking buffers when exiting the loop on error conditions.
Add some more debug info.

Fixes #585911
2009-06-23 12:42:33 +02:00
Tim-Philipp Müller
323517f527 matroska-demux: post container-format tags 2009-06-22 10:49:01 +01:00
Sebastian Dröge
fc9779bd86 matroskademux: Fix leaking of the Matroska TITLE element 2009-06-17 07:14:09 +02:00
Sebastian Dröge
afbe123e33 matroskademux: Populate a GstIndex that is set on matroskademux 2009-05-22 19:41:59 +02:00
Jan Schmidt
66149475bd matroskademux: Recognise PGS subpicture streams - the bluray format.
Recognise and apply appropriate caps to PGS (Presentation Graphic Stream)
subpicture streams.
2009-05-21 21:23:49 +01:00
Sebastian Dröge
a1fe742e80 matroskademux: Only search for the index entry once 2009-05-11 18:21:13 +02:00
Sebastian Dröge
4cb39bc723 matroskademux: Use the first index entry if it's after the seek position 2009-05-11 18:18:36 +02:00
Sebastian Dröge
e4909b37eb matroskademux: Improve/optimize seeking
First of all a keyframe seek should be done to the
keyframe right before the requested position and not
to the keyframe that is nearest to the requested position.

Use per track index arrays and use our new binary search function
from core to speed up the search.
2009-05-11 15:36:46 +02:00
David Schleef
f01adcbc0f matroska: fix printf format to agree with argument 2009-05-09 10:50:45 -07:00