Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package pipewire for openSUSE:Factory checked in at 2022-07-05 12:27:23 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/pipewire (Old) and /work/SRC/openSUSE:Factory/.pipewire.new.1548 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "pipewire" Tue Jul 5 12:27:23 2022 rev:58 rq:986601 version:0.3.53 Changes: -------- --- /work/SRC/openSUSE:Factory/pipewire/pipewire.changes 2022-06-24 08:44:59.863118152 +0200 +++ /work/SRC/openSUSE:Factory/.pipewire.new.1548/pipewire.changes 2022-07-05 12:27:29.949872621 +0200 @@ -1,0 +2,76 @@ +Fri Jul 1 14:25:49 UTC 2022 - Alexei Sorokin <sor.ale...@meowr.ru> + +- Add a patch from upstream to fix segmentation faults in MPV: + * 0001-audioconvert-ensure-temp-buffers-are-large-enough.patch + +------------------------------------------------------------------- +Thu Jun 30 10:40:53 UTC 2022 - Alexei Sorokin <sor.ale...@meowr.ru> + +- Update to version 0.3.53: + * Highlights + - The 44.1KHz samplerate was removed again from the defaults, + it caused all kinds of problems with various hardware. + - The ALSA plugin should now be able to deal with unsupported + samplerates and fall back to the nearest supported one. + - The audioconvert plugin was rewritten to be more maintainable + and quicker. It also gained support for control ports and + dithering with optional noise shaping. + - An impossible buffering situation is avoided in pulse-server + that would cause some applications (sunshine, ...) to + stutter. + * PipeWire + - 44.1KHz was removed from the allowed rates again. It caused + all kinds of regressions due to driver bugs and timing issues + on HDMI. + * modules + - filter-chain now does some more error checking and reporting + to avoid some crashes. + - filter-chain now supports more channel layouts for input and + output that does not need to match the plugin layout. + - Format parsing is now more consistent in the modules. + * Tools + - pw-cli can now also work without readline support. + - pw-cat can now also read multichannel ulaw/alaw/u8/s8. + * SPA + - The audioconvert plugin was rewritten. This should make it + more maintainable. It also fixed some issues such as CPU + spikes in some cases and crashes in others. The old plugins + were removed, for a code reduction of some 6000 lines. + - The audioconvert plugin now supports control ports, which can + be enabled on nodes in the session manager. This makes it + possible to control audioconvert properties using timed + events or midi. + - NoteOn 0-velocity MIDI events are no longer filtered out. + This is a valid event, nodes that can't deal with it should + fix it up themselves. The JACK layer still filters out these + events by default but this can now be configured with a + per-client property. + - The running status on midi events is now disabled to match + what JACK does. + - The ALSA plugin will now deal with driver bugs when a driver + announces support for a samplerate but then refuses to use it + later. + - The ALSA plugin has been optimized a little for sample IO. + - V4L2 now doesn't error when there are no controls. + - Error handling was improved in the audio converter. + - The audioconvert plugin now supports rectangular dithering + and noise shaping. + - The audioconvert plugin can now insert additional inaudible + noise that can be used to keep some amplifiers alive. + - The audioconvert format conversion was changed so that it now + produces the full 32 bits range in the C fallback conversion + code as well. + - The resampler window function was changed to a cosh() window + function. + - Vendor and device id are now in hex. + * pulse-server + - Tweak the record buffer attributes some more and make sure + we don't end up in impossible buffering situations. + Fixes an issue with distorted sound in sunshine. + - Fix a potential crash when updating the client property list. + - Some properties on cards were aligned with pulseaudio. +- Drop patches already included upstream: + * 0001-settings-remove-44.1KHz-from-allowed-rates-again.patch +- Rebase reduce-meson-dependency.patch. + +------------------------------------------------------------------- Old: ---- 0001-settings-remove-44.1KHz-from-allowed-rates-again.patch pipewire-0.3.52.obscpio New: ---- 0001-audioconvert-ensure-temp-buffers-are-large-enough.patch pipewire-0.3.53.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ pipewire.spec ++++++ --- /var/tmp/diff_new_pack.3m8kdv/_old 2022-07-05 12:27:30.769873822 +0200 +++ /var/tmp/diff_new_pack.3m8kdv/_new 2022-07-05 12:27:30.773873827 +0200 @@ -54,7 +54,7 @@ %bcond_with aptx Name: pipewire -Version: 0.3.52 +Version: 0.3.53 Release: 0 Summary: A Multimedia Framework designed to be an audio and video server and more License: MIT @@ -64,8 +64,8 @@ Source99: baselibs.conf # PATCH-FIX-OPENSUSE reduce-meson-dependency.patch Patch0: reduce-meson-dependency.patch -# PATCH-FIX-UPSTREAM -Patch1: 0001-settings-remove-44.1KHz-from-allowed-rates-again.patch +# PATCH-FIX-UPSTREAM 0001-audioconvert-ensure-temp-buffers-are-large-enough.patch +Patch1: 0001-audioconvert-ensure-temp-buffers-are-large-enough.patch BuildRequires: docutils BuildRequires: doxygen BuildRequires: fdupes ++++++ 0001-audioconvert-ensure-temp-buffers-are-large-enough.patch ++++++ >From 9af94508886b19bb398f4e2a777447ca42907c2f Mon Sep 17 00:00:00 2001 From: Wim Taymans <wtaym...@redhat.com> Date: Fri, 1 Jul 2022 15:25:37 +0200 Subject: [PATCH] audioconvert: ensure temp buffers are large enough Ensure that our temporary buffers can hold at least quantum_limit samples. When no output or input is connected, we can generate up to a quantum_limit of silence, which requires all the buffers to be scaled correctly. Fixes a segfault in mpv. --- spa/plugins/audioconvert/audioconvert.c | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/spa/plugins/audioconvert/audioconvert.c b/spa/plugins/audioconvert/audioconvert.c index ae3e4d7c3..21a7ffea1 100644 --- a/spa/plugins/audioconvert/audioconvert.c +++ b/spa/plugins/audioconvert/audioconvert.c @@ -221,9 +221,7 @@ struct impl { uint32_t empty_size; float *empty; float *scratch; - float *tmp; - float *tmp2; - + float *tmp[2]; float *tmp_datas[2][MAX_PORTS]; }; @@ -1491,9 +1489,9 @@ static int setup_convert(struct impl *th return res; for (i = 0; i < MAX_PORTS; i++) { - this->tmp_datas[0][i] = SPA_PTROFF(this->tmp, this->empty_size * i, void); + this->tmp_datas[0][i] = SPA_PTROFF(this->tmp[0], this->empty_size * i, void); this->tmp_datas[0][i] = SPA_PTR_ALIGN(this->tmp_datas[0][i], MAX_ALIGN, void); - this->tmp_datas[1][i] = SPA_PTROFF(this->tmp2, this->empty_size * i, void); + this->tmp_datas[1][i] = SPA_PTROFF(this->tmp[1], this->empty_size * i, void); this->tmp_datas[1][i] = SPA_PTR_ALIGN(this->tmp_datas[1][i], MAX_ALIGN, void); } @@ -2009,7 +2007,8 @@ impl_node_port_use_buffers(void *object, clear_buffers(this, port); - maxsize = 0; + maxsize = this->quantum_limit * sizeof(float); + for (i = 0; i < n_buffers; i++) { struct buffer *b; uint32_t n_datas = buffers[i]->n_datas; @@ -2050,10 +2049,10 @@ impl_node_port_use_buffers(void *object, if (maxsize > this->empty_size) { this->empty = realloc(this->empty, maxsize + MAX_ALIGN); this->scratch = realloc(this->scratch, maxsize + MAX_ALIGN); - this->tmp = realloc(this->tmp, (4 * maxsize + MAX_ALIGN) * MAX_PORTS); - this->tmp2 = realloc(this->tmp2, (4 * maxsize + MAX_ALIGN) * MAX_PORTS); + this->tmp[0] = realloc(this->tmp[0], (maxsize + MAX_ALIGN) * MAX_PORTS); + this->tmp[1] = realloc(this->tmp[1], (maxsize + MAX_ALIGN) * MAX_PORTS); if (this->empty == NULL || this->scratch == NULL || - this->tmp == NULL || this->tmp2 == NULL) + this->tmp[0] == NULL || this->tmp[1] == NULL) return -errno; memset(this->empty, 0, maxsize + MAX_ALIGN); this->empty_size = maxsize; @@ -2641,8 +2640,8 @@ static int impl_clear(struct spa_handle free(this->dir[SPA_DIRECTION_OUTPUT].ports[i]); free(this->empty); free(this->scratch); - free(this->tmp); - free(this->tmp2); + free(this->tmp[0]); + free(this->tmp[1]); if (this->resample.free) resample_free(&this->resample); -- 2.36.1 ++++++ _service ++++++ --- /var/tmp/diff_new_pack.3m8kdv/_old 2022-07-05 12:27:30.809873879 +0200 +++ /var/tmp/diff_new_pack.3m8kdv/_new 2022-07-05 12:27:30.809873879 +0200 @@ -3,7 +3,7 @@ <service name="obs_scm" mode="disabled"> <param name="scm">git</param> <param name="url">https://gitlab.freedesktop.org/pipewire/pipewire.git</param> - <param name="revision">refs/tags/0.3.52</param> + <param name="revision">refs/tags/0.3.53</param> <param name="versionformat">@PARENT_TAG@</param> <!-- <param name="revision">master</param> <param name="versionformat">@PARENT_TAG@+git%cd.%h</param> ++++++ pipewire-0.3.52.obscpio -> pipewire-0.3.53.obscpio ++++++ /work/SRC/openSUSE:Factory/pipewire/pipewire-0.3.52.obscpio /work/SRC/openSUSE:Factory/.pipewire.new.1548/pipewire-0.3.53.obscpio differ: char 49, line 1 ++++++ pipewire.obsinfo ++++++ --- /var/tmp/diff_new_pack.3m8kdv/_old 2022-07-05 12:27:30.869873967 +0200 +++ /var/tmp/diff_new_pack.3m8kdv/_new 2022-07-05 12:27:30.873873974 +0200 @@ -1,5 +1,5 @@ name: pipewire -version: 0.3.52 -mtime: 1654763724 -commit: 31bf63105749893e5e2c6ae7784e7f27aa0345ad +version: 0.3.53 +mtime: 1656573301 +commit: 3853eba32f1a354b7287f7990ba467679749532a ++++++ reduce-meson-dependency.patch ++++++ --- /var/tmp/diff_new_pack.3m8kdv/_old 2022-07-05 12:27:30.885873991 +0200 +++ /var/tmp/diff_new_pack.3m8kdv/_new 2022-07-05 12:27:30.889873997 +0200 @@ -1,10 +1,10 @@ -Index: pipewire-0.3.52/meson.build +Index: pipewire-0.3.53/meson.build =================================================================== ---- pipewire-0.3.52.orig/meson.build -+++ pipewire-0.3.52/meson.build +--- pipewire-0.3.53.orig/meson.build ++++ pipewire-0.3.53/meson.build @@ -1,7 +1,7 @@ project('pipewire', ['c' ], - version : '0.3.52', + version : '0.3.53', license : [ 'MIT', 'LGPL-2.1-or-later', 'GPL-2.0-only' ], - meson_version : '>= 0.59.0', + meson_version : '>= 0.54.0', @@ -22,7 +22,7 @@ makedata.set('VERSION', pipewire_version) if version_arr.length() == 4 makedata.set('TAG', 'HEAD') -@@ -327,7 +327,7 @@ endforeach +@@ -328,7 +328,7 @@ endforeach gst_dp_found = gst_dep.length() > 0 summary({'gstreamer-device-provider': gst_dp_found}, bool_yn: true, section: 'Backend') @@ -31,7 +31,7 @@ webrtc_dep = dependency('webrtc-audio-processing', version : ['>= 0.2', '< 1.0'], -@@ -390,10 +390,10 @@ endforeach +@@ -391,10 +391,10 @@ endforeach installed_tests_metadir = pipewire_datadir / 'installed-tests' / pipewire_name installed_tests_execdir = pipewire_libexecdir / 'installed-tests' / pipewire_name @@ -44,7 +44,7 @@ gstack = find_program('gstack', required : false) cdata.set('HAVE_GSTACK', gstack.found()) endif -@@ -402,17 +402,17 @@ subdir('po') +@@ -403,17 +403,17 @@ subdir('po') subdir('spa') subdir('src') @@ -65,7 +65,7 @@ subdir('pipewire-v4l2') endif -@@ -423,7 +423,7 @@ if alsa_dep.found() +@@ -424,7 +424,7 @@ if alsa_dep.found() endif generate_manpages = false @@ -74,7 +74,7 @@ rst2man = find_program('rst2man', required: false) if not rst2man.found() rst2man = find_program('rst2man.py', required: get_option('man')) -@@ -444,20 +444,20 @@ endif +@@ -445,20 +445,20 @@ endif setenv = find_program('pw-uninstalled.sh') run_target('pw-uninstalled', command : [setenv, @@ -102,7 +102,7 @@ devenv.set('GST_PLUGIN_PATH', builddir / 'src'/ 'gst') -@@ -469,4 +469,6 @@ devenv.set('LD_LIBRARY_PATH', builddir / +@@ -470,4 +470,6 @@ devenv.set('LD_LIBRARY_PATH', builddir / devenv.set('PW_UNINSTALLED', '1') @@ -110,11 +110,11 @@ +if meson.version().version_compare('>=0.58.0') + meson.add_devenv(devenv) +endif -Index: pipewire-0.3.52/spa/plugins/audioconvert/meson.build +Index: pipewire-0.3.53/spa/plugins/audioconvert/meson.build =================================================================== ---- pipewire-0.3.52.orig/spa/plugins/audioconvert/meson.build -+++ pipewire-0.3.52/spa/plugins/audioconvert/meson.build -@@ -140,7 +140,7 @@ foreach a : test_apps +--- pipewire-0.3.53.orig/spa/plugins/audioconvert/meson.build ++++ pipewire-0.3.53/spa/plugins/audioconvert/meson.build +@@ -137,7 +137,7 @@ foreach a : test_apps install : installed_tests_enabled, install_dir : installed_tests_execdir / 'audioconvert'), env : [ @@ -123,7 +123,7 @@ ]) if installed_tests_enabled -@@ -170,7 +170,7 @@ foreach a : benchmark_apps +@@ -167,7 +167,7 @@ foreach a : benchmark_apps install : installed_tests_enabled, install_dir : installed_tests_execdir / 'audioconvert'), env : [ @@ -132,10 +132,10 @@ ]) if installed_tests_enabled -Index: pipewire-0.3.52/spa/tests/meson.build +Index: pipewire-0.3.53/spa/tests/meson.build =================================================================== ---- pipewire-0.3.52.orig/spa/tests/meson.build -+++ pipewire-0.3.52/spa/tests/meson.build +--- pipewire-0.3.53.orig/spa/tests/meson.build ++++ pipewire-0.3.53/spa/tests/meson.build @@ -5,7 +5,7 @@ find = find_program('find', required: fa summary({'find (for header testing)': find.found()}, bool_yn: true, section: 'Optional programs') if find.found() @@ -154,10 +154,10 @@ ] ) -Index: pipewire-0.3.52/src/daemon/meson.build +Index: pipewire-0.3.53/src/daemon/meson.build =================================================================== ---- pipewire-0.3.52.orig/src/daemon/meson.build -+++ pipewire-0.3.52/src/daemon/meson.build +--- pipewire-0.3.53.orig/src/daemon/meson.build ++++ pipewire-0.3.53/src/daemon/meson.build @@ -18,9 +18,9 @@ conf_config.set('pulse_comment', '#') conf_config_uninstalled = conf_config @@ -179,20 +179,20 @@ ) #desktop_file = i18n.merge_file( -Index: pipewire-0.3.52/src/daemon/systemd/user/meson.build +Index: pipewire-0.3.53/src/daemon/systemd/user/meson.build =================================================================== ---- pipewire-0.3.52.orig/src/daemon/systemd/user/meson.build -+++ pipewire-0.3.52/src/daemon/systemd/user/meson.build +--- pipewire-0.3.53.orig/src/daemon/systemd/user/meson.build ++++ pipewire-0.3.53/src/daemon/systemd/user/meson.build @@ -1,4 +1,4 @@ -systemd_user_services_dir = systemd.get_variable('systemduserunitdir', pkgconfig_define : [ 'prefix', prefix]) +#systemd_user_services_dir = systemd.get_variable('systemduserunitdir', pkgconfig_define : [ 'prefix', prefix]) if get_option('systemd-user-unit-dir') != '' systemd_user_services_dir = get_option('systemd-user-unit-dir') endif -Index: pipewire-0.3.52/src/modules/meson.build +Index: pipewire-0.3.53/src/modules/meson.build =================================================================== ---- pipewire-0.3.52.orig/src/modules/meson.build -+++ pipewire-0.3.52/src/modules/meson.build +--- pipewire-0.3.53.orig/src/modules/meson.build ++++ pipewire-0.3.53/src/modules/meson.build @@ -376,9 +376,9 @@ test('pw-test-protocol-native', install_dir : installed_tests_execdir, ), @@ -206,10 +206,10 @@ ] ) -Index: pipewire-0.3.52/src/tests/meson.build +Index: pipewire-0.3.53/src/tests/meson.build =================================================================== ---- pipewire-0.3.52.orig/src/tests/meson.build -+++ pipewire-0.3.52/src/tests/meson.build +--- pipewire-0.3.53.orig/src/tests/meson.build ++++ pipewire-0.3.53/src/tests/meson.build @@ -13,9 +13,9 @@ foreach a : test_apps install : installed_tests_enabled, install_dir : installed_tests_execdir), @@ -223,10 +223,10 @@ ]) if installed_tests_enabled -Index: pipewire-0.3.52/test/meson.build +Index: pipewire-0.3.53/test/meson.build =================================================================== ---- pipewire-0.3.52.orig/test/meson.build -+++ pipewire-0.3.52/test/meson.build +--- pipewire-0.3.53.orig/test/meson.build ++++ pipewire-0.3.53/test/meson.build @@ -14,8 +14,8 @@ pwtest_deps = [ ] @@ -238,10 +238,10 @@ ] pwtest_inc = [ -Index: pipewire-0.3.52/doc/meson.build +Index: pipewire-0.3.53/doc/meson.build =================================================================== ---- pipewire-0.3.52.orig/doc/meson.build -+++ pipewire-0.3.52/doc/meson.build +--- pipewire-0.3.53.orig/doc/meson.build ++++ pipewire-0.3.53/doc/meson.build @@ -1,8 +1,8 @@ doxyfile_conf = configuration_data() doxyfile_conf.set('PACKAGE_NAME', meson.project_name()) @@ -342,10 +342,10 @@ doxyfile = configure_file(input: 'Doxyfile.in', output: 'Doxyfile', -Index: pipewire-0.3.52/spa/meson.build +Index: pipewire-0.3.53/spa/meson.build =================================================================== ---- pipewire-0.3.52.orig/spa/meson.build -+++ pipewire-0.3.52/spa/meson.build +--- pipewire-0.3.53.orig/spa/meson.build ++++ pipewire-0.3.53/spa/meson.build @@ -31,7 +31,7 @@ pkgconfig.generate(filebase : 'lib@0@'.f subdir('include') @@ -363,10 +363,10 @@ +if (get_option('examples').enabled() or get_option('examples').auto()) subdir('examples') endif -Index: pipewire-0.3.52/man/meson.build +Index: pipewire-0.3.53/man/meson.build =================================================================== ---- pipewire-0.3.52.orig/man/meson.build -+++ pipewire-0.3.52/man/meson.build +--- pipewire-0.3.53.orig/man/meson.build ++++ pipewire-0.3.53/man/meson.build @@ -21,7 +21,7 @@ manpages = [ 'pw-top.1.rst.in', ] @@ -376,10 +376,10 @@ manpages += 'pw-jack.1.rst.in' endif -Index: pipewire-0.3.52/src/meson.build +Index: pipewire-0.3.53/src/meson.build =================================================================== ---- pipewire-0.3.52.orig/src/meson.build -+++ pipewire-0.3.52/src/meson.build +--- pipewire-0.3.53.orig/src/meson.build ++++ pipewire-0.3.53/src/meson.build @@ -3,10 +3,10 @@ subdir('pipewire') subdir('daemon') subdir('tools') @@ -393,10 +393,10 @@ subdir('tests') endif -Index: pipewire-0.3.52/spa/plugins/bluez5/meson.build +Index: pipewire-0.3.53/spa/plugins/bluez5/meson.build =================================================================== ---- pipewire-0.3.52.orig/spa/plugins/bluez5/meson.build -+++ pipewire-0.3.52/spa/plugins/bluez5/meson.build +--- pipewire-0.3.53.orig/spa/plugins/bluez5/meson.build ++++ pipewire-0.3.53/spa/plugins/bluez5/meson.build @@ -6,12 +6,12 @@ foreach dep: bluez5_deps endforeach @@ -447,10 +447,10 @@ lc3plus_args = codec_args lc3plus_dep = [ lc3plus_dep ] bluez_codec_lc3plus = shared_library('spa-codec-bluez5-lc3plus', -Index: pipewire-0.3.52/spa/plugins/meson.build +Index: pipewire-0.3.53/spa/plugins/meson.build =================================================================== ---- pipewire-0.3.52.orig/spa/plugins/meson.build -+++ pipewire-0.3.52/spa/plugins/meson.build +--- pipewire-0.3.53.orig/spa/plugins/meson.build ++++ pipewire-0.3.53/spa/plugins/meson.build @@ -1,16 +1,16 @@ if alsa_dep.found() subdir('alsa') @@ -504,10 +504,10 @@ -subdir('aec') \ No newline at end of file +subdir('aec') -Index: pipewire-0.3.52/spa/plugins/support/meson.build +Index: pipewire-0.3.53/spa/plugins/support/meson.build =================================================================== ---- pipewire-0.3.52.orig/spa/plugins/support/meson.build -+++ pipewire-0.3.52/spa/plugins/support/meson.build +--- pipewire-0.3.53.orig/spa/plugins/support/meson.build ++++ pipewire-0.3.53/spa/plugins/support/meson.build @@ -23,7 +23,7 @@ spa_support_lib = shared_library('spa-su install_dir : spa_plugindir / 'support') spa_support_dep = declare_dependency(link_with: spa_support_lib) @@ -517,10 +517,10 @@ evl_inc = include_directories('/usr/evl/include') evl_lib = cc.find_library('evl', dirs: ['/usr/evl/lib/'], -Index: pipewire-0.3.52/src/daemon/systemd/meson.build +Index: pipewire-0.3.53/src/daemon/systemd/meson.build =================================================================== ---- pipewire-0.3.52.orig/src/daemon/systemd/meson.build -+++ pipewire-0.3.52/src/daemon/systemd/meson.build +--- pipewire-0.3.53.orig/src/daemon/systemd/meson.build ++++ pipewire-0.3.53/src/daemon/systemd/meson.build @@ -1,6 +1,6 @@ -if get_option('systemd-system-service').allowed() +if (get_option('systemd-system-service').enabled() or get_option('systemd-system-service').auto()) @@ -530,10 +530,10 @@ +if (get_option('systemd-user-service').enabled() or get_option('systemd-user-service').auto()) subdir('user') endif -Index: pipewire-0.3.52/src/gst/meson.build +Index: pipewire-0.3.53/src/gst/meson.build =================================================================== ---- pipewire-0.3.52.orig/src/gst/meson.build -+++ pipewire-0.3.52/src/gst/meson.build +--- pipewire-0.3.53.orig/src/gst/meson.build ++++ pipewire-0.3.53/src/gst/meson.build @@ -8,7 +8,7 @@ pipewire_gst_sources = [ 'gstpipewiresrc.c', ] @@ -543,11 +543,11 @@ pipewire_gst_sources += [ 'gstpipewiredeviceprovider.c' ] endif -Index: pipewire-0.3.52/src/tools/meson.build +Index: pipewire-0.3.53/src/tools/meson.build =================================================================== ---- pipewire-0.3.52.orig/src/tools/meson.build -+++ pipewire-0.3.52/src/tools/meson.build -@@ -34,7 +34,7 @@ if ncurses_dep.found() +--- pipewire-0.3.53.orig/src/tools/meson.build ++++ pipewire-0.3.53/src/tools/meson.build +@@ -32,7 +32,7 @@ if ncurses_dep.found() endif build_pw_cat = false