The root cause of this all seems to be a bug in the interface between
pulseaudio (or the puseaudio interface for pipewire in Bookwork) and Qt
audio device handling.
After suspending the SoundInput the audio thread is stuck spinning in a
loop somewhere in the qt multimedia plugin for pulse and/or the libpulse
code.
This results in it hogging the CPU core so the modulator code never manages
to create output

The good news is that this only seems to happen if the output audio device
is selected as pulse (and possibly other devices that go through pulse).
If I select the direct alsa device for both input and output this does not
happen and transmit and decode seems to work.

I at least learned a little how the wsjtx app is organized :)

73 de TF3HR

On Sun, Nov 5, 2023 at 3:53 PM Hrafnkell Eiriksson <h...@tf3hr.net> wrote:

> And the reason for the 100% cpu load that prevents the audio out from
> running seems to have something to do with the suspend() call on the
> SoundInput. If I comment that out, nothing goes to high CPU load.
> Just disabling monitoring through the GUI (main window) is enough to go to
> 100% cpu load on wsjtx.
>
> Not sure why this happens...
>
> 73 de TF3HR
>
> On Sun, Nov 5, 2023 at 12:52 PM Hrafnkell Eiriksson <h...@tf3hr.net> wrote:
>
>> Splitting the work done by the m_audioThread in widget/mainwindow.cpp
>> into two threads, m_audioInThread and m_audioOutThread also solves the
>> problem and is probably a better solution.
>> I've put the modulator and soundOutput on m_audioOutThread and the
>> detector and soundInput on the m_audioInThread.
>>
>> According to top, both the wsjtx main thread and a second thread (I'm
>> guessing the audioInThread are both taking close to 100% cpu). The core of
>> the problem might just be that the audio out part of the code was never
>> able to run since the other parts were fully utilizing the single cpu core
>> the audio was running on.When I split the work between two cores the audio
>> out code has a chance to run.
>>
>> I'm basing my changes on commit 4667929d0e5a65569d3d0fbb331c4fd1cb1368b8
>> (HEAD -> master, tag: wsjtx-2.7.0-rc2, origin/master, origin/HEAD)
>>
>> 73 de TF3HR
>>
>> On Sat, Nov 4, 2023 at 9:14 PM Hrafnkell Eiriksson <h...@tf3hr.net> wrote:
>>
>>> I've been trying to figure out why I get no audio output on the
>>> Raspberry Pi and have found out that it seems to be related to threading.
>>>
>>> After liberal sprinkling of qDebug() in the code to see what was
>>> happening and in what order things were called I figured out that the
>>> Modulator code was never run after pressing tune.
>>> The first press of the Tune button will lead to the call of
>>> Modulator::tune() but after that no code in Modulator was run.
>>> Repeated click on Tune would not result in the tune signal being
>>> processed by Modulator::tune.
>>>
>>> I then noticed that soundOutput, modulator, soundInput and detector were
>>> all moved to the m_audioThread in mainwindow.cpp.
>>> After some trial and error I found out that by not moving the
>>> m_modulator to the m_audioThread (commenting out  m_modulator->moveToThread
>>> (&m_audioThread);) would "solve" the no-audio generated on Tune.
>>> I can now press Tune repeatedly and always get sound in my audio device.
>>>
>>> I don't know if this is a proper solution.
>>>
>>> Also, I can't find where the m_audioThread is constructed in the code.
>>> Adding an initializer for it to construct it in the MainWindow constructor
>>> does not help.
>>>
>>> Hope someone who knows the code better than me can help me in the right
>>> direction. This seems to be a threading issue, priorities and/or a locking
>>> issue?
>>>
>>> Thanks and 73
>>>   Hrafnkell TF3HR
>>>
>>>
>>> On Sun, Oct 29, 2023 at 8:44 PM Hrafnkell Eiriksson <h...@tf3hr.net>
>>> wrote:
>>>
>>>> Hi
>>>>
>>>> I recently installed wstjx 2.6.1 on a RPi4 running an up to date
>>>> Bookworm version of the Debian/RaspberryPI-OS. Wsjtx is installed from the
>>>> distribution repository.
>>>>
>>>> I am unable to get it to output audio from wsjtx.
>>>>
>>>> I've tried two different USB connected audio interfaces, a DigiRig
>>>> mobile and a Logitech PRO headset (that comes with a usb to 3.5mm jack
>>>> adapter).
>>>> I've tried selecting default audio streams in the audio setup for
>>>> output and the specific card stream (e.g. hw:CARD=PRO,DEV=0). No audio is
>>>> generated when pressing the Tune button.
>>>>
>>>> I've used pavucontrol to monitor the audio sources generated and an
>>>> output stream is never set up for the wsjtx program. An input stream is
>>>> visible in the pavucontrol as "ALSA plug-in [wsjtx]" and audio input works
>>>> fine.
>>>>
>>>> I've tried both the 64 and 32 bit versions of the Bookworm distribution
>>>> of RPiOS.
>>>>
>>>> Any help would be appreciated in figuring this out.
>>>>
>>>> Thanks and 73
>>>>   TF3HR Hrafnkell
>>>>
>>>
_______________________________________________
wsjt-devel mailing list
wsjt-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wsjt-devel

Reply via email to