alsa-devel.alsa-project.org archive mirror
 help / color / mirror / Atom feed
* idea: a reserve alsa plugin
@ 2013-05-02 10:55 David Henningsson
  2013-05-02 12:37 ` [pulseaudio-discuss] " Arun Raghavan
  2013-05-02 14:28 ` idea: a reserve alsa plugin Tvrtko Ursulin
  0 siblings, 2 replies; 13+ messages in thread
From: David Henningsson @ 2013-05-02 10:55 UTC (permalink / raw)
  To: alsa-devel@alsa-project.org, General PulseAudio Discussion

Just had an idea which I'll write down here before I forget it 
again...and I'm not saying I'll implement this anytime soon either, but 
here goes:

There is a device reserve protocol between PulseAudio and JACK2 - when 
JACK needs the sound card, it'll send a dbus message to PulseAudio and 
grab a name in D-Bus.

However, there are plenty of applications who like to access ALSA 
directly, without going through JACK2 or PulseAudio. By making a 
"reserve" plugin, we could have this functionality for those apps too.

In practice, if the app usually opens "plughw:0" or "hw:0", it could 
instead open "reserve:plughw:0" or "reserve:hw:0" to also reserve the 
device from PulseAudio usage while the device is open. Meanwhile, 
PulseAudio is free to use other audio devices (which is not the case 
when using e g pasuspender).

How does that sound?

-- 
David Henningsson, Canonical Ltd.
https://launchpad.net/~diwic

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [pulseaudio-discuss] idea: a reserve alsa plugin
  2013-05-02 10:55 idea: a reserve alsa plugin David Henningsson
@ 2013-05-02 12:37 ` Arun Raghavan
  2013-05-02 13:23   ` David Henningsson
  2013-05-02 14:13   ` "Negative" volume settings in a kcontrol Mike Looijmans
  2013-05-02 14:28 ` idea: a reserve alsa plugin Tvrtko Ursulin
  1 sibling, 2 replies; 13+ messages in thread
From: Arun Raghavan @ 2013-05-02 12:37 UTC (permalink / raw)
  To: General PulseAudio Discussion; +Cc: alsa-devel@alsa-project.org

On Thu, 2013-05-02 at 12:55 +0200, David Henningsson wrote:
> Just had an idea which I'll write down here before I forget it 
> again...and I'm not saying I'll implement this anytime soon either, but 
> here goes:
> 
> There is a device reserve protocol between PulseAudio and JACK2 - when 
> JACK needs the sound card, it'll send a dbus message to PulseAudio and 
> grab a name in D-Bus.
> 
> However, there are plenty of applications who like to access ALSA 
> directly, without going through JACK2 or PulseAudio. By making a 
> "reserve" plugin, we could have this functionality for those apps too.
> 
> In practice, if the app usually opens "plughw:0" or "hw:0", it could 
> instead open "reserve:plughw:0" or "reserve:hw:0" to also reserve the 
> device from PulseAudio usage while the device is open. Meanwhile, 
> PulseAudio is free to use other audio devices (which is not the case 
> when using e g pasuspender).
> 
> How does that sound?

Might be neat to do have desktops set up to do this whenever an ALSA
device is opened (that is do it unconditionally when hw:X or plughw:X is
opened).

