views:

51

answers:

0

Hi, I'm experiencing a very strange behavior.

I'm using alsa 1.0.18 on a powerpc platform.

If I run the following simple code from the main of a .c file, it works perfectly, but if I put into a shared .so library (libaudio.so), then I link the main with -laudio -lasound, then the hwparams structure is not filled with anything, while the alsa functions don't return any error. The traces and memory locations comparing direct linking vs linking through the library look the same.

Do you have any clue why this could happen?

TIA

int play_sample(char *pcm_name, char *samplename)
{
   int res;
   snd_pcm_t *pcm_handle;
   snd_pcm_hw_params_t *hwparams;
   const char *name= (pcm_name != NULL) ? pcm_name : "speaker";

   if ( (res = snd_pcm_open(&pcm_handle, name, SND_PCM_STREAM_PLAYBACK, 0)) < 0) {
       fprintf(stderr, "Error opening PCM device %s\n", pcm_name);
       return 1;
   } else {
       printf ("snd_pcm_open returned %d\n", res);
   }


   snd_pcm_hw_params_malloc(&hwparams);
   if (snd_pcm_hw_params_any(pcm_handle, hwparams) < 0) {
       fprintf(stderr, "Can not configure this PCM device.\n");
       return 1;

  snd_pcm_close(pcm_handle);

  free(hwparams);
}



int main (void)
{
   play_sample (NULL, "test_sound.wav");

   return 0;
}