Heya! I just rolled a tarball for a testing release of what is supposed to become the official 0.9.15 release: http://0pointer.de/public/pulseaudio-0.9.15-test1.tar.gz I'd be very thankful for bug reports about this release. Colin Guthrie already pointed out that module-positional-event-sounds is completely borked. So, while testing make sure not to load it otherwise volumes of all your streams might start moving in strangest ways as if controlled by some ghost. It is loaded by default though, hence you need to manually disable it. There are a lot of changes in this release. For the full shortlog see below. Biggest visible changes are the flat volume stuff that's based on Marc-Andre's contributions, Colin's Airport Express work, and the ability to switch output profiles on-the-fly (i.e switch between Analog Stereo/Analog 5.1/SPDIF Stereo/.. without having your stream stop. There's no UI for this yet unfortunately, but there is pactl and pacmd.) It was my intention to make this the big "Bluetooth Audio Works" release. Unfortunately that didn't really turn out to be possible. There has been a lot of work in this area (all based on Paulo Rechi Vita's original implementation) but most if is virtually untested because the kernel in this area is still a bit too unstable. A2DP should basically work, but since there is no UI to activate a headset you need to use d-feet for this. HSP/HFP hasn't been tested at all. The final 0.9.15 is planned for later next week. Packagers, this might be a good time to start preparing preliminary packages! Oh, and for the folks who care about translations: it might be a good idea to update them now, since strings will most likely stay stable until the release. Here's the git shortlog: A S Alam (1): Add Punjabi Translation for Module Colin Guthrie (63): Add a small lib to interpret and produce headers as used in http style requests. Add a RTSP client impelmentation. Add a simple base64 library that will be used by the sink Start the raop sink. It's based on pipe sink and isn't anywhere near finished. It does however compile. Use pa_sprintf_malloc to do simple concatenation rather than using the higher overhead of pa_strbuf Use _free rather than _destroy so as not to mix naming conventions. Convert to using pa_socket_client rather than using blocking IO. Convert the return values to fit with the rest of pulse 0 == success, < 0 == failure Fix svn properties and some minor indentation Trivial change to allocate memory using pulse methods. Move closer to an asynchronous structure (still some parsing code to be converted). Add a skeleton raop client which builds on the rtsp client. Some minor tidyup to remove code now in raop client. Still nowhere near functional. Add a function for packing bits into a byte buffer. This will be needed when encoding the audio data in ALAC format. Add a pa_iochannel callback for when the RAOP connection connects. Use a more stateful response parser. Wrap the io_callback to ensure that all data is written before asking for more. Rename rtsp.{c,h} to rtsp_client.{c,h}. Combine pa_raop_client_new and pa_raop_client_connect (no point in having them separate) Properly duplicate the hostname passed in on connect. Add more libraries to librtp now that it's doing a lot more. A very rough first version of the sink. Do not assert on NULL values of s. This means the connection was closed. This change somehow kills the mainloop with an assert, so I need to sort that out. Move the ownership of the encoded data memchunk into the raop_client. Add a new callback structure to propigate when the RTSP connection dies Listen to the on_close callback. This still causes asserts in the mainloop, so this is not a complete solution Various changes suggested by Lennart. Change suggested by Lennart. Do not return a memchunk, instead pass in the pointer. Fix up IPv6 address format to enclose it in [] Some misc fixes. consts, base64 optimisation (not that it will be with us long anyway), and c comments unref the raw data memblock before requesting more data. Don't try to free stack variables. Do not prefix internal function rtsp_exec. Do tidy up on disconnection. Move the encoding loop around a bit such that it does not grab the data and keep it for the next loop iteration. Set the send buffer size to prevent rendering silence in amongst our good data (this should be more sophisticated but that can wait for a glitch-free port) Set forgotten keyword property Keep track of the memblock pointer internally and do not rely on subsequent calls to pass it back in for unref'ing A few related changes: Fix up a couple of values related to encoding overhead. Minor update to copywrite (I still plan to replace this completely but in the mean time....) Add seq and rtptime params to record/flush with a view to using these for timing and device suspension Remove unneeded headers accidentially added in r2500. Change the API of the RTSP client a bit. Add some new public API functions to connect and flush. Still send silence when we are not doing anything else, but also flush the buffers correctly upon recovery from suspension. Minor correction of help text Automatic discovery of airtunes devices via Bonjour/Avahi. Add Lennart back in to Copyright as I copied these files from his originals and was a bit overzealous in changing things ;) Use the new pa_namereg_make_valid_name() function. Implement a set volume function to expose this capability to higher layers Implement hardware volume control. This allows near instant change of volume when controlling the hardware but the stream volume still suffers from a sizable delay. Make module-raop-sink/discover work with 0.9.11 API Remove $Id$ lines left over from SVN Modularise the RAOP stuff that requires OpenSSL and make it optional at compile time Follow master change r34dd4a and fix shutdown when --disallow-module-loading=1 is passed Fix a potential C++/C99 ism, add a log message on error condition Fix two typos that broke tunnels Fix a potentially non-returning function in base64 code. Fix the message processing for PA_SINK_MESSAGE_GET_LATENCY by returning rather than breaking and falling through. Clean up volume/mute settings a bit. As the APEX device only has one channel of volume (e.g. it's always matched) we emulate any variation in channel volumes in software. Remove the unnecessary callback defininitions. Trivial typo in a comment A couple of dependancy ordering fixes. Diego 'Flameeyes' Petten? (4): Bump autoconf requirement to 2.62 (latest released version). Remove gettext macros from configure.ac, intltool is used. Create an m4 directory for common macros and use it. Update code to use libtool 2.2. Use convenience recursive libltdl. Diego E. 'Flameeyes' Petten? (9): Create only the directory the current target should be created into. Add proper -I directives for out-of-tree builds. Allow to opt-out from building tests. Include the alsa/ subdirectory for modules in the search path. Remove support for internal distributing and bundling of libltdl. Fix logic thinko. Move the safety check about pkg-config in bootstrap.sh. Improve the ltdl discovery code by checking for libtool 2.x functions. Use #ifdef to avoid warning about undefined macro. Diego Elio 'Flameeyes' Petten? (1): Disable portability warnings from automake. Domingo Becker (1): updated spanish translation Fabian Affolter (3): Some strings done in German translation Some strings done in German translation Updated German translation Henrique Junior (1): Updated brazilian portuguese translation Herli Joaquim de Menezes (3): Strings do PulseAudio traduzidas para o portugu?s do Brasil. Transmitted-via: Transifex (translate.fedoraproject.org) Transmitted-via: Transifex (translate.fedoraproject.org) Igor Pires Soares (1): pt_BR added to LINGUAS Jared D. McNeill (7): NetBSD needs to include sys/uio.h for some socket functions NetBSD doesn't know RLIMIT_AS NetBSD specific atomic operation implementation It is more portable to assume that SO_RCVBUF/SO_SNDBUF takes and int instead of a size_t NetBSD doesn't know ENOLINK NetBSD doesn't know getgrnam_r()/getpwnam_r() NetBSD sometimes doesn't know SNDCTL_DSP_GETODELAY Lennart Poettering (322): Initialize exit_idle_time to -1 instead of 0 when in system mode. Initialize exit_idle_time to -1 instead of 0 when in system mode. instead of resetting virtual_volume unconditionally on initialization, do so only when no volume was set before when the volume is changed make sure we send out a subscription event modernize a few checks use pa_channel_map_init_extend() instead of pa_channel_map_init_auto() as channel map for sink inputs/source outputs in case no map is specified if the channel map was modified due to PA_SINK_INPUT_FIX_CHANNELS, remap the specified volume properly additional validity checks after calling PA_CORE_HOOK_SINK_SET_VOLUME hook, check again whether the volume changed if a stream comes with now sensible properties attached, use common fallback db entry. add a comment that pa_sink_input_set_volume and module-flat-volume.c are related remove $Id$ ignore sinks that do not carry decibel information some minor reformatting check the maximum volume of all sink inputs instead of the average volume to avoid digital amplification in favour of attenuation use pa_sink_set_volume() for changing the volume query the sink volume outside of the loop because it might be quite expensive enable flat volumes by default define 0dB in PA as maximum amplification correctly load module-flat-volume instead of module-flat-volumes properly remove dbus matches an filters when unloading m-b-d always check for libtool prefix binary name to avoid confusion when using both installed and run-from-build-tree versions of PA in parallel Fix spelling of privilige Make missing git-changelog.perl non-fatal fix invalid validity check add new virtual function may_move_to to sink inputs/source outputs to allow modules to forbid certain connections implement may_move_to for ladspa/remap sinks fix return value of pa_frame_aligned() convert argument to boolean int in PA_UNLIKELY, too fix arguments to format string add pa_config_parse_unsigned() include log.h near the end so that macro.h can be included in log.h and defines pa_bool_t properly Support showing a backtrace on log messages support changing logging parameters during runtime using the CLI Make log meta, time, backtrace configurable using config file make log meta, time, backtrace configurable using command line Try to catch certain driver errors make the debug trap macro a proper macro in macro.h reorder setting of AM_CFLAGS a bit temporary commit to allow flameeyes a look update map file make new build logic actually work a lot more build system updates reorder setting of AM_CFLAGS a bit update map file don't set the volume of pacat unless it is explicitly set warn if ALSA wakes us up and there is actually nothing to do make sure to use 64bit rounding even on 32bit machines when converting to pa_usec_t bump micro version Implement new flags DONT_INHIBIT_AUTO_SUSPEND and START_UNMUTED a bit of pa_bool_t'ization Make sure libpulse never gets unloaded make shm marker architecture independant, patch from michich, closes #401 Check if environ is actually set before we use it libtool 2.2 updates Fix return value of --dump-resample-methods fix implementation of bind now ltdl loader for libtool 2.2 Don't mix front-center into rear channels Pass GDBM_NOLOCK to gdbm Load module-volume-restore and module-device-restore before all other modules Don't hit an assert when checking for idleness introduce new function pa_module_unload_request_by_index Don't store pointer to pa_module actually unload the modules from a new stack frame unload tunnel modules from a new stack frame it's better to always use the index of a module instead of the pa_module* downgrade a few warnings Make sure we drop CAP_NICE if RT is not allowed Allow access("/dev/dsp", W_OK) succeed Use FIONREAD instead of TIOCINQ Implement PA_SOURCE_MESSAGE_GET_LATENCY make sure we don't hit an assert when we issue two rewind requests in a single iteration If we cannot open an ALSA device with SND_PCM_NO_AUTO_FORMAT retry without fix a gcc warning Add new API functions pa_volume_snprint() and pa_sw_volume_snprint_dB() Add APIs to pass pa_volume_t fields in a tagstruct Add "base volume" field to sinks/sources Implement base_volume for ALSA sinks/sources Rework handling of the PA_SINK_LATENCY/PA_SOURCE_LATENCY flags -Wconvert is pain, let's drop it again Prefer mixer controls with volumes over switches run "make update-po" Add new debuuging API pa_memchunk_dump_to_file() A few minor cleanups and updates Add new test source module-sine-source drop a few warning options, add a few new ones add a few missing parens make things compile again Add new pa_reduce() and pa_gcd() functions show maximum usable slot size make module-sine-source actually work Make sure we don't drop any data on the client side fix version check for record streams fill in the latency as the fragsize read base volume only in proto 15 Fix suspending of all sinks/sources Extend command name lookup tables to cover complete protocol add new API function pa_memchunk_sine() Port sine modules to pa_memchunk_sine() bump version/soname Fix version info add pa_proplist_size() and pa_proplist_isempty() fix calculation of avail_min include new proplist functions in export list remove calc_sine() since we don't need it anymore Fix a typo I know owe Marc-Andre a beer for. make pa_asyncq_push() fail under no circumstances. document that PA_API_VERSION is only for incompatible API changes fix a potential format string vulnerability don't rely on PA_SINK_RUNNING vs. PA_SINK_IDLE for optimizations since it might not be fully up to date add new dont_rewind_render flag to allow quick starts of newly created streams convert pa_client instantiation to use a pa_client_new_data struct and add hooks for manipulating it port missing modules to new pa_client_new() API make PA_CONTEXT_IS_GOOD/PA_STREAM_IS_GOOD a macro so that we can easily check for its availability fix bad memory access add new pa_card object as a way to logically combine multiple sinks and sources maintain a list of sink inputs/source outputs as part of the pa_client object add functionality to dump list of cards redirect folks to the ALSA developers not me when their sound drivers are broken kill autoload stuff as planned we don't support glib1.2 anymore make things compile again make proplist inheritance scheme automatic and implicit don't show autoload flag anymore since it is obsolete rework module usage counter stuff to be pull based move alsa and oss modules into their own subdirectories add stub makefiles for oss and alsa subdirs include libcli.la in libprotocol-cli's dependencies rename card config to card profile Add SPDIF/HDMI ALSA devices and device descriptions to device search table fix version info in protocol history add support for 24bit packed samples Add support for 24bit samples encoded in the LSB of 32 bit words make use of PR_SET_TIMERSLACK remvoe a bit of duplicate code add card profile prober add pa_strbuf_isempty add pa_proplist_to_string_sep() Split up pa_alsa_init_proplist into two seperate functions for the card and snd_pcm_t specific parts Don't enumerate invalid profile actually create pa_card object in module-alsa-card dump profiles when listing cards beautify cli output a bit get rid of pa_module_get_info because it is not used add api for manipulating volume balances show balance value in CLI listings allow setting properties for modules, too fix bad free() fix doxygen version references fix up balance format string a bit show dB and balance for cached samples Beef pactl output up a bit Document explicitly that the internal sink/source states are not considered part of the ABI/API include sink/source state in pactl output remove misplaced whitespace document that I am a retard add missing eof checks fix profile names to include input/output specifier don't divide by zero if no left resp. no right channels are defined fix destruction when no profiles are defined dump active profile add client API for querying card information show active profile remove unused variable always add 'disabled' profile add priority logic to find best default profile export pa_channel_map_superset() add new call pa_alsa_open_by_device_id_profile() add an API to create arbitrary alsa sinks/sources dynamically without having to load/unload modules fix copy/paste error allow cards be referenced by their index add set-card-profile CLI command remove bogus pa_core_check_idle() call when changing profiles do the actual assignment in the generic implementation remove leftover define fill in dev_id properly make implementation of module-alsa-card complete make pa_card_new_data::active_profile a string don't restore mute/volume when already set minor cleanups add a card profile restore module enable module-card-restore by default implement PA_COMMAND_SET_CARD_PROFILE implement pactl set-card-profile require autoconf 2.63 don't include full path in driver name. mark a few more ALSA dB values as 'valid' for valgrind add new function pa_card_suspend() add new function pa_strna fix copy'n'paste error make gcc shut up a bit more only reread volume if we actually have a good mixer. Closes #466 fix segfault when in record-only mode make gcc shut up rework logic how alsa sinks/sources/cards are named fix minor memleak in prober include PA_SINK_INVALID_STATE in all switch/case statements to make gcc shut up rework module-hal-detect and make it use module-alsa-card instead of module-alsa-sink/-source When resuming an OSS device ask for the very same fragment settings as we did the first time add API pa_ncpus() make rtstutter use pa_ncpus() use pthread_setaffinity_np() only when it is available don't overflow when we do digital amplification of 16 bit samples add a simple abstraction for SIMD operations drop --ltdl from the libtoolize invocation, since we don't ship ltdl anymore allow sample spec/channel map to be queried for pa_resampler objects maintain a pa_core state variable teach module-rescue-streams and module-always-sink to not do anything if we are shutting down anyway include list of sinks/source in card dump in most cases we can use i->core instead of i->sink->core and o->coure instead of o->source->core move sink input/source output move functions into two parts so that we can start the move, delete the original sink, create a new sink, finish the move; similar for source outputs add functions to move all inputs of a sink away/similar for source outputs make module-alsa-card move streams between the old and new sink/source, allowing 'hot' switching between profiles add support for static mutexes add generic rate limiting implementation add pa_log_rate_limit() use pa_log_ratelimit() at a few places include a few HAL properties in our card/sink/source properties for ALSA devices rate limit a warning add a bitset implementation implement new API functions pa_channel_map_can_balance(), pa_channel_map_to_name() and pa_channel_map_to_pretty_name() implement pa_cvolume_scale() check for availability of RLIMIT_NOFILE and RLIMIT_AS before we make use of it make a few comments appear in doxygen store requested resampling method in a seperate field and use it when create a new resampler after a move remove redundant cast show pretty channel map name if possible invert an ill-placed assert always define PA_MAJOR/PA_MINOR/PA_MICRO to ease feature checking in client applications import version.h in all header files to make sure that version-based feature testing works add a few missing doxygen comments swap argument order of pa_cvolume_get_balance() to be a bit more systematic allow samples to be played with 'default' (i.e. unspecified) volume. get rid of module-flat-volumes since we are moving this into the core fix size calculation move flat volume logic into the core. while doing so add n_volume_steps field to sinks/sources add new paramter ignore_dB= to alsa modules add missing 'const' when changing volume, store whether it is worth remembering or no only store volume/device information that has been flagged for saving, and store both relative and absolute volumes make m-p-e-s use pa_cvolume_set_balance() instead of making the volume relative our own, let' pa_sink_input_new() do it for us don't make m-e-s hit an assert when the latency is queried add missing usage strings make m-v-r a stub that simply load m-s-r print the right software volume fix two typos store the default sink/source in proper pa_sink*/pa_source* pointers instead of a string Run make update-po make things compile again add new functions pa_dbus_add_matches()/pa_dbus_remove_matches() make use of new functions pa_dbus_add_matches/pa_dbus_remove_matches get rid of nonsensical late initialization of namereg/scache and things add some helpers for dealing with DBusPendingCall based on Mrc-Andre's work in module-bluetooth-discover temporary commit of lennarts new bt changes add missing files properly deal with the case when l/r is silent when adjust balance fix a bogus assert implement pa_cvolume_{get|set}_fade Add a little Gtk test tool to show how balance/fade/value and the channel volumes play together add new function pa_alsa_get_driver_name() include ALSA driver in properties for cards/sink suppress lines made up only of whitespace dump properties when we create a new sink or source drop -Wpacked implement pa_channel_map_can_fade look for libpulse in multiple different places allow passing of channel map on command line and hide unused sliders check for NULL before accessing the name use uintpr_t when casting between pointers and integers work around dlsym() return value mistyping as suggested in POSIX introduce PA_PROP_APPLICATION_PROCESS_MACHINE_ID add a few new form factors download everything from gitweb twice to make sure we don't get a 'Generating...' message drop -pedantic store the module index shifted by 1 to map PA_INVALID_INDEX to NULL when determining the minimum volume of all sink inputs make sure to handle the case when there are no sink inputs correctly try to use glib's g_get_application_name() to set PA_PROP_APPLICATION_NAME set PA_PROP_WINDOW_X11_DISPLAY from :0.0 and initialize PA_PROP_APPLICATION_PROCESS_MACHINE_ID properly add new functions pa_bluetooth_cleanup_name() and pa_bluetooth_get_form_factor() Fix a few sink/source calls when they are called in suspended state. shortcut pa_sink_process_rewind() when no rewind is happenning and none was requested reset rewind_requested when we enter suspend mode update sbc stuff fix soft_mute handling handle EAGAIN properly whitespace cleanup make rtp.h ANSI C compliant big module-bluetooth-device.c rework don't use PA_STREAM_NOT_MONOTONOUS anymore pull in new SBC/BT files make update-sbc should also update other BT related sources make iterating with pa_idxset_next() robust in regards to idxset modifications implement PA_STREAM_FAIL_ON_SUSPEND logic add new error code PA_ERR_NOTIMPLEMENTED make a few functions return void where the retval isn't used/never != 0 make a couple of functions return proper error codes add a macro definition for each error code before applying balance/fade check it actually makes sense when moving a sink between sinks make volume relative add new API pa_cvolume_compatible_with_channel_map() add a bit of missing i18n add a lot of validity checking add pa_sample_size_of_format() add new API pa_ascii_valid(), pa_ascii_filter() fix up parser in pa_proplist_from_string() to handle escapes correctly; make pa_proplist_to_string() escape quotes properly in addition to per-property env vars PULSE_PROP_xxx look for for a stringified PULSE_PROP env var beef up proplist test a bit simplify code a bit by using pa_sample_size_of_format() rearrange a few things make gcc shut up add new calls pa_replace() and pa_unescape() add a few additional validity checks clarify things a bit merge in properties earlier to make identification of streams from hooks easier version all entries in the database fix a validity check properly handle failing stream creation remove soft volume from pa_sink_input_new_info since it should be handled internally and automatically by the sink input rate limit underrun messages make pacmd work in a pipe bump version and soname Luiz Augusto von Dentz (10): Unload module-bluetooth-device if the remote device disconnects. Fix possible invalid read while attempting to load module-bluetooth-device. Fix bug walking on module list. Disable warnings for bluetooth-device-module. Update module-bluetooth-device to the new ipc. Send packets with proper size. Fix send and recv message sizes. Fix sending wrong codec capability length. Fix hsp rate and channels. Prevent changing volume on wrong device. Marc-Andre Lureau (2): volume hooks flat-volume thingy Marc-Andr? Lureau (29): build: use pkg-config for X11 build: compile libltdl directory first build: Don't include builddir, but only srcdir. build: introduce $SKIP_GIT for make dist (off-line or behind a proxy). build: add atomic.h and refcnt.h to libpulsecommon build: Use proper -disable-static instead of removing .a build: run some tests during make check (and distcheck) bluetooth: add update-sbc and friends bluetooth: Update sbc from git upstream. build: fix missing x11 modules dependencies core: add pa_sink_update_proplist core: add pa_source_update_proplist core: report remaining shared objects when cleanup libpulse: add proplist_from_string cli: update-sink-proplist build: print more informations about preopen core: add source, si, so proplist_update cli: add missing update-*-proplist build: fix few warnings sink: add a virtual_volume to sink match: can now change properties also match: add "key" argument to match different properties flat-volume: use pa_sink_get_volume(s, TRUE) to work with slaved sink pulse: introspect sink state sink: trigger subscribe event on sink state change cli: fix broken array access with signed state enums pulse: share private enum values with client side bluetooth: hsp volume control bluetooth: cold hsp/a2dp device detection Micha Pietsch (1): German translation done. PabloMartin-Gomez (1): Last strings translated to French Petr Kov?? (3): Added Czech translation. LINGUAS: Added cs. Updated Czech translation. Piotr Dr?g (7): Initial Polish translation Added Polish translation to LINGUAS Updated Polish translation Updated LINGUAS Updated Polish translation Updated Polish translation Updated Polish translation Sean McNamara (1): --check: Updated manpage slightly and pulseaudio --help slightly. Sjoerd Simons (1): Load module gconf earlier Timo Jyrinki (3): Add Finnish (fi) translation by Timo Jyrinki. Add fi (Finnish) to LINGUAS. Argh, send pulseaudio Finnish translation (instead of paprefs) by Timo Jyrinki. Tom Bamford (1): Multicast SDP packets sent with same IP TTL as RTP packets Wang Zeguo (1): Updated Chinese(zh_CN) translation. Xavier Conde (3): Added catalan translation Added catalan locale Updated catalan po chocolateboy (1): Fix typo in log message: s/Recevied/Received/ daniel cabrera (1): Updated Spanich translation sainrysec (1): Only creat zh_CN.po ??(Gan Lu) (1): Add zh_CN entry for Chinese Simplified translation. Lennart -- Lennart Poettering Red Hat, Inc. lennart [at] poettering [dot] net ICQ# 11060553 http://0pointer.net/lennart/ GnuPG 0x1A015CC4