-- Arun

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [pulseaudio-discuss] idea: a reserve alsa plugin
  2013-05-02 12:37 ` [pulseaudio-discuss] " Arun Raghavan
@ 2013-05-02 13:23   ` David Henningsson
  2013-05-02 14:13   ` "Negative" volume settings in a kcontrol Mike Looijmans
  1 sibling, 0 replies; 13+ messages in thread
From: David Henningsson @ 2013-05-02 13:23 UTC (permalink / raw)
  To: General PulseAudio Discussion; +Cc: Arun Raghavan, alsa-devel@alsa-project.org

On 05/02/2013 02:37 PM, Arun Raghavan wrote:
> On Thu, 2013-05-02 at 12:55 +0200, David Henningsson wrote:
>> Just had an idea which I'll write down here before I forget it
>> again...and I'm not saying I'll implement this anytime soon either, but
>> here goes:
>>
>> There is a device reserve protocol between PulseAudio and JACK2 - when
>> JACK needs the sound card, it'll send a dbus message to PulseAudio and
>> grab a name in D-Bus.
>>
>> However, there are plenty of applications who like to access ALSA
>> directly, without going through JACK2 or PulseAudio. By making a
>> "reserve" plugin, we could have this functionality for those apps too.
>>
>> In practice, if the app usually opens "plughw:0" or "hw:0", it could
>> instead open "reserve:plughw:0" or "reserve:hw:0" to also reserve the
>> device from PulseAudio usage while the device is open. Meanwhile,
>> PulseAudio is free to use other audio devices (which is not the case
>> when using e g pasuspender).
>>
>> How does that sound?
>
> Might be neat to do have desktops set up to do this whenever an ALSA
> device is opened (that is do it unconditionally when hw:X or plughw:X is
> opened).

Including when PA opens it? :P

I would prefer to do it explicitly, due to the possible overhead of 
talking to D-Bus.

One could possibly imagine it being done automatically with plughw, but 
definitely not with hw only because that's meant to be as low as you can 
possibly get.


-- 
David Henningsson, Canonical Ltd.
https://launchpad.net/~diwic

^ permalink raw reply	[flat|nested] 13+ messages in thread

* "Negative" volume settings in a kcontrol
  2013-05-02 12:37 ` [pulseaudio-discuss] " Arun Raghavan
  2013-05-02 13:23   ` David Henningsson
@ 2013-05-02 14:13   ` Mike Looijmans
  2013-05-06 13:22     ` Clemens Ladisch
  1 sibling, 1 reply; 13+ messages in thread
From: Mike Looijmans @ 2013-05-02 14:13 UTC (permalink / raw)
  To: alsa-devel

Some codec registers need negative values. For example,
sound/soc/codecs/tlv320aic32x4.c specifies this:

  75 static DECLARE_TLV_DB_SCALE(tlv_step_0_5, 0, 50, 0);

  78         SOC_DOUBLE_R_TLV("PCM Playback Volume", AIC32X4_LDACVOL,
  79                         AIC32X4_RDACVOL, 0, 0x30, 0, tlv_step_0_5),


It's incomplete. The actual range is from -63.5dB to +24dB in 0.5 dB 
steps. The 8-bit value is interpreted as a signed 8-bit integer, so to 
get -3dB the register value must be -6 or 0xFA.

For some reason, the author seemed to think that no one would ever want 
to lower the volume of the output, so he just limited the range to 
0..24dB. Or, more likely, like me he did not have a clue how to 
configure this.

There are quite a few more registers like this, usually the range is 
limited in both negative and positive ranges.

How do I explain that to Alsa?

(and on a side note "amixer" doesn't accept negative values either)

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: idea: a reserve alsa plugin
  2013-05-02 10:55 idea: a reserve alsa plugin David Henningsson
  2013-05-02 12:37 ` [pulseaudio-discuss] " Arun Raghavan
@ 2013-05-02 14:28 ` Tvrtko Ursulin
  2013-05-02 14:37   ` [pulseaudio-discuss] " David Henningsson
  1 sibling, 1 reply; 13+ messages in thread
From: Tvrtko Ursulin @ 2013-05-02 14:28 UTC (permalink / raw)
  To: pulseaudio-discuss; +Cc: alsa-devel@alsa-project.org


Hi David,

On Thursday 02 May 2013 12:55:05 David Henningsson wrote:
> Just had an idea which I'll write down here before I forget it
> again...and I'm not saying I'll implement this anytime soon either, but
> here goes:
> 
> There is a device reserve protocol between PulseAudio and JACK2 - when
> JACK needs the sound card, it'll send a dbus message to PulseAudio and
> grab a name in D-Bus.
> 
> However, there are plenty of applications who like to access ALSA
> directly, without going through JACK2 or PulseAudio. By making a
> "reserve" plugin, we could have this functionality for those apps too.
> 
> In practice, if the app usually opens "plughw:0" or "hw:0", it could
> instead open "reserve:plughw:0" or "reserve:hw:0" to also reserve the
> device from PulseAudio usage while the device is open. Meanwhile,
> PulseAudio is free to use other audio devices (which is not the case
> when using e g pasuspender).
> 
> How does that sound?

