Commit graph

507 commits

Author SHA1 Message Date
Vincent Penquerc'h
1dadc5eac1 ogg: get the operator precedence right, even if only a doc
https://bugzilla.gnome.org/show_bug.cgi?id=656775
2011-08-18 11:17:40 +02:00
Vincent Penquerc'h
cf370e0219 oggstream: vorbis has a preroll of 2
https://bugzilla.gnome.org/show_bug.cgi?id=656775
2011-08-18 11:17:28 +02:00
Vincent Penquerc'h
96e7bf53e9 oggstream: new convenience function to get a stream's media type
This will make logging a lot clearer, both in code and in output.

https://bugzilla.gnome.org/show_bug.cgi?id=656775
2011-08-18 11:17:15 +02:00
Vincent Penquerc'h
8304b7b40d ogg: move the "always flush page" to oggstream
It avoids checking for specific media types in the muxer.

https://bugzilla.gnome.org/show_bug.cgi?id=656775
2011-08-18 11:16:50 +02:00
Vincent Penquerc'h
fd8434fc74 oggmux: use oggstream to decide which BOS packets to place first
Ogg recommends video BOS packets to be first.
Use the "is_video" flag in oggstream to select those, rather than
check for known mime types.

https://bugzilla.gnome.org/show_bug.cgi?id=656775
2011-08-18 11:16:19 +02:00
Vincent Penquerc'h
5bbf7109ec ogg: rationalize serialno type to guint32
It is a 32 bit unsigned number.
Sure, the libogg API uses a long, but that's an unfortunate oversight.

https://bugzilla.gnome.org/show_bug.cgi?id=656775
2011-08-18 11:15:51 +02:00
Vincent Penquerc'h
684b90ba74 oggmux: factor the header packet creation code
https://bugzilla.gnome.org/show_bug.cgi?id=656775
2011-08-18 11:13:59 +02:00
Vincent Penquerc'h
3fe42b8e7e oggmux: headers should always have granpos 0
https://bugzilla.gnome.org/show_bug.cgi?id=656775
2011-08-18 11:13:47 +02:00
Jonathan Liu
8bd3bdaf37 oggstream: Fix crashes with 0-byte vorbis packets
Fixes bug #655574.
2011-08-03 10:18:29 +02:00
David Schleef
a5323107d4 oggmux: check for EOS on both current and best pad
Oops, need both.  Fixes #654270.
2011-07-09 18:33:38 -07:00
David Schleef
2fa9bf2be5 oggmux: check for EOS on current pad, not best
Fixes #654270.
2011-07-09 18:24:26 -07:00
David Schleef
ea0d666d11 oggmux: refactor how EOS is determined
This decreases the number of buffers held on each pad by one,
eliminating next_buffer.  Simplifies the logic by relying solely
on CollectPads to let us know when a pad is in EOS.  As a side
benefit, the collect pads related code is structured more like
other CollectPad users.

The previous code would occasionally mark the wrong pad as EOS,
causing the code to get in a state where all the streams were
finished, but EOS hadn't been sent to the source pad.
2011-06-10 23:54:07 -07:00
Mark Nauwelaerts
99944a5a81 oggmux: determine granulepos metadata using stream mapper whenever possible
... which unfortunately is not the case for all types, but at least so for
most common ones.
2011-06-06 13:02:49 +02:00
Mark Nauwelaerts
de1f593537 oggmux: convert incoming buffer timestamp to running time
... so all subsequent manipulation can take place in the proper timeline
without further ado.
2011-06-06 13:02:47 +02:00
Mark Nauwelaerts
2e7eddd35e oggmux: remove superfluous code
... since there is nothing in oggstream that cares (or even should)
about granulepos for what is being asked from it.
2011-06-06 13:02:43 +02:00
Vincent Penquerc'h
55e767b632 oggmux: prefer headers from caps to determine stream type
Ogg mandates the first header packet must determine a stream's type.
However, some streams (such as VP8) do not include such a header
when muxed in other containers, and thus do not include this header
as a buffer, but only in caps. We thus use headers from caps when
available to determine a new stream's type.

https://bugzilla.gnome.org/show_bug.cgi?id=647856
2011-04-16 11:55:27 +01:00
Tim-Philipp Müller
be59789664 ogg: fix unused-but-set-variable warnings with gcc 4.6
https://bugzilla.gnome.org/show_bug.cgi?id=647294
2011-04-13 23:57:56 +01:00
Tim-Philipp Müller
8f1d77bc3c oggmux: fix uninitialised variable usage and element leak
gcc on OSX complains about ret being used uninitialized in
this function, and it is right. Don't leak element ref
when returning early because newsegment event is not in
TIME format.
2011-04-12 12:41:06 +01:00
Alessandro Decina
030f639a8e android: make it ready for androgenizer
Remove the android/ top dir
Fixe the Makefile.am to be androgenized

To build gstreamer for android we are now using androgenizer which generates the
needed Android.mk files.
Androgenizer can be found here:
http://git.collabora.co.uk/?p=user/derek/androgenizer.git
2011-04-11 07:23:21 +02:00
Josep Torra
cd425d3787 oggmux: fix warning building in mac os x 2011-04-01 15:47:18 +02:00
Sebastian Dröge
1c475f10e1 oggmux: Store the segment directly inside the pad
Also initialize it always in TIME format. We require TIME segments
in oggmux anyway and drop newsegment events in other formats and
assume an open-ended segment starting at 0.
2011-04-01 11:00:38 +02:00
Sebastian Dröge
fc56c76773 oggmux: Reset the segment on flush-stop events and when going back to READY 2011-04-01 10:58:09 +02:00
Thiago Santos
d1c74779f9 oggmux: Use running time instead of timestamps
Theora and vorbis use running time (which is correct) for calculating
the granulepos for their ogg packets. Oggmux, however, used
timestamps to order the received buffers.

This patch makes it use the running time to compare buffer times
and also to timestamp pushed buffers.

Some bits of the code still use timestamps, but they are only
used to calculate durations, so it should be fine.

https://bugzilla.gnome.org/show_bug.cgi?id=643775
2011-04-01 10:56:16 +02:00
Thiago Santos
c3aae3dc17 oggmux: Keep track of pad's segments
https://bugzilla.gnome.org/show_bug.cgi?id=643775
2011-04-01 10:56:15 +02:00
Tim-Philipp Müller
5aa02968c9 oggparse: fix list iteration code
Not that it really matters, but let's fix it before someone
notices and makes fun of us.
2011-03-26 19:38:17 +00:00
Tim-Philipp Müller
a7a305a18f oggparse: make sure buffer metadata is writable before setting caps on buffers 2011-03-26 11:59:54 +00:00
Sebastian Dröge
a38fd9f9ec oggmux: Increase the seen header packets count when seeing a header packet
This fixes muxing of Speex content and possibly other formats where the
header detection works by counting the packets.

Fixes bug #644745.
2011-03-14 19:44:41 +01:00
Sebastian Dröge
461d9f2f2c oggmux: Don't handle GstCollectData as GstObject, use the pad instead 2011-02-24 16:22:53 +01:00
Edward Hervey
3fe2777b54 Revert "oggmux,adder: Check if collectpads has been freed"
This reverts commit 6d150873e8.

Depends on a core commit that was reverted.
2011-02-21 12:04:09 +01:00
David Schleef
6d150873e8 oggmux,adder: Check if collectpads has been freed
Core now calls release_pad in finalize, which is usually after
the collectpads has been unreffed.
2011-02-20 23:49:54 -08:00
David Schleef
15e23414d3 oggparse: better detection of delta unit flag 2011-02-17 18:29:56 -08:00
Vincent Penquerc'h
96a1a9dec6 oggmux: ensure serialnos are unique
We do that by checking a newly generated one is not already used in
an existing stream, and doing it again if it is.

https://bugzilla.gnome.org/show_bug.cgi?id=640211
2011-02-03 09:29:28 +00:00
Tim-Philipp Müller
54c19ba6de oggmux: free stream map caps when done 2011-02-02 17:34:42 +00:00
Tim-Philipp Müller
2eac43bd73 oggmux: keep IN_CAPS flag check for header buffers as fallback
In case the ogg mapper doesn't handle all the accepted input formats
(although it really should). Saves us error handling for that case
though. Also log caps properly.

https://bugzilla.gnome.org/show_bug.cgi?id=629196
2011-02-02 17:34:41 +00:00
Vincent Penquerc'h
440002a137 oggmux: use oggstream for less brittleness in recognizing headers
Using the IN_CAPS flag for this is brittle, and will fail if either
vorbisparse or vorbistag (which is itself based on vorbisparse) is
inserted between oggdemux and oggmux. Possibly other elements too
(eg, theoraparse, etc).
Using oggstream ensures we Get It Right More Often Than Not.

https://bugzilla.gnome.org/show_bug.cgi?id=629196
2011-02-02 17:34:41 +00:00
Vincent Penquerc'h
b7664eae71 oggmux: do not skip a pageno at start
Discontinuities are automatically signalled by oggdemux at the start
of a new stream. When oggmux is yet to output actual data pages,
do not signal these discontinuities in the ogg stream.

This patch may miss some actual discontinuities at the very start of
a stream, but avoids the spurious missing pages when encoding happens
normally.

A better fix might involve finding a way to distinguish between actual
data discontinuities and discontinuities merely marking the start of
a new stream.

Fixes an issue with ogg page numbering (would skip a number for no
reason, which then looks like a packet was lost somewhere) when
re-muxing an ogg stream, e.g. when re-tagging in rhythmbox.

https://bugzilla.gnome.org/show_bug.cgi?id=629196
2011-02-01 17:25:43 +00:00
Vincent Penquerc'h
d144f7a3a5 oggmux: cleanup
Remove a pointless string concatentation, and fix an off-by-one in
packetno in a log.

https://bugzilla.gnome.org/show_bug.cgi?id=640189
2011-01-24 20:01:24 +01:00
Sreerenj Balachandran
7cfa18545c oggdemux: Remove dead code 2011-01-24 19:40:00 +01:00
Yang Xichuan
cb9607632f oggparse: Make gst_ogg_parse_submit_buffer() safe
By not passing zero-sized buffers to ogg_sync_buffer()
and checking the return values of libogg functions.

Fixes bug #639136.
2011-01-24 19:39:59 +01:00
Yang Xichuan
43553b4dcb oggdemux: remove outdated comment
https://bugzilla.gnome.org/show_bug.cgi?id=639121
2011-01-10 12:34:54 +00:00
David Schleef
3c4466b816 oggdemux: ignore header pages when looking for keyframe
This was causing keyframe_granule to be set to 0 for all streams
when seeking to the beginning of the stream, i.e., at the
beginning of playback.  Fixes #619778.
2011-01-06 12:34:32 -08:00
Vincent Penquerc'h
b03b223fb1 oggstream: when the last keyframe position is not known, do not use -1
Instead, use either 0 or 1, depending on bitstream version, which give
the correct result for streams which aren't cut off at start.
This allows that function to not return negative granpos.

https://bugzilla.gnome.org/show_bug.cgi?id=638276
2011-01-06 12:34:32 -08:00
Tim-Philipp Müller
542256fd55 ogg: fix typo in comment 2010-12-29 11:51:42 +00:00
Vincent Penquerc'h
a5533c21d9 oggstream: fix interpretation of Theora granule position
The offset part of the granpos is not a sign of the newer encoding.
Use the version number instead.

This fixes the criticals thrown by theoraparse, and (at last) the
remaining part of #553244.
2010-12-29 12:40:25 +01:00
Wim Taymans
68e64770a0 oggdemux: handle pads that are not added yet
Don't try to stream data on pads that are not added yet. This happens while we
discover the different streams.
2010-12-28 19:39:18 +01:00
Vincent Penquerc'h
85cafac6af oggstream: implement tag extraction for Kate streams
This will mainly allow Totem to know the language of those streams,
so the subtitle selection menu gets properly filled out.

https://bugzilla.gnome.org/show_bug.cgi?id=638005
2010-12-27 10:53:24 +00:00
Vincent Penquerc'h
dd135119d9 oggdemux: set headers on caps
This will allow switching from one stream to another without having to send
the headers for the new stream again.

https://bugzilla.gnome.org/show_bug.cgi?id=637927
2010-12-25 16:55:15 +01:00
David Schleef
0c4820914c oggstream: Fix parsing of theora size 2010-12-22 15:30:36 -08:00
Vincent Penquerc'h
e443ae6000 oggdemux: Don't use gst_pad_alloc_buffer()
allocate buffers using gst_buffer_new_and_alloc() instead of
gst_pad_alloc_buffer_and_set_caps(), as the first one will
cause the pad to block, and we don't want that since that will
prevent subsequent pads from being fed if a block occurs at
start, when all pads must be fed for playback to start.

This fixes autoplugging of the tiger element and other things.

https://bugzilla.gnome.org/show_bug.cgi?id=637822
2010-12-22 20:19:15 +01:00
Vincent Penquerc'h
22aa87e98f ogg: implement packet duration query for kate streams
https://bugzilla.gnome.org/show_bug.cgi?id=637519
2010-12-18 20:33:09 +01:00