On Wed, 04 Jul 2018 17:11:17 +0200, Raphaël Dingé wrote:
I'm going back to the program to see if there is anything suspect.
So I got back to the program and put a bit more logging. I have new results, but they are even more confusing.
Here is the part that writes to the buffer :
snd_pcm_wait(pcm, 1000 /* milliseconds */); snd_pcm_sframes_t avail = snd_pcm_avail_update(pcm); if (avail < 0) { std::cout << "snd_pcm_avail_update failed\n"; snd_pcm_recover (pcm, avail, 1);
}
snd_pcm_sframes_t nb_written = snd_pcm_writei(pcm, &buffer[0],
frames_per_buffer); if (nb_written < 0) { std::cout << "snd_pcm_writei failed\n"; snd_pcm_recover(pcm, nb_written, 1 /* silent */); xrun_count++; }
Not sure if this is the proper way, didn't write it myself, but looks more or less legit.
When I launch the program, nothing is output to the console.
But! If I echo 1 > xrun_injection, then I have "snd_pcm_avail_update failed" systematically.
However at the same time, no events are traces in /sys/kernel/debug/tracing/trace
You applied my patch, right? Otherwise the xrun injection won't trigger the xrun tracing event by itself, just calling snd_pcm_stop().
Takashi