If I understand correctly you are saying essentially this:

1. There is an existing device control protocol which works over DBus.
2. Your idea is to add a equivalent device control protocol using ALSA PCM 
plugin (well in fact not add but create a new proxy interface to it).

Is that right? If so, how do you provide this functionality to existing 
applications without teaching them about the reserve plugin?

And if you have to modify the applications, is the only advantage then that 
you do not have to add DBus dependency to them? Or a PA dependency to talk 
directly to the server? If so then this solution feels a bit kludgy. 

Perhaps you would want an extension to snd_pcm_open (or whatever, I am going 
from vague memory here) to have something like "SND_PCM_EXCLUSIVE | 
SND_PCM_NOTIFY_BUSY_OPEN" mode (if the former is not implied) which would 
notify the original owner that the second application is attempting to open 
it. Perhaps using SIGURG or something while returing -EBUSY or something to 
the caller signalling they should retry. Not sure if this would be doable 
completely in userspace so I might be leading you toward a generic 
kernel/glibc solution here. :)

What about the policy control as to which applications are allowed to take 
over? It sounds sub optimal to allow any ALSA application which knows about 
this new plugin or other release mechanism to take over just like that. That 
would create a bit of a mess.

Regards,

Tvrtko

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [pulseaudio-discuss] idea: a reserve alsa plugin
  2013-05-02 14:28 ` idea: a reserve alsa plugin Tvrtko Ursulin
@ 2013-05-02 14:37   ` David Henningsson
  2013-05-02 14:50     ` Tvrtko Ursulin
  0 siblings, 1 reply; 13+ messages in thread
From: David Henningsson @ 2013-05-02 14:37 UTC (permalink / raw)
  To: Tvrtko Ursulin; +Cc: alsa-devel@alsa-project.org, pulseaudio-discuss

On 05/02/2013 04:28 PM, Tvrtko Ursulin wrote:
>
> Hi David,
>
> On Thursday 02 May 2013 12:55:05 David Henningsson wrote:
>> Just had an idea which I'll write down here before I forget it
>> again...and I'm not saying I'll implement this anytime soon either, but
>> here goes:
>>
>> There is a device reserve protocol between PulseAudio and JACK2 - when
>> JACK needs the sound card, it'll send a dbus message to PulseAudio and
>> grab a name in D-Bus.
>>
>> However, there are plenty of applications who like to access ALSA
>> directly, without going through JACK2 or PulseAudio. By making a
>> "reserve" plugin, we could have this functionality for those apps too.
>>
>> In practice, if the app usually opens "plughw:0" or "hw:0", it could
>> instead open "reserve:plughw:0" or "reserve:hw:0" to also reserve the
>> device from PulseAudio usage while the device is open. Meanwhile,
>> PulseAudio is free to use other audio devices (which is not the case
>> when using e g pasuspender).
>>
>> How does that sound?
>
> If I understand correctly you are saying essentially this:
>
> 1. There is an existing device control protocol which works over DBus.
> 2. Your idea is to add a equivalent device control protocol using ALSA PCM
> plugin (well in fact not add but create a new proxy interface to it).
>
> Is that right? If so, how do you provide this functionality to existing
> applications without teaching them about the reserve plugin?

Many ALSA applications lets you specify the device string on e g the 
command line or through a configuration interface. So the end user would 
configure the application to use "reserve:plughw:0" instead of "plughw:0".

The applications that do not follow this will have to be taught, and 
they have a extremely simple way to implement it - just add "reserve:" 
do the device string.

>
> And if you have to modify the applications, is the only advantage then that
> you do not have to add DBus dependency to them? Or a PA dependency to talk
> directly to the server? If so then this solution feels a bit kludgy.
>
> Perhaps you would want an extension to snd_pcm_open (or whatever, I am going
> from vague memory here) to have something like "SND_PCM_EXCLUSIVE |
> SND_PCM_NOTIFY_BUSY_OPEN" mode (if the former is not implied) which would
> notify the original owner that the second application is attempting to open
> it. Perhaps using SIGURG or something while returing -EBUSY or something to
> the caller signalling they should retry. Not sure if this would be doable
> completely in userspace so I might be leading you toward a generic
> kernel/glibc solution here. :)
>
> What about the policy control as to which applications are allowed to take
> over? It sounds sub optimal to allow any ALSA application which knows about
> this new plugin or other release mechanism to take over just like that. That
> would create a bit of a mess.

That is a valid point - but so far the only app that can *give away* a 
sound card is PulseAudio. All of the others (at least in the simplest 
scenario), can only *take* a sound card. If the card is already used by 
some app that can't give away its sound card, it's going to be -EBUSY as 
usual.



-- 
David Henningsson, Canonical Ltd.
https://launchpad.net/~diwic

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: idea: a reserve alsa plugin
  2013-05-02 14:37   ` [pulseaudio-discuss] " David Henningsson
