assert in gstaudioringbuffer.c: line 2048 when playing mono WAV
I try to play a mono 22kHz WAV file through QtMultimedia. Output is ALSA, installed are gstreamer, gst-plugins-base, gst-plugins-good, all version 1.15.2 (it failed the same in 1.14.4).
The problem is here:
Thread 9 "aqueue:src" hit Breakpoint 1, gst_audio_get_channel_reorder_map (channels=channels@entry=1, from=from@entry=0x7fffd76592a0, to=to@entry=0x7fffe4014694, reorder_map=reorder_map@entry=0x7fffe401482c) at audio-channels.c:455
(gdb) frame 2
#2 0x00007fffec67c08e in alsa_detect_channels_mapping (obj=0x7fffe4012280, handle=handle@entry=0x7fffe4057240, spec=spec@entry=0x7fffe4014668, channels=channels@entry=1, buf=buf@entry=0x7fffe40145e0) at gstalsa.c:822
822 gstalsa.c: No such file or directory.
(gdb) p buf
$5 = (GstAudioRingBuffer *) 0x7fffe40145e0
(gdb) p *buf
$6 = {object = {object = {g_type_instance = {g_class = 0x7fffe4010910}, ref_count = 1, qdata = 0x0}, lock = {p = 0x1, i = {1, 0}}, name = 0x7fffe4012be0 "audiosinkringbuffer1", parent = 0x7fffe4012280, flags = 0, control_bindings = 0x0,
control_rate = 100000000, last_sync = 18446744073709551615, _gst_reserved = 0x0}, cond = {p = 0x0, i = {0, 0}}, open = 1, acquired = 1, memory = 0x0, size = 0, timestamps = 0x0, spec = {caps = 0x6a3d40, type = GST_AUDIO_RING_BUFFER_FORMAT_TYPE_RAW,
info = {finfo = 0x7fffefac9c30 <formats+208>, flags = GST_AUDIO_FLAG_NONE, layout = GST_AUDIO_LAYOUT_INTERLEAVED, rate = 22050, channels = 1, bpf = 1, position = {GST_AUDIO_CHANNEL_POSITION_MONO, GST_AUDIO_CHANNEL_POSITION_INVALID <repeats 63 times>},
_gst_reserved = {0x0, 0x0, 0x0, 0x0}}, latency_time = 10000, buffer_time = 200000, segsize = 470, segtotal = 8, seglatency = -1, _gst_reserved = {0x0, 0x0, 0x0, 0x0}}, samples_per_seg = 0, empty_seg = 0x0, state = 0, segdone = 0, segbase = 0,
waiting = 0, callback = 0x0, cb_data = 0x0, need_reorder = 0, channel_reorder_map = {0 <repeats 64 times>}, flushing = 0, may_start = 0, active = 0, cb_data_notify = 0x0, _gst_reserved = {0x0, 0x0, 0x0}}
(gdb) p pos
$7 = {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT, GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT, -469678488, 32767, -553667800, 32767, -553667808, 32767}
(gdb) frame 1
#1 0x00007fffefa7e86f in gst_audio_ring_buffer_set_channel_positions (buf=0x7fffe40145e0, position=0x7fffdeffb2a0) at gstaudioringbuffer.c:2046
2046 gstaudioringbuffer.c: No such file or directory.
(gdb) frame 0
#0 gst_audio_get_channel_reorder_map (channels=channels@entry=1, from=from@entry=0x7fffdeffb2a0, to=to@entry=0x7fffe4014694, reorder_map=reorder_map@entry=0x7fffe401482c) at audio-channels.c:455
455 audio-channels.c: No such file or directory.
(gdb) p *from
$8 = GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT
(gdb) p *to
$9 = GST_AUDIO_CHANNEL_POSITION_MONO
(gdb) p channels
$10 = 1
[…]
** (process:1944): CRITICAL **: 21:48:04.198: file gstaudioringbuffer.c: line 2048 (gst_audio_ring_buffer_set_channel_positions): should not be reached
If I use a stereo WAV file this assertion is not hit.
Backtrace:
#0 gst_audio_get_channel_reorder_map (channels=channels@entry=1, from=from@entry=0x7fffdeffb2a0, to=to@entry=0x7fffe4014694, reorder_map=reorder_map@entry=0x7fffe401482c) at audio-channels.c:455
#1 0x00007fffefa7e86f in gst_audio_ring_buffer_set_channel_positions (buf=0x7fffe40145e0, position=0x7fffdeffb2a0) at gstaudioringbuffer.c:2046
#2 0x00007fffec67c08e in alsa_detect_channels_mapping (obj=0x7fffe4012280, handle=handle@entry=0x7fffe4057240, spec=spec@entry=0x7fffe4014668, channels=channels@entry=1, buf=buf@entry=0x7fffe40145e0) at gstalsa.c:822
#3 0x00007fffec6740cb in gst_alsasink_prepare (asink=<optimized out>, spec=0x7fffe4014668) at gstalsasink.c:914
#4 0x00007fffefaa0ea5 in gst_audio_sink_ring_buffer_acquire (buf=0x7fffe40145e0, spec=0x7fffe4014668) at gstaudiosink.c:398
#5 0x00007fffefa7b27c in gst_audio_ring_buffer_acquire (buf=0x7fffe40145e0, spec=spec@entry=0x7fffe4014668) at gstaudioringbuffer.c:625
#6 0x00007fffefa9a4c6 in gst_audio_base_sink_setcaps (bsink=0x7fffe4012280, caps=<optimized out>) at gstaudiobasesink.c:950