Commit graph

74 commits

Author SHA1 Message Date
René Stadler
15c6175044 pulsesrc: guard fragment size with a lower limit based on latency-time
In case that the pulse daemon runs the source device at a relatively low fixed
fragment size compared to the requested latency-time, configure the ring buffer
segsize to the largest integer multiple of the fragment size that is still
smaller than or equal to the requested latency-time.

Fixes bug #597463.
2009-10-06 20:54:20 +03:00
René Stadler
ccddf0643d pulse: rename pa_buffer_attr variables
Makes it much easier to see what is going on and is a lot less error prone.
2009-10-02 23:21:02 +03:00
Sebastian Dröge
317d6e18a2 pulsesrc: Don't dereference NULL pointers
pa_stream_get_timing_info() can return NULL.

Fixes bug #595220.
2009-09-15 10:05:51 +02:00
Wim Taymans
08808f7f32 pulsesrc: don't discard the result of _set_caps()
Use the result of gst_pad_set_caps() instead of assuming success.

See #590678
2009-08-24 16:22:47 +02:00
Wim Taymans
b32ef1d51e pulsesrc: set the default slave method to skew
Set the default slave method to the much better skew algorithm. This is the
default in the new base class but we override this here as well for the
upcomming release.
2009-08-06 13:03:13 +02:00
Tim-Philipp Müller
1425c46e20 pulsesrc: fix compilation with --disable-gst-debug 2009-08-06 10:21:38 +01:00
Jonathan Tellier
dbf4d8a910 pulsesrc: initialize the probe with the server
When creating a new probe, pass the server instead of the device string.

fixes #590401
2009-08-03 13:32:12 +02:00
Wim Taymans
9c341347ba pulse: conditionally compile newer stuff
configured_sink/source_usec in the timing_info is only since 0.9.11 so
conditionally compile this information.

fixes #590038
2009-07-29 12:13:20 +02:00
Wim Taymans
2d88251d9d pulsesrc: cleanups
Keep track of the paused state of the source and leave the read function when
paused.
don't wait for a latency update when the delay is not yet known but simply
return 0 instead of blocking.
Keep track of the corked state of the stream.
Fix the state changes.
2009-07-28 18:34:15 +02:00
Wim Taymans
19233e9671 pulsesrc: set maxlength always to -1 2009-07-28 18:34:15 +02:00
Wim Taymans
1a89388f97 pulsesrc; cleanups, report real latency
Add some more debug info
Avoid some type casts
Report the real latency to the application.
2009-07-28 18:34:15 +02:00
Wim Taymans
ce7a24cbd9 pulse: some more trivial cleanups 2009-06-29 15:39:43 +02:00
Jan Schmidt
0037635bf2 Rewrite the pulse plugin, conditionally enabling new behaviour with
newer pulseaudio.

Fixes: #567794

* Hook pulsesink's volume property up with the stream volume -- not the
  sink volume in PA.

* Read the device description directly from the sink instead of going
  via the mixer.

* Properly implement _reset() methods for both sink and source to avoid
  deadlocks when shutting down a pipeline.

* Replace all simple pa_threaded_mainloop_wait() by proper loops to
  guarantee that we wait for the right event in case multiple events are
  fired.  While this is not strictly necessary in many cases it
  certainly is more correct and makes me sleep better at night.

* Replace CHECK_DEAD_GOTO macros with proper functions

* Extend the number of supported channels to 32 since that is the actual
  limit in PA.

* Get rid of _dispose() methods since we don't need them.

* Increase the volume property upper limit of the sink to 1000.

* Reset function pointers after we disconnect a stream/context. Better
  fix for bug 556986.

* Reset the state of the element properly if open/prepare fails

* Cork the PA stream when the pipeline is paused. This allows the PA
* daemon to
  close audio device on pause and thus save a bit of power.

* Set PA stream properties based on GST tags such as GST_TAG_TITLE,
  GST_TAG_ARTIST, and so on.

