NEWS 151 KB
Newer Older
Wim Taymans's avatar
0.3.52    
Wim Taymans committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# PipeWire 0.3.52 (2022-06-09)

This is a bugfix release that is API and ABI compatible with previous
0.3.x releases.

## Highlights
  - Add 44.1KHz to allowed samplerates. The server can now switch by
    default between 48KHz and 44.1KHz.
  - Streams now allocate less resources.
  - Fix some bugs that could make the server crash.
  - Bluetooth now supports the LC3plus vendor codec.
  - Many bugfixes and improvements.


## PipeWire
  - Add 44.1KHz to allowed samplerates.
  - Avoid setting the locale.
  - Avoid use-after-free when destroying a node from spa-node-factory.
  - Avoid using reallocarray when not available.
  - Set port alias is not otherwise set.

## Modules
  - Improve filter-chain parsing and error reporting. Handle empty
    nodes. (#1950)
  - Handle destroy of globals and factory in most modules. (#565)
  - Add refcounts to client and resources to handle destroy of the
    protocol. (#565)
  - Handle global node.name in filter-chain and loopback again, use
    it to construct unique stream names.
  - Avoid a wrapped pw-node in the adapter. This reduces resources
    allocated for streams.
  - Fix a crash when module-x11-bell was unloaded. (#2392)
  - Add a new module-pipe-tunnel that can write/read data from a
    UNIX pipe.

## Tools
  - Fix DSD playback again in pw-cat.
  - Add -n option to pw-loopback to set node names.
  - Add -P option to pw-cat to pass properties to the stream.
  - Support stdin/stdout in pw-cat. (#2387)
  - pw-dump now also dumps object removal when monitoring. (#2426)

## SPA
  - Avoid duplicate param results in pw-dump for ports.
  - Avoid endless loops in audioconvert for badly behaving client.
    (#2359)
  - Scale max-error in alsa based on quantum and avoid logging a warning
    when starting.
  - Improve debug of failed format conversion. (#2383)
  - Handle offset in the audio dsp mixer inputs and clamp to the max
    buffer size.
  - Add option to disable locale support for JSON number conversion.
  - Add support for Astro A20 Gen2.
  - Fix some of the test sources, the flags were not set correctly.
  - Add camera location as property in libcamera and let the session manager
    Generate a localized description.
  - Fix some crashes due to wrong vargar types in v4l2 controls. (#2400)
  - Improve ALSA resync behaviour. (#2257)
  - Add support for Komplete Audio 6 MK2.
  - Improve loop cancel while iterating.
  - Try not to mix surround channels and AUX channels. Make card with many
    ports look better when not using the Pro Audio profile.
  - Vulkan filters were added.

## Bluetooth
  - Add LC3plus vendor codec.
  - Handle unsupported indicators better.
  - Ensure multiple devices on an adapter use different codecs because one
    endpoint can only be used by one device at a time.
  - Fix bitpool control as a follower.
  - Handle bluetooth errors better.
  - Speed up bluetooth connection by only waiting for the profiles
    supported by the adapter.
  - The dummy AVRCP player is disabled by default because it seems to break
    more devices than it fixes.

## pulse-server
  - Add initial stream latency property so that devices can be started
    with a resonably accurate latency.
  - Fix ringbuffer underrun case. (#2366)
  - module-native-protocol-tcp now has a auth-anonymous option to give
    full access to the clients.
  - Report a node as being moved when it is still moving. This improves
    compatibility with pasystray.
  - Avoid overallocating message memory.
  - Don't export NETWORK nodes in zeroconf. (#2384)
  - Fix stride for TrueHD and DTSHD passthrough. (#2284)
  - Make sure we don't send too small audio fragments. Fixes capture
    from multiple tabs in Chrome. (#2418)
  - Rework module handling some more.
  - Use the new native module-pipe-tunnel for pipe-sink and pipe-source.
  - Implement the STREAM_MOVED message when a stream got moved. (#2407)
  - Fix a potential segfault when stopping the server and a TCP module
    as still loaded.

## ALSA
  - Add support for updating sw_params at runtime, mostly the min-avail
    param.
  - Capture and playback nodes are now assumed to use a different clock and
    will activate the adaptive resampler when linked. This assumption is
    removed in Pro Audio mode. This provide a better experience out of the
    box with most devices.

## JACK
  - Fix setting properties with PIPEWIRE_PROPS again.
  - Don't use 64 bits atomic operations for sync_timeout. (#1867)
  - Cleanup in error cases was improved, avoiding some crashes. (#2394)

## GStreamer
  - Fix pipewiresink in mode=provide. (#1980)
  - Share memory into a new buffer in pipewiresrc to avoid buffer corruption.
  - Fixes to the source and fd use.
  - It is now possible to set client properties as well. (#1573)


Older versions:

Wim Taymans's avatar
0.3.51    
Wim Taymans committed
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
# PipeWire 0.3.51 (2022-04-28)

This is a bugfix release that is API and ABI compatible with previous
0.3.x releases.

## Highlights
  - Improved graph reconfiguration.
  - Extra configuration options for streams and filters with config
    rules and environment variable.
  - Improve module-pulse-tunnel latency, stability and error recovery.
  - pw-top, pw-cli and pw-link improvements.
  - Fix a channelmixer upmixing clipping issue.
  - The ROC module has seen many improvements.
  - Many more bugfixes and improvements.


## PipeWire
  - The graph reconfiguration code was reworked:
    * Moved nodes will update the new driver quantum correctly. (#2293)
    * Inactive nodes are ignored more.
    * Nodes that require a driver are now not scheduled anymore when
      they are passive (unused). (#2309)
    * Improved performance, the graph is reconfigured with a minimal
      amount of changes.
  - Method and event argument names were improved.
  - A linker garbage collection problem was fixed. (#2292)
  - Properties on threads are now implemented. Use common code to
    set thread name and add an option to set stack-size.
  - Streams and filters always want a driver now. This makes it possible
    to just link a playback stream to a capture stream without a driver
    and have it work. (#1761).
  - Streams and filters can now also have rules in the config file.
  - Streams, filters, JACK, ALSA and v4l2 now support PIPEWIRE_PROPS
    environment variable to override node properties.
  - Add config section extensions. This provides a way for modules to
    have specific config to override the default config.
  - Handle realloc errors better.
  - Improve stream and filter property updates.

## Modules
  - The pulse-tunnel modules has improved latency management and should
    now work a lot better. (#2230)
  - Module-loopback, module-echo-cancel, module-filter-chain unload the
    module when a stream is destroyed. (#1754)
  - Biquads in filter-chain now can have more gain (5->20 dB).
  - Documentation updates. Most Wiki content was moved to the source code
    inline comments.
  - Filter-chain now has a builtin delay line filter. (#2320)
  - Filter-chain can now parse the config key correctly in all cases.
  - The ROC sink and source saw many improvements. roc-source is now a stream
    by default that connects to the default sink. Both modules will try to set
    a graph rate. Both modules have an option to select the FEC mode.
    The ROC source has lower latency now. (#2331)
  - Handle realloc errors better.

## tools
  - pw-cat does not have --list-targets anymore, use one of the more
    advanced and less buggy tools such as wpctl or pw-cli to list
    sinks and sources.
  - pw-top has seen many improvements.
    * It now has some timeouts to reset the node values to their default
      state when unused.
    * The man page was improved.
    * Invalid timings and errors are displayed in a better way.
  - pw-cli and pw-link can now create links between all ports of given nodes.
  - pw-cat can now save to other file formats than wav, based on the extension
    of the filename.

## SPA
  - The resampler now uses a different internal method for draining. It can
    now also handle 0 size buffers as input without draining.
  - The channelmixer now uses the front channel averages for FC and LFE.
    This avoids clipping and results in much better upmixing.
  - ALSA should now work again on 32 bits. (#2271)
  - The JSON parser now converts escaped unicode correctly to UTF8.

## bluetooth
  - Codec switch improvements when the device is disconnected. (#2334)

## pulse-server
  - There is a new module-roc-sink-input module, the the PulseAudio equivalent.
  - The ROC source and sink-input module now have a much lower latency.
  - The ROC module now has an option to select FEC mode.
  - Playback and record rate adjustements should work now. (#1159)

## JACK
  - Remove some useless pthread attributes. This makes JACK work in QEMU with
    sandboxing enabled. (#2297)
  - The buffer_size callback is now only called when something has changed
    since the last process() callback or get_buffer_size() method. This
    fixes a GStreamer issue and is more in line with what JACK does. (#2324)
  - Fix a potential deadlock when the process thread is doing IPC and the
    IPC thread is blocking on the data thread.
  - Allocation errors in metadata are handled better.

Wim Taymans's avatar
0.3.50    
Wim Taymans committed
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
# PipeWire 0.3.50 (2022-04-13)

This is a bugfix release that is API and ABI compatible with previous
0.3.x releases.

## Highlights
  - pw-stream can now report more timing information and can suggest
    the optimal number of samples to queue for playback.
  - pw-dot now works again..
  - module-pulse-tunnel latency was improved.
  - WINE applications using the JACK backend should no longer crash.
  - The channelmixer defaults are improved and the muffled sound when
    playing back 5.1 and 7.1 material has been fixed.
  - Many fixes and improvements.


## PipeWire
  - pw-stream now places a suggested amount of samples in the pw-buffer
    for playback. This allows you to remove some places where
    spa_io_rate_match was needed to get this information.
  - pw-stream has new API to request a timing update. New fields are
    added in the timing info, such as number of buffered samples in
    the resampler and the number of queued and dequeued buffers.
  - pw-stream has support for double controls now. More controls are
    exposed such as the Rate control to do adaptive resampling.
  - The thread-utils object was moved to the context to avoid some
    concurrent use cases that caused crashes. (#2252)
  - Deactivating an exported node/stream will now remove the node from
    the data-thread immediately so that the process function will not
    be called anymore and resources can be safely freed. This could
    fix some of the last remaining crashes when streams are stopped.
  - PipeWire will now fail to load a module that tries to register
    the same export type twice instead of silently doing the wrong
    thing. (#2281)

## Modules
  - Many modules now use the NODE_WANT_DRIVER instead of the
    pipewire.dummy NODE_GROUP property. This makes it possible to use
    them with any other driver and can avoid resampling in some
    cases.
  - module-pulse-tunnel now uses an adaptive resampler to keep the
    latency under control. Latency should be much better than before
    and stay constant even when there are network delays.
  - There is now an option for packages to disable building the RTKit
    module, which is still built by default for backwards compatibility
    reasons.
  - A leak was fixed in filter-chain. (#2220)
  - Module node names are now made more unique with the pid.

## tools
  - pw-cat verbose output has been improved.
  - pw-link now has a man page. (#2263)
  - pw-reserve now has an -r option to make it issue a RequestRelease
    command on the owner of the device. This makes it possible to ask
    WirePlumber to close and release a device.
  - Fix pw-dot again. It didn't work anymore because of stray done
    events that were emitted to notify the client of object serials.
    (#2253)

## SPA
  - The channelmixer now has PSD upmixing enabled again. We used the
    simple upmixing in the previous release but that just sounds too
    aweful to be a good default. (#861) and (#2219)
  - The channelmixer will not upmix FC and LFE anymore when upmixing is
    explicitly disabled. (#2266)
  - The channelmixer will only lowpass filter FC and LFE channels when
    they were upmixed. (#2280)
  - The defaults of the channelmixer were tweaked a little. There is now
    a little bit more bass in the LFE channel and more high fequencies
    in the FC channel when upmixing. Also the channel widening has been
    disabled by default.
  - Locale independent float parsing now uses a more portable solution
    with uselocale.
  - ALSA will now only allocate a buffer size big enough to hold 4
    times the quantum limit instead of as large as possible.

## pulse-server
  - Internal cleanups in handling of modules.
  - A quirk to force s16 sample formats for teams-insider has been added.

## JACK
  - The data-loop is now started in activate and stopped in deactivate.
    This makes the data-loop respect any custom thread functions you
    configure. This also makes WINE apps using the JACK backend work.
    (#1495).
  - Port sorting was improved/fixed. (#2260)

300
# PipeWire 0.3.49 (2022-03-29)
Wim Taymans's avatar
0.3.49    
Wim Taymans committed
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370

This is a bugfix release that is API and ABI compatible with previous
0.3.x releases.

## Highlights
  - Sample rate switching should work again.
  - pw-dot can now use the output of pw-dump to render a graph.
  - Bluetooth A2DP streaming was improved that would reduce stuttering on
    some devices.
  - A JACK bug was fixed that would sometimes make it impossible to add more
    tracks in Ardour. (#1714)
  - Many bugfixes and improvements.

## PipeWire
  - Fix a potential crash when NULL params were configured.
  - Add some simple functional tests to avoid some recent regressions. Improve
    the test framework for this as well.
  - Improvements to the poll loop to avoid some use-after-free scenarios.
  - Fix samplerate switching again.
  - setlocale is not called anymore from the pipewire library. This should be
    called by the application. (#2223)
  - pw_init() and pw_deinit() can now be nested and called multiple times.
  - pw_stream will now report the resampler delay in the pw_time.queued field.

## modules
  - module-filter-chain now supports arbitrary many properties and will use
    property hints to assign them the right type.
  - The ROC modules now accept a sink/source_properties parameter.
  - The module-rt can now also be built without RT-Kit support.
  - module-echo-cancel can now use a fraction to specify the delay for more
    precise control.

## SPA
  - The channelmixer will now do upmixing by default and will not use
    normalization. It will also use a simple upmixing algorithm that duplicates
    channels by default. A more interesting upmix method is also available (PSD)
    but needs to be enabled manually. (#861)
  - Add SSE optimized (de)interleave functions for 32 bits samples with and
    without byteswap.
  - JSON parsing of empty strings will now give an invalid number instead of
    0.
  - JSON numbers are now parsed and serialized in a locale independent way so
    that , and . are not mixed up.
  - The resampler will now report the resample delay and queued samples as the
    extra delay.

## tools
  - pw-cat will read more dsf files correctly and will not crash at the end.
  - pw-top now has a man page.
  - pw-dot can now use the output of pw-dump to render a graph.

## bluetooth
  - Improve interactions with oFono.
  - Fix recovery with slow connections.
  - Improve frame size of AptX-ll.
  - A2DP can now use any quantum and will flush packets in smaller chunks
    when needed to adapt. This improves stuttering in some cases.

## pulse-server
  - The server configuration can now be placed in pulse.properties section,
    which also makes it possible to have custom overrides.
  - Implement FIX_ flags for capture as well.
  - Small fixes and improvements in module loading.

## JACK
  - Clear the last error before executing a new action or else we could end up
    with error from a previous action. This causes some problems in Ardour where
    adding a track would fail after some time. (#1714)


Wim Taymans's avatar
0.3.48    
Wim Taymans committed
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
# PipeWire 0.3.48 (2022-03-03)

This is a bugfix release that is API and ABI compatible with previous
0.3.x releases.

## Highlights
  - Fix IEC958 passthrough again.
  - Fix pulse-server crashes when playing a sample.
  - Support for more a more advanced upmixing algorithm.
  - filter-chain now supports arbitrary many ports.
  - Fix multichannel support in WINE. (with new WirePlumber).
  - Many bugfixes and improvements.


## PipeWire
  - The work queue is now created in the context so we can fail early and
    avoid further error checking in various places.
  - Fix a potential use after free with threaded loops.
  - The protocol now has a message footer. This is used to pass around
    global state such as the last registered object serial number. This can
    be used to detect when a client tries to bind to old (but reused)
    object ids. This avoids some races in the session manager but also
    when binding objects.
  - The zero-denormals CPU flag is now not touched anymore unless explicitly
    selected by the user. Denormals are avoided in filter-chain now in
    software. If the zero-denormals are now only configured in the data
    thread. This should fix issues with luajit. (#2160)
  - Configuration parsing will not actually fail on errors.
  - pw-top now correctly clips unicode characters.
  - Many places now use a dynamic POD builder to support arbitrary large
    property sets.
  - pw-stream now support PropInfo parameters so that they can announce
    custom properties.
  - Serial number are now also set on metadata and session-manager objects.

## SPA
  - audioadapter is now smarter when trying to fixate the format. It will
    use the PortConfig format to fill in any wildcards. This results in
    the least amount of conversions when the stream can handle it. It also
    is part of a fix (also requires a session manager fix) for WINE
    multichannel support. (#876).
  - Fix 5.1 to 2 channels mixing. It was using the volume of the stereo
    pair on all channels.
  - Fix some weird volume issues when a source is capturing and
    channelmixing.
  - Add stereo to 7.1 upmixing.
  - The channelmix parameters can be changed at runtime now.
  - Many improvements to the upmixing algorithms. Rear channels are now
    constructed from the ambient sound and can have delay and phase shift
    applied to them to improve spacialization. The stereo channels can
    be filtered so that the dialog is more concentrated in the center
    channel. (#861)

## modules
  - Module X11 bell received cleanups and improvements.
  - The module now has a private method to schedule unload later. This
    simplifies cleanup in many modules.
  - module-filter-chain now handles arbitrary many ports and control
    ports. (#2179)
  - Fix a bug in RAOP where it was reading from the wrong port. (#2183)

## pulse-server
  - Nodes with the DONT_MOVE property should fail with -EINVAL when
    they are moved.
  - Fix a segfault when playing a sample. (#2151)
  - The _FIX flags in pulse-server also now ignore the configured
    sample format, just like pulseaudio does. (#876)
  - Fix IEC958 passthrough again. It got accidentally broken since
    0.3.45 with a fix for another issue. (#1442)
  - Fix module-null-sink device.description. (#2166)

## Bluetooth
  - Don't try to connect HSP/HFP when no backend is available.


Wim Taymans's avatar
0.3.47    
Wim Taymans committed
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
# PipeWire 0.3.47 (2022-02-18)

This is a bugfix release that is API and ABI compatible with previous
0.3.x releases.

This is a quick emergency release to fix some severe
problems with the previous release.

## Highlights
  - Fixes a bug in pulse-server that caused cached notifications
    to play multiple times. (#2142)
  - Removed check and warnings to catch leaked listeners on the
    proxy. This might access invalid memory and cause infinite
    loops in older wireplumber.

Wim Taymans's avatar
0.3.46    
Wim Taymans committed
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
# PipeWire 0.3.46 (2022-02-17)

This is a bugfix release that is API and ABI compatible with previous
0.3.x releases.

## Highlights
  - Fix a critical bug in pipewire-pulse buffer size handling that made some
    apps (MuseScore, ... ) stutter.
  - Fix a critical bug where devices would not show when the kernel was
    compiled without VERBOSE_PROCSFS.
  - JACK clients will now use lock-quantum by default. This makes sure that
    all dynamic quantum changes are disabled while a JACK app is running.
    The only way to force a quantum chance is through a JACK app or with
    the metadata.
  - Almost all limits on number of ports, clients and nodes are removed.
  - A Dummy fallback sink is now automatically created when there are no
    other sinks. This avoids stalling browsers.
  - Sound sharing with Zoom should work better. A new WirePlumber release
    might be required.
  - Many more fixes and improvements.


## PipeWire
  - Update docs with new config overrides.
  - The rule matching logic was moved to config and code is now shared with
    pulse-server and JACK.
  - Add new Romanian translation.
  - When a quantum is forced with metadata, any node that asked to lock-quantum
    is ignored so that the quantum change can happen.
  - Fix a bug where a mixer was removed twice, leading to potential memory
    corruption.
  - The port limits on nodes and filters are now removed. Some code was
    simplified.
  - Fix a potential leak because listeners where removed while they could be
    emitted.
  - Improve context.exec and avoid zombie processes.

## Modules
  - The RAOP module now has a default latency of 2 seconds, like PulseAudio.
  - The echo-cancel module now uses the plugin loader to load the backends.
    This makes it possible to add custom, out of tree, echo cancel plugins.

## Tools
  - Improve help of pw-link.
  - Output to stdout and error to stderr. Use setlinebuf for stdout to improve
    piping between apps. (#2110)

## SPA
  - Improve removing sources when dispatching. Also improve performance now
    that a destroy loop can be removed. (#2114)
  - Fix an fd leak in the logger when logging to a file.
  - Improve loop enter/leave checks and support recursive loops.

## pulse-server
  - Clamp various buffer attributes to the max length. Fixes some issues
    with various applications. (#2100)
  - Module properties are now remapped correctly from their pulseaudio variant
    to the PipeWire ones.
  - Fix module index in introspect. Use the right index when loaded from our
    internal modules. (#2101)
  - Improve argument parsing and node.description. (#2086)
  - The sink-index should now be filled in correctly when playing a sample.
    (#2129)
  - module-always-sink is now implemented and loaded by default. (#1838)
  - Add support for loading some modules only once.
  - Module load and unload now does extra sync to make it appear synchronous,
    like in PulseAudio. This improves sounds sharing in Zoom.

## ALSA
  - Fix critial bug where alsa devices would not show when the kernel was
    compiled without VERBOSE_PROCFS.
  - Some corner cases were fixed in the ALSA timing code. When the capture node
    is follower, it will now not try to read too much data and xrun but it will
    instead produce a cycle of silence.
  - Various fixes and improvements to make ALSA devices resync to the driver
    more quickly and accurately.

## JACK
  - Add an option to name the defauld device as `system` to improve
    compatibility with some applications,
  - Use lock-quantum by default. This makes sure that all dynamic quantum
    changes are disabled while a JACK app is running. The only way to force
    a quantum chance is through a JACK app or with the metadata.
  - It is now possible to do IPC calls from the data thread. Note that this
    is a very bad idea but required for compatibility with JACK2.

## GStreamer
  - GStreamer sink will now set a default channelmap to make it possible to 
    remap to the channel layout of the device.

Wim Taymans's avatar
0.3.45    
Wim Taymans committed
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
# PipeWire 0.3.45 (2022-02-03)

This is a bugfix release that is API and ABI compatible with previous
0.3.x releases.

## Highlights
  - Zoom, telegram and other apps should be able to play sound again.
  - Implement a better way to force and lock JACK buffersize.
  - Default sink and source names and properties are improved.
  - The config loader can now load and merge fragments in conf.d directories
    for easier user configuration of config files.
  - Many small bug fixes and improvements.

## PipeWire
  - pw-cli can now also send Commands to nodes. This can be used to Suspend
    a device, for example.
  - The eventfd was removed from loops and invoke is now used to stop the loop,
    this saves an fd.
  - New Alpine CI target to test musl builds, various build fixes.
  - Add force-quantum and force-rate properties.
  - The config loader can now load and merge fragments in conf.d directories.
    (#207)
  - resource error methods can be called without a resource and then just
    log an error message.
  - link-factory can now also work from the config. (#2095)

## modules
  - module-simple-protocol has better argument parsing and can handle
    channelmap now. (#2068) It's also possible to configure latency and
    rate.
  - The native protocol now does extra checks for invalid data. (#2070)

## ALSA
  - TI2902 chips as found in various Behringer cards should have inputs
    again.
  - Better handling of busy devices in udev, retry when the inotify close
    event is emited.

## SPA
  - plugins now handle alignment properly and only expect the max alignment
    required for the CPU. (#2074)

## Bluetooth
  - SBC-XQ is now enabled for the JBL Endurance RUN BT headset.
  - Support for non-hexadecimal XAPL version strings to improve compatibility.
  - Use HCI commands again to probe the adapter msbc capability. This improves
    compatibility with some adapters. (#2030)
  - Set the right startup volume.
  - Better A2DP source idle handling.
  - Fix a timer bug in SCO sink that could cause busy looping.

## pulse-server
  - A playback issue when the tlength > maxlength was fixed. (#2069) This
    affected Zoom and other applications.
  - The STREAM_BUFFER_ATTR command is now implemented.
  - Module names are improved. (#2076)
  - Many small fixes and improvements.
  - Fix a pavucontrol crash with invalid channels. (#1442)

## JACK
  - Use the new force-quantum and force-rate properties in the JACK API to
    switch quantum and ensure it can't change for the lifetime of the JACK
    app. (#2079)

Wim Taymans's avatar
0.3.44    
Wim Taymans committed
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
# PipeWire 0.3.44 (2022-01-27)

This is a bugfix release that is API and ABI compatible with previous
0.3.x releases.

## Highlights
  - It is now possible to run a minimal PipeWire server without a session
    manager, enough to run JACK clients.
  - The maximum buffer size is now configurable and can be larger than
    the previously hardcoded limit of 8192 samples. When using high sample
    rates, the larger buffer size can avoid xruns.
  - The default maximum latency was reduced from 170ms to 42ms. This should
    improve overall latency for application that ask for a large latency,
    such as notifications.
  - Better JACK compatibility. Patchbays should now get less confused about
    ports appearing and disappearing.
  - Fix some bluetooth crashes.
  - Fix some races in ALSA device detection.
  - Many bug fixes and improvements all over the place.

## PipeWire
  - Bump the meson requirement to 0.59.0.
  - pw-top now reports correct times for filter-chain and loopback.
  - max-quantum is now also scaled with the rate. A new quantum-limit
    property was added as a hard limit for the quantum. This makes it
    possible to configure for larger than 8192 buffer sizes. Note
    than many JACK applications have a hardcoded 8192 limit. (#1931)
  - The max-quantum was reduced to 2048, This gives a 42ms default
    latency. (#1908)
  - pw-filter can now return a NULL buffer from _get_dsp_buffer().
  - Add a PIPEWIRE_RATE and PIPEWIRE_QUANTUM env variable to set the
    graph rate and the graph quantum and rate respectively.
  - Fix a potential file descriptor leak in the connection.
  - A new minimal.conf file was added to demonstrate a static setup
    of a daemon that doesn't require a session manager and is able to
    run JACK applicaions.
  - Nice levels are now only changed on the servers, not the clients.
  - Add an option to suspend nodes when idle.
  - Make it possible to avoid quantum and rate changes with
    pw-metadata. This is essential in a locked down system.
  - Handle mixer port errors better and fail to create the link instead
    of silently not working.
  - Nodes that are moved to a driver now have all the linked nodes moved
    as well. This makes it possible to run some graphs without a
    driver, such as paplay -> zita-j2n.
  - pw-cli and pw-dump can now also list objects by name, serial and
    object.path using glob style pattern matching.


## modules
  - filter-chain can now also configure parameters by index.
  - Fix the client name of module-protocol-simple. (#2017)
  - module-rtkit was merged into module-rt. This makes it easier to
    ship a default config that works on more systems by default.
  - module-adapter can now configure the adapter node from the config.
    Previously, this was a task only performed by the session manager.
  - module-metadata can now also create metadata object from the
    config file.
  - The ROC module should now work again. (#2045)
  - An X11-bell module was added to handle X11 bell events. (#1668)
  - filter-chain and loopback modules now have better unique default
    names for the streams, which makes it possible to save and restore
    their volumes independently. (#1983)
  - module-echo-cancel now has properties to control the delay and
    buffer size.

## ALSA
  - The monitor names are now correctly parsed.
  - The default period size for batch devices is limited now to avoid
    large latency.
  - The unused min/max-latency properties were removed.
  - Internal latency is now also configurable with params at runtime.
  - The udev rule for TI2902 was removed because it causes problems.
  - Fix a race where some devices would sometimes be missing. (#2046)
  - Add some more timeouts to work around a race in udev device
    permission changes when switching VTs.

## SPA
  - Fix potential infinite loop in audioconvert.
  - The spa-resample tools can now also use optimized implementations.
  - Fix a potential crash in resampler. (#1994)
  - audioconvert can now also handle F64 formats. (#1990)
  - The channelmixer now does normalization by default to avoid clipping
    when downmixing is active.
  - The channelmixer will now generate LFE channels when the lfe_cutoff
    frequency is set, even when upmix is disabled.
  - The channelmixer will now always generate FC when the target has it.
  - Adapter now reports latency correctly, even after linking the monitor
    ports.
  - Reduce memory usage and preallocated memory in some of the
    audioconvert nodes.
  - Many properties are now exposed in adapter, such as the resample
    quality.
  - The resampler and channelmixer can now be disabled.

## V4L2
  - pw-v4l2 now also works for ffplay. (#2029)
  - Take product names from udev now that the kernel returns a generic
    name.

## JACK
  - The jack pkgconfig file now has the `jack_implementation=pipewire`
    variable to be able to distinguish jack implementations. (#1666)
  - jconvolver now starts correctly again. (#1989)
  - The object.serial is now used for the port_id. This makes it easier
    to track old objects in the cache.
  - Add a dummy jacknet implementation. (#2043)
  - A bug in the port allocation was fixed that would make it impossible
    to allocate ports at some point. (#1714)

## Bluetooth
  - Bluetooth profiles are now saved properly by the session manager.
  - Improved profile detections, increased timeouts for slow devices.
  - Implement HFP call indicator for improved compatibility.
  - Handle the case where bluez does not set the adapter or address
    properties on the device instead of crashing.
  - Improved support for setting the profile from the session manager.

## pulse-server
  - Monitor sources now have the device.class=monitor for better
    compatibility.
  - Behaviour after seeking is improved. The algorithm for requesting
    bytes from the client was simplified and improved. (#1981)
  - module-ladspa-sink implements the control argument now. (#1987)
  - A potential memory leak in the message queue was fixed. (#1840)
  - Use the object.serial for the pulseaudio object index. The index is
    not supposed to be reused and this would cause problems with some
    clients.
  - Servers should now again be able to listen in IPv4. (#2047)
  - module-x11-bell was added. (#1668)
  - There is now support for per-application quirks and properties in
    the pipewire-pulse.conf file. Per-application latency and buffering
    properties can also be configured.
  - Fix a regression in telegram sounds not playing.

Wim Taymans's avatar
Wim Taymans committed
750
# PipeWire 0.3.43 (2022-01-05)
Wim Taymans's avatar
0.3.43    
Wim Taymans committed
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832

This is a bugfix release that is API and ABI compatible with previous
0.3.x releases.

## Highlights
  - Flatpak apps such as Ardour can now remove links again.
  - Many fixes to pulse-server. Memory usage should be improved. Some
    crashes are fixed. Underrun handling should work better. Better
    compatibility with GStreamer based applications after seeking.
  - Many of the samplerate and quantum changes bugs in previous releases
    were fixed. This fixes some issues where the microphone would fail
    to work.
  - Many more small fixes and improvements all over the place.

## PipeWire
  - Quantum and rate changes are now applied immediately when the driver
    is idle. This avoids setting the driver in the previous samplerate.
    (#1913)
  - Object destruction now does not need write permissions anymore. This
    restriction needs some more work. (#1920)
  - When we reposition, start a sync operation. This fixes a problem
    in Ardour when seeking. (#1907)
  - Require meson 0.56.0
  - Make the align property in BUFFER_PARAM optional. We now only set this
    if the plugin has specific requirements and we default to the CPU
    largest alignment requirement.
  - pw-record will now also list monitors and streams as possible targets.

## modules
  - Improve LV2 plugin support in filter-chain. Add support for Worker and
    Options.
  - The loopback module now has a unique media.name to make it possible
    for the session manager to restore unique volume settings.

## SPA
  - Improve sample rate for EAC3 streams, some clients scale it while
    others don't so use some heuristics to make things work better.
    (#1902)
  - Allocate ports dynamically in audioconvert. This avoids using larger
    memory blocks of preallocated memory that confuses the allocator.
    (#1840)

## ALSA
  - Merge the latest pulseaudio UCM improvements. (#1849)
  - Fixes for selecting the sample rate. (#1892)
  - Improve latency on USB devices by scaling the period size based on
    the desired quantum when the device is opened.
  - Add api.alsa.period-num to configure the amount of periods to use
    in the device. Some devices have lower latency when a small value
    is forced. (#1473)
  - Allow multi-rate by default. In previous versions cards could only
    be opened in one samplerate to avoid bugs in pre 5.16 kernels. This
    however caused other problems so the default was removed.
  - Fix a bug where a card was not freed correctly.
  - Fix a bug in the alsa boundary check that could hang the alsa-plugin
    for a long time.
  - The ALSA plugin now has a parameter to configure the allowed
    samplerates.

## JACK
  - Improve handling of monitor nodes.

## Bluetooth
  - Codecs now have a priority. This should improve codec selection.

## pulse-server
  - The stream FIX_ flags are now implemented. (#1912)
  - Improve flushing and draining behaviour. Short samples will now
    play correctly. (#1549)
  - Fix a crash when enumerating the formats. (#1928)
  - Track quantum changes and update the amount of required buffering
    accordingly. This improves forced quantum handling. (#1930)
  - Improve handling of channels > 32.
  - Handle the case where a module is destroyed before it could be
    completely loaded.
  - Fixes some issues when samples were removed while they were playing.
    (#1953)
  - Fix some issues in module-zeroconf-publish.
  - Fix some memory leaks in module-roc.
  - Add command access control. This avoids execution of commands without
    proper authentication.

Wim Taymans's avatar
0.3.42    
Wim Taymans committed
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
# PipeWire 0.3.42 (2021-12-16)

This is a bugfix release that is API and ABI compatible with previous
0.3.x releases.

This is a quick emergency release to fix some severe
problems with the previous release.

## Highlights
  - Fixes a bug in pulse-server underrun handling that broke qemu
    and orca.
  - A fix was added to pulse-server to handle quantum changes
    gracefully.
  - Fix module-echo-cancel again.
  - Fix a bug where the bluetooth headset capture was producing
    noise.


Wim Taymans's avatar
0.3.41    
Wim Taymans committed
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
# PipeWire 0.3.41 (2021-12-13)

This is a bugfix release that is API and ABI compatible with previous
0.3.x releases.

## Highlights
  - Improved compatibility for flatpaks. Flatpaks with newer PipeWire
    version can connect to an older server in all cases.
  - A new RAOP module was added to stream to Apple Airplay devices.
  - OBS can now capture from the monitor devices again when using
    WirePlumber.
  - Improved JACK compatibility. Improved stability in Carla and Ardour
    when changing buffer size. Improved latency calculations and
    playback latency in Ardour.
  - Improved pulse-server handling of underruns and buffer size changes.
  - Many bugfixes and improvements.


## PipeWire
  - The systemd service files now have better names.
  - client.access permission checks are improved.
  - Fix some memory leaks in error paths.
  - Objects now have a global serial number that is unique for the
    lifetime of the server.
  - Make clock.rate, clock.allowed-rates and clock.quantum
    runtime tunable parameters with the settings metadata.
  - Add some additional memory checks in client-node to avoid
    sending invalid memory to clients. (#1859)
  - Improve buffer memory allocation. If one of the nodes is a
    remote node, ensure we only use memory that can be shared.
  - Version checks when binding to objects is removed. This means
    that newer clients can now bind to older servers, which is
    a typical case for a flatpak.
  - A bug in the latency calculations was fixed where it would in
    some cases report the wrong minumum latency.

## modules
  - module-echo-cancel has voice-detection enabled now.
  - module-raop-sink and module-raop-discover to stream audio to
    an Apple Airplay device.
  - module-filter-chain now has preliminary support for LV2
    plugins.

## SPA
  - The audio resampler now has improved buffer size calculations.
    In some cases it was too small and would cause distortions.
  - More checks are done when doing volume changes so that the
    channelmap is correct.
  - Audioadapter now exposes most config options with params so that
    they can be adjusted at runtime.
  - The resampler can now calculate the expected input buffer size
    before receiving the first buffer, which avoids some confusion
    when starting streams.
  - Support was added for some 10bit video formats.
  - MONO channel handling was improved.
  - Most plugins now set a clock name and this is configurable where
    it makes sense. The clock.system.monotonic clock name is used
    for most plugins that use the system clock for timing.

## pulse-server
  - implement module-raop-discover
  - Use STREAM_CAPTURE_SINK property when capturing from a monitor
    source to better inform the session manager. This fixes some
    issues where OBS would capture from the microphone instead of
    the output monitor.
  - Limit the amount of cache messages to 16MB and don't add large
    memory blocks to the cache. This should fix some excessive
    memory usage that people reported.
  - Fix a potential memory leak when cleaning up a client.
  - Do some additional checks to avoid buffer overruns.
  - Improve recovery from underruns better. (#1857) This improves
    seeking in gnome-music.
  - Improve recovery when the quantum is forced larger that the
    stream configured latency.
  - The prebuf state is now handled correctly.

## JACK
  - A per type object cache is now implemented. This ensures that
    port objects remain valid for a longer time because many
    JACK applications inspect objects after they are destroyed.
    This improves catia/carla compatibility.
  - Recompute the latencies when the buffer-size changes. Fix some
    cases where we would end up with negative latencies.
  - Handle regcomp errors to avoid some crashes later.
  - Latency calculations are improved a lot.
  - More care is taken to not call a process callback while a buffer
    size change is pending. This fixes some crashes in Carla, which
    expect that all clients are paused when one handles the buffersize
    callback.
  - Loopback links to a client are now handled correctly and without
    latency. This fixes playback latency in ardour6 (#1839)

## ALSA
  - ALSA devices now keep track of the samplerate of the card and
    ensure that all PCM use the same rate. This is a workaround for
    a kernel bug that is fixed in 5.16.
  - Refactor the ALSA plugin a little.
  - The ALSA plugin now reports correct delay for a capture PCM. (#1697)
  - The ALSA nodes now expose all config options with params that can be
    changed at runtime.
  - The ALSA node has a configurable clock name. Adaptive resampling to
    match clock rates is avoided when the driver has the same clock
    name as the ALSA node. This can be used to link alsa devices together
    with a word clock.

Wim Taymans's avatar
0.3.40    
Wim Taymans committed
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
# PipeWire 0.3.40 (2021-11-11)

This is a bugfix release that is API and ABI compatible with previous
0.3.x releases.

## Highlights
  - Producers and consumers can now incrementally negotiate a format
    by narrowing down the options. This can be used to select an optimal
    combination of format and modifiers.
  - Driver nodes such as the consumer of a headless compositor can now
    throttle the speed based on a new trigger_done event.
  - Headless compositors can now signal a damage event to consumers
    to start the processing of the graph.
  - Compatibility improvements in JACK.
  - Draining and resuming is now working correctly in pulse and alsa.
  - Many bugfixes and improvements.


## PipeWire
  - Many BSD fixes.
  - clang compilation fixes.
  - Fix map implementation on big-endian machines.
  - Improve tracking of param changes in pw-stream.
  - Add support for renegotiation. With this change, producer and
    consumer can incrementally renegotiate a format until it is fixed.
    This will be used to do complex negotiation of DRM modifiers.
    (#1732).
  - Add a trigger-done event in the stream. This can be used to know
    when processing of the complete graph has finished after issuing
    a trigger_process() and it can be used to throttle processing.
  - Add a RequestProcess node event and command. This can be used by
    non-driver nodes to suggest to a driver to start processing. One
    case is where a compositor can emit this event as a result of a
    screen update to let the headless compositor start an update.
  - Fix zeroconf sample format.
  - pw-mon outputs to stderr now and has colors.

## SPA
  - Fix compilation on ppc and armv7.
  - Fix port type check for ALSA seq midi ports so that they are not
    falsely listed as hardware.
  - Fix crash when running SSE code on unsupported HW. (#1775)
  - The libcamera plugin was rewritten. It now supports hotplug,
    format enumeration and an easier to read codebase.
  - Fix compatibility some more for cards with 64 channels.
For faster browsing, not all history is shown. View entire blame