Re: Driver design question

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

 



On Wed, 2006-09-27 at 19:18 +0200, Takashi Iwai wrote:
> At Mon, 25 Sep 2006 15:54:22 -0400,
> Lee Revell wrote:
> > Here is the code - can you see anything wrong with it?  It's derived
> > from the ALSA dummy driver and still uses the dummy driver's hardware
> > pointer and timer scheme for calling pcm_period_elapsed() - could this
> > be the problem?  My attempts to track the hardware pointer more
> > accurately and call pcm_period_elapsed from the copy callback have not
> > been successful.
> > 
> > Most of the work is done in the workqueue dream_handle_pcm_queue() and
> > the copy callback.
> 
> Well, when you have an intermediate buffer (allocated via
> snd_pcm_lib_malloc(), you don't need copy and silent callbacks.  The
> data is written on the intermediate buffer.  Then, the workq copies
> the data again from this buffer to the hardware in the background.
> 
> As I mentioned, the helpers in pcm-indirect.h might make things eaiser
> for such an implementation.  In your case, a pseudo code would look
> like below.

OK, I've implemented this, but it's still not quite working.

I've noticed that with the PCM indirect implementation, the pointer
callback invokes the ack callback every time:

pcm-indirect.h:

 90  */
 91 static inline snd_pcm_uframes_t
 92 snd_pcm_indirect_playback_pointer(snd_pcm_substream_t *substream,
 93                                   snd_pcm_indirect_t *rec, unsigned int ptr)
 94 {

[ ... ]

103         if (substream->ops->ack)
104                 substream->ops->ack(substream);

But, this cannot work with our hardware, if the ack callback always
transfers 0x2000 words from the hardware, because the pointer callback
is invoked many times per period.

What are the exact rules/semantics for when the ack callback is invoked?

Also, how should I know when to invoke snd_pcm_period_elapsed?  It only
seems to work if I call it from a timer - if I move it to the ack or
copy callback, playback hangs after the first chunk of audio is played.

Lee


-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys -- and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Alsa-devel mailing list
Alsa-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.sourceforge.net/lists/listinfo/alsa-devel

[Index of Archives]     [ALSA User]     [Linux Audio Users]     [Kernel Archive]     [Asterisk PBX]     [Photo Sharing]     [Linux Sound]     [Video 4 Linux]     [Gimp]     [Yosemite News]

  Powered by Linux