All of lore.kernel.org
 help / color / mirror / Atom feed
From: IOhannes m zmoelnig <zmoelnig@iem.at>
To: Clemens Ladisch <clemens@ladisch.de>
Cc: alsa-devel@alsa-project.org
Subject: Re: crash with assertion (?)
Date: Wed, 08 Sep 2010 10:41:02 +0200	[thread overview]
Message-ID: <4C874C1E.8040007@iem.at> (raw)
In-Reply-To: <4C8670FD.5020906@ladisch.de>


[-- Attachment #1.1.1: Type: text/plain, Size: 1841 bytes --]

On 2010-09-07 19:06, Clemens Ladisch wrote:
> IOhannes m zmoelnig wrote:
>> i'm requesting my "plughw" device with 44100Hz
>> the request is done with something like:
>>  rate=44100;
>>  err = snd_pcm_hw_params_set_rate_min(handle, params, &rate, 0);
> 
> This requests a sample rate of at least 44100 Hz.

yes. this is good enough for me.
(it shouldn't crash though)

> 
>> [...]
>>  err = snd_pcm_hw_params(handle, params);
>>
>> what happens:
>> in the snd_pcm_hw_params(), my program exits with:
>> "interval_inline.h:52: snd_interval_single: Assertion
>> `!snd_interval_empty(i)' failed."
> 
> You called snd_pcm_hw_params with an invalid params structure.
> I'd guess that snd_pcm_hw_params_set_rate_min (or some other
> snd_pcm_hw_params_set_*) returned an error.

i wish you were right.
however, it seems like i am blindfolded.

i noticed however, that i need to set both the rate (i use
snd_pcm_hw_params_set_rate_min()) and the period size (i use
snd_pcm_hw_params_set_period_size_near()), in order to make it crash.

attached is an example code that triggers the crash.
please someone shed some light...

gmasdr
IOhannes


PS: that's how i use the sample program:
$ gcc -o alsatest alsatest.c $(pkg-config --cflags --libs alsa)
$ ./alsatest
trying to open 'hw:0' as CAPTURE
configuring device succeeded
CAPTURE configured
trying to open 'hw:0' as PLAYBACK
configuring device succeeded
PLAYBACK configured
trying to open 'plughw:0' as CAPTURE
configuring device succeeded
CAPTURE configured
trying to open 'plughw:0' as PLAYBACK
alsatest: interval_inline.h:55: snd_interval_single: Assertion
`!snd_interval_empty(i)' failed.
Aborted

so it seems to work fine with "hw:0" but not with "plughw:0".

you can specify the device to be opened on the cmdline:
$ ./alsatest hw:2

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.1.2: alsatest.c --]
[-- Type: text/x-csrc; name="alsatest.c", Size: 2834 bytes --]

#include <stdio.h>
#include <alsa/asoundlib.h>

#define ENABLE_SETPARAMS_RATE 1
#define ENABLE_SETPARAMS_PERIOD 2

/* neither set_rate_min() nor set_period_size_near() is ok (but trivial) */
//#define ENABLE_SETPARAMS 0

/* only set_rate_min() is ok */
//#define ENABLE_SETPARAMS  ENABLE_SETPARAMS_RATE

/* only set_period_size_near() is ok as well */
//#define ENABLE_SETPARAMS  ENABLE_SETPARAMS_PERIOD

/* both set_rate_min() and set_period_size_near() -> CRASH */
#define ENABLE_SETPARAMS  ENABLE_SETPARAMS_RATE | ENABLE_SETPARAMS_PERIOD

int pcm_configure(snd_pcm_t *pcm) {
  unsigned int rate=44100;
  snd_pcm_uframes_t uframes = 64;

  snd_pcm_hw_params_t* hw_params;
  int err;

  snd_pcm_hw_params_alloca(&hw_params);
  err = snd_pcm_hw_params_any(pcm, hw_params);
  if(err<0){fprintf(stderr, "snd_pcm_hw_params_any failed: %s\n",  snd_strerror(err));return err;}

#if ENABLE_SETPARAMS & 1
  err = snd_pcm_hw_params_set_rate_min(pcm, hw_params, &rate, 0);
  if(err<0){fprintf(stderr, "snd_pcm_hw_params_set_rate_min failed: %s\n",  snd_strerror(err));return err;}
#endif

#if ENABLE_SETPARAMS & 2
  err = snd_pcm_hw_params_set_period_size_near(pcm, hw_params, &uframes, 0);
  if(err<0){fprintf(stderr, "snd_pcm_hw_params_set_period_size failed: %s\n",  snd_strerror(err));return err;}
#endif

  err = snd_pcm_hw_params(pcm, hw_params);
  if(err<0){fprintf(stderr, "snd_pcm_hw_params failed: %s\n",  snd_strerror(err));return err;}

  printf("configuring device succeeded\n");
  return 0;
}

void pcm_open(char*name) {
 int err=0;
 snd_pcm_t *pcmIn=0, *pcmOut=0;

  printf("trying to open '%s' as CAPTURE\n", name);
  err = snd_pcm_open(&pcmIn, name, SND_PCM_STREAM_CAPTURE, SND_PCM_NONBLOCK);
  if(err<0){fprintf(stderr, "snd_pcm_open(CAPTURE) failed: %s\n",  snd_strerror(err));goto closeit;}
  err=snd_pcm_nonblock(pcmIn, 1);
  if(err<0){fprintf(stderr, "snd_pcm_nonblock failed: %s\n",  snd_strerror(err));goto closeit;}
  pcm_configure(pcmIn);
  fprintf(stderr, "CAPTURE configured\n");

  printf("trying to open '%s' as PLAYBACK\n", name);
  err = snd_pcm_open(&pcmOut, name, SND_PCM_STREAM_PLAYBACK, SND_PCM_NONBLOCK);
  if(err<0){fprintf(stderr, "snd_pcm_open(PLAYBACK) failed: %s\n",  snd_strerror(err));goto closeit;}
  err=snd_pcm_nonblock(pcmOut, 1);
  if(err<0){fprintf(stderr, "snd_pcm_nonblock failed: %s\n",  snd_strerror(err));goto closeit;}
  pcm_configure(pcmOut);
  fprintf(stderr, "PLAYBACK configured\n");

 closeit:
  if(pcmIn)snd_pcm_close(pcmIn);
  if(pcmOut)snd_pcm_close(pcmOut);
}


int main(int argc, char**argv) {
  int i=0;
  if(argc>1) {
    for(i=1; i<argc; i++) {
      pcm_open(argv[i]);
    }
  } else {
      pcm_open("hw:0");
      pcm_open("plughw:0");
  }
  fprintf(stderr, "bye bye\n");
  return 0;
}

[-- Attachment #1.2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 3636 bytes --]

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

_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel

  reply	other threads:[~2010-09-08  8:41 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-09-07 16:05 crash with assertion (?) IOhannes m zmoelnig
2010-09-07 16:07 ` IOhannes m zmoelnig
2010-09-07 16:32   ` IOhannes m zmoelnig
2010-09-07 17:06 ` Clemens Ladisch
2010-09-08  8:41   ` IOhannes m zmoelnig [this message]
2010-09-09  1:30     ` Raymond Yau
2010-09-09  9:43       ` IOhannes m zmoelnig
2010-09-10  1:53         ` Raymond Yau
2010-09-10  7:06           ` Clemens Ladisch
2010-09-10 23:20             ` Raymond Yau

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4C874C1E.8040007@iem.at \
    --to=zmoelnig@iem.at \
    --cc=alsa-devel@alsa-project.org \
    --cc=clemens@ladisch.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.