Commit graph

9676 commits

Author SHA1 Message Date
Vincent Penquerc'h
f17f918b75 audiodecoder: accept dropped buffers before we know the format
This allows flacdec to not emit audio for headers, while allowing
the base audio decoder to keep its timestamps in sync.
2011-11-16 16:54:03 +00:00
Robert Swain
a23dff1fbb audio: Remove some unused variables 2011-11-14 12:49:50 +01:00
Olivier Crête
82827df405 rtcpbuffer: Add feedback message types from RFC 5104
These are Codec Control messages (CCM)

https://bugzilla.gnome.org/show_bug.cgi?id=658419
2011-11-14 12:24:16 +01:00
Mark Nauwelaerts
38615abdd8 audiodecoder: improve reverse playback
... by doing some more (reverse) timestamp interpolating and
refactoring downstream pushing.

Fixes #661983.
2011-11-14 12:00:06 +01:00
Tim-Philipp Müller
cd21e69913 audio: add GST_AUDIO_INFO_IS_VALID macro and use in audio decoder base class
API: GST_AUDIO_INFO_IS_VALID
2011-11-13 13:18:16 +00:00
Tim-Philipp Müller
12aab2cdcc tests: require Gtk+ 3.0 for examples and Gtk-based test apps
The Gtk+ dependency is entirely optional, we're just not
supporting Gtk+ 2.x any longer.
2011-11-12 15:51:52 +00:00
Tim-Philipp Müller
394b1f8c3c audio: fix order in LIBADD
Local libs must come first.
2011-11-12 12:13:05 +00:00
Tim-Philipp Müller
7b5e1666a4 playsinkconvertbin: fix visualisations again
Make caps writable before merging other caps into them.
2011-11-11 13:32:23 +00:00
Vincent Penquerc'h
0d47c615ad baseaudiosink: make unsigned properties unsigned, not signed 2011-11-10 15:55:31 +00:00
Tim-Philipp Müller
73be2b4b1a configure: suppress warnings about unused variables if debugging system is disabled in core
https://bugzilla.gnome.org/show_bug.cgi?id=662952
2011-11-09 00:36:51 +00:00
Vincent Penquerc'h
51426a3b2d textoverlay: continue processing text when silent
This prevents playback wegding when text buffers are
left to pile up.

https://bugzilla.gnome.org/show_bug.cgi?id=662829
2011-11-08 12:02:49 +00:00
Tim-Philipp Müller
a08f0c1a22 win32: update .def file for new audiosink API
API: gst_base_audio_sink_get_alignment_threshold()
API: gst_base_audio_sink_set_alignment_threshold()
API: gst_base_audio_sink_get_discont_wait()
API: gst_base_audio_sink_set_discont_wait()
2011-11-08 00:16:56 +00:00
Tim-Philipp Müller
c6c6c2e75e examples: sprinkle GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS in seek test utility
https://bugzilla.gnome.org/show_bug.cgi?id=630497
2011-11-07 23:41:33 +00:00
Tim-Philipp Müller
d7fc45f42e docs: fix up some Since: markers 2011-11-07 23:05:44 +00:00
Vincent Penquerc'h
5d3852d91a theoraenc: fix speed level failure test
It was testing the opposite of what it thought it was.

https://bugzilla.gnome.org/show_bug.cgi?id=663390
2011-11-07 12:27:16 +00:00
Vincent Penquerc'h
a81cb3ef7f theoraenc: make logically static const data just so
https://bugzilla.gnome.org/show_bug.cgi?id=663391
2011-11-07 12:27:15 +00:00
Vincent Penquerc'h
c1aab3e0a7 theoraenc: use th_packet_iskeyframe instead of peeking at bits
https://bugzilla.gnome.org/show_bug.cgi?id=663391
2011-11-07 12:27:14 +00:00
Vincent Penquerc'h
ffbe58fd5a theoraenc: trivial comment typos fixes
https://bugzilla.gnome.org/show_bug.cgi?id=663391
2011-11-07 12:27:13 +00:00
Vincent Penquerc'h
0c4ccb4f9c theoraenc: warn when trying to set an ignored obsolete property
https://bugzilla.gnome.org/show_bug.cgi?id=663391
2011-11-07 12:27:12 +00:00
Vincent Penquerc'h
10811d63f9 theoraenc: refuse to get to READY if the encoder was disabled
https://bugzilla.gnome.org/show_bug.cgi?id=663391
2011-11-07 12:27:11 +00:00
Vincent Penquerc'h
353153d079 oggdemux: survive skeleton finding length behind our backs in push mode
In push mode, we determine duration by doing a seek to the end of the
stream. However, a skeleton stream with an index will cause the duration
to be known already, and we end up never setting the push_time_duration
variable which we use to know duration has been determined.

