/[qemu]/qemu/audio/dsoundaudio.c
ViewVC logotype

Diff of /qemu/audio/dsoundaudio.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.1 by bellard, Sun Oct 30 18:58:22 2005 UTC revision 1.2 by bellard, Sat Nov 5 18:55:27 2005 UTC
# Line 37  Line 37 
37    
38  /* #define DEBUG_DSOUND */  /* #define DEBUG_DSOUND */
39    
 struct full_fmt {  
     int freq;  
     int nchannels;  
     audfmt_e fmt;  
 };  
   
40  static struct {  static struct {
41      int lock_retries;      int lock_retries;
42      int restore_retries;      int restore_retries;
# Line 50  static struct { Line 44  static struct {
44      int set_primary;      int set_primary;
45      int bufsize_in;      int bufsize_in;
46      int bufsize_out;      int bufsize_out;
47      struct full_fmt full_fmt;      audsettings_t settings;
48      int latency_millis;      int latency_millis;
49  } conf = {  } conf = {
50      1,      1,
# Line 71  typedef struct { Line 65  typedef struct {
65      LPDIRECTSOUND dsound;      LPDIRECTSOUND dsound;
66      LPDIRECTSOUNDCAPTURE dsound_capture;      LPDIRECTSOUNDCAPTURE dsound_capture;
67      LPDIRECTSOUNDBUFFER dsound_primary_buffer;      LPDIRECTSOUNDBUFFER dsound_primary_buffer;
68      struct full_fmt fmt;      audsettings_t settings;
69  } dsound;  } dsound;
70    
71  static dsound glob_dsound;  static dsound glob_dsound;
# Line 259  static void GCC_FMT_ATTR (3, 4) dsound_l Line 253  static void GCC_FMT_ATTR (3, 4) dsound_l
253  {  {
254      va_list ap;      va_list ap;
255    
256      AUD_log (AUDIO_CAP, "Can not initialize %s\n", typ);      AUD_log (AUDIO_CAP, "Could not initialize %s\n", typ);
257      va_start (ap, fmt);      va_start (ap, fmt);
258      AUD_vlog (AUDIO_CAP, fmt, ap);      AUD_vlog (AUDIO_CAP, fmt, ap);
259      va_end (ap);      va_end (ap);
# Line 301  static int dsound_restore_out (LPDIRECTS Line 295  static int dsound_restore_out (LPDIRECTS
295              continue;              continue;
296    
297          default:          default:
298              dsound_logerr (hr, "Can not restore playback buffer\n");              dsound_logerr (hr, "Could not restore playback buffer\n");
299              return -1;              return -1;
300          }          }
301      }      }
# Line 310  static int dsound_restore_out (LPDIRECTS Line 304  static int dsound_restore_out (LPDIRECTS
304      return -1;      return -1;
305  }  }
306    
307  static int waveformat_from_full_fmt (WAVEFORMATEX *wfx,  static int waveformat_from_audio_settings (WAVEFORMATEX *wfx, audsettings_t *as)
                                      struct full_fmt *full_fmt)  
308  {  {
309      memset (wfx, 0, sizeof (*wfx));      memset (wfx, 0, sizeof (*wfx));
310    
311      wfx->wFormatTag = WAVE_FORMAT_PCM;      wfx->wFormatTag = WAVE_FORMAT_PCM;
312      wfx->nChannels = full_fmt->nchannels;      wfx->nChannels = as->nchannels;
313      wfx->nSamplesPerSec = full_fmt->freq;      wfx->nSamplesPerSec = as->freq;
314      wfx->nAvgBytesPerSec = full_fmt->freq << (full_fmt->nchannels == 2);      wfx->nAvgBytesPerSec = as->freq << (as->nchannels == 2);
315      wfx->nBlockAlign = 1 << (full_fmt->nchannels == 2);      wfx->nBlockAlign = 1 << (as->nchannels == 2);
316      wfx->cbSize = 0;      wfx->cbSize = 0;
317    
318      switch (full_fmt->fmt) {      switch (as->fmt) {
319      case AUD_FMT_S8:      case AUD_FMT_S8:
320          wfx->wBitsPerSample = 8;          wfx->wBitsPerSample = 8;
321          break;          break;
# Line 344  static int waveformat_from_full_fmt (WAV Line 337  static int waveformat_from_full_fmt (WAV
337          break;          break;
338    
339      default:      default:
340          dolog ("Internal logic error: Bad audio format %d\n",          dolog ("Internal logic error: Bad audio format %d\n", as->freq);
                full_fmt->freq);  
341          return -1;          return -1;
342      }      }
343    
344      return 0;      return 0;
345  }  }
346    
347  static int waveformat_to_full_fmt (WAVEFORMATEX *wfx,  static int waveformat_to_audio_settings (WAVEFORMATEX *wfx, audsettings_t *as)
                                    struct full_fmt *full_fmt)  
348  {  {
349      if (wfx->wFormatTag != WAVE_FORMAT_PCM) {      if (wfx->wFormatTag != WAVE_FORMAT_PCM) {
350          dolog ("Invalid wave format, tag is not PCM, but %d\n",          dolog ("Invalid wave format, tag is not PCM, but %d\n",
# Line 365  static int waveformat_to_full_fmt (WAVEF Line 356  static int waveformat_to_full_fmt (WAVEF
356          dolog ("Invalid wave format, frequency is zero\n");          dolog ("Invalid wave format, frequency is zero\n");
357          return -1;          return -1;
358      }      }
359      full_fmt->freq = wfx->nSamplesPerSec;      as->freq = wfx->nSamplesPerSec;
360    
361      switch (wfx->nChannels) {      switch (wfx->nChannels) {
362      case 1:      case 1:
363          full_fmt->nchannels = 1;          as->nchannels = 1;
364          break;          break;
365    
366      case 2:      case 2:
367          full_fmt->nchannels = 2;          as->nchannels = 2;
368          break;          break;
369    
370      default:      default:
# Line 386  static int waveformat_to_full_fmt (WAVEF Line 377  static int waveformat_to_full_fmt (WAVEF
377    
378      switch (wfx->wBitsPerSample) {      switch (wfx->wBitsPerSample) {
379      case 8:      case 8:
380          full_fmt->fmt = AUD_FMT_U8;          as->fmt = AUD_FMT_U8;
381          break;          break;
382    
383      case 16:      case 16:
384          full_fmt->fmt = AUD_FMT_S16;          as->fmt = AUD_FMT_S16;
385          break;          break;
386    
387      default:      default:
# Line 415  static int dsound_get_status_out (LPDIRE Line 406  static int dsound_get_status_out (LPDIRE
406      for (i = 0; i < conf.getstatus_retries; ++i) {      for (i = 0; i < conf.getstatus_retries; ++i) {
407          hr = IDirectSoundBuffer_GetStatus (dsb, statusp);          hr = IDirectSoundBuffer_GetStatus (dsb, statusp);
408          if (FAILED (hr)) {          if (FAILED (hr)) {
409              dsound_logerr (hr, "Can not get playback buffer status\n");              dsound_logerr (hr, "Could not get playback buffer status\n");
410              return -1;              return -1;
411          }          }
412    
# Line 438  static int dsound_get_status_in (LPDIREC Line 429  static int dsound_get_status_in (LPDIREC
429    
430      hr = IDirectSoundCaptureBuffer_GetStatus (dscb, statusp);      hr = IDirectSoundCaptureBuffer_GetStatus (dscb, statusp);
431      if (FAILED (hr)) {      if (FAILED (hr)) {
432          dsound_logerr (hr, "Can not get capture buffer status\n");          dsound_logerr (hr, "Could not get capture buffer status\n");
433          return -1;          return -1;
434      }      }
435    
# Line 520  static void dsound_close (dsound *s) Line 511  static void dsound_close (dsound *s)
511      if (s->dsound_primary_buffer) {      if (s->dsound_primary_buffer) {
512          hr = IDirectSoundBuffer_Release (s->dsound_primary_buffer);          hr = IDirectSoundBuffer_Release (s->dsound_primary_buffer);
513          if (FAILED (hr)) {          if (FAILED (hr)) {
514              dsound_logerr (hr, "Can not release primary buffer\n");              dsound_logerr (hr, "Could not release primary buffer\n");
515          }          }
516          s->dsound_primary_buffer = NULL;          s->dsound_primary_buffer = NULL;
517      }      }
# Line 542  static int dsound_open (dsound *s) Line 533  static int dsound_open (dsound *s)
533          );          );
534    
535      if (FAILED (hr)) {      if (FAILED (hr)) {
536          dsound_logerr (hr, "Can not set cooperative level for window %p\n",          dsound_logerr (hr, "Could not set cooperative level for window %p\n",
537                         hwnd);                         hwnd);
538          return -1;          return -1;
539      }      }
# Line 551  static int dsound_open (dsound *s) Line 542  static int dsound_open (dsound *s)
542          return 0;          return 0;
543      }      }
544    
545      err = waveformat_from_full_fmt (&wfx, &conf.full_fmt);      err = waveformat_from_audio_settings (&wfx, &conf.settings);
546      if (err) {      if (err) {
547          return -1;          return -1;
548      }      }
# Line 569  static int dsound_open (dsound *s) Line 560  static int dsound_open (dsound *s)
560          NULL          NULL
561          );          );
562      if (FAILED (hr)) {      if (FAILED (hr)) {
563          dsound_logerr (hr, "Can not create primary playback buffer\n");          dsound_logerr (hr, "Could not create primary playback buffer\n");
564          return -1;          return -1;
565      }      }
566    
567      hr = IDirectSoundBuffer_SetFormat (s->dsound_primary_buffer, &wfx);      hr = IDirectSoundBuffer_SetFormat (s->dsound_primary_buffer, &wfx);
568      if (FAILED (hr)) {      if (FAILED (hr)) {
569          dsound_logerr (hr, "Can not set primary playback buffer format\n");          dsound_logerr (hr, "Could not set primary playback buffer format\n");
570      }      }
571    
572      hr = IDirectSoundBuffer_GetFormat (      hr = IDirectSoundBuffer_GetFormat (
# Line 585  static int dsound_open (dsound *s) Line 576  static int dsound_open (dsound *s)
576          NULL          NULL
577          );          );
578      if (FAILED (hr)) {      if (FAILED (hr)) {
579          dsound_logerr (hr, "Can not get primary playback buffer format\n");          dsound_logerr (hr, "Could not get primary playback buffer format\n");
580          goto fail0;          goto fail0;
581      }      }
582    
# Line 594  static int dsound_open (dsound *s) Line 585  static int dsound_open (dsound *s)
585      print_wave_format (&wfx);      print_wave_format (&wfx);
586  #endif  #endif
587    
588      err = waveformat_to_full_fmt (&wfx, &s->fmt);      err = waveformat_to_audio_settings (&wfx, &s->settings);
589      if (err) {      if (err) {
590          goto fail0;          goto fail0;
591      }      }
# Line 625  static int dsound_ctl_out (HWVoiceOut *h Line 616  static int dsound_ctl_out (HWVoiceOut *h
616          }          }
617    
618          if (status & DSBSTATUS_PLAYING) {          if (status & DSBSTATUS_PLAYING) {
619              dolog ("warning: voice is already playing\n");              dolog ("warning: Voice is already playing\n");
620              return 0;              return 0;
621          }          }
622    
# Line 633  static int dsound_ctl_out (HWVoiceOut *h Line 624  static int dsound_ctl_out (HWVoiceOut *h
624    
625          hr = IDirectSoundBuffer_Play (dsb, 0, 0, DSBPLAY_LOOPING);          hr = IDirectSoundBuffer_Play (dsb, 0, 0, DSBPLAY_LOOPING);
626          if (FAILED (hr)) {          if (FAILED (hr)) {
627              dsound_logerr (hr, "Can not start playing buffer\n");              dsound_logerr (hr, "Could not start playing buffer\n");
628              return -1;              return -1;
629          }          }
630          break;          break;
# Line 646  static int dsound_ctl_out (HWVoiceOut *h Line 637  static int dsound_ctl_out (HWVoiceOut *h
637          if (status & DSBSTATUS_PLAYING) {          if (status & DSBSTATUS_PLAYING) {
638              hr = IDirectSoundBuffer_Stop (dsb);              hr = IDirectSoundBuffer_Stop (dsb);
639              if (FAILED (hr)) {              if (FAILED (hr)) {
640                  dsound_logerr (hr, "Can not stop playing buffer\n");                  dsound_logerr (hr, "Could not stop playing buffer\n");
641                  return -1;                  return -1;
642              }              }
643          }          }
644          else {          else {
645              dolog ("warning: voice is not playing\n");              dolog ("warning: Voice is not playing\n");
646          }          }
647          break;          break;
648      }      }
# Line 675  static int dsound_run_out (HWVoiceOut *h Line 666  static int dsound_run_out (HWVoiceOut *h
666      DWORD decr;      DWORD decr;
667      DWORD wpos, ppos, old_pos;      DWORD wpos, ppos, old_pos;
668      LPVOID p1, p2;      LPVOID p1, p2;
669        int bufsize;
670    
671      if (!dsb) {      if (!dsb) {
672          dolog ("Attempt to run empty with playback buffer\n");          dolog ("Attempt to run empty with playback buffer\n");
# Line 682  static int dsound_run_out (HWVoiceOut *h Line 674  static int dsound_run_out (HWVoiceOut *h
674      }      }
675    
676      hwshift = hw->info.shift;      hwshift = hw->info.shift;
677        bufsize = hw->samples << hwshift;
678    
679      live = audio_pcm_hw_get_live_out (hw);      live = audio_pcm_hw_get_live_out (hw);
680    
# Line 691  static int dsound_run_out (HWVoiceOut *h Line 684  static int dsound_run_out (HWVoiceOut *h
684          ds->first_time ? &wpos : NULL          ds->first_time ? &wpos : NULL
685          );          );
686      if (FAILED (hr)) {      if (FAILED (hr)) {
687          dsound_logerr (hr, "Can not get playback buffer position\n");          dsound_logerr (hr, "Could not get playback buffer position\n");
688          return 0;          return 0;
689      }      }
690    
# Line 699  static int dsound_run_out (HWVoiceOut *h Line 692  static int dsound_run_out (HWVoiceOut *h
692    
693      if (ds->first_time) {      if (ds->first_time) {
694          if (conf.latency_millis) {          if (conf.latency_millis) {
695              DWORD cur_blat = audio_ring_dist (wpos, ppos, hw->bufsize);              DWORD cur_blat;
696    
697                cur_blat = audio_ring_dist (wpos, ppos, bufsize);
698              ds->first_time = 0;              ds->first_time = 0;
699              old_pos = wpos;              old_pos = wpos;
700              old_pos +=              old_pos +=
701                  millis_to_bytes (&hw->info, conf.latency_millis) - cur_blat;                  millis_to_bytes (&hw->info, conf.latency_millis) - cur_blat;
702              old_pos %= hw->bufsize;              old_pos %= bufsize;
703              old_pos &= ~hw->info.align;              old_pos &= ~hw->info.align;
704          }          }
705          else {          else {
# Line 734  static int dsound_run_out (HWVoiceOut *h Line 728  static int dsound_run_out (HWVoiceOut *h
728          len = ppos - old_pos;          len = ppos - old_pos;
729      }      }
730      else {      else {
731          if ((old_pos > ppos) && ((old_pos + len) > (ppos + hw->bufsize))) {          if ((old_pos > ppos) && ((old_pos + len) > (ppos + bufsize))) {
732              len = hw->bufsize - old_pos + ppos;              len = bufsize - old_pos + ppos;
733          }          }
734      }      }
735    
736      if (audio_bug (AUDIO_FUNC, len < 0 || len > hw->bufsize)) {      if (audio_bug (AUDIO_FUNC, len < 0 || len > bufsize)) {
737          dolog ("len=%d hw->bufsize=%d old_pos=%ld ppos=%ld\n",          dolog ("len=%d bufsize=%d old_pos=%ld ppos=%ld\n",
738                 len, hw->bufsize, old_pos, ppos);                 len, bufsize, old_pos, ppos);
739          return 0;          return 0;
740      }      }
741    
# Line 779  static int dsound_run_out (HWVoiceOut *h Line 773  static int dsound_run_out (HWVoiceOut *h
773      }      }
774    
775      dsound_unlock_out (dsb, p1, p2, blen1, blen2);      dsound_unlock_out (dsb, p1, p2, blen1, blen2);
776      ds->old_pos = (old_pos + (decr << hwshift)) % hw->bufsize;      ds->old_pos = (old_pos + (decr << hwshift)) % bufsize;
777    
778  #ifdef DEBUG_DSOUND  #ifdef DEBUG_DSOUND
779      ds->mixed += decr << hwshift;      ds->mixed += decr << hwshift;
# Line 812  static int dsound_ctl_in (HWVoiceIn *hw, Line 806  static int dsound_ctl_in (HWVoiceIn *hw,
806          }          }
807    
808          if (status & DSCBSTATUS_CAPTURING) {          if (status & DSCBSTATUS_CAPTURING) {
809              dolog ("warning: voice is already capturing\n");              dolog ("warning: Voice is already capturing\n");
810              return 0;              return 0;
811          }          }
812    
# Line 820  static int dsound_ctl_in (HWVoiceIn *hw, Line 814  static int dsound_ctl_in (HWVoiceIn *hw,
814    
815          hr = IDirectSoundCaptureBuffer_Start (dscb, DSCBSTART_LOOPING);          hr = IDirectSoundCaptureBuffer_Start (dscb, DSCBSTART_LOOPING);
816          if (FAILED (hr)) {          if (FAILED (hr)) {
817              dsound_logerr (hr, "Can not start capturing\n");              dsound_logerr (hr, "Could not start capturing\n");
818              return -1;              return -1;
819          }          }
820          break;          break;
# Line 833  static int dsound_ctl_in (HWVoiceIn *hw, Line 827  static int dsound_ctl_in (HWVoiceIn *hw,
827          if (status & DSCBSTATUS_CAPTURING) {          if (status & DSCBSTATUS_CAPTURING) {
828              hr = IDirectSoundCaptureBuffer_Stop (dscb);              hr = IDirectSoundCaptureBuffer_Stop (dscb);
829              if (FAILED (hr)) {              if (FAILED (hr)) {
830                  dsound_logerr (hr, "Can not stop capturing\n");                  dsound_logerr (hr, "Could not stop capturing\n");
831                  return -1;                  return -1;
832              }              }
833          }          }
834          else {          else {
835              dolog ("warning: voice is not capturing\n");              dolog ("warning: Voice is not capturing\n");
836          }          }
837          break;          break;
838      }      }
# Line 883  static int dsound_run_in (HWVoiceIn *hw) Line 877  static int dsound_run_in (HWVoiceIn *hw)
877          ds->first_time ? &rpos : NULL          ds->first_time ? &rpos : NULL
878          );          );
879      if (FAILED (hr)) {      if (FAILED (hr)) {
880          dsound_logerr (hr, "Can not get capture buffer position\n");          dsound_logerr (hr, "Could not get capture buffer position\n");
881          return 0;          return 0;
882      }      }
883    
884      if (ds->first_time) {      if (ds->first_time) {
885          ds->first_time = 0;          ds->first_time = 0;
886          if (rpos & hw->info.align) {          if (rpos & hw->info.align) {
887              ldebug ("warning: misaligned capture read position %ld(%d)\n",              ldebug ("warning: Misaligned capture read position %ld(%d)\n",
888                      rpos, hw->info.align);                      rpos, hw->info.align);
889          }          }
890          hw->wpos = rpos >> hwshift;          hw->wpos = rpos >> hwshift;
891      }      }
892    
893      if (cpos & hw->info.align) {      if (cpos & hw->info.align) {
894          ldebug ("warning: misaligned capture position %ld(%d)\n",          ldebug ("warning: Misaligned capture position %ld(%d)\n",
895                  cpos, hw->info.align);                  cpos, hw->info.align);
896      }      }
897      cpos >>= hwshift;      cpos >>= hwshift;
# Line 951  static void dsound_audio_fini (void *opa Line 945  static void dsound_audio_fini (void *opa
945    
946      hr = IDirectSound_Release (s->dsound);      hr = IDirectSound_Release (s->dsound);
947      if (FAILED (hr)) {      if (FAILED (hr)) {
948          dsound_logerr (hr, "Can not release DirectSound\n");          dsound_logerr (hr, "Could not release DirectSound\n");
949      }      }
950      s->dsound = NULL;      s->dsound = NULL;
951    
# Line 961  static void dsound_audio_fini (void *opa Line 955  static void dsound_audio_fini (void *opa
955    
956      hr = IDirectSoundCapture_Release (s->dsound_capture);      hr = IDirectSoundCapture_Release (s->dsound_capture);
957      if (FAILED (hr)) {      if (FAILED (hr)) {
958          dsound_logerr (hr, "Can not release DirectSoundCapture\n");          dsound_logerr (hr, "Could not release DirectSoundCapture\n");
959      }      }
960      s->dsound_capture = NULL;      s->dsound_capture = NULL;
961  }  }
# Line 974  static void *dsound_audio_init (void) Line 968  static void *dsound_audio_init (void)
968    
969      hr = CoInitialize (NULL);      hr = CoInitialize (NULL);
970      if (FAILED (hr)) {      if (FAILED (hr)) {
971          dsound_logerr (hr, "Can not initialize COM\n");          dsound_logerr (hr, "Could not initialize COM\n");
972          return NULL;          return NULL;
973      }      }
974    
# Line 986  static void *dsound_audio_init (void) Line 980  static void *dsound_audio_init (void)
980          (void **) &s->dsound          (void **) &s->dsound
981          );          );
982      if (FAILED (hr)) {      if (FAILED (hr)) {
983          dsound_logerr (hr, "Can not create DirectSound instance\n");          dsound_logerr (hr, "Could not create DirectSound instance\n");
984          return NULL;          return NULL;
985      }      }
986    
987      hr = IDirectSound_Initialize (s->dsound, NULL);      hr = IDirectSound_Initialize (s->dsound, NULL);
988      if (FAILED (hr)) {      if (FAILED (hr)) {
989          dsound_logerr (hr, "Can not initialize DirectSound\n");          dsound_logerr (hr, "Could not initialize DirectSound\n");
990          return NULL;          return NULL;
991      }      }
992    
# Line 1004  static void *dsound_audio_init (void) Line 998  static void *dsound_audio_init (void)
998          (void **) &s->dsound_capture          (void **) &s->dsound_capture
999          );          );
1000      if (FAILED (hr)) {      if (FAILED (hr)) {
1001          dsound_logerr (hr, "Can not create DirectSoundCapture instance\n");          dsound_logerr (hr, "Could not create DirectSoundCapture instance\n");
1002      }      }
1003      else {      else {
1004          hr = IDirectSoundCapture_Initialize (s->dsound_capture, NULL);          hr = IDirectSoundCapture_Initialize (s->dsound_capture, NULL);
1005          if (FAILED (hr)) {          if (FAILED (hr)) {
1006              dsound_logerr (hr, "Can not initialize DirectSoundCapture\n");              dsound_logerr (hr, "Could not initialize DirectSoundCapture\n");
1007    
1008              hr = IDirectSoundCapture_Release (s->dsound_capture);              hr = IDirectSoundCapture_Release (s->dsound_capture);
1009              if (FAILED (hr)) {              if (FAILED (hr)) {
1010                  dsound_logerr (hr, "Can not release DirectSoundCapture\n");                  dsound_logerr (hr, "Could not release DirectSoundCapture\n");
1011              }              }
1012              s->dsound_capture = NULL;              s->dsound_capture = NULL;
1013          }          }
# Line 1039  static struct audio_option dsound_option Line 1033  static struct audio_option dsound_option
1033       "Set the parameters of primary buffer", NULL, 0},       "Set the parameters of primary buffer", NULL, 0},
1034      {"LATENCY_MILLIS", AUD_OPT_INT, &conf.latency_millis,      {"LATENCY_MILLIS", AUD_OPT_INT, &conf.latency_millis,
1035       "(undocumented)", NULL, 0},       "(undocumented)", NULL, 0},
1036      {"PRIMARY_FREQ", AUD_OPT_INT, &conf.full_fmt.freq,      {"PRIMARY_FREQ", AUD_OPT_INT, &conf.settings.freq,
1037       "Primary buffer frequency", NULL, 0},       "Primary buffer frequency", NULL, 0},
1038      {"PRIMARY_CHANNELS", AUD_OPT_INT, &conf.full_fmt.nchannels,      {"PRIMARY_CHANNELS", AUD_OPT_INT, &conf.settings.nchannels,
1039       "Primary buffer number of channels (1 - mono, 2 - stereo)", NULL, 0},       "Primary buffer number of channels (1 - mono, 2 - stereo)", NULL, 0},
1040      {"PRIMARY_FMT", AUD_OPT_FMT, &conf.full_fmt.fmt,      {"PRIMARY_FMT", AUD_OPT_FMT, &conf.settings.fmt,
1041       "Primary buffer format", NULL, 0},       "Primary buffer format", NULL, 0},
1042      {"BUFSIZE_OUT", AUD_OPT_INT, &conf.bufsize_out,      {"BUFSIZE_OUT", AUD_OPT_INT, &conf.bufsize_out,
1043       "(undocumented)", NULL, 0},       "(undocumented)", NULL, 0},

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.2

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26