Changeset 5134:98f78b24025e in roaraudio


Ignore:
Timestamp:
09/23/11 00:44:13 (13 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

Fixed segfaul in PortAudio? driver(v19) if no device is found.

Files:
2 edited

Legend:

Unmodified
Added
Removed
  • ChangeLog

    r5132 r5134  
    22        * Fixed segfaul in FLAC cf (Closes: #177) 
    33        * Fixed invalid pointer aliasing (Closes: #178) 
     4        * Fixed segfaul in PortAudio driver(v19) if no device is found. 
    45 
    56v. 0.4rc0 - Mon Sep 05 2011 15:25 CEST 
  • roard/driver_portaudio.c

    r5056 r5134  
    3636#elif defined(ROAR_HAVE_PA19_VERSION_19) 
    3737 PaStreamParameters params; 
     38 const PaDeviceInfo * dev_info = NULL; 
    3839#endif 
    3940 PaError err; 
     
    165166 return 0; 
    166167#elif defined(ROAR_HAVE_PA19_VERSION_19) 
     168 err                              = paNoError; 
     169 
    167170 params.device                    = Pa_GetDefaultOutputDevice(); 
    168171 params.channelCount              = info->channels; 
    169172 params.sampleFormat              = fmt; 
    170  params.suggestedLatency          = Pa_GetDeviceInfo(params.device)->defaultLowOutputLatency; 
     173 
     174 if ( params.device != paNoDevice ) 
     175  dev_info = Pa_GetDeviceInfo(params.device); 
     176 
     177 if ( dev_info != NULL ) { 
     178  params.suggestedLatency = dev_info->defaultLowOutputLatency; 
     179 } else { 
     180  err = paNoDevice; 
     181 } 
     182 
    171183 params.hostApiSpecificStreamInfo = NULL; 
    172184 
     
    175187 
    176188 // Sets up blocking I/O stream. 
    177  err = Pa_OpenStream(&(self->stream), 
    178                      NULL, 
    179                      &params, 
    180                      info->rate, 
    181                      128 /*FIXME:frames*/, 
    182                      paClipOff, 
    183                      NULL, 
    184                      NULL 
    185                     ); 
    186  
    187  if ( err != paNoError && autoconfig ) { 
    188   params.sampleFormat = paInt16; 
    189   params.channelCount = 2; 
    190   info->codec         = ROAR_CODEC_DEFAULT; 
    191   info->bits          = 16; 
    192   info->channels      = 2; 
    193  
     189 if ( err == paNoError ) { 
    194190  err = Pa_OpenStream(&(self->stream), 
    195191                      NULL, 
     
    203199 } 
    204200 
     201 if ( err != paNoError && err != paNoDevice && autoconfig ) { 
     202  params.sampleFormat = paInt16; 
     203  params.channelCount = 2; 
     204  info->codec         = ROAR_CODEC_DEFAULT; 
     205  info->bits          = 16; 
     206  info->channels      = 2; 
     207 
     208  err = Pa_OpenStream(&(self->stream), 
     209                      NULL, 
     210                      &params, 
     211                      info->rate, 
     212                      128 /*FIXME:frames*/, 
     213                      paClipOff, 
     214                      NULL, 
     215                      NULL 
     216                     ); 
     217 } 
     218 
    205219 if ( err != paNoError ) { 
    206220  ROAR_ERR("driver_portaudio_open(*): Could not open PortAudio device: \"%s\".", Pa_GetErrorText(err)); 
Note: See TracChangeset for help on using the changeset viewer.