https://bugzilla.gnome.org/show_bug.cgi?id=662049
2011-11-07 12:20:16 +00:00
Vincent Penquerc'h
e13ff2521c valgrind: add ALSA leaks fixed by snd_config_update_free_global
If they go when calling snd_config_update_free_global, they're
not really bug leaks, but more like intentional ones we don't
want to get told about.

https://bugzilla.gnome.org/show_bug.cgi?id=615342
2011-11-07 12:20:12 +00:00
Felipe Contreras
3df415d4c7 baseaudiosink: make discont-wait configurable
Now we can configure how much time to wait before deciding that a
discont has happened.

Also, adds getter and setter to allow derived implementations to set
this value upon construction.

Suggestions and several improvements by Havard Graff.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
2011-11-07 11:58:46 +01:00
Felipe Contreras
0a111bf26e baseaudiosink: delay the resyncing of timestamp vs ringbuffertime
A common problem for audio-playback is that the timestamps might not
be completely linear. This is specially common when doing streaming over
a network, where you can have jittery and/or bursty packettransmission,
which again will often be reflected on the buffertimestamps.

Now, the current implementation have a threshold that says how far the
buffertimestamp is allowed o drift from the ideal aligned time in the
ringbuffer. This was an instant reaction, and ment that if one buffer
arrived with a timestamp that would breach the drift-tolerance, a resync
would take place, and the result would be an audible gap for the
listener.

The annoying thing would be that in the case of a "timestamp-outlier",
you would first resync one way, say +100ms, and then, if the next
timestamp was "back on track", you would end up resyncing the other way
(-100ms) So in fact, when you had only one buffer with slightly off
timestamping, you would end up with *two* audible gaps. This is the
problem this patch addresses.

The way to "fix" this problem with the previous implementation, would
have been to increase the "drift-tolerance" to a value that was greater
than the largest timestamp-outlier one would normally expect.  The big
problem with this approach, however, is that it will allow normal
operations with a huge offset timestamp vs running-time, which is
detrimental to lip-sync. If the drift-tolerance is set to 200ms, it
basically means that lip-sync can easily end up being off by that much.

This patch will basically start a timer when the first breach of
drift-tolerance is detected. If any following timestamp for the next n
nanoseconds gets "back on track" within the threshold, it has basically
eliminated the effect of an outlier, and the timer is stopped.  If,
however, all timestamps within this time-limit are breaching the
threshold, we are probably facing a more permanent offset in the
timestamps, and a resync is allowed to happen.

So basically this patch offers something as rare as both higher
accuracy, it terms of allowing smaller drift-tolerances, as well as much
smoother, less glitchy playback!

Commit message and improvments by Havard Graff.