@ 2013-05-02 14:50     ` Tvrtko Ursulin
  0 siblings, 0 replies; 13+ messages in thread
From: Tvrtko Ursulin @ 2013-05-02 14:50 UTC (permalink / raw)
  To: David Henningsson; +Cc: alsa-devel@alsa-project.org, pulseaudio-discuss

On Thursday 02 May 2013 16:37:47 David Henningsson wrote:
> On 05/02/2013 04:28 PM, Tvrtko Ursulin wrote:
> > Hi David,
> > 
> > On Thursday 02 May 2013 12:55:05 David Henningsson wrote:
> >> Just had an idea which I'll write down here before I forget it
> >> again...and I'm not saying I'll implement this anytime soon either, but
> >> here goes:
> >> 
> >> There is a device reserve protocol between PulseAudio and JACK2 - when
> >> JACK needs the sound card, it'll send a dbus message to PulseAudio and
> >> grab a name in D-Bus.
> >> 
> >> However, there are plenty of applications who like to access ALSA
> >> directly, without going through JACK2 or PulseAudio. By making a
> >> "reserve" plugin, we could have this functionality for those apps too.
> >> 
> >> In practice, if the app usually opens "plughw:0" or "hw:0", it could
> >> instead open "reserve:plughw:0" or "reserve:hw:0" to also reserve the
> >> device from PulseAudio usage while the device is open. Meanwhile,
> >> PulseAudio is free to use other audio devices (which is not the case
> >> when using e g pasuspender).
> >> 
> >> How does that sound?
> > 
> > If I understand correctly you are saying essentially this:
> > 
> > 1. There is an existing device control protocol which works over DBus.
> > 2. Your idea is to add a equivalent device control protocol using ALSA PCM
> > plugin (well in fact not add but create a new proxy interface to it).
> > 
> > Is that right? If so, how do you provide this functionality to existing
> > applications without teaching them about the reserve plugin?
> 
> Many ALSA applications lets you specify the device string on e g the
> command line or through a configuration interface. So the end user would
> configure the application to use "reserve:plughw:0" instead of "plughw:0".
> 
> The applications that do not follow this will have to be taught, and
> they have a extremely simple way to implement it - just add "reserve:"
> do the device string.

Ah yes I forgot about this configurability. Which also means the question of 
central policy is sorted since it is explicit user configuration to steal a 
device.

It is still a bit kludgy for a PCM plugin to do this, but, it solves a real 
problem and does it cheaply so I think the result justifies the means in this 
case.

Regards,

Tvrtko

P.S. I am not active in this field but just dropping in due personal interest 
in this functionality.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: "Negative" volume settings in a kcontrol
  2013-05-02 14:13   ` "Negative" volume settings in a kcontrol Mike Looijmans
@ 2013-05-06 13:22     ` Clemens Ladisch
  2013-05-28 11:46       ` Mike Looijmans
  0 siblings, 1 reply; 13+ messages in thread