Signed-off-by: Lennart Poettering <lennart@poettering.net>
2009-01-28 20:34:40 +00:00
Stefan Kost
9cf73bdd8f Update and add documentation for plugins with deps (ext).
Link to properties. Correct titles for examples. Document a few trivial cases. Keep lists in section file and docs/plugins/Makefile.am alphabetically ordered. Fix warnings that gtk-doc points out.
2009-01-28 18:05:09 +02:00
Wim Taymans
621dab2328 ext/pulse/: Return -1 instead of 0 in error cases. Fixes #554771.
Original commit message from CVS:
* ext/pulse/pulsesink.c: (gst_pulsesink_write):
* ext/pulse/pulsesrc.c: (gst_pulsesrc_read):
Return -1 instead of 0 in error cases. Fixes #554771.
2008-10-03 16:13:32 +00:00
Sebastian Dröge
95d4239819 ext/pulse/: Use GST_BOILERPLATE everywhere and fix coding style at some places.
Original commit message from CVS:
* ext/pulse/pulsemixer.c: (gst_pulsemixer_class_init),
(gst_pulsemixer_set_property), (gst_pulsemixer_get_property):
* ext/pulse/pulsemixerctrl.c: (gst_pulsemixer_ctrl_subscribe_cb),
(gst_pulsemixer_ctrl_open), (gst_pulsemixer_ctrl_timeout_event),
(gst_pulsemixer_ctrl_set_volume):
* ext/pulse/pulsemixertrack.c: (gst_pulsemixer_track_new):
* ext/pulse/pulseprobe.c: (gst_pulseprobe_open):
* ext/pulse/pulsesink.c: (gst_pulsesink_class_init),
(gst_pulsesink_init), (gst_pulsesink_open),
(gst_pulsesink_prepare), (gst_pulsesink_write),
(gst_pulsesink_delay), (gst_pulsesink_reset):
* ext/pulse/pulsesrc.c: (gst_pulsesrc_class_init),
(gst_pulsesrc_init):
Use GST_BOILERPLATE everywhere and fix coding style at some places.
Fix a locking issue in pulsesink's prepare function.
* ext/pulse/pulseutil.c: (gst_pulse_channel_map_to_gst):
Check if the created channel layout is valid for GStreamer.
2008-08-20 17:46:48 +00:00
Sebastian Dröge
4ab89b397e ext/pulse/: If downstream provides no channel layout and >2 channels should be used use the default layout that pulse...
Original commit message from CVS:
* ext/pulse/pulsesrc.c: (gst_pulsesrc_class_init),
(gst_pulsesrc_create_stream), (gst_pulsesrc_negotiate),
(gst_pulsesrc_prepare):
* ext/pulse/pulseutil.c: (gst_pulse_gst_to_channel_map),
(gst_pulse_channel_map_to_gst):
* ext/pulse/pulseutil.h:
If downstream provides no channel layout and >2 channels should be
used use the default layout that pulseaudio chooses and also
add this layout to the caps. Fixes bug #547258.
2008-08-20 17:17:55 +00:00
Sebastian Dröge
cfc5ea685a ext/pulse/: The bytes_per_sample and silence_sample fields of the GstRingBufferSpec are already filled with the corre...
Original commit message from CVS:
* ext/pulse/pulsesink.c: (gst_pulsesink_prepare):
* ext/pulse/pulsesrc.c: (gst_pulsesrc_prepare):
The bytes_per_sample and silence_sample fields of the GstRingBufferSpec
are already filled with the correct values by
gst_ring_buffer_parse_caps() so there's no need to set them again
with wrong values.
2008-08-18 15:05:32 +00:00
Laszlo Pandy
97bc37b5b6 ext/pulse/pulsesrc.c: Add "device-name" property, which provides a human readable string for the audio device, to mak...
Original commit message from CVS:
Patch by: Laszlo Pandy <laszlok2 at gmail dot com>
* ext/pulse/pulsesrc.c: (gst_pulsesrc_class_init),
(gst_pulsesrc_get_property):
Add "device-name" property, which provides a human readable string
for the audio device, to make it more consisten with other audio
sources. Fixes bug #547519.
2008-08-13 12:37:26 +00:00
Sebastian Dröge
9e572ebf00 ext/pulse/: Improve debugging a bit by including the parent object in pulsemixerctrl and pulseprobe objects and using...
Original commit message from CVS:
* ext/pulse/pulsemixer.c: (gst_pulsemixer_change_state):
* ext/pulse/pulsemixerctrl.c: (gst_pulsemixer_ctrl_subscribe_cb),
(gst_pulsemixer_ctrl_open), (gst_pulsemixer_ctrl_new),
(gst_pulsemixer_ctrl_free), (gst_pulsemixer_ctrl_timeout_event):
* ext/pulse/pulsemixerctrl.h:
* ext/pulse/pulseprobe.c: (gst_pulseprobe_open),
(gst_pulseprobe_enumerate), (gst_pulseprobe_new),
(gst_pulseprobe_free), (gst_pulseprobe_needs_probe),
(gst_pulseprobe_probe_property), (gst_pulseprobe_get_values):
* ext/pulse/pulseprobe.h:
* ext/pulse/pulsesink.c: (gst_pulsesink_init):
* ext/pulse/pulsesrc.c: (gst_pulsesrc_init), (gst_pulsesrc_delay),
(gst_pulsesrc_change_state):
Improve debugging a bit by including the parent object in pulsemixerctrl
and pulseprobe objects and using GST_WARNING_OBJECT instead of
GST_WARNING.
Use the parent GObject subclass instead of a random struct as GObject
parameter for G_OBJECT_WARN_INVALID_PROPERTY_ID. This fixes a crash
when probing for another property than "device".
2008-08-13 12:34:13 +00:00
Laszlo Pandy
397da5daf0 ext/pulse/: Implement GstPropertyProbe interface on pulsesink for detecting sink devices and on pulsesrc for detectin...
Original commit message from CVS:
Patch by: Laszlo Pandy <laszlok2 at gmail dot com>
* ext/pulse/pulsesink.c: (gst_pulsesink_interface_supported),
(gst_pulsesink_implements_interface_init),
(gst_pulsesink_init_interfaces), (gst_pulsesink_init),
(gst_pulsesink_finalize), (gst_pulsesink_set_property),
(gst_pulsesink_get_type):
* ext/pulse/pulsesink.h:
* ext/pulse/pulsesrc.c: (gst_pulsesrc_interface_supported),
(gst_pulsesrc_init_interfaces), (gst_pulsesrc_init),
(gst_pulsesrc_finalize), (gst_pulsesrc_set_property):
* ext/pulse/pulsesrc.h:
Implement GstPropertyProbe interface on pulsesink for detecting
sink devices and on pulsesrc for detecting source devices.
Fixes bugs #547227 and #547217.
2008-08-13 12:01:01 +00:00
Sebastian Dröge
74e9eb72c5 ext/pulse/: Some smaller cleanup. Use G_PARAM_STATIC_STRINGS, gst_element_class_set_details_simple() and fix coding s...
Original commit message from CVS:
* ext/pulse/pulsemixer.c: (gst_pulsemixer_base_init),
(gst_pulsemixer_class_init):
* ext/pulse/pulsesink.c: (gst_pulsesink_base_init),
(gst_pulsesink_class_init), (gst_pulsesink_prepare):
* ext/pulse/pulsesrc.c: (gst_pulsesrc_interface_supported),
(gst_pulsesrc_base_init), (gst_pulsesrc_class_init),
(gst_pulsesrc_prepare):
Some smaller cleanup. Use G_PARAM_STATIC_STRINGS,
gst_element_class_set_details_simple() and fix coding style a bit
more.
2008-06-10 08:59:17 +00:00
Sebastian Dröge
7390985262 Add documentation to the pulseaudio plugin and run make update in docs/plugins.
Original commit message from CVS:
* docs/plugins/Makefile.am:
* docs/plugins/gst-plugins-good-plugins-docs.sgml:
* docs/plugins/gst-plugins-good-plugins-sections.txt:
* docs/plugins/gst-plugins-good-plugins.args:
* docs/plugins/gst-plugins-good-plugins.hierarchy:
* docs/plugins/gst-plugins-good-plugins.interfaces:
* docs/plugins/gst-plugins-good-plugins.prerequisites:
* docs/plugins/inspect/plugin-aasink.xml:
* docs/plugins/inspect/plugin-alaw.xml:
* docs/plugins/inspect/plugin-alpha.xml:
* docs/plugins/inspect/plugin-alphacolor.xml:
* docs/plugins/inspect/plugin-annodex.xml:
* docs/plugins/inspect/plugin-apetag.xml:
* docs/plugins/inspect/plugin-audiofx.xml:
* docs/plugins/inspect/plugin-auparse.xml:
* docs/plugins/inspect/plugin-autodetect.xml:
* docs/plugins/inspect/plugin-avi.xml:
* docs/plugins/inspect/plugin-cacasink.xml:
* docs/plugins/inspect/plugin-cairo.xml:
* docs/plugins/inspect/plugin-cdio.xml:
* docs/plugins/inspect/plugin-cutter.xml:
* docs/plugins/inspect/plugin-debug.xml:
* docs/plugins/inspect/plugin-dv.xml:
* docs/plugins/inspect/plugin-efence.xml:
* docs/plugins/inspect/plugin-effectv.xml:
* docs/plugins/inspect/plugin-equalizer.xml:
* docs/plugins/inspect/plugin-esdsink.xml:
* docs/plugins/inspect/plugin-flac.xml:
* docs/plugins/inspect/plugin-flxdec.xml:
* docs/plugins/inspect/plugin-gamma.xml:
* docs/plugins/inspect/plugin-gconfelements.xml:
* docs/plugins/inspect/plugin-gdkpixbuf.xml:
* docs/plugins/inspect/plugin-goom.xml:
* docs/plugins/inspect/plugin-goom2k1.xml:
* docs/plugins/inspect/plugin-halelements.xml:
* docs/plugins/inspect/plugin-icydemux.xml:
* docs/plugins/inspect/plugin-id3demux.xml:
* docs/plugins/inspect/plugin-jpeg.xml:
* docs/plugins/inspect/plugin-level.xml:
* docs/plugins/inspect/plugin-matroska.xml:
* docs/plugins/inspect/plugin-monoscope.xml:
* docs/plugins/inspect/plugin-mulaw.xml:
* docs/plugins/inspect/plugin-multifile.xml:
* docs/plugins/inspect/plugin-multipart.xml:
* docs/plugins/inspect/plugin-navigationtest.xml:
* docs/plugins/inspect/plugin-ossaudio.xml:
* docs/plugins/inspect/plugin-png.xml:
* docs/plugins/inspect/plugin-pulseaudio.xml:
* docs/plugins/inspect/plugin-quicktime.xml:
* docs/plugins/inspect/plugin-rtp.xml:
* docs/plugins/inspect/plugin-rtsp.xml:
* docs/plugins/inspect/plugin-smpte.xml:
* docs/plugins/inspect/plugin-soup.xml:
* docs/plugins/inspect/plugin-spectrum.xml:
* docs/plugins/inspect/plugin-speex.xml:
* docs/plugins/inspect/plugin-taglib.xml:
* docs/plugins/inspect/plugin-udp.xml:
* docs/plugins/inspect/plugin-video4linux2.xml:
* docs/plugins/inspect/plugin-videobalance.xml:
* docs/plugins/inspect/plugin-videobox.xml:
* docs/plugins/inspect/plugin-videocrop.xml:
* docs/plugins/inspect/plugin-videoflip.xml:
* docs/plugins/inspect/plugin-videomixer.xml:
* docs/plugins/inspect/plugin-wavenc.xml:
* docs/plugins/inspect/plugin-wavpack.xml:
* docs/plugins/inspect/plugin-wavparse.xml:
* docs/plugins/inspect/plugin-ximagesrc.xml:
* ext/pulse/plugin.c:
* ext/pulse/pulsemixer.c:
* ext/pulse/pulsesink.c:
* ext/pulse/pulsesrc.c:
Add documentation to the pulseaudio plugin and run make update
in docs/plugins.
2008-06-10 08:22:17 +00:00
Sebastian Dröge
f3b03cd773 Add pulseaudio GStreamer element from gst-pulse. Development will continue here instead of pulseaudio SVN. Fixes bug ...
Original commit message from CVS:
* configure.ac:
* ext/pulse/Makefile.am:
* ext/pulse/plugin.c: (plugin_init):
* ext/pulse/pulsemixer.c: (gst_pulsemixer_interface_supported),
(gst_pulsemixer_implements_interface_init),
(gst_pulsemixer_init_interfaces), (gst_pulsemixer_base_init),
(gst_pulsemixer_class_init), (gst_pulsemixer_init),
(gst_pulsemixer_finalize), (gst_pulsemixer_set_property),
(gst_pulsemixer_get_property), (gst_pulsemixer_change_state):
* ext/pulse/pulsemixer.h:
* ext/pulse/pulsemixerctrl.c:
(gst_pulsemixer_ctrl_context_state_cb),
(gst_pulsemixer_ctrl_sink_info_cb),
(gst_pulsemixer_ctrl_source_info_cb),
(gst_pulsemixer_ctrl_subscribe_cb),
(gst_pulsemixer_ctrl_success_cb), (gst_pulsemixer_ctrl_open),
(gst_pulsemixer_ctrl_close), (gst_pulsemixer_ctrl_new),
(gst_pulsemixer_ctrl_free), (gst_pulsemixer_ctrl_list_tracks),
(gst_pulsemixer_ctrl_timeout_event), (restart_time_event),
(gst_pulsemixer_ctrl_set_volume), (gst_pulsemixer_ctrl_get_volume),
(gst_pulsemixer_ctrl_set_record), (gst_pulsemixer_ctrl_set_mute):
* ext/pulse/pulsemixerctrl.h:
* ext/pulse/pulsemixertrack.c: (gst_pulsemixer_track_class_init),
(gst_pulsemixer_track_init), (gst_pulsemixer_track_new):
* ext/pulse/pulsemixertrack.h:
* ext/pulse/pulseprobe.c: (gst_pulseprobe_context_state_cb),
(gst_pulseprobe_sink_info_cb), (gst_pulseprobe_source_info_cb),
(gst_pulseprobe_invalidate), (gst_pulseprobe_open),
(gst_pulseprobe_enumerate), (gst_pulseprobe_close),
(gst_pulseprobe_new), (gst_pulseprobe_free),
(gst_pulseprobe_get_properties), (gst_pulseprobe_needs_probe),
(gst_pulseprobe_probe_property), (gst_pulseprobe_get_values),
(gst_pulseprobe_set_server):
* ext/pulse/pulseprobe.h:
* ext/pulse/pulsesink.c: (gst_pulsesink_base_init),
(gst_pulsesink_class_init), (gst_pulsesink_init),
(gst_pulsesink_destroy_stream), (gst_pulsesink_destroy_context),
(gst_pulsesink_finalize), (gst_pulsesink_dispose),
(gst_pulsesink_set_property), (gst_pulsesink_get_property),
(gst_pulsesink_context_state_cb), (gst_pulsesink_stream_state_cb),
(gst_pulsesink_stream_request_cb),
(gst_pulsesink_stream_latency_update_cb), (gst_pulsesink_open),
(gst_pulsesink_close), (gst_pulsesink_prepare),
(gst_pulsesink_unprepare), (gst_pulsesink_write),
(gst_pulsesink_delay), (gst_pulsesink_success_cb),
(gst_pulsesink_reset), (gst_pulsesink_change_title),
(gst_pulsesink_event), (gst_pulsesink_get_type):
* ext/pulse/pulsesink.h:
* ext/pulse/pulsesrc.c: (gst_pulsesrc_interface_supported),
(gst_pulsesrc_implements_interface_init),
(gst_pulsesrc_init_interfaces), (gst_pulsesrc_base_init),
(gst_pulsesrc_class_init), (gst_pulsesrc_init),
(gst_pulsesrc_destroy_stream), (gst_pulsesrc_destroy_context),
(gst_pulsesrc_finalize), (gst_pulsesrc_dispose),
(gst_pulsesrc_set_property), (gst_pulsesrc_get_property),
(gst_pulsesrc_context_state_cb), (gst_pulsesrc_stream_state_cb),
(gst_pulsesrc_stream_request_cb), (gst_pulsesrc_open),
(gst_pulsesrc_close), (gst_pulsesrc_prepare),
(gst_pulsesrc_unprepare), (gst_pulsesrc_read),
(gst_pulsesrc_delay), (gst_pulsesrc_change_state),
(gst_pulsesrc_get_type):
* ext/pulse/pulsesrc.h:
* ext/pulse/pulseutil.c: (gst_pulse_fill_sample_spec),
(gst_pulse_client_name), (gst_pulse_gst_to_channel_map):
* ext/pulse/pulseutil.h:
Add pulseaudio GStreamer element from gst-pulse. Development will
continue here instead of pulseaudio SVN. Fixes bug #400679.
Only changes over gst-pulse SVN are added copyright to the top of
files and coding style changes.
2008-06-10 06:45:33 +00:00