[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.73 and 1.74

version 1.73, 2009/10/27 22:21:37 version 1.74, 2009/11/03 21:31:37
Line 110 
Line 110 
 }  }
   
 int  int
   opt_mmc(void)
   {
           if (strcmp("off", optarg) == 0)
                   return 0;
           if (strcmp("slave", optarg) == 0)
                   return 1;
           errx(1, "%s: bad MMC mode", optarg);
   }
   
   int
 opt_xrun(void)  opt_xrun(void)
 {  {
         if (strcmp("ignore", optarg) == 0)          if (strcmp("ignore", optarg) == 0)
Line 144 
Line 154 
         char *name;             /* optarg pointer (no need to copy it */          char *name;             /* optarg pointer (no need to copy it */
         int hdr;                /* header format */          int hdr;                /* header format */
         int xrun;               /* overrun/underrun policy */          int xrun;               /* overrun/underrun policy */
           int mmc;                /* MMC mode */
 };  };
   
 SLIST_HEAD(farglist, farg);  SLIST_HEAD(farglist, farg);
Line 155 
Line 166 
 void  void
 farg_add(struct farglist *list,  farg_add(struct farglist *list,
     struct aparams *ipar, struct aparams *opar, unsigned vol,      struct aparams *ipar, struct aparams *opar, unsigned vol,
     int hdr, int xrun, char *optarg)      int hdr, int xrun, int mmc, char *optarg)
 {  {
         struct farg *fa;          struct farg *fa;
         size_t namelen;          size_t namelen;
Line 179 
Line 190 
         fa->opar = *opar;          fa->opar = *opar;
         fa->vol = vol;          fa->vol = vol;
         fa->name = optarg;          fa->name = optarg;
           fa->mmc = mmc;
         SLIST_INSERT_HEAD(list, fa, entry);          SLIST_INSERT_HEAD(list, fa, entry);
 }  }
   
Line 347 
Line 359 
         (void)fputs("usage: " PROG_AUCAT " [-dlnu] [-b nframes] "          (void)fputs("usage: " PROG_AUCAT " [-dlnu] [-b nframes] "
             "[-C min:max] [-c min:max] [-e enc] [-f device]\n"              "[-C min:max] [-c min:max] [-e enc] [-f device]\n"
             "\t[-h fmt] [-i file] [-m mode] [-o file] [-r rate] [-s name]\n"              "\t[-h fmt] [-i file] [-m mode] [-o file] [-r rate] [-s name]\n"
             "\t[-U unit] [-v volume] [-x policy]\n",              "\t[-t mode] [-U unit] [-v volume] [-x policy] [-z nframes]\n",
             stderr);              stderr);
 }  }
   
Line 359 
Line 371 
         struct farglist ifiles, ofiles, sfiles;          struct farglist ifiles, ofiles, sfiles;
         struct aparams ipar, opar, dipar, dopar;          struct aparams ipar, opar, dipar, dopar;
         char base[PATH_MAX], path[PATH_MAX];          char base[PATH_MAX], path[PATH_MAX];
         unsigned bufsz, mode;          unsigned bufsz, round, mode;
         char *devpath;          char *devpath;
         unsigned volctl;          unsigned volctl;
           int mmc;
   
         aparams_init(&ipar, 0, 1, 44100);          aparams_init(&ipar, 0, 1, 44100);
         aparams_init(&opar, 0, 1, 44100);          aparams_init(&opar, 0, 1, 44100);
Line 370 
Line 383 
         l_flag = 0;          l_flag = 0;
         n_flag = 0;          n_flag = 0;
         unit = -1;          unit = -1;
           mmc = 0;
         devpath = NULL;          devpath = NULL;
         SLIST_INIT(&ifiles);          SLIST_INIT(&ifiles);
         SLIST_INIT(&ofiles);          SLIST_INIT(&ofiles);
Line 377 
Line 391 
         hdr = HDR_AUTO;          hdr = HDR_AUTO;
         xrun = XRUN_IGNORE;          xrun = XRUN_IGNORE;
         volctl = MIDI_MAXCTL;          volctl = MIDI_MAXCTL;
         bufsz = 44100 * 4 / 15; /* XXX: use milliseconds, not frames */  
         mode = 0;          mode = 0;
           bufsz = 0;
           round = 0;
   
         while ((c = getopt(argc, argv, "dnb:c:C:e:r:h:x:v:i:o:f:m:lus:U:")) != -1) {          while ((c = getopt(argc, argv, "dnb:c:C:e:r:h:x:v:i:o:f:m:lus:U:t:z:")) != -1) {
                 switch (c) {                  switch (c) {
                 case 'd':                  case 'd':
                         d_flag = 1;                          d_flag = 1;
Line 397 
Line 412 
                 case 'x':                  case 'x':
                         xrun = opt_xrun();                          xrun = opt_xrun();
                         break;                          break;
                   case 't':
                           mmc = opt_mmc();
                           break;
                 case 'c':                  case 'c':
                         opt_ch(&ipar);                          opt_ch(&ipar);
                         break;                          break;
Line 416 
Line 434 
                         break;                          break;
                 case 'i':                  case 'i':
                         farg_add(&ifiles, &ipar, &opar, volctl,                          farg_add(&ifiles, &ipar, &opar, volctl,
                             hdr, xrun, optarg);                              hdr, xrun, 0, optarg);
                         break;                          break;
                 case 'o':                  case 'o':
                         farg_add(&ofiles, &ipar, &opar, volctl,                          farg_add(&ofiles, &ipar, &opar, volctl,
                             hdr, xrun, optarg);                              hdr, xrun, 0, optarg);
                         break;                          break;
                 case 's':                  case 's':
                         farg_add(&sfiles, &ipar, &opar, volctl,                          farg_add(&sfiles, &ipar, &opar, volctl,
                             hdr, xrun, optarg);                              hdr, xrun, mmc, optarg);
                         break;                          break;
                 case 'f':                  case 'f':
                         if (devpath)                          if (devpath)
Line 451 
Line 469 
                                 exit(1);                                  exit(1);
                         }                          }
                         break;                          break;
                   case 'z':
                           if (sscanf(optarg, "%u", &round) != 1 || round == 0) {
                                   fprintf(stderr, "%s: bad block size\n", optarg);
                                   exit(1);
                           }
                           break;
   
                 default:                  default:
                         aucat_usage();                          aucat_usage();
                         exit(1);                          exit(1);
Line 507 
Line 532 
          */           */
         if (l_flag && SLIST_EMPTY(&sfiles)) {          if (l_flag && SLIST_EMPTY(&sfiles)) {
                 farg_add(&sfiles, &dopar, &dipar,                  farg_add(&sfiles, &dopar, &dipar,
                     volctl, HDR_RAW, XRUN_IGNORE, DEFAULT_OPT);                      volctl, HDR_RAW, XRUN_IGNORE, mmc, DEFAULT_OPT);
         }          }
   
         if (!u_flag) {          if (!u_flag) {
Line 529 
Line 554 
                         aparams_grow(&dipar, &fa->opar);                          aparams_grow(&dipar, &fa->opar);
                 }                  }
         }          }
           if (!round)
                   round = ((mode & MODE_REC) ? dipar.rate : dopar.rate) / 15;
           if (!bufsz)
                   bufsz = ((mode & MODE_REC) ? dipar.rate : dopar.rate) * 4 / 15;
   
         if (l_flag) {          if (l_flag) {
                 getbasepath(base, sizeof(base));                  getbasepath(base, sizeof(base));
Line 548 
Line 577 
                 if (!dev_init(devpath,                  if (!dev_init(devpath,
                         (mode & MODE_REC) ? &dipar : NULL,                          (mode & MODE_REC) ? &dipar : NULL,
                         (mode & MODE_PLAY) ? &dopar : NULL,                          (mode & MODE_PLAY) ? &dopar : NULL,
                         bufsz)) {                          bufsz, round)) {
                         errx(1, "%s: can't open device",                          errx(1, "%s: can't open device",
                             devpath ? devpath : "<default>");                              devpath ? devpath : "<default>");
                 }                  }
Line 572 
Line 601 
         while (!SLIST_EMPTY(&sfiles)) {          while (!SLIST_EMPTY(&sfiles)) {
                 fa = SLIST_FIRST(&sfiles);                  fa = SLIST_FIRST(&sfiles);
                 SLIST_REMOVE_HEAD(&sfiles, entry);                  SLIST_REMOVE_HEAD(&sfiles, entry);
                 opt_new(fa->name, &fa->opar, &fa->ipar, MIDI_TO_ADATA(fa->vol));                  opt_new(fa->name, &fa->opar, &fa->ipar,
                       MIDI_TO_ADATA(fa->vol), fa->mmc);
                 free(fa);                  free(fa);
         }          }
         if (l_flag) {          if (l_flag) {
Line 598 
Line 628 
                 if (!file_poll())                  if (!file_poll())
                         break;                          break;
                 if ((!dev_mix || dev_mix->u.mix.idle > 2 * dev_bufsz) &&                  if ((!dev_mix || dev_mix->u.mix.idle > 2 * dev_bufsz) &&
                     (!dev_sub || dev_sub->u.sub.idle > 2 * dev_bufsz)) {                      (!dev_sub || dev_sub->u.sub.idle > 2 * dev_bufsz) &&
                       ((dev_mix || dev_sub) && dev_midi->u.ctl.tstate != CTL_RUN)) {
                         if (!l_flag)                          if (!l_flag)
                                 break;                                  break;
                         if (!suspend) {                          if (!suspend) {
Line 608 
Line 639 
                         }                          }
                 }                  }
                 if ((dev_mix && dev_mix->u.mix.idle == 0) ||                  if ((dev_mix && dev_mix->u.mix.idle == 0) ||
                     (dev_sub && dev_sub->u.sub.idle == 0)) {                      (dev_sub && dev_sub->u.sub.idle == 0) ||
                       ((dev_mix || dev_sub) && dev_midi->u.ctl.tstate == CTL_RUN)) {
                         if (suspend) {                          if (suspend) {
                                 suspend = 0;                                  suspend = 0;
                                 dev_start();                                  dev_start();
Line 662 
Line 694 
                         break;                          break;
                 case 'i':                  case 'i':
                         farg_add(&ifiles, &aparams_none, &aparams_none,                          farg_add(&ifiles, &aparams_none, &aparams_none,
                             0, HDR_RAW, 0, optarg);                              0, HDR_RAW, 0, 0, optarg);
                         break;                          break;
                 case 'o':                  case 'o':
                         farg_add(&ofiles, &aparams_none, &aparams_none,                          farg_add(&ofiles, &aparams_none, &aparams_none,
                             0, HDR_RAW, 0, optarg);                              0, HDR_RAW, 0, 0, optarg);
                         break;                          break;
                 case 'f':                  case 'f':
                         farg_add(&dfiles, &aparams_none, &aparams_none,                          farg_add(&dfiles, &aparams_none, &aparams_none,
                             0, HDR_RAW, 0, optarg);                              0, HDR_RAW, 0, 0, optarg);
                         break;                          break;
                 case 'l':                  case 'l':
                         l_flag = 1;                          l_flag = 1;
Line 708 
Line 740 
   
         dev_thruinit();          dev_thruinit();
         if (!l_flag)          if (!l_flag)
                 dev_midi->u.thru.flags |= THRU_AUTOQUIT;                  dev_midi->flags |= APROC_QUIT;
         if ((!SLIST_EMPTY(&ifiles) || !SLIST_EMPTY(&ofiles)) &&          if ((!SLIST_EMPTY(&ifiles) || !SLIST_EMPTY(&ofiles)) &&
             SLIST_EMPTY(&dfiles)) {              SLIST_EMPTY(&dfiles)) {
                 farg_add(&dfiles, &aparams_none, &aparams_none,                  farg_add(&dfiles, &aparams_none, &aparams_none,
                     0, HDR_RAW, 0, NULL);                      0, HDR_RAW, 0, 0, NULL);
         }          }
         while (!SLIST_EMPTY(&dfiles)) {          while (!SLIST_EMPTY(&dfiles)) {
                 fa = SLIST_FIRST(&dfiles);                  fa = SLIST_FIRST(&dfiles);

Legend:
Removed from v.1.73  
changed lines
  Added in v.1.74