ASAN use-after-free at audioconvert.c:impl_node_process
Got ASAN crash in audioconvert, while running this branch https://gitlab.freedesktop.org/pvir/pipewire/-/tree/a2dp-sink-timings-2/ and playing sound via CVSD to Bluetooth:
#0 0x7f7f1d8470aa in _mm_store_ss /usr/lib/gcc/x86_64-redhat-linux/12/include/xmmintrin.h:963
#1 0x7f7f1d8470aa in inner_product_sse ../spa/plugins/audioconvert/resample-native-sse.c:68
#2 0x7f7f1d8470aa in do_resample_full_sse ../spa/plugins/audioconvert/resample-native-sse.c:93
#3 0x7f7f1d7e51b2 in impl_native_process ../spa/plugins/audioconvert/resample-native.c:246
#4 0x7f7f1d7c18c5 in impl_node_process ../spa/plugins/audioconvert/audioconvert.c:2601
#5 0x7f7f1d75f9e9 in impl_node_process ../spa/plugins/audioconvert/audioadapter.c:1413
#6 0x7f7f33b2018e in process_node ../src/pipewire/impl-node.c:1090
#7 0x7f7f33b22737 in node_on_fd_events ../src/pipewire/impl-node.c:1148
[clip]
0x7f7f1ba93800 is located 0 bytes inside of 2486900-byte region [0x7f7f1ba93800,0x7f7f1bcf2a74)
freed by thread T0 here:
#0 0x7f7f34811595 in __interceptor_realloc.part.0 (/lib64/libasan.so.8+0xb9595)
#1 0x7f7f1d7b5aaf in impl_node_port_use_buffers ../spa/plugins/audioconvert/audioconvert.c:2097
#2 0x7f7f1d75ed4b in impl_node_port_use_buffers ../spa/plugins/audioconvert/audioadapter.c:1377
#3 0x7f7f33b97758 in negotiate_mixer_buffers ../src/pipewire/impl-port.c:1525
#4 0x7f7f33b98734 in pw_impl_port_use_buffers ../src/pipewire/impl-port.c:1566
#5 0x7f7f22bc048b in client_node_port_use_buffers ../src/modules/module-client-node/remote-node.c:766
[clip]
#0 0x7f7f1d8470aa in _mm_store_ss /usr/lib/gcc/x86_64-redhat-linux/12/include/xmmintrin.h:963
#1 0x7f7f1d8470aa in inner_product_sse ../spa/plugins/audioconvert/resample-native-sse.c:68
#2 0x7f7f1d8470aa in do_resample_full_sse ../spa/plugins/audioconvert/resample-native-sse.c:93
#3 0x7f7f1d7e51b2 in impl_native_process ../spa/plugins/audioconvert/resample-native.c:246
#4 0x7f7f1d7c18c5 in impl_node_process ../spa/plugins/audioconvert/audioconvert.c:2601
#5 0x7f7f1d75f9e9 in impl_node_process ../spa/plugins/audioconvert/audioadapter.c:1413
#6 0x7f7f33b2018e in process_node ../src/pipewire/impl-node.c:1090
#7 0x7f7f33b22737 in node_on_fd_events ../src/pipewire/impl-node.c:1148
#8 0x7f7f2330f702 in loop_iterate ../spa/plugins/support/loop.c:430
#9 0x7f7f33a27b24 in do_loop ../src/pipewire/data-loop.c:81
#10 0x7f7f31a99c39 in custom_start ../src/modules/module-rt.c:729
#11 0x7f7f32bbee2c in start_thread (/lib64/libc.so.6+0x8ce2c)
#12 0x7f7f32c441af in clone3 (/lib64/libc.so.6+0x1121af)
0x7f7f1ba93800 is located 0 bytes inside of 2486900-byte region [0x7f7f1ba93800,0x7f7f1bcf2a74)
freed by thread T0 here:
#0 0x7f7f34811595 in __interceptor_realloc.part.0 (/lib64/libasan.so.8+0xb9595)
#1 0x7f7f1d7b5aaf in impl_node_port_use_buffers ../spa/plugins/audioconvert/audioconvert.c:2097
#2 0x7f7f1d75ed4b in impl_node_port_use_buffers ../spa/plugins/audioconvert/audioadapter.c:1377
#3 0x7f7f33b97758 in negotiate_mixer_buffers ../src/pipewire/impl-port.c:1525
#4 0x7f7f33b98734 in pw_impl_port_use_buffers ../src/pipewire/impl-port.c:1566
#5 0x7f7f22bc048b in client_node_port_use_buffers ../src/modules/module-client-node/remote-node.c:766
#6 0x7f7f22c16fbd in client_node_demarshal_port_use_buffers ../src/modules/module-client-node/protocol-native.c:582
#7 0x7f7f22f4d7e5 in process_remote ../src/modules/module-protocol-native.c:915
#8 0x7f7f22f4e1ed in on_remote_data ../src/modules/module-protocol-native.c:949
#9 0x7f7f2330fa47 in source_io_func ../spa/plugins/support/loop.c:442
#10 0x7f7f2330f702 in loop_iterate ../spa/plugins/support/loop.c:430
#11 0x7f7f34478c85 in wp_loop_source_dispatch ../subprojects/wireplumber/lib/wp/core.c:42
#12 0x7f7f333bcfae in g_main_context_dispatch (/lib64/libglib-2.0.so.0+0x54fae)
previously allocated by thread T0 here:
#0 0x7f7f34811595 in __interceptor_realloc.part.0 (/lib64/libasan.so.8+0xb9595)
#1 0x7f7f1d7b5aaf in impl_node_port_use_buffers ../spa/plugins/audioconvert/audioconvert.c:2097
#2 0x7f7f1d73cf90 in negotiate_buffers ../spa/plugins/audioconvert/audioadapter.c:422
#3 0x7f7f1d73ee9b in configure_format ../spa/plugins/audioconvert/audioadapter.c:480
#4 0x7f7f1d74758c in negotiate_format ../spa/plugins/audioconvert/audioadapter.c:795
#5 0x7f7f1d748861 in impl_node_send_command ../spa/plugins/audioconvert/audioadapter.c:816
#6 0x7f7f33b0987b in node_update_state ../src/pipewire/impl-node.c:350
#7 0x7f7f33b3b85a in on_state_complete ../src/pipewire/impl-node.c:2132
#8 0x7f7f33c16100 in process_work_queue ../src/pipewire/work-queue.c:87
#9 0x7f7f23315e4b in source_event_func ../spa/plugins/support/loop.c:591
#10 0x7f7f2330f702 in loop_iterate ../spa/plugins/support/loop.c:430
#11 0x7f7f34478c85 in wp_loop_source_dispatch ../subprojects/wireplumber/lib/wp/core.c:42
#12 0x7f7f333bcfae in g_main_context_dispatch (/lib64/libglib-2.0.so.0+0x54fae)
Thread T1 created by T0 here:
#0 0x7f7f347a33e6 in __interceptor_pthread_create (/lib64/libasan.so.8+0x4b3e6)
#1 0x7f7f33c091f5 in impl_create ../src/pipewire/thread.c:87
#2 0x7f7f31a95011 in spa_thread_utils_create ../spa/include/spa/support/thread.h:85
#3 0x7f7f31a99e63 in impl_create ../src/modules/module-rt.c:746
#4 0x7f7f33a261d0 in spa_thread_utils_create ../spa/include/spa/support/thread.h:85
#5 0x7f7f33a29798 in pw_data_loop_start ../src/pipewire/data-loop.c:207
#6 0x7f7f339f9934 in pw_context_new ../src/pipewire/context.c:375
#7 0x7f7f3447aa51 in wp_core_constructed ../subprojects/wireplumber/lib/wp/core.c:288
#8 0x7f7f334c7f4b in g_object_new_internal (/lib64/libgobject-2.0.so.0+0x23f4b)
SUMMARY: AddressSanitizer: heap-use-after-free /usr/lib/gcc/x86_64-redhat-linux/12/include/xmmintrin.h:963 in _mm_store_ss
Shadow bytes around the buggy address:
0x0ff06374a6b0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0ff06374a6c0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0ff06374a6d0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0ff06374a6e0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0ff06374a6f0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
=>0x0ff06374a700:[fd]fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
0x0ff06374a710: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
0x0ff06374a720: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
0x0ff06374a730: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
0x0ff06374a740: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
0x0ff06374a750: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
Shadow byte legend (one shadow byte represents 8 application bytes):
Addressable: 00
Partially addressable: 01 02 03 04 05 06 07
Heap left redzone: fa
Freed heap region: fd
Stack left redzone: f1
Stack mid redzone: f2
Stack right redzone: f3
Stack after return: f5
Stack use after scope: f8
Global redzone: f9
Global init order: f6
Poisoned by user: f7
Container overflow: fc
Array cookie: ac
Intra object redzone: bb
ASan internal: fe
Left alloca redzone: ca
Right alloca redzone: cb
==82110==ABORTING
$ coredumpctl gdb
...
(gdb) up
#13 0x00007f7f1d7c18c6 in impl_node_process (object=0x632000078d28) at ../spa/plugins/audioconvert/audioconvert.c:2601
2601 resample_process(&this->resample, in_datas, &in_len, out_datas, &out_len);
(gdb) p *this
$5 = {
handle = {
version = 0,
get_interface = 0x7f7f1d7c4256 <impl_get_interface>,
clear = 0x7f7f1d7c447b <impl_clear>
},
node = {
iface = {
type = 0x7f7f1d8c93a0 "Spa:Pointer:Interface:Node",
version = 0,
cb = {
funcs = 0x7f7f1d8ff560 <impl_node>,
data = 0x632000078d28
}
}
},
log = 0x7f7f3464c8c0 <wp_spa_log>,
cpu = 0x60e000000400,
cpu_flags = 19419,
max_align = 32,
quantum_limit = 8192,
direction = SPA_DIRECTION_OUTPUT,
props = {
volume = 1,
n_channels = 1,
channel_map = {2, 0 <repeats 63 times>},
channel = {
mute = false,
n_volumes = 1,
volumes = {0.00237037032, 1 <repeats 63 times>}
},
soft = {
mute = false,
n_volumes = 1,
volumes = {1 <repeats 64 times>}
},
monitor = {
mute = false,
n_volumes = 1,
volumes = {1 <repeats 64 times>}
},
have_soft_volume = 1,
mix_disabled = 0,
resample_quality = 4,
resample_disabled = 0,
rate = 1
},
io_position = 0x7f7f1c28d230,
io_rate_match = 0x632000078b50,
info_all = 5,
info = {
max_input_ports = 65,
max_output_ports = 65,
change_mask = 0,
flags = 25,
props = 0x0,
params = 0x632000079200,
n_params = 4
},
params = {{
id = 10,
flags = 2,
user = 0,
padding = {0, 0, 0, 0, 0}
}, {
id = 11,
flags = 7,
user = 0,
padding = {0, 0, 0, 0, 0}
}, {
id = 1,
flags = 2,
user = 0,
padding = {0, 0, 0, 0, 0}
}, {
id = 2,
flags = 6,
user = 0,
padding = {0, 0, 0, 0, 0}
}},
hooks = {
list = {
next = 0x632000078b08,
prev = 0x632000078b08
}
},
monitor = 1,
monitor_channel_volumes = 0,
dir = {{
ports = {0x629000140200, 0x0 <repeats 64 times>},
n_ports = 1,
mode = SPA_PARAM_PORT_CONFIG_MODE_dsp,
format = {
media_type = 1,
media_subtype = 1,
info = {
raw = {
format = SPA_AUDIO_FORMAT_F32P,
flags = 0,
rate = 48000,
channels = 1,
position = {2, 0 <repeats 63 times>}
},
dsp = {
format = SPA_AUDIO_FORMAT_F32P
},
iec958 = {
codec = 518,
flags = 0,
rate = 48000
},
dsd = {
bitorder = (SPA_PARAM_BITORDER_lsb | unknown: 0x204),
flags = 0,
interleave = 48000,
rate = 1,
channels = 2,
position = {0 <repeats 64 times>}
}
}
},
have_format = 1,
have_profile = 1,
latency = {
direction = SPA_DIRECTION_INPUT,
min_quantum = 1,
max_quantum = 1,
min_rate = 0,
max_rate = 0,
min_ns = 0,
max_ns = 0
},
remap = {0 <repeats 65 times>},
conv = {
noise_bits = 0,
method = 0,
src_fmt = 518,
dst_fmt = 518,
n_channels = 1,
rate = 0,
cpu_flags = 0,
func_name = 0x7f7f1d8de900 "conv_copy32d_c",
is_passthrough = 1,
scale = 2.32830644e-10,
random = {855636226, 1749698586, 1469348094, 1956297539, 1036140795, 463480570, 2040651434, 1975960378, 317097467, 1892066601, 1376710097, 927612902, 1330573317, 603570492, 1687926652, 660260756, 959997301, 485560280, 402724286, 593209441, 1194953865, 894429689, 364228444, 1947346619},
prev = {0 <repeats 24 times>},
noise_method = 0,
noise = 0x6210003b3900,
noise_size = 1024,
ns = 0x0,
n_ns = 0,
shaper = {{
e = {0 <repeats 16 times>},
idx = 0,
r = 0
} <repeats 64 times>},
process = 0x7f7f1d80e2e0 <conv_copy32d_c>,
free = 0x7f7f1d7c8610 <impl_convert_free>
},
need_remap = 0,
is_passthrough = 0,
control = 0
}, {
ports = {0x629000145200, 0x62900014a200, 0x0 <repeats 63 times>},
n_ports = 2,
mode = SPA_PARAM_PORT_CONFIG_MODE_convert,
format = {
media_type = 1,
media_subtype = 1,
info = {
raw = {
format = SPA_AUDIO_FORMAT_S16_LE,
flags = 0,
rate = 8000,
channels = 1,
position = {2, 0 <repeats 63 times>}
},
dsp = {
format = SPA_AUDIO_FORMAT_S16_LE
},
iec958 = {
codec = 259,
flags = 0,
rate = 8000
},
dsd = {
bitorder = (SPA_PARAM_BITORDER_msb | SPA_PARAM_BITORDER_lsb | unknown: 0x100),
flags = 0,
interleave = 8000,
rate = 1,
channels = 2,
position = {0 <repeats 64 times>}
}
}
},
have_format = 1,
have_profile = 1,
latency = {
direction = SPA_DIRECTION_OUTPUT,
min_quantum = 0,
max_quantum = 0,
min_rate = 0,
max_rate = 0,
min_ns = 0,
max_ns = 0
},
remap = {0 <repeats 65 times>},
conv = {
noise_bits = 0,
method = 0,
src_fmt = 518,
dst_fmt = 259,
n_channels = 1,
rate = 8000,
cpu_flags = 16,
func_name = 0x7f7f1d8dfbc0 "conv_f32d_to_s16_sse2",
is_passthrough = 0,
scale = 2.32830644e-10,
random = {221558440, 270744729, 1063958031, 1633108117, 2114738097, 2007905771, 1469834481, 822890675, 1610120709, 791698927, 631704567, 498777856, 1255179497, 524872353, 327254586, 1572276965, 269455306, 1703964683, 352406219, 1600028624, 160051528, 2040332871, 112805732, 1120048829},
prev = {0 <repeats 24 times>},
noise_method = 0,
noise = 0x6210003b4d00,
noise_size = 1024,
ns = 0x0,
n_ns = 0,
shaper = {{
e = {0 <repeats 16 times>},
idx = 0,
r = 0
} <repeats 64 times>},
process = 0x7f7f1d870df0 <conv_f32d_to_s16_sse2>,
free = 0x7f7f1d7c8610 <impl_convert_free>
},
need_remap = 0,
is_passthrough = 0,
control = 0
}},
mix = {
src_chan = 1,
dst_chan = 1,
src_mask = 4,
dst_mask = 4,
cpu_flags = 8,
options = 4,
upmix = 2,
log = 0x7f7f3464c8c0 <wp_spa_log>,
func_name = 0x7f7f1d8e7920 "channelmix_copy_sse",
flags = 14,
matrix_orig = {{1, 0 <repeats 63 times>} <repeats 64 times>},
matrix = {{1, 0 <repeats 63 times>}, {0 <repeats 64 times>} <repeats 63 times>},
freq = 48000,
lfe_cutoff = 150,
fc_cutoff = 12000,
rear_delay = 12,
widen = 0,
hilbert_taps = 0,
lr4 = {{
bq = {
b0 = 0,
b1 = 0,
b2 = 0,
a1 = 0,
a2 = 0
},
x1 = 0,
x2 = 0,
y1 = 0,
y2 = 0,
z1 = 0,
z2 = 0,
active = false
} <repeats 64 times>},
buffer = {{0 <repeats 4096 times>}, {0 <repeats 4096 times>}},
pos = {0, 0},
delay = 576,
taps = {1, 0 <repeats 254 times>},
n_taps = 1,
process = 0x7f7f1d84afa0 <channelmix_copy_sse>,
set_volume = 0x7f7f1d7caa00 <impl_channelmix_set_volume>,
free = 0x7f7f1d7ca980 <impl_channelmix_free>,
data = 0x0
},
resample = {
log = 0x7f7f3464c8c0 <wp_spa_log>,
cpu_flags = 8,
func_name = 0x7f7f1d8e8220 "full_sse",
channels = 1,
i_rate = 48000,
o_rate = 8000,
rate = 0,
quality = 4,
free = 0x7f7f1d7e4440 <impl_native_free>,
update_rate = 0x7f7f1d7e3570 <impl_native_update_rate>,
in_len = 0x7f7f1d7e3240 <impl_native_in_len>,
out_len = 0x0,
process = 0x7f7f1d7e4f10 <impl_native_process>,
reset = 0x7f7f1d7e62e0 <impl_native_reset>,
delay = 0x7f7f1d7e3170 <impl_native_delay>,
data = 0x7f7f1b7d5800
},
volume = {
cpu_flags = 8,
func_name = 0x7f7f1d8e8740 "volume_f32_sse",
log = 0x0,
flags = 0,
process = 0x7f7f1d84a5a0 <volume_f32_sse>,
free = 0x7f7f1d7ea6d0 <impl_volume_free>,
data = 0x0
},
rate_scale = 1,
in_offset = 0,
out_offset = 0,
started = 1,
peaks = 0,
is_passthrough = 0,
drained = 0,
empty_size = 76456,
empty = 0x6310000a0800,
scratch = 0x6310000b4800,
tmp = {0x7f7f1aec6800, 0x7f7f1aa06800},
tmp_datas = {{0x7f7f1ba93800, 0x7f7f1ba9cd60, 0x7f7f1baa62c0, 0x7f7f1baaf800, 0x7f7f1bab8d60, 0x7f7f1bac22c0, 0x7f7f1bacb800, 0x7f7f1bad4d60, 0x7f7f1bade2a0, 0x7f7f1bae7800, 0x7f7f1baf0d60, 0x7f7f1bafa2a0, 0x7f7f1bb03800, 0x7f7f1bb0cd60, 0x7f7f1bb162a0, 0x7f7f1bb1f800, 0x7f7f1bb28d40, 0x7f7f1bb322a0, 0x7f7f1bb3b800, 0x7f7f1bb44d40, 0x7f7f1bb4e2a0, 0x7f7f1bb57800, 0x7f7f1bb60d40, 0x7f7f1bb6a2a0, 0x7f7f1bb737e0, 0x7f7f1bb7cd40, 0x7f7f1bb862a0, 0x7f7f1bb8f7e0, 0x7f7f1bb98d40, 0x7f7f1bba22a0, 0x7f7f1bbab7e0, 0x7f7f1bbb4d40, 0x7f7f1bbbe280, 0x7f7f1bbc77e0, 0x7f7f1bbd0d40, 0x7f7f1bbda280, 0x7f7f1bbe37e0, 0x7f7f1bbecd40, 0x7f7f1bbf6280, 0x7f7f1bbff7e0, 0x7f7f1bc08d20, 0x7f7f1bc12280, 0x7f7f1bc1b7e0, 0x7f7f1bc24d20, 0x7f7f1bc2e280, 0x7f7f1bc377e0, 0x7f7f1bc40d20, 0x7f7f1bc4a280, 0x7f7f1bc537c0, 0x7f7f1bc5cd20, 0x7f7f1bc66280, 0x7f7f1bc6f7c0, 0x7f7f1bc78d20, 0x7f7f1bc82280, 0x7f7f1bc8b7c0, 0x7f7f1bc94d20, 0x7f7f1bc9e260, 0x7f7f1bca77c0, 0x7f7f1bcb0d20, 0x7f7f1bcba260, 0x7f7f1bcc37c0, 0x7f7f1bcccd20, 0x7f7f1bcd6260, 0x7f7f1bcdf7c0, 0x7f7f1bce8d00}, {0x7f7f1b831800, 0x7f7f1b83ad60, 0x7f7f1b8442c0, 0x7f7f1b84d800, 0x7f7f1b856d60, 0x7f7f1b8602c0, 0x7f7f1b869800, 0x7f7f1b872d60, 0x7f7f1b87c2a0, 0x7f7f1b885800, 0x7f7f1b88ed60, 0x7f7f1b8982a0, 0x7f7f1b8a1800, 0x7f7f1b8aad60, 0x7f7f1b8b42a0, 0x7f7f1b8bd800, 0x7f7f1b8c6d40, 0x7f7f1b8d02a0, 0x7f7f1b8d9800, 0x7f7f1b8e2d40, 0x7f7f1b8ec2a0, 0x7f7f1b8f5800, 0x7f7f1b8fed40, 0x7f7f1b9082a0, 0x7f7f1b9117e0, 0x7f7f1b91ad40, 0x7f7f1b9242a0, 0x7f7f1b92d7e0, 0x7f7f1b936d40, 0x7f7f1b9402a0, 0x7f7f1b9497e0, 0x7f7f1b952d40, 0x7f7f1b95c280, 0x7f7f1b9657e0, 0x7f7f1b96ed40, 0x7f7f1b978280, 0x7f7f1b9817e0, 0x7f7f1b98ad40, 0x7f7f1b994280, 0x7f7f1b99d7e0, 0x7f7f1b9a6d20, 0x7f7f1b9b0280, 0x7f7f1b9b97e0, 0x7f7f1b9c2d20, 0x7f7f1b9cc280, 0x7f7f1b9d57e0, 0x7f7f1b9ded20, 0x7f7f1b9e8280, 0x7f7f1b9f17c0, 0x7f7f1b9fad20, 0x7f7f1ba04280, 0x7f7f1ba0d7c0, 0x7f7f1ba16d20, 0x7f7f1ba20280, 0x7f7f1ba297c0, 0x7f7f1ba32d20, 0x7f7f1ba3c260, 0x7f7f1ba457c0, 0x7f7f1ba4ed20, 0x7f7f1ba58260, 0x7f7f1ba617c0, 0x7f7f1ba6ad20, 0x7f7f1ba74260, 0x7f7f1ba7d7c0, 0x7f7f1ba86d00}}
}
(gdb) up
#14 0x00007f7f1d75f9ea in impl_node_process (object=0x632000078828) at ../spa/plugins/audioconvert/audioadapter.c:1413
1413 status = this->convert ? spa_node_process(this->convert) : 0;
(gdb) p *this
$6 = {
handle = {
version = 0,
get_interface = 0x7f7f1d760a70 <impl_get_interface>,
clear = 0x7f7f1d760c95 <impl_clear>
},
node = {
iface = {
type = 0x7f7f1d8a8700 "Spa:Pointer:Interface:Node",
version = 0,
cb = {
funcs = 0x7f7f1d8faf40 <impl_node>,
data = 0x632000078828
}
}
},
log = 0x7f7f3464c8c0 <wp_spa_log>,
cpu = 0x60e000000400,
max_align = 32,
direction = SPA_DIRECTION_INPUT,
target = 0x632000078d40,
follower = 0x62300001a540,
follower_listener = {
link = {
next = 0x62300001a578,
prev = 0x62300001a578
},
cb = {
funcs = 0x7f7f1d8fae40 <follower_node_events>,
data = 0x632000078828
},
removed = 0x0,
priv = 0x0
},
follower_flags = 0,
follower_current_format = {
media_type = 1,
media_subtype = 1,
info = {
raw = {
format = SPA_AUDIO_FORMAT_S16_LE,
flags = 0,
rate = 8000,
channels = 1,
position = {2, 0 <repeats 63 times>}
},
dsp = {
format = SPA_AUDIO_FORMAT_S16_LE
},
iec958 = {
codec = 259,
flags = 0,
rate = 8000
},
dsd = {
bitorder = (SPA_PARAM_BITORDER_msb | SPA_PARAM_BITORDER_lsb | unknown: 0x100),
flags = 0,
interleave = 8000,
rate = 1,
channels = 2,
position = {0 <repeats 64 times>}
}
}
},
default_format = {
media_type = 4031300064,
media_subtype = 32764,
info = {
raw = {
format = SPA_AUDIO_FORMAT_F32P,
flags = 0,
rate = 0,
channels = 1,
position = {2, 0 <repeats 63 times>}
},
dsp = {
format = SPA_AUDIO_FORMAT_F32P
},
iec958 = {
codec = 518,
flags = 0,
rate = 0
},
dsd = {
bitorder = (SPA_PARAM_BITORDER_lsb | unknown: 0x204),
flags = 0,
interleave = 0,
rate = 1,
channels = 2,
position = {0 <repeats 63 times>, 878153344}
}
}
},
hnd_convert = 0x632000078d28,
convert = 0x632000078d40,
convert_listener = {
link = {
next = 0x632000079280,
prev = 0x632000079280
},
cb = {
funcs = 0x7f7f1d8faea0 <convert_node_events>,
data = 0x632000078828
},
removed = 0x0,
priv = 0x0
},
convert_flags = 0,
n_buffers = 2,
buffers = 0x63100008c800,
io_buffers = {
status = 1,
buffer_id = 0
},
io_rate_match = {
delay = 172,
size = 49155,
rate = 1,
flags = 0,
padding = {0, 0, 0, 0, 0, 0, 0}
},
io_position = 0x7f7f1c28d230,
info_all = 5,
info = {
max_input_ports = 65,
max_output_ports = 0,
change_mask = 0,
flags = 9,
props = 0x0,
params = 0x632000078bc0,
n_params = 8
},
params = {{
id = 3,
flags = 3,
user = 0,
padding = {0, 0, 0, 0, 0}
}, {
id = 1,
flags = 2,
user = 0,
padding = {0, 0, 0, 0, 0}
}, {
id = 2,
flags = 6,
user = 0,
padding = {0, 0, 0, 0, 0}
}, {
id = 4,
flags = 6,
user = 0,
padding = {0, 0, 0, 0, 0}
}, {
id = 10,
flags = 3,
user = 0,
padding = {0, 0, 0, 0, 0}
}, {
id = 11,
flags = 7,
user = 0,
padding = {0, 0, 0, 0, 0}
}, {
id = 15,
flags = 6,
user = 0,
padding = {0, 0, 0, 0, 0}
}, {
id = 16,
flags = 6,
user = 0,
padding = {0, 0, 0, 0, 0}
}},
convert_params_flags = {0, 2, 6, 0, 2, 7, 0, 0},
follower_params_flags = {2, 2, 6, 6, 0, 0, 7, 0},
hooks = {
list = {
next = 0x61d000871a10,
prev = 0x61d000871a10
}
},
callbacks = {
funcs = 0x7f7f22cf0480 <node_callbacks>,
data = 0x61300012c638
},
add_listener = 0,
have_format = 1,
started = 1,
driver = 1,
async = 0,
passthrough = 0,
follower_removing = 0
}