From mboxrd@z Thu Jan 1 00:00:00 1970 From: Takashi Iwai Subject: Re: [PATCH]: No sound when using software based mmap support and dmix plugin Date: Thu, 21 May 2015 08:55:40 +0200 Message-ID: References: Mime-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka") Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by alsa0.perex.cz (Postfix) with ESMTP id 588FE26043A for ; Thu, 21 May 2015 08:55:42 +0200 (CEST) In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: alsa-devel-bounces@alsa-project.org Sender: alsa-devel-bounces@alsa-project.org To: Yogesh Soni Cc: alsa-devel@alsa-project.org List-Id: alsa-devel@alsa-project.org At Tue, 19 May 2015 11:14:13 -0700, Yogesh Soni wrote: > > Hi Takashi, > > Thanks for your reply. Please consider the following snippet from > pcm-indirect.h. When using other plugins (like softvol), appl_ptr was > updated correctly and below code worked well. In case of dmix, The samples > are never copied to substream because > appl_ptr = rec->appl_ptr = diff = 0 --> rec->sw_ready = 0 . > > *snd_pcm_sframes_t diff = appl_ptr - rec->appl_ptr;* > ..... > if (*diff*) { > ....... > rec->sw_ready += (int)frames_to_bytes(runtime, diff); > ....... > } > while (rec->hw_ready < qsize &&* rec->sw_ready > 0*) { > *copy(substream, rec, bytes);* > } I see. But, the free wheeling mode doesn't mean that appl_ptr is always invalid. It means nothing but we don't do any xrun checks and keeps the stream running. So, instead of checking only the stop_threshold, how about to check if it's in xrun, and then use it as diff? thanks, Takashi > > Regards > Yogesh > > On Tue, May 19, 2015 at 4:47 AM, Takashi Iwai wrote: > > > At Wed, 13 May 2015 17:12:33 -0700, > > Yogesh Soni wrote: > > > > > > Hi all, > > > > > > I am trying to have dmix plugin work ( I succeeded) with the audio card > > > that does not have hardware mmap support and uses pcm_indirect method to > > > map software buffer for mmap feature. > > > > > > Most of the plugins were working quite well with mmap/pcm_indirect combo. > > > However, dmix plugin did not work (no sound). I debugged and realized > > that > > > appl_ptr in pcm_direct.h(snd_pcm_indirect_playback_transfer()) was > > always 0 > > > and hence nothing got copied to slave pcm buffer. I then discovered that > > > dmix operates in freewheeling-mode.. > > > > > > I have made a small workaround patch (I believe it can be cleaned up) in > > > case of free-wheeling mode, basically using sw_ready to hold bytes that > > > need to be copied. I used rec->sw_ready because it looked safest to use > > for > > > this purpose. As a result of this patch, normally period_size bytes are > > > copied to pcm buffer every period and sound is playing smooth. > > > > > > I am a noob in alsa and linux in general. So, I would like your opinion > > on > > > the patch. I would much prefer if I could write a patch that is generic > > and > > > clean enough, so that it could be used by others. patch is attached. > > > > Thanks for reporting and the patch. > > > > So, what actually prevents working with the current code in the free > > wheeling mode? > > > > > > Takashi > > > [2 ] >