Fixes bug #640859.
2011-11-07 11:33:32 +01:00
Felipe Contreras
3f1395afae baseaudiosink: rename some variables 2011-11-07 11:18:34 +01:00
Felipe Contreras
fbde258be6 baseaudiosink: use gst_util_uint64_scale_int when appropriate
It's probably safer this way.
2011-11-07 11:11:08 +01:00
Felipe Contreras
369cf3f14a baseaudiosink: split drift-tolerance into alignment-threshold
So that drift-tolerance is used for clock slaving resync, and
alignment-threshold is for timestamp drift.
2011-11-07 11:10:05 +01:00
Felipe Contreras
58b9818853 baseaudiosink: trivial comment fixes
Some found by Havard Graff.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
2011-11-07 10:57:56 +01:00
Sebastian Dröge
7875ee11a5 subtitleoverlay: Use gst_caps_merge() instead of gst_caps_union()
This keeps the caps order and is more efficient.
2011-11-04 10:38:39 +01:00
Sebastian Dröge
6e9a302eca playsinkconvertbin: Use gst_caps_merge() instead of gst_caps_union()
This keeps the caps order and is more efficient.
2011-11-04 10:38:38 +01:00
Reynaldo H. Verdejo Pinochet
7559fb29a4 Add missing default include paths to androgenizer call
Fixes building tag/ with Android's NDK
2011-11-03 21:35:38 -03:00
Mart Raudsepp
5c58bcfd15 decodebin2: Post all source pads in stream-topology messages as "element-srcpad" values
This allows us to easily get ahold of all pads on a stream-topology message, including
pre-decoder ones, while "pad" only gives us access to the raw pads (as used by discoverer).
2011-11-03 14:41:08 +01:00
Mart Raudsepp
cee8710817 decodebin2: Use existing "caps" quark for one of the structure sets 2011-11-03 14:40:51 +01:00
Sebastian Dröge
b29a3d3cff playsinkconvertbin: Don't add identity multiple times 2011-11-03 10:07:27 +01:00
Vincent Penquerc'h
7eb8a9aaf6 playsink: send flush start/stop event when we switch elements
https://bugzilla.gnome.org/show_bug.cgi?id=661262
2011-11-03 10:05:44 +01:00
Vincent Penquerc'h
0cac680fac playsink: re-add identity where appropriate
https://bugzilla.gnome.org/show_bug.cgi?id=661262
2011-11-03 10:05:26 +01:00
Vincent Penquerc'h
c3e94d1c08 playsink: lock the new {set,get}_property functions
https://bugzilla.gnome.org/show_bug.cgi?id=661262
2011-11-03 10:04:07 +01:00
Thiago Santos
0a07701164 playsinkconvertbin: Be more consistent with ghostpad targets
Set up targets on READY->PAUSED state change to passthrough by
default. This prevents the targets from being unset on the
first run, while the 'raw' variable would mean that some
target is set.
2011-11-03 10:03:07 +01:00
Thiago Santos
f9ea3fdda8 playsinkconvertbin: No need to remove the identity
The identity element should be handled by the GstBin's cleanup,
removing it on the remove_elements function might remove it
too soon, as this function can be called directly from playsink
2011-11-03 10:02:58 +01:00
Thiago Santos
34f72da9cc playsinkconvertbin: Adding some debug messages
Adds a couple debug messages and some g_assert to make debugging
easier
2011-11-03 10:02:49 +01:00
Thiago Santos
80971a3b33 playsink-videoconvert: Fix warning on build
Remove unused variable
2011-11-03 10:02:39 +01:00
Vincent Penquerc'h
ae3ba53391 playsink: handle after-the-fact changes in converters/volume booleans
The playsink was nastily poking a boolean in the structure.
Make those booleans properties, so we are told when they change,
and rebuild the conversion bin when they do.

Some cleanup to go with it too.

https://bugzilla.gnome.org/show_bug.cgi?id=661262
2011-11-03 10:02:31 +01:00
Vincent Penquerc'h
c08a23169d playsink: handle NULL cached caps in getcaps
https://bugzilla.gnome.org/show_bug.cgi?id=661262
2011-11-03 10:02:01 +01:00
Vincent Penquerc'h
3939457b00 playsink: consider both passthrough and converter caps in getcaps
Since we can switch between both modes.

https://bugzilla.gnome.org/show_bug.cgi?id=661262
2011-11-03 10:01:52 +01:00
Vincent Penquerc'h
b34dac9a87 playsink: cache inner converter bin caps
https://bugzilla.gnome.org/show_bug.cgi?id=661262
2011-11-03 09:58:03 +01:00
Vincent Penquerc'h
6925c02bc2 playsink: keep both raw and non raw pipelines at all times
and switch between them as needed.

https://bugzilla.gnome.org/show_bug.cgi?id=661262
2011-11-03 09:57:46 +01:00
Vincent Penquerc'h
69d98d08c1 playsink: only compare against the media type we expect
ie, audio/x-raw- for audio, video/x-raw- for video.

Add a trailing - to be more specific. I doubt there's anything
like audio/x-rawhide or something, but you never know.

https://bugzilla.gnome.org/show_bug.cgi?id=661262
2011-11-03 09:57:32 +01:00
Vincent Penquerc'h
fd27e34582 playsink: refactor the converter bins since they are almost identical
https://bugzilla.gnome.org/show_bug.cgi?id=661262
2011-11-03 09:57:21 +01:00
Vincent Penquerc'h
c8e0d215cb playsink: fix passthrough mode (hopefully)
The code was doing counterintuitive rewiring of pads when the
bin did not contain any elements. We now add an identity element
in that case, which makes it simpler, and should fix the AC3
passthrough mode when using pulseaudio (but I don't see the bug
here so can't test).

https://bugzilla.gnome.org/show_bug.cgi?id=661262
2011-11-03 09:56:40 +01:00
Vincent Penquerc'h
2b84b328b1 playsink: handle NULL ghost pad target
For the src pad anyway.

https://bugzilla.gnome.org/show_bug.cgi?id=661262
2011-11-03 09:56:26 +01:00