Show
Ignore:
Timestamp:
02/29/08 19:38:27 (9 months ago)
Author:
rossb
Message:

patch from magnus jonsson to print error instead of crash in tests when there is no default input (or output) device. changes to paqa_errs are related to ticket #61

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • portaudio/branches/v19-devel/test/paqa_errs.c

    r1097 r1368  
    173173    PaQaData            myData; 
    174174    PaStreamParameters  ipp, opp; 
     175    const PaDeviceInfo* info = NULL; 
     176 
    175177     
    176178    /* Setup data for synthesis thread. */ 
     
    185187    ipp.sampleFormat              = opp.sampleFormat              = paFloat32; 
    186188    /* Take the low latency of the default device for all subsequent tests. */ 
    187     ipp.suggestedLatency          = Pa_GetDeviceInfo(Pa_GetDefaultInputDevice())->defaultLowInputLatency; 
    188     opp.suggestedLatency          = Pa_GetDeviceInfo(Pa_GetDefaultOutputDevice())->defaultLowOutputLatency; 
     189    info = Pa_GetDeviceInfo(Pa_GetDefaultInputDevice()); 
     190    ipp.suggestedLatency          = info ? info->defaultLowInputLatency : 0.100; 
     191    info = Pa_GetDeviceInfo(Pa_GetDefaultOutputDevice()); 
     192    opp.suggestedLatency          = info ? info->defaultLowOutputLatency : 0.100; 
    189193    HOPEFOR(((result = Pa_OpenStream(&stream, &ipp, &opp, 
    190194                                     SAMPLE_RATE, FRAMES_PER_BUFFER, 
     
    214218                                     paClipOff, QaCallback, &myData )) == paInvalidDevice)); 
    215219 
    216     /*----------------------------- Zero input channels: */ 
    217     ipp.hostApiSpecificStreamInfo = opp.hostApiSpecificStreamInfo = NULL; 
    218     ipp.sampleFormat              = opp.sampleFormat              = paFloat32; 
    219     ipp.channelCount = 0;           ipp.device = Pa_GetDefaultInputDevice(); 
    220     opp.channelCount = 0;           opp.device = paNoDevice;    /* And no output device, and no output channels. */    
    221     HOPEFOR(((result = Pa_OpenStream(&stream, &ipp, NULL, 
    222                                      SAMPLE_RATE, FRAMES_PER_BUFFER, 
    223                                      paClipOff, QaCallback, &myData )) == paInvalidChannelCount)); 
    224  
    225     /*----------------------------- Zero output channels: */ 
    226     ipp.hostApiSpecificStreamInfo = opp.hostApiSpecificStreamInfo = NULL; 
    227     ipp.sampleFormat              = opp.sampleFormat              = paFloat32; 
    228     ipp.channelCount = 0;           ipp.device = paNoDevice; /* And no input device, and no input channels. */ 
    229     opp.channelCount = 0;           opp.device = Pa_GetDefaultOutputDevice(); 
    230     HOPEFOR(((result = Pa_OpenStream(&stream, NULL, &opp, 
    231                                      SAMPLE_RATE, FRAMES_PER_BUFFER, 
    232                                      paClipOff, QaCallback, &myData )) == paInvalidChannelCount)); 
    233  
     220    if (Pa_GetDefaultInputDevice() != paNoDevice) { 
     221        /*----------------------------- Zero input channels: */ 
     222        ipp.hostApiSpecificStreamInfo = opp.hostApiSpecificStreamInfo = NULL; 
     223        ipp.sampleFormat              = opp.sampleFormat              = paFloat32; 
     224        ipp.channelCount = 0;           ipp.device = Pa_GetDefaultInputDevice(); 
     225        opp.channelCount = 0;           opp.device = paNoDevice;    /* And no output device, and no output channels. */    
     226        HOPEFOR(((result = Pa_OpenStream(&stream, &ipp, NULL, 
     227                                         SAMPLE_RATE, FRAMES_PER_BUFFER, 
     228                                         paClipOff, QaCallback, &myData )) == paInvalidChannelCount)); 
     229    } 
     230 
     231    if (Pa_GetDefaultOutputDevice() != paNoDevice) { 
     232        /*----------------------------- Zero output channels: */ 
     233        ipp.hostApiSpecificStreamInfo = opp.hostApiSpecificStreamInfo = NULL; 
     234        ipp.sampleFormat              = opp.sampleFormat              = paFloat32; 
     235        ipp.channelCount = 0;           ipp.device = paNoDevice; /* And no input device, and no input channels. */ 
     236        opp.channelCount = 0;           opp.device = Pa_GetDefaultOutputDevice(); 
     237        HOPEFOR(((result = Pa_OpenStream(&stream, NULL, &opp, 
     238                                         SAMPLE_RATE, FRAMES_PER_BUFFER, 
     239                                         paClipOff, QaCallback, &myData )) == paInvalidChannelCount)); 
     240    } 
    234241    /*----------------------------- Nonzero input and output channels but no output device: */ 
    235242    ipp.hostApiSpecificStreamInfo = opp.hostApiSpecificStreamInfo = NULL; 
     
    250257                                     paClipOff, QaCallback, &myData )) == paInvalidDevice)); 
    251258 
    252     /*----------------------------- NULL stream pointer: */ 
    253     ipp.hostApiSpecificStreamInfo = opp.hostApiSpecificStreamInfo = NULL; 
    254     ipp.sampleFormat              = opp.sampleFormat              = paFloat32; 
    255     ipp.channelCount = 0;           ipp.device = paNoDevice;           /* Output is more likely than input. */ 
    256     opp.channelCount = 2;           opp.device = Pa_GetDefaultOutputDevice();    /* Only 2 output channels. */ 
    257     HOPEFOR(((result = Pa_OpenStream(NULL, &ipp, &opp, 
    258                                      SAMPLE_RATE, FRAMES_PER_BUFFER, 
    259                                      paClipOff, QaCallback, &myData )) == paBadStreamPtr)); 
    260  
    261     /*----------------------------- Low sample rate: */ 
    262     ipp.hostApiSpecificStreamInfo = opp.hostApiSpecificStreamInfo = NULL; 
    263     ipp.sampleFormat              = opp.sampleFormat              = paFloat32; 
    264     ipp.channelCount = 0;           ipp.device = paNoDevice; 
    265     opp.channelCount = 2;           opp.device = Pa_GetDefaultOutputDevice(); 
    266     HOPEFOR(((result = Pa_OpenStream(&stream, NULL, &opp, 
    267                                      1.0, FRAMES_PER_BUFFER, /* 1 cycle per second (1 Hz) is too low. */ 
    268                                      paClipOff, QaCallback, &myData )) == paInvalidSampleRate)); 
    269  
    270     /*----------------------------- High sample rate: */ 
    271     ipp.hostApiSpecificStreamInfo = opp.hostApiSpecificStreamInfo = NULL; 
    272     ipp.sampleFormat              = opp.sampleFormat              = paFloat32; 
    273     ipp.channelCount = 0;           ipp.device = paNoDevice; 
    274     opp.channelCount = 2;           opp.device = Pa_GetDefaultOutputDevice(); 
    275     HOPEFOR(((result = Pa_OpenStream(&stream, NULL, &opp, 
    276                                      10000000.0, FRAMES_PER_BUFFER, /* 10^6 cycles per second (10 MHz) is too high. */ 
    277                                      paClipOff, QaCallback, &myData )) == paInvalidSampleRate)); 
    278  
    279     /*----------------------------- NULL callback: */ 
    280     /* NULL callback is valid in V19 -- it means use blocking read/write stream 
     259    if (Pa_GetDefaultOutputDevice() != paNoDevice) { 
     260        /*----------------------------- NULL stream pointer: */ 
     261        ipp.hostApiSpecificStreamInfo = opp.hostApiSpecificStreamInfo = NULL; 
     262        ipp.sampleFormat              = opp.sampleFormat              = paFloat32; 
     263        ipp.channelCount = 0;           ipp.device = paNoDevice;           /* Output is more likely than input. */ 
     264        opp.channelCount = 2;           opp.device = Pa_GetDefaultOutputDevice();    /* Only 2 output channels. */ 
     265        HOPEFOR(((result = Pa_OpenStream(NULL, &ipp, &opp, 
     266                                         SAMPLE_RATE, FRAMES_PER_BUFFER, 
     267                                         paClipOff, QaCallback, &myData )) == paBadStreamPtr)); 
     268 
     269        /*----------------------------- Low sample rate: */ 
     270        ipp.hostApiSpecificStreamInfo = opp.hostApiSpecificStreamInfo = NULL; 
     271        ipp.sampleFormat              = opp.sampleFormat              = paFloat32; 
     272        ipp.channelCount = 0;           ipp.device = paNoDevice; 
     273        opp.channelCount = 2;           opp.device = Pa_GetDefaultOutputDevice(); 
     274        HOPEFOR(((result = Pa_OpenStream(&stream, NULL, &opp, 
     275                                         1.0, FRAMES_PER_BUFFER, /* 1 cycle per second (1 Hz) is too low. */ 
     276                                         paClipOff, QaCallback, &myData )) == paInvalidSampleRate)); 
     277         
     278        /*----------------------------- High sample rate: */ 
     279        ipp.hostApiSpecificStreamInfo = opp.hostApiSpecificStreamInfo = NULL; 
     280        ipp.sampleFormat              = opp.sampleFormat              = paFloat32; 
     281        ipp.channelCount = 0;           ipp.device = paNoDevice; 
     282        opp.channelCount = 2;           opp.device = Pa_GetDefaultOutputDevice(); 
     283        HOPEFOR(((result = Pa_OpenStream(&stream, NULL, &opp, 
     284                                         10000000.0, FRAMES_PER_BUFFER, /* 10^6 cycles per second (10 MHz) is too high. */ 
     285                                         paClipOff, QaCallback, &myData )) == paInvalidSampleRate)); 
     286 
     287        /*----------------------------- NULL callback: */ 
     288        /* NULL callback is valid in V19 -- it means use blocking read/write stream 
    281289     
    282     ipp.hostApiSpecificStreamInfo = opp.hostApiSpecificStreamInfo = NULL; 
    283     ipp.sampleFormat              = opp.sampleFormat              = paFloat32; 
    284     ipp.channelCount = 0;           ipp.device = paNoDevice; 
    285     opp.channelCount = 2;           opp.device = Pa_GetDefaultOutputDevice(); 
    286     HOPEFOR(((result = Pa_OpenStream(&stream, NULL, &opp, 
    287                                      SAMPLE_RATE, FRAMES_PER_BUFFER, 
    288                                      paClipOff, 
    289                                      NULL, 
    290                                      &myData )) == paNullCallback)); 
    291     */ 
    292  
    293     /*----------------------------- Bad flag: */ 
    294     ipp.hostApiSpecificStreamInfo = opp.hostApiSpecificStreamInfo = NULL; 
    295     ipp.sampleFormat              = opp.sampleFormat              = paFloat32; 
    296     ipp.channelCount = 0;           ipp.device = paNoDevice; 
    297     opp.channelCount = 2;           opp.device = Pa_GetDefaultOutputDevice(); 
    298     HOPEFOR(((result = Pa_OpenStream(&stream, NULL, &opp, 
    299                                      SAMPLE_RATE, FRAMES_PER_BUFFER, 
    300                                      255,                      /* Is 8 maybe legal V19 API? */ 
    301                                      QaCallback, &myData )) == paInvalidFlag)); 
     290        ipp.hostApiSpecificStreamInfo = opp.hostApiSpecificStreamInfo = NULL; 
     291        ipp.sampleFormat              = opp.sampleFormat              = paFloat32; 
     292        ipp.channelCount = 0;           ipp.device = paNoDevice; 
     293        opp.channelCount = 2;           opp.device = Pa_GetDefaultOutputDevice(); 
     294        HOPEFOR(((result = Pa_OpenStream(&stream, NULL, &opp, 
     295                                         SAMPLE_RATE, FRAMES_PER_BUFFER, 
     296                                         paClipOff, 
     297                                         NULL, 
     298                                         &myData )) == paNullCallback)); 
     299        */ 
     300 
     301        /*----------------------------- Bad flag: */ 
     302        ipp.hostApiSpecificStreamInfo = opp.hostApiSpecificStreamInfo = NULL; 
     303        ipp.sampleFormat              = opp.sampleFormat              = paFloat32; 
     304        ipp.channelCount = 0;           ipp.device = paNoDevice; 
     305        opp.channelCount = 2;           opp.device = Pa_GetDefaultOutputDevice(); 
     306        HOPEFOR(((result = Pa_OpenStream(&stream, NULL, &opp, 
     307                                         SAMPLE_RATE, FRAMES_PER_BUFFER, 
     308                                         255,                      /* Is 8 maybe legal V19 API? */ 
     309                                         QaCallback, &myData )) == paInvalidFlag)); 
     310    } 
    302311 
    303312    /*----------------------------- using input device as output device: */ 
     
    337346    PaQaData            myData; 
    338347    PaStreamParameters  opp; 
     348    const PaDeviceInfo* info = NULL; 
    339349 
    340350    /* Setup data for synthesis thread. */ 
     
    347357    opp.hostApiSpecificStreamInfo = NULL; 
    348358    opp.sampleFormat              = paFloat32; 
    349     opp.suggestedLatency          = Pa_GetDeviceInfo(opp.device)->defaultLowOutputLatency; 
    350  
    351     HOPEFOR(((result = Pa_OpenStream(&stream, NULL, /* Take NULL as input parame-     */ 
    352                                      &opp,          /* ters, meaning try only output. */ 
    353                                      SAMPLE_RATE, FRAMES_PER_BUFFER, 
    354                                      paClipOff, QaCallback, &myData )) == paNoError)); 
     359    info = Pa_GetDeviceInfo(opp.device); 
     360    opp.suggestedLatency          = info ? info->defaultLowOutputLatency : 0.100; 
     361 
     362    if (opp.device != paNoDevice) { 
     363        HOPEFOR(((result = Pa_OpenStream(&stream, NULL, /* Take NULL as input parame-     */ 
     364                                         &opp,          /* ters, meaning try only output. */ 
     365                                         SAMPLE_RATE, FRAMES_PER_BUFFER, 
     366                                         paClipOff, QaCallback, &myData )) == paNoError)); 
     367    } 
    355368 
    356369    HOPEFOR(((result = Pa_StartStream(NULL))    == paBadStreamPtr));