[pulseaudio-discuss] PulseAudio <-> ALSA issues
Wolfgang Rosenauer
wolfgang at rosenauer.org
Tue Jul 8 11:27:09 PDT 2008
Hi Colin,
Colin Guthrie wrote:
>> I've also opened a bug here:
>> https://bugzilla.novell.com/show_bug.cgi?id=405354
>>
>> I've rewritten some of the Alsa-using code to fix some issues which were
>> in the application but in its current state I can't think of a major
>> issue in the app which would cause PA to fail.
>> alsa lib doesn't return an error in any of it's calls but sound simply
>> doesn't start while it should.
>>
>> The device seems to be initialized correctly and PCM stream is written
>> to the buffer but stream never starts. The pulse audio config thingy is
>> showing the application and offers a volume control for it but that's it.
>>
>> Anyone has any hints for me please?
>
> While I don't see anything in the bug report's attachment about calls to
> snd_pcm_delay(), you do mention it in a comment.
>
> I suspect you are making the same mistake that the wine people have made
> with regards to this function. It should return a delay that the
> application should expect before a sample played now is actually heard.
> It has been used incorrectly by some implementations to check whether a
> queued sample has been fully output: i.e. when the function returns 0,
> the sample has finished playing as there is no delay left. This is not
> actually a correct use of the function. Wine people got this wrong, as
> have several others. This is in part due to the high level documentation
> of the function in the alsa docs mentioned in the implementation details
> with reference to frame pointers. From this implementation (used for
> hardware devices) it is only a small logical step to assume that it will
> eventually return 0.
>
> When used with a pulseaudio, advanced latency information is included in
> the return value and it will rarely (if ever) return 0.
I don't think that's the issue in my case.
I use snd_pcm_delay() actually to get an idea how long/big our buffer
still is to tell the stream delivery to send data to a second (software)
buffer. So I get the buffered frames from alsa's buffer to know how many
frames are in my queue before requesting more data from the audio stream.
The application never waits to hit a delay of 0.
That doesn't explain my observations anyway since I can verify that I
write via snd_pcm_writei() while the PCM is in PREPARED state what
should trigger the sound output. But I can't hear anything and following
calls to snd_pcm_delay() and snd_pcm_avail_update() show that the delay
is always the buffer size and doesn't change. That suggests that the
actual sound output never starts.
Thanks anyway,
Wolfgang
More information about the pulseaudio-discuss
mailing list