[PATCH v4 2/2] mf/sar: Allow requesting more than a sample per period.
Giovanni Mascellani
gmascellani at codeweavers.com
Thu Jun 24 03:30:28 CDT 2021
Hi,
Il 24/06/21 09:52, Nikolay Sivov ha scritto:
> So why can't we keep buffering until we have a total buffer length of
> frames? How much is "target_queued_frames", is that 2 periods? If it
> will accept 3 periods at maximum, is it worse to buffer 3 instead of 2?
We have two places here where audio data is temporarily stored, so we
need two policies, one for each of them:
* the IAudioClient buffer;
* the SAR queue.
The IAudioClient buffer has a maximum size, which is the thing I simply
called "buffer size" in my previous email, and if the source if fast
enough (which usually is) it eventually gets filled anyway. This buffer
size is usually about 3 periods, I think, but that's not guaranteed.
The SAR queue is a queue, not a ring buffer, so it doesn't have any
maximum size. In line of principle you can queue up as many frames as
you wish, but that wouldn't be very sensible. The only requirement that
you have is to queue at least a period, because the IAudioClient buffer
will request more data in batches of a period, and if we have at least a
period we can keep it filled easily. So for the SAR queue I am aiming at
two periods, so we have some margin.
This means that in total we're storing more or less five periods of
audio data, two in the queue and around three in the buffer. But these
two and three are in two different places, so you can't say to replace
one with the other.
Unless of course we decide to ditch the SAR queue altogether and copy
frame data directly in the IAudioClient queue in ProcessSample. But I
guess the queue was there for a reason, so I don't know if this is viable.
Giovanni.
More information about the wine-devel
mailing list