[BACK]Return to aucat.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / aucat

Diff for /src/usr.bin/aucat/aucat.c between version 1.89 and 1.90

version 1.89, 2010/05/02 11:12:31 version 1.90, 2010/05/02 11:54:26
Line 157 
Line 157 
 }  }
   
 int  int
 opt_join(void)  opt_onoff(void)
 {  {
         if (strcmp("off", optarg) == 0)          if (strcmp("off", optarg) == 0)
                 return 0;                  return 0;
Line 468 
Line 468 
                         xrun = opt_xrun();                          xrun = opt_xrun();
                         break;                          break;
                 case 'j':                  case 'j':
                         join = opt_join();                          join = opt_onoff();
                         break;                          break;
                 case 't':                  case 't':
                         mmc = opt_mmc();                          mmc = opt_mmc();
Line 645 
Line 645 
         filelist_init();          filelist_init();
   
         /*          /*
          * Open the device. Give half of the buffer to the device,           * Open the device
          * the other half is for the socket/files.  
          */           */
         if (n_flag) {          if (n_flag) {
                 if (mode & MODE_MON)                  if (mode & MODE_MON)
                         errx(1, "monitoring not allowed in loopback mode");                          errx(1, "monitoring not allowed in loopback mode");
                 dev_loopinit(&dipar, &dopar, bufsz);                  dev_init_loop(&dipar, &dopar, bufsz);
         } else {          } else {
                 if ((mode & MODE_MON) && !(mode & MODE_PLAY))                  if ((mode & MODE_MON) && !(mode & MODE_PLAY))
                         errx(1, "no playback stream to monitor");                          errx(1, "no playback stream to monitor");
                 if (!dev_init(devpath, mode, &dipar, &dopar, bufsz, round)) {                  dev_init_sio(devpath, mode, &dipar, &dopar, bufsz, round);
                         errx(1, "%s: can't open device",  
                             devpath ? devpath : "<default>");  
                 }  
         }          }
           if (!dev_ref()) {
                   errx(1, "%s: can't open device",
                       devpath ? devpath : "<default>");
           }
   
         /*          /*
          * Create buffers for all input and output pipes.           * Create buffers for all input and output pipes.
Line 710 
Line 710 
                  */                   */
                 ctl_start(dev_midi);                  ctl_start(dev_midi);
         }          }
         if (l_flag)  
                 dev_prime();  
   
         /*          /*
          * Loop, start audio.           * Loop, start audio.
          */           */
         for (;;) {          for (;;) {
                 if (quit_flag) {                  if (quit_flag)
                         break;                          break;
                 }                  if (!dev_run())
                 if ((APROC_OK(dev_mix) && LIST_EMPTY(&dev_mix->outs)) ||  
                     (APROC_OK(dev_sub) && LIST_EMPTY(&dev_sub->ins))) {  
                         fprintf(stderr, "device disappeared, terminating\n");  
                         break;                          break;
                 }  
                 if (!l_flag && ctl_idle(dev_midi))                  if (!l_flag && ctl_idle(dev_midi))
                         break;                          break;
                 if (!file_poll())                  if (!file_poll())
                         break;                          break;
                 if ((!APROC_OK(dev_mix)    || dev_mix->u.mix.idle > 2 * dev_bufsz) &&  
                     (!APROC_OK(dev_sub)    || dev_sub->u.sub.idle > 2 * dev_bufsz) &&  
                     (!APROC_OK(dev_submon) || dev_submon->u.sub.idle > 2 * dev_bufsz) &&  
                     (!APROC_OK(dev_midi)   || dev_midi->u.ctl.tstate != CTL_RUN)) {  
                         if (dev_pstate == DEV_RUN) {  
                                 dev_pstate = DEV_INIT;  
                                 dev_stop();  
                                 dev_clear();  
                                 /*  
                                  * priming buffer in non-server mode is not  
                                  * ok, because it will insert silence and  
                                  * break synchronization  
                                  */  
                                 if (l_flag)  
                                         dev_prime();  
                         }  
                 }  
                 /*  
                  * move device state machine  
                  * XXX: move this to dev.c  
                  */  
                 if (dev_pstate == DEV_START) {  
                         dev_pstate = DEV_RUN;  
                         dev_start();  
                 }  
         }          }
           dev_unref();
         stopall();          stopall();
         dev_done();          dev_done();
           /*
            * give a chance to drain
            */
           while (file_poll())
                   ; /* nothing */
         filelist_done();          filelist_done();
         if (l_flag) {          if (l_flag) {
                 if (rmdir(base) < 0 && errno != ENOTEMPTY && errno != EPERM)                  if (rmdir(base) < 0 && errno != ENOTEMPTY && errno != EPERM)
Line 848 
Line 823 
         setsig();          setsig();
         filelist_init();          filelist_init();
   
         dev_thruinit();          dev_init_thru();
           if (0 && !dev_ref())
                   errx(1, "couldn't opem midi thru box");
         if (!l_flag && APROC_OK(dev_midi))          if (!l_flag && APROC_OK(dev_midi))
                 dev_midi->flags |= APROC_QUIT;                  dev_midi->flags |= APROC_QUIT;
         if ((!SLIST_EMPTY(&ifiles) || !SLIST_EMPTY(&ofiles)) &&          if ((!SLIST_EMPTY(&ifiles) || !SLIST_EMPTY(&ofiles)) &&
Line 919 
Line 896 
          * loop, start processing           * loop, start processing
          */           */
         for (;;) {          for (;;) {
                 if (quit_flag) {                  if (quit_flag)
                         break;                          break;
                 }                  if (!dev_run())
                           break;
                 if (!file_poll())                  if (!file_poll())
                         break;                          break;
         }          }
         stopall();          stopall();
           if (0)
                   dev_unref();
         dev_done();          dev_done();
           /*
            * drain
            */
           while (file_poll())
                   ; /* nothing */
         filelist_done();          filelist_done();
         if (l_flag) {          if (l_flag) {
                 if (rmdir(base) < 0 && errno != ENOTEMPTY && errno != EPERM)                  if (rmdir(base) < 0 && errno != ENOTEMPTY && errno != EPERM)
Line 942 
Line 927 
 {  {
         char *prog;          char *prog;
   
   #ifdef DEBUG
           atexit(dbg_flush);
   #endif
         prog = strrchr(argv[0], '/');          prog = strrchr(argv[0], '/');
         if (prog == NULL)          if (prog == NULL)
                 prog = argv[0];                  prog = argv[0];

Legend:
Removed from v.1.89  
changed lines
  Added in v.1.90