Re: ALSA driver problem after standby/resume

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

 



On 3/19/07, Takashi Iwai <tiwai@xxxxxxx> wrote:
> At Mon, 19 Mar 2007 12:31:16 -0400,
> Rich Rattanni wrote:
> >
> > All:
> >
> > I have noticed a strange behaviour in the ALSA driver that seems to be
> > occur after initiating a power standby and resume.  I am working on an
> > application that uses FusionSound to playback OGG audio files.  When
> > the application recognizes it is idle, it tells the OS to enter
> > standby mode.  Upon resuming from standby, the ALSA API call made by
> > fusionsound no longer acts as a blocking read, instead it returns
> > immediately.  I have confirmed this with Denis Oliver Kropp of the
> > DirectFB / FusionSound project.  He suggested that the ALSA driver
> > should be repaired to prevent this problem from occuring.
>
> It's not clear what is happening there.
> Do you have a small testcase?
>
> When the suspend/resume happens, the apps is usually requested to call
> snd_pcm_resume() and/or snd_pcm_prepare() appropriately to reset the
> stream.  Otherwise the PCM status is kept as SUSPENDED.
>
>
> Takashi
>
> >
> > The system specifications are...
> > Linux            -   Openembedded distro linux kernel 2.6.20
> > GCC             -    4.1.1
> > ALSA            -    1.0.13-r1
> > FusionSound - 0.9.26-r0
> >
> > I guess I am looking for confirmation of this behavior with ALSA and
> > any possible suggestions to patch the driver to operate correctly with
> > power management functions under linux.
> >
> > Thanks in advance,
> > Rich
> >
> > -------------------------------------------------------------------------
> > Take Surveys. Earn Cash. Influence the Future of IT
> > Join SourceForge.net's Techsay panel and you'll get the chance to share your
> > opinions on IT & business topics through brief surveys-and earn cash
> > http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
> > _______________________________________________
> > Alsa-devel mailing list
> > Alsa-devel@xxxxxxxxxxxxxxxxxxxxx
> > https://lists.sourceforge.net/lists/listinfo/alsa-devel
> >
>

Takashi:
  I received a reply from Denis Kropp.  Here is the source code of
FusionSound where the problem occurs.


Rich Rattanni schrieb:
>  I have a post going on the alsa developers mailing list addressing
> this issue, they are asking for the specific source code of the
> problem.  Could you tell me where in the code to look for that loop
> that reads the sound device?

It starts in src/core/core_sound.c at line 459:

static void *
sound_thread( DirectThread *thread, void *arg )


The (most likely) non-blocking write is done at line 654:

          fs_device_write( core->device, output, mixed >> 1 );


Which is ending up in drivers/alsa.c at line 255:

static void
device_write( void *device_data, void *samples, unsigned int size )
{
     AlsaDeviceData    *data   = device_data;
     snd_pcm_uframes_t  frames = size;
     snd_pcm_sframes_t  r;
     u8                *src;

     src = samples;
     while (frames) {
          r = snd_pcm_writei( data->handle, src, frames );
          if (r < 0) {
               r = snd_pcm_prepare( data->handle );
               if (r < 0) {
                    D_WARN( "FusionSound/Device/ALSA: snd_pcm_writei()
failed: %s\n",
                            snd_strerror( r ) );
                    break;
               }
               continue;
          }
          frames -= r;
          src += snd_pcm_frames_to_bytes( data->handle, r );
     }
}



I don't know about these APIs, but at least one of snd_pcm_writei()
and snd_pcm_prepare() should block, otherwise the mixer loop has no
sleep...

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Alsa-devel mailing list
Alsa-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.sourceforge.net/lists/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