diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 000000000..82f7b1976 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,67 @@ +# Contribution Guidelines + +## A note for contributors + +Thank you for your contribution! + +Please make sure you tick the box labelled `Allow commits from members who can +merge to the target branch`. This allows us to make minor edits ourselves, and +then automatically rebase and merge your changes. + +PulseAudio is currently maintained by three volunteer developers in their free +time (probably amounting to less than one full time developer), which is not +really enough, given the project size and scope. For this reason bug reports +and patch submissions are sometimes handled very slowly. + +For non-trivial patches, we meet biweekly on IRC to discuss and prioritise +outstanding MRs. If you haven't heard from us a few days after you create the +MR, please take a look at [the patch status +page](https://www.freedesktop.org/wiki/Software/PulseAudio/PatchStatus/). + +If you don't see your MR in that list either, please don't hesitate to drop a +comment pinging us, and we'll try to at least respond and make sure your +request is tracked on that list. + +## Coding Style + +Please take a look at the [coding style +documentation](https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/Developer/CodingStyle/) +on our wiki. + +## Commit messages + +We follow the standard git commit message format of a summary on the first line +(<=50 characters for preference, <=72 characters otherwise), followed by a new +line, followed by a detailed commit message. An additional line at the end may +link to an issue being fixed by this MR. + +The first line is usually a short description of "what" your commit does, and +the rest of the message describes the "why", along with any additional +information that readers might need to understand the rationale for the change. +If in doubt, more verbose is better than less. + +If you need to describe the "how" of the commit, that is usually best +documented along with the code itself. + +Commit messages are prefixed with the subsystem being affected. Your best bet +to figure out what is appropriate is to look at previous commit messages. An +example: + +``` +sink: Reduce chat sink priority + +Some gaming sound cards have custom profiles with analog-game and +analog-chat mappings that exist simultaneously. The game sink should +have higher priority than the chat sink, but currently there's no way to +affect the sink priorities from the profile-set configuration (the +mapping priority is not propagated to the sink priority). + +I first thought about adding the mapping priority to the sink priority, +but that could mess up the prioritization system in +pa_device_init_priority(). I ended up checking for the intended roles +property to reduce the chat sink priority. I also reduced the iec958 +priority so that the chat and iec958 sinks don't end up with the same +priority. + +Fixes: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/issues/818 +``` diff --git a/NEWS b/NEWS index 782a612e1..898ac0cc9 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,268 @@ +PulseAudio 15.0 + +Changes at a glance: + + * Notes for end users + * Support for LDAC and AptX bluetooth codecs, plus "SBC XQ" (SBC with higher-quality parameters) + * Support for HFP bluetooth profiles + * Support for Bluetooth A2DP AVRCP Absolute Volume + * ALSA path configuration files can now be placed in user home directory + * module-virtual-surround-sink rewritten + * More options for module-jackdbus-detect + * Improved hardware support + * SteelSeries Arctis 9 + * HP Thunderbolt Dock 120W G2 + * Behringer U-Phoria UMC22 + * OnePlus Type-C Bullets + * Sennheiser GSX 1000/1200 PRO + * New udev variable: PULSE_MODARGS + * max_latency_msec argument added to module-null-source + * module-filter-apply can take filter parameters from device properties + * module-match can now be loaded multiple times + * Improvements to FreeBSD support + * Windows support added to Meson + * Additional commands for pactl + * Card profiles can be set to sticky + * Notes for application developers + * New API for sending messages from clients to PulseAudio objects + * New mechanism for applications to disable shared memory on their connection to PulseAudio + * Notes for packagers + * Autotools build system have been dropped + * The startup script can now read additional configuration from the /etc/pulse/default.pa.d/ directory + * Option to build client library and utilities only + * Avoid loading X11 modules on Wayland (GNOME-only for now) + * OSS support is now configurable in Meson + * Valgrind support is now configurable in Meson + +Detailed change log: + + https://www.freedesktop.org/wiki/Software/PulseAudio/Notes/15.0/ + +Contributors + +Alexey Rubtsov +Alper Nebi Yasak +Anders Jonsson +Arun Raghavan +Ben Buchwald +Benjamin Valentin +Carlos Garnacho +Carmen Bianca Bakker +Christopher Arndt +Christopher Snowhill +David +Dusan Kazik +Edward Lee +Emilio Herrera +Evan Miller +Fabian Affolter +Faidon Liambotis +Felipe Sateler +Frédéric Danis +Georg Chini +Greg V +Göran Uddeborg +Hela Basa +Henri Chain +Hui Wang +Igor V. Kovalenko +Ilja van Sprundel +Jaechul Lee +James Bottomley +Jan Alexander Steffens (heftig) +Jan Kuparinen +Jaroslav Kysela +Jason Nader +Johannes Wolf +Julien Humbert +Kai-Heng Feng +Karl Ove Hufthammer +Klaas van Schelven +Laurent Bigonville +Laurențiu Nicola +Lyndon Brown +Marijn Suijten +Martin Wilck +Mattias Jernberg +Milo Casagrande +Nazar Mokrynskyi +Oğuz Ersen +Patrick Gaskin +Patrick McLean +Paul Seyfert +Pierre Ossman +Piotr Drąg +Pjotr Vertaalt +Ricky Tigg +Robin Lahtinen +Samuel Thibault +Sanchayan Maity +Scott Worley +Sebastian Krzyszkowiak +SimonP +Takashi Sakamoto +Tanu Kaskinen +Tobias Weise +Toni Estevez +Yaron Shahrabani +Yuri Chornoivan +morrishoresh +pseyfert +scootergrisen +simmon + + +PulseAudio 14.2 + +A bug fix release. + + * Fix port switching when unplugging headphones + +Contributors + + Tanu Kaskinen + + +PulseAudio 14.1 + +A bug fix release. + + * Support upto 8 mixer channels on ALSA devices + * Handle ALSA jacks with the same name but different index values + * Switch to plugged-in headset when mic availability is unknown + * Fix a potential segfault in the Bluetooth oFono HFP backend + * Fix a problem with module-ladspa-sink when avoid-resampling=true + * Fix database names containing canonical host for meson builds + +Contributors + + Arun Raghavan + Hui Wang + Igor V. Kovalenko + Jaroslav Kysela + Kai-Heng Feng + Patrick Gaskin + Tanu Kaskinen + morrishoresh + + +PulseAudio 14.0 + +Changes at a glance: + + * Notes for end users + * Significant routing changes to default sinks/sources + * Changing the default sink moves streams from the old default sink to the new + * Moving a stream to the default sink removes the "manually routed" status of the stream + * If a sink changes status to available, streams that prefer that sink move there automatically + * The same changes have been applied to the source stream routing + * Workaround for GNOME Sound Settings' stream routing behaviour + * module-rescue-streams is deprecated, functionality moved to the core + * New rescue-streams option in daemon.conf + * Automatic switching to HDMI is now disabled by default + * Better support for some USB gaming headsets + * Flat volumes are now disabled by default + * The RAOP sink can be configured to automatically reconnect on connection failures + * Separate sink_channels and source_channels for module-jackdbus-detect + * Improved support for ALSA UCM + * Support for ALSA mixer controls with non-zero index + * It's now possible to set intended roles for devices in the ALSA profile configuration + * Ports now have a type associated with them + * Mappings have a new "description-key" option in the ALSA profile configuration + * New xauthority argument for X11 modules + * module-null-sink's compressed format support can now be configured at run-time + * The enable-lfe-remixing option in daemon.conf was split into remixing-produce-lfe and remixing-consume-lfe + * New channel_map argument for module-raop-sink + * Notes for application developers + * pa_mainloop_prepare interprets the timeout argument as microseconds again + * New availability_group and type fields in the port info structs + * New macros: PA_LIKELY(), PA_UNLIKELY(), PA_CLAMP() and PA_CLAMP_UNLIKELY() + * Notes for packagers + * New GStreamer-based RTP implementation + * qpaeq switched from Python 2 to Python 3 + * Compile-time option to forget pre-14.0 stream routing + * The install path of the ALSA configuration files is now configurable + * GNU gettext minimum version requirement bumped from 0.19.3 to 0.19.8 + * Heads-up: dropping autotools build system + * Heads-up: dropping EsounD support is considered, tell us if you still need it + * Heads-up: dropping GConf support + +Detailed change log: + + https://www.freedesktop.org/wiki/Software/PulseAudio/Notes/14.0/ + +Contributors + + Alexander E. Patrakov + Arun Raghavan + Balázs Meskó + Baurzhan Muftakhidinov + Ben Buchwald + Daniil Kovalev + Dave Chiluk + David Heidelberg + Dusan Kazik + Eero Nurkkala + Emanuil Novachev + Emilio Herrera + Felipe Sateler + Felix Yan + Geert Warrink + Georg Chini + Göran Uddeborg + Hugo Osvaldo Barrera + Hui Wang + Igor V. Kovalenko + Jan Alexander Steffens + Jarno Suni + Jaroslav Kysela + Jaska Uimonen + Jean-Baptiste Holcroft + Josh + Juliano de Souza Camargo + Kai-Heng Feng + Karl Ove Hufthammer + Khem Raj + Krzysztof Stasiowski + Laurent Bigonville + Libin Yang + Marc Ranolfi + Michael Pivonka + Milo Casagrande + Milo Ivir + Nick Moriarty + Oğuz Ersen + Pali Rohár + Peter Levine + Peter Meerwald + Philip Withnall + Piotr Drąg + RODRIGUEZ Christophe + Rafael Fontenelle + Ralph Seichter + Rasmus Thomsen + Rickie Schroeder + Rosen Penev + Ryszard Knop + Sanchayan Maity + Sebastian Dröge + Sebastien + StefanBruens + Taahir Ahmed + Tanu Kaskinen + Timo Gurr + Tom Yan + Tomasz Kontusz + Vasilis Tsiligiannis + Wim Taymans + Yi-Jyun Pan + Yuri Chornoivan + itsthem + muzena + roshal + zhaochengyi + + PulseAudio 13.0 Changes at a glance: diff --git a/PROTOCOL b/PROTOCOL index 6d3a3c7c0..72d3af3c0 100644 --- a/PROTOCOL +++ b/PROTOCOL @@ -429,7 +429,28 @@ Added two values to the pa_encoding_t enum: ## v34, implemented by >= 14.0 -Added available_group and type fields to the device port info. +New fields in the port introspection data (duplicated for all port types: +sink, source and card ports): + + string availability_group + uint32 type + +## v35, implemented by >= 15.0 + +Added new command for communication with objects. + +PA_COMMAND_SEND_OBJECT_MESSAGE: +sends a message to an object identified by an object path + +parameters: + string object_path - unique path identifying the object + string message - message name + string message_parameters - additional parameters if required (may be + NULL, which should be treated the same as an + empty string) + +The command returns a string, which may be empty or NULL (NULL should be +treated the same as an empty string). #### If you just changed the protocol, read this ## module-tunnel depends on the sink/source/sink-input/source-input protocol diff --git a/README b/README index 1668fd670..7a05705aa 100644 --- a/README +++ b/README @@ -19,7 +19,7 @@ TRAC/BUGZILLA TICKET CHANGES MAILING LIST: http://lists.freedesktop.org/mailman/listinfo/pulseaudio-bugs IRC: - #pulseaudio on irc.freenode.org + https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/Community/#ircandmatrix FRESHMEAT: http://freshmeat.net/projects/pulseaudio/ @@ -31,13 +31,10 @@ AUTHORS: Several HACKING: - In order to run pulseaudio from the build dir __OPTIMIZE__ should be - disabled (look at src/pulsecore/core-util.h::pa_run_from_build_tree()), - this can be done by passing "CFLAGS=-O0" to the configure script: - ./autogen.sh - CFLAGS="-ggdb3 -O0" LDFLAGS="-ggdb3" ./configure - make - ./src/pulseaudio -n -F src/default.pa -p $(pwd)/src/ + In order to run pulseaudio from the build dir: + meson build + meson compile -C build + build/src/daemon/pulseaudio -n -F build/src/daemon/default.pa -p $(pwd)/build/src/modules/ SPELLING: PulseAudio diff --git a/doc/messaging_api.txt b/doc/messaging_api.txt new file mode 100644 index 000000000..ad0774fde --- /dev/null +++ b/doc/messaging_api.txt @@ -0,0 +1,49 @@ +Message API reference + +The message API allows any object within pulseaudio to register a message +handler. A message handler is a function that can be called by clients using +PA_COMMAND_SEND_OBJECT_MESSAGE. A message consists at least of an object path +and a message command, both specified as strings. Additional parameters can +be specified using a single string in JSON format, but are not mandatory. + +The message handler returns an error number as defined in def.h and also returns +a string in the "response" variable. Non-empty response will be in JSON format. + +The reference further down lists available messages, their parameters +and return values. + +Reference: + +Object path: /core +Message: list-handlers +Parameters: None +Return value: JSON array of handler description objects + [{"name":"Handler name","description":"Description"} ...] + +Object path: /card/bluez_card.XX_XX_XX_XX_XX_XX/bluez +Message: list-codecs +Parameters: None +Return value: JSON array of codec description objects + [{"name":"codec1","description":"Codec 1"} ...] + +Object path: /card/bluez_card.XX_XX_XX_XX_XX_XX/bluez +Message: get-codec +Parameters: None +Return value: "codec name" + +Object path: /card/bluez_card.XX_XX_XX_XX_XX_XX/bluez +Message: switch-codec +Parameters: "codec name" +Return value: none + +Description: Set if card profile selection should be sticky instead of being automated +Object path: /card/ +Message: set-profile-sticky +Parameters: JSON "true" or "false" +Return value: none + +Description: Get if card profile selection should be sticky instead of being automated +Object path: /card/ +Message: get-profile-sticky +Parameters: None +Return value: JSON "true" or "false" diff --git a/doxygen/doxygen.conf.in b/doxygen/doxygen.conf.in index c195e7b28..21b6814f0 100644 --- a/doxygen/doxygen.conf.in +++ b/doxygen/doxygen.conf.in @@ -52,7 +52,7 @@ PROJECT_LOGO = # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. -OUTPUT_DIRECTORY = +OUTPUT_DIRECTORY = @DOXYGEN_OUTPUT_DIRECTORY@ # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output @@ -668,37 +668,37 @@ WARN_LOGFILE = # directories like "/usr/src/myproject". Separate the files or directories # with spaces. -INPUT = @srcdir@/../src/pulse/channelmap.h \ - @srcdir@/../src/pulse/context.h \ - @srcdir@/../src/pulse/def.h \ - @srcdir@/../src/pulse/direction.h \ - @srcdir@/../src/pulse/error.h \ - @srcdir@/../src/pulse/ext-stream-restore.h \ - @srcdir@/../src/pulse/ext-device-manager.h \ - @srcdir@/../src/pulse/ext-device-restore.h \ - @srcdir@/../src/pulse/format.h \ - @srcdir@/../src/pulse/gccmacro.h \ - @srcdir@/../src/pulse/glib-mainloop.h \ - @srcdir@/../src/pulse/introspect.h \ - @srcdir@/../src/pulse/mainloop-api.h \ - @srcdir@/../src/pulse/mainloop-signal.h \ - @srcdir@/../src/pulse/mainloop.h \ - @srcdir@/../src/pulse/operation.h \ - @srcdir@/../src/pulse/proplist.h \ - @srcdir@/../src/pulse/pulseaudio.h \ - @srcdir@/../src/pulse/rtclock.h \ - @srcdir@/../src/pulse/sample.h \ - @srcdir@/../src/pulse/scache.h \ - @srcdir@/../src/pulse/simple.h \ - @srcdir@/../src/pulse/stream.h \ - @srcdir@/../src/pulse/subscribe.h \ - @srcdir@/../src/pulse/thread-mainloop.h \ - @srcdir@/../src/pulse/timeval.h \ - @srcdir@/../src/pulse/utf8.h \ - @srcdir@/../src/pulse/util.h \ - @srcdir@/../src/pulse/version.h \ - @srcdir@/../src/pulse/volume.h \ - @srcdir@/../src/pulse/xmalloc.h +INPUT = @top_srcdir@/src/pulse/channelmap.h \ + @top_srcdir@/src/pulse/context.h \ + @top_srcdir@/src/pulse/def.h \ + @top_srcdir@/src/pulse/direction.h \ + @top_srcdir@/src/pulse/error.h \ + @top_srcdir@/src/pulse/ext-stream-restore.h \ + @top_srcdir@/src/pulse/ext-device-manager.h \ + @top_srcdir@/src/pulse/ext-device-restore.h \ + @top_srcdir@/src/pulse/format.h \ + @top_srcdir@/src/pulse/gccmacro.h \ + @top_srcdir@/src/pulse/glib-mainloop.h \ + @top_srcdir@/src/pulse/introspect.h \ + @top_srcdir@/src/pulse/mainloop-api.h \ + @top_srcdir@/src/pulse/mainloop-signal.h \ + @top_srcdir@/src/pulse/mainloop.h \ + @top_srcdir@/src/pulse/operation.h \ + @top_srcdir@/src/pulse/proplist.h \ + @top_srcdir@/src/pulse/pulseaudio.h \ + @top_srcdir@/src/pulse/rtclock.h \ + @top_srcdir@/src/pulse/sample.h \ + @top_srcdir@/src/pulse/scache.h \ + @top_srcdir@/src/pulse/simple.h \ + @top_srcdir@/src/pulse/stream.h \ + @top_srcdir@/src/pulse/subscribe.h \ + @top_srcdir@/src/pulse/thread-mainloop.h \ + @top_srcdir@/src/pulse/timeval.h \ + @top_srcdir@/src/pulse/utf8.h \ + @top_srcdir@/src/pulse/util.h \ + @top_srcdir@/src/pulse/version.h \ + @top_srcdir@/src/pulse/volume.h \ + @top_srcdir@/src/pulse/xmalloc.h # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is @@ -758,8 +758,8 @@ EXCLUDE_SYMBOLS = # directories that contain example code fragments that are included (see # the \include command). -EXAMPLE_PATH = @srcdir@/../src/utils \ - @srcdir@/../src/tests +EXAMPLE_PATH = @top_srcdir@/src/utils \ + @top_srcdir@/src/tests # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp diff --git a/doxygen/meson.build b/doxygen/meson.build new file mode 100644 index 000000000..afc0e4989 --- /dev/null +++ b/doxygen/meson.build @@ -0,0 +1,10 @@ +cdata.set('DOXYGEN_OUTPUT_DIRECTORY', meson.current_build_dir()) + +doxygen_conf = configure_file( + input : 'doxygen.conf.in', + output : 'doxygen.conf', + configuration : cdata, +) + +run_target('doxygen', + command : ['doxygen', doxygen_conf]) diff --git a/man/meson.build b/man/meson.build index 104384459..31c581a8f 100644 --- a/man/meson.build +++ b/man/meson.build @@ -1,20 +1,37 @@ # man page name, section, [aliases] -manpages = [ - ['default.pa', '5'], +manpages = [] + +if get_option('daemon') + manpages += [ + ['default.pa', '5'], + ['pacmd', '1'], + ['pasuspender', '1'], + ['pulse-cli-syntax', '5'], + ['pulse-daemon.conf', '5'], + ['pulseaudio', '1'], + ['start-pulseaudio-x11', '1'], + ] +endif + +manpages += [ ['pacat', '1', ['paplay', 'parec', 'parecord', 'pamon']], - ['pacmd', '1'], ['pactl', '1'], - ['padsp', '1'], - ['pasuspender', '1'], - ['pax11publish', '1'], - ['pulse-cli-syntax', '5'], ['pulse-client.conf', '5'], - ['pulse-daemon.conf', '5'], - ['pulseaudio', '1'], - ['start-pulseaudio-x11', '1'], ] +if cdata.has('HAVE_OSS_WRAPPER') + manpages += [ + ['padsp', '1'], + ] +endif + +if x11_dep.found() + manpages += [ + ['pax11publish', '1'], + ] +endif + # FIXME: Add esdcompat if HAVE_ESOUND #manpages += ['esdcompat', '1'], diff --git a/man/pacat.1.xml.in b/man/pacat.1.xml.in index 8fcb51d92..72fc0ad31 100644 --- a/man/pacat.1.xml.in +++ b/man/pacat.1.xml.in @@ -202,7 +202,7 @@ License along with PulseAudio; if not, see . diff --git a/man/pactl.1.xml.in b/man/pactl.1.xml.in index cff628f34..d4eb03458 100644 --- a/man/pactl.1.xml.in +++ b/man/pactl.1.xml.in @@ -53,6 +53,12 @@ License along with PulseAudio; if not, see .

Choose the server to connect to.

+ +