From: Clemens Ladisch @ 2013-05-06 13:22 UTC (permalink / raw)
  To: Mike Looijmans; +Cc: alsa-devel

Mike Looijmans wrote:
> Some codec registers need negative values. For example,
> sound/soc/codecs/tlv320aic32x4.c specifies this:
>
>  78         SOC_DOUBLE_R_TLV("PCM Playback Volume", AIC32X4_LDACVOL,
>  79                         AIC32X4_RDACVOL, 0, 0x30, 0, tlv_step_0_5),
>
> It's incomplete. The actual range is from -63.5dB to +24dB in 0.5 dB steps.
> The 8-bit value is interpreted as a signed 8-bit integer, so to get -3dB
> the register value must be -6 or 0xFA.
>
> How do I explain that to Alsa?

There are some ASoC helper macros that handle signed register fields, such
as SOC_DOUBLE_S8_TLV and SOC_SINGLE_XR_SX.  If those don't do what you want,
you have to write your own.

> (and on a side note "amixer" doesn't accept negative values either)

A workaround would be to set the control value first to 0 and then to
the desired negative value ... but this bug needs fixing.


Regards,
Clemens

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: "Negative" volume settings in a kcontrol
  2013-05-06 13:22     ` Clemens Ladisch
@ 2013-05-28 11:46       ` Mike Looijmans
  2013-05-29 19:42         ` Mark Brown
  0 siblings, 1 reply; 13+ messages in thread
From: Mike Looijmans @ 2013-05-28 11:46 UTC (permalink / raw)
  To: alsa-devel

On 05/06/2013 03:22 PM, Clemens Ladisch wrote:
> Mike Looijmans wrote:
>> Some codec registers need negative values. For example,
>> sound/soc/codecs/tlv320aic32x4.c specifies this:
>>
>>   78         SOC_DOUBLE_R_TLV("PCM Playback Volume", AIC32X4_LDACVOL,
>>   79                         AIC32X4_RDACVOL, 0, 0x30, 0, tlv_step_0_5),
>>
>> It's incomplete. The actual range is from -63.5dB to +24dB in 0.5 dB steps.
>> The 8-bit value is interpreted as a signed 8-bit integer, so to get -3dB
>> the register value must be -6 or 0xFA.
>>
>> How do I explain that to Alsa?
>
> There are some ASoC helper macros that handle signed register fields, such
> as SOC_DOUBLE_S8_TLV and SOC_SINGLE_XR_SX.  If those don't do what you want,
> you have to write your own.

SOC_DOUBLE_S8_TLV seems to be a misnamed hardware-specific macro. It 
provides no way to specify the location of the left/right bits so the 
macro name is misleading.

SOC_SINGLE_XR_SX is too new for my kernel. And from what I gather, I 
cannot use it anyway for my purposes. So the solution turns out to be 
"write my own". The SOC_DOUBLE_S8_TLV macro did provide a very nice 
starting point though.

Thanks for the pointer though, it turned out to be the key to a solution.

>> (and on a side note "amixer" doesn't accept negative values either)
>
> A workaround would be to set the control value first to 0 and then to
> the desired negative value ... but this bug needs fixing.

I have no idea what you meant here.

Kind regards,
Mike.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: "Negative" volume settings in a kcontrol
  2013-05-28 11:46       ` Mike Looijmans
@ 2013-05-29 19:42         ` Mark Brown
  2013-05-31  7:01           ` Mike Looijmans
  0 siblings, 1 reply; 13+ messages in thread
From: Mark Brown @ 2013-05-29 19:42 UTC (permalink / raw)
  To: Mike Looijmans; +Cc: alsa-devel


[-- Attachment #1.1: Type: text/plain, Size: 774 bytes --]

On Tue, May 28, 2013 at 01:46:15PM +0200, Mike Looijmans wrote:
> On 05/06/2013 03:22 PM, Clemens Ladisch wrote:
> >Mike Looijmans wrote:

*ALWAYS* CC maintainers on mails and don't drop people from CCs either...

> >There are some ASoC helper macros that handle signed register fields, such
> >as SOC_DOUBLE_S8_TLV and SOC_SINGLE_XR_SX.  If those don't do what you want,
> >you have to write your own.

> SOC_DOUBLE_S8_TLV seems to be a misnamed hardware-specific macro. It
> provides no way to specify the location of the left/right bits so
> the macro name is misleading.

That's trivially fixable...

> SOC_SINGLE_XR_SX is too new for my kernel. And from what I gather, I
> cannot use it anyway for my purposes. So the solution turns out to

What makes you gather this?

[-- Attachment #1.2: Digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

[-- Attachment #2: Type: text/plain, Size: 0 bytes --]



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: "Negative" volume settings in a kcontrol
  2013-05-29 19:42         ` Mark Brown
@ 2013-05-31  7:01           ` Mike Looijmans
  2013-07-16 13:45             ` Need help diagnosing "hw_ptr skipping" message Mike Looijmans
  0 siblings, 1 reply; 13+ messages in thread
From: Mike Looijmans @ 2013-05-31  7:01 UTC (permalink / raw)
  To: Mark Brown; +Cc: alsa-devel

On 05/29/2013 09:42 PM, Mark Brown wrote:
> On Tue, May 28, 2013 at 01:46:15PM +0200, Mike Looijmans wrote:
>> On 05/06/2013 03:22 PM, Clemens Ladisch wrote:
>>> Mike Looijmans wrote:
>
> *ALWAYS* CC maintainers on mails and don't drop people from CCs either...

I hereby promise to improve myself in that respect :)

>>> There are some ASoC helper macros that handle signed register fields, such
>>> as SOC_DOUBLE_S8_TLV and SOC_SINGLE_XR_SX.  If those don't do what you want,
>>> you have to write your own.
>
>> SOC_DOUBLE_S8_TLV seems to be a misnamed hardware-specific macro. It
>> provides no way to specify the location of the left/right bits so
>> the macro name is misleading.
>
> That's trivially fixable...

>> SOC_SINGLE_XR_SX is too new for my kernel. And from what I gather, I
>> cannot use it anyway for my purposes. So the solution turns out to
>
> What makes you gather this?

What I actually needed was a SOC_DOUBLE_... thingy. Otherwise, the macro 
was pretty close, but I'm using a 2.6.37 kernel so just backporting the 
snd_soc_*_xr_sx methods would be more work than simply writing new 
info/set/get methods. I also considered the fact that only one driver is 
using the SOC_SINGLE_XR_SX macro a bit of a code smell, so I feared a 
similar experience as with SOC_DOUBLE_S8_TLV which was also introduced 
just for a single driver.


Mike.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Need help diagnosing "hw_ptr skipping" message
  2013-05-31  7:01           ` Mike Looijmans
@ 2013-07-16 13:45             ` Mike Looijmans
  2013-07-17 14:02               ` Clemens Ladisch
  0 siblings, 1 reply; 13+ messages in thread
From: Mike Looijmans @ 2013-07-16 13:45 UTC (permalink / raw)
  To: alsa-devel

The sort form of my question:

If I enable the "jiffies check", what is my driver doing wrong if I get 
this complaint on the kernel log while capturing:

PCM: hw_ptr skipping! (pos=13677, delta=876, period=6400, jdelta=0/17/0, 
hw_ptr=1241601/1241601)


The context:

I notice that this message originates at pcm_lib.c. I've been looking at 
that code for a while, but cannot figure out what its purpose is.

if (((hdelta * HZ) / runtime->rate) > jdelta + HZ/100) ...

If that evaluates to "true", the logging as shown above is being shown.

But I can't grasp the meaning here. What's wrong then? I'd suspect it 
checks on the number of samples reported and the time elapsed, but I 
cannot figure out what the criteria is.

Not I did a bit of adding my own logging, so that I could also see 
whether things were at the IRQ or at "user" side of things, using a 
"[Q]" to indicate interrupt routine handling.

A normal overrun looks like this:

hwptr log: pcmC6D0c:0 [ ]: j=4294875206, pos=997/6400/25600, 
hwptr=8166401/8166400
hwptr log: pcmC6D0c:0 [Q]: j=4294875311, pos=6401/6400/25600, 
hwptr=8167397/8166400
hwptr log: pcmC6D0c:0 [ ]: j=4294875331, pos=7414/6400/25600, 
hwptr=8172801/8166400
hwptr log: pcmC6D0c:0 [Q]: j=4294875436, pos=12801/6400/25600, 
hwptr=8173814/8166400
hwptr log: pcmC6D0c:0 [ ]: j=4294875550, pos=18633/6400/25600, 
hwptr=8179201/8166400
hwptr log: pcmC6D0c:0 [Q]: j=4294875561, pos=19200/6400/25600, 
hwptr=8185033/8166400
hwptr log: pcmC6D0c:0 [Q]: j=4294875686, pos=2/6400/25600, 
hwptr=8185600/8166400
hwptr log: pcmC6D0c:0 [Q]: j=4294875811, pos=6401/6400/25600, 
hwptr=8192002/8192000
hwptr log: pcmC6D0c:0 [Q]: j=4294875936, pos=12802/6400/25600, 
hwptr=8198401/8192000
hwptr log: pcmC6D0c:0 [Q]: j=4294876061, pos=19208/6400/25600, 
hwptr=8204802/8192000
XRUN: pcmC6D0c:0

In this case, there were 4 periods of 6400 samples in the buffer, and 5 
period-completion interrups were issued between userspace reads, so this 
is a normal case of the user not emptying the buffer quick enough.

The events I'm worried about are these:

hwptr log: pcmC6D0c:0 [ ]: j=4294960399, pos=7646/6400/25600, 
hwptr=953600/947200
hwptr log: pcmC6D0c:0 [Q]: j=4294960500, pos=12800/6400/25600, 
hwptr=954846/947200
hwptr log: pcmC6D0c:0 [ ]: j=4294960553, pos=15511/6400/25600, 
hwptr=960000/947200
hwptr log: pcmC6D0c:0 [Q]: j=4294960625, pos=19200/6400/25600, 
hwptr=962711/947200
hwptr log: pcmC6D0c:0 [ ]: j=4294960648, pos=20377/6400/25600, 
hwptr=966400/947200
hwptr log: pcmC6D0c:0 [Q]: j=4294960750, pos=0/6400/25600, 
hwptr=967577/947200
hwptr log: pcmC6D0c:0 [Q]: j=4294960875, pos=6400/6400/25600, 
hwptr=972800/972800
hwptr log: pcmC6D0c:0 [Q]: j=4294961000, pos=12800/6400/25600, 
hwptr=979200/972800
hwptr log: pcmC6D0c:0 [Q]: j=4294961125, pos=19201/6400/25600, 
hwptr=985600/972800
hwptr log: pcmC6D0c:0 [Q]: j=4294961250, pos=0/6400/25600, 
hwptr=992001/972800
XRUN: pcmC6D0c:0
hwptr log: pcmC6D0c:0 [Q]: j=9186, pos=6401/6400/25600, hwptr=718334/716800
hwptr log: pcmC6D0c:0 [ ]: j=9206, pos=7382/6400/25600, hwptr=723201/716800
hwptr log: pcmC6D0c:0 [Q]: j=9311, pos=12802/6400/25600, hwptr=724182/716800
hwptr log: pcmC6D0c:0 [ ]: j=9345, pos=14498/6400/25600, hwptr=729602/716800
hwptr log: pcmC6D0c:0 [Q]: j=9436, pos=19200/6400/25600, hwptr=731298/716800
hwptr log: pcmC6D0c:0 [ ]: j=9471, pos=20989/6400/25600, hwptr=736000/716800
hwptr log: pcmC6D0c:0 [Q]: j=9561, pos=0/6400/25600, hwptr=737789/716800
hwptr log: pcmC6D0c:0 [ ]: j=9588, pos=1368/6400/25600, hwptr=742400/742400
hwptr log: pcmC6D0c:0 [Q]: j=9686, pos=6401/6400/25600, hwptr=743768/742400
hwptr log: pcmC6D0c:0 [ ]: j=9686, pos=7271/6400/25600, hwptr=748801/742400
PCM: hw_ptr skipping! (pos=7271, delta=870, period=6400, jdelta=0/16/0, 
hw_ptr=748801/748801)
hwptr log: pcmC6D0c:0 [Q]: j=18810, pos=12801/6400/25600, 
hwptr=1211784/1203200
hwptr log: pcmC6D0c:0 [ ]: j=18840, pos=14327/6400/25600, 
hwptr=1216001/1203200
hwptr log: pcmC6D0c:0 [Q]: j=18935, pos=19201/6400/25600, 
hwptr=1217527/1203200
hwptr log: pcmC6D0c:0 [ ]: j=18967, pos=20807/6400/25600, 
hwptr=1222401/1203200
hwptr log: pcmC6D0c:0 [Q]: j=19060, pos=0/6400/25600, hwptr=1224007/1203200
hwptr log: pcmC6D0c:0 [ ]: j=19088, pos=1402/6400/25600, 
hwptr=1228800/1228800
hwptr log: pcmC6D0c:0 [Q]: j=19185, pos=6400/6400/25600, 
hwptr=1230202/1228800
hwptr log: pcmC6D0c:0 [ ]: j=19213, pos=7801/6400/25600, 
hwptr=1235200/1228800
hwptr log: pcmC6D0c:0 [Q]: j=19310, pos=12801/6400/25600, 
hwptr=1236601/1228800
hwptr log: pcmC6D0c:0 [ ]: j=19310, pos=13677/6400/25600, 
hwptr=1241601/1228800
PCM: hw_ptr skipping! (pos=13677, delta=876, period=6400, jdelta=0/17/0, 
hw_ptr=1241601/1241601)


Anyone can make heads or tails of this?

Kind regards,
Mike.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: Need help diagnosing "hw_ptr skipping" message
  2013-07-16 13:45             ` Need help diagnosing "hw_ptr skipping" message Mike Looijmans
@ 2013-07-17 14:02               ` Clemens Ladisch
  0 siblings, 0 replies; 13+ messages in thread
From: Clemens Ladisch @ 2013-07-17 14:02 UTC (permalink / raw)
  To: Mike Looijmans; +Cc: alsa-devel

Mike Looijmans wrote:
> If I enable the "jiffies check", what is my driver doing wrong if I
> get this complaint on the kernel log while capturing:
>
> PCM: hw_ptr skipping! (pos=13677, delta=876, period=6400, jdelta=0/17/0, hw_ptr=1241601/1241601)

"hw_ptr skipping" means that the hw_ptr is skipping.  Er, the value
returned by the .pointer callback moves too far in a too short amount
of time.

> hwptr log: pcmC6D0c:0 [Q]: j=19310, pos=12801/6400/25600, hwptr=1236601/1228800
> hwptr log: pcmC6D0c:0 [ ]: j=19310, pos=13677/6400/25600, hwptr=1241601/1228800

The interrupt and the userspace check happen at almost the same time
(same jiffies value), but there is suddenly a jump of 876 frames.

How does your driver compute the .pointer return value?  How does this
value change?


Regards,
Clemens

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2013-07-17 14:02 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-05-02 10:55 idea: a reserve alsa plugin David Henningsson
2013-05-02 12:37 ` [pulseaudio-discuss] " Arun Raghavan
2013-05-02 13:23   ` David Henningsson
2013-05-02 14:13   ` "Negative" volume settings in a kcontrol Mike Looijmans
2013-05-06 13:22     ` Clemens Ladisch
2013-05-28 11:46       ` Mike Looijmans
2013-05-29 19:42         ` Mark Brown
2013-05-31  7:01           ` Mike Looijmans
2013-07-16 13:45             ` Need help diagnosing "hw_ptr skipping" message Mike Looijmans
2013-07-17 14:02               ` Clemens Ladisch
2013-05-02 14:28 ` idea: a reserve alsa plugin Tvrtko Ursulin
2013-05-02 14:37   ` [pulseaudio-discuss] " David Henningsson
2013-05-02 14:50     ` Tvrtko Ursulin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).