Re: DMix period_size should always be half of buffer size?

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

 



Thanks for your help Jaroslav. I am attaching the debug files from
/proc/asound/card0/pcm0p/sub0 that I captured while playing a wav file
through aplay. I have attached both instances with 64KB bufsize/32KB
periodsize(works) and 64KB bufsize/4KB periodsize(does NOT work).

Here are the weird things I noticed in the attached debug captures. Maybe it
would make more sense to you.
1. If you take a look at the hw_params file you would see that period and
buffer size reported are 1/4th of what I have declared in the driver. Why is
this? Seems weird.

2. Status file clearly shows the hw_ptr has not moved in the 4KB period
size. I captured these files few secs after starting aplay. hw_ptr never
increments from 0 when period size size is NOT half the buf size. About
calling period_elapsed( ) like you mentioned in your mail, dont you think it
is irrelevant because the hw_ptr never moves to begin with? If it moved for
the first period and then never moved I could see how calling
period_elapsed( ) would matter but in this case where it never moved from
the beginning.

Regards
Prabhu.


On 5/4/07, Jaroslav Kysela <perex@xxxxxxx> wrote:

On Thu, 3 May 2007, Prabhu Sivaraja wrote:

> This is a followup to my earlier question about dmix not being able to
mix
> small files. I investigated it more and here is what I found.
>
> Again background info.
> I have a 64KB as kernel buffer and a 64KB circular buffer for my device.
In
> a poll thread I copy the data obtained from ALSA lib from the kernel
buffer
> to my device circular buffer by keeping track of appl_ptr and
hw_ptr(dmix
> only). Everything was working fine except when I was trying to mix files
> smaller than 64KB(my buffer size), the small file was not getting mixed
> through the dmix plugin. Anything over 64KB was getting mixed just fine.
So
> I set about reducing my period size from 32KB to 4KB while maintaining
my
> buffer size at 64KB.
>
> When I tried to do this my hw_ptr never gets incremented from 0. Hence
my
> driver is stuck in a loop waiting for bytes to copy. This is only
observed
> when I am using dmix plugin and NOT when using hw or plughw. When my
period
> size is half the size of my buffer everything works fine with dmix (I
> verified this by reducing my buffer size to 8KB and making my period
size
> 4KB. hw_ptr gets incremented then but I get buffer problems). It seems
like
> dmix is forcing me to keep my period size half the size of my buffer. hw
and
> plughw devices do not seem to do that.
>
> Is this a limitation of dmix. Could anyone comment on the dmix
limitation
> that I am experiencing.

No, dmix works with more periods well. Send us debug info from
/proc/asound/card0/pcm0p (when the stream is opened) and check, if your
driver notifies higher PCM level with period_elapsed() and if your
position callback returns right value when the stream is started.

                                               Jaroslav

-----
Jaroslav Kysela <perex@xxxxxxx>
Linux Kernel Sound Maintainer
ALSA Project, SUSE Labs

Attachment: 32KBPeriodSize.tar.bz2
Description: BZip2 compressed data

Attachment: 4KBPeriodSize.tar.bz2
Description: BZip2 compressed data

_______________________________________________
Alsa-devel mailing list
Alsa-devel@xxxxxxxxxxxxxxxx
http://mailman.alsa-project.org/mailman/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