qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [4249] Improve audio api use in WM8750.


From: andrzej zaborowski
Subject: Re: [Qemu-devel] [4249] Improve audio api use in WM8750.
Date: Fri, 25 Apr 2008 01:34:40 +0200

On 24/04/2008, Jan Kiszka <address@hidden> wrote:
> Hi Andrzej,
>
>  Andrzej Zaborowski wrote:
>  > Revision: 4249
>  ...
>  >  static void wm8750_audio_out_cb(void *opaque, int free_b)
>  >  {
>  >      struct wm8750_s *s = (struct wm8750_s *) opaque;
>  >
>  > -    s->req_out = free_b;
>  > -    s->data_req(s->opaque, free_b >> 2, s->req_in >> 2);
>  > -    wm8750_out_flush(s);
>  > +    if (s->idx_out >= free_b) {
>  > +        s->idx_out = free_b;
>  > +        s->req_out = 0;
>  > +        wm8750_out_flush(s);
>  > +    } else
>  > +        s->req_out = free_b - s->idx_out;
>  > +
>  > +    s->data_req(s->opaque, s->req_out >> 2, s->req_in >> 2);
>
>  Please make sure that the callback is always issued _before_ the flush
>  (keep in mind: it may increase the amount of data that has to be flushed
>  ASAP!). And this change also leaves the MusicPal broken.

The idea is to output free_b bytes immediately if we have that many in
the buffer (it could happen assuming that free_b value can change
between callbacks).  I'm not sure how this can break something: if
*inside* the data_req() callback we receive enough bytes to fill the
the whole buffer then dac_dat() will call out_flush().

Without that all buffering becomes useless because we flush every
sample we receive and we start to crawl.

Regards
-- 
Please do not print this email unless absolutely necessary. Spread
environmental awareness.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]