On Wed, 12 Feb 2003, Maarten de Boer wrote:

> > > I now have pmc->jack playback working nicely! Tomorrow I will do capture,
> > > which should be a piece of cake. 
> 
> Hmmm.. Something broke. After doing a CVS update, everything stopped
> working. I reverted to yesterday's CVS, and it worked again. I'll
> explain what happens, maybe you see how your changes are involved here,
> and how to fix it (in my code, most likely)
> 
> Yesterday, I got a couple of calls to my snd_pcm_jack_mmap_commit, a
> call to snd_pcm_jack_start, where I started the jack process, and I
> continued receiving snd_pcm_jack_mmap_commit calls, where I forwarded
> the appl_ptr (with snd_pcm_mmap_appl_forward). The jack process copies
> copies snd_pcm_mmap_areas(pcm) from the snd_pcm_mmap_hw_offset(pcm) to
> the jack buffer, and forwards the hw_ptr (snd_pcm_mmap_hw_forward).
> snd_pcm_jack_avail_update(snd_pcm_t *pcm) simple returns
> snd_pcm_mmap_avail(pcm). This worked fine (with aplay -Dmyplug, where
> 
> pcm.myplug
> {
>         type plug
>         slave
>         {
>                 pcm "myjack"
>         }
> }
> 
> pcm.myjack
> {
>         type jack
> }
> 
> 
> This is, as I understand, how we concluded in our previous mails.
> 
> Now, today, after a CVS update, I don't get any snd_pcm_jack_mmap_commit
> anymore after the snd_pcm_jack_start. Why? The result obviously is that
> only the data that has been written to the mmap areas before the start
> get copied in a loop to jack.

I've updated a bit your code, but I cannot test it myself, because I 
cannot connect to a jack port - invalid destination port name - (I'll 
look what's wrong tomorrow).

> > > One question. For testing I use aplay, which now uses almost 100% cpu. Adding
> > > a usleep in snd_pcm_jack_delay solves that problem, but I am sure it is not
> > > the right way. How should I do it?
> > 
> > Do you handle "poll" in your plugin? Initialize "pcm->poll_fd", 
> > "pcm->poll_events" and make your own "poll_revents" callback if necessary.
> > The thread which manages the jack transfers have to acknowlede that there 
> > is some room (or data - capture) in the ring buffer.
> 
> poll_revents is a pretty recent addition isn't it? 
> 
> What I try now is
> - create a socketpair
> - set pcm->poll_fd to one end of the socketpair
> - writing 1 byte into the other in the jack process callback
> - read this 1 byte in the poll_revents callback (if not, poll keeps
>   returned true)
> 
> Is this the way to go?

Yes, it should work, but I've added missing poll_revents callback 
initialization.

> > > If I send you my code - once I have capture working - could you have a look at
> > > it?
> > 
> > Yes, of course. I can put your sources to CVS immediately and we can 
> > improve it then.
> 
> Which would mean I would have CVS write access?

Not really, I and Takashi verify the patches before they're commited to 
CVS.

> I attach my src/pcm/pcm_jack.c and a patch with the other changes. I added a 
>--with-jack
> option to configure jack support.

I've commited your code to CVS so we can share it.

                                                Jaroslav

-----
Jaroslav Kysela <[EMAIL PROTECTED]>
Linux Kernel Sound Maintainer
ALSA Project, SuSE Labs





-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
_______________________________________________
Alsa-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-devel

Reply via email to