summaryrefslogblamecommitdiff
path: root/net/openh323-112/files/patch-oss
blob: 1f8720bf55c64bb4296a194963fa2503b1da9e59 (plain) (tree)

























































































































































                                                                                                                               
*** ../pwlib/src/ptlib/unix/oss.cxx.orig	Thu Dec 12 09:03:56 2002
--- ../pwlib/src/ptlib/unix/oss.cxx	Sun Feb  2 19:22:40 2003
***************
*** 27,32 ****
--- 27,45 ----
   * Contributor(s): Loopback feature: Philip Edelbrock <phil@netroedge.com>.
   *
   * $Log: oss.cxx,v $
+  * Revision 1.58  2003/02/02 18:54:22  rogerh
+  * FreeBSD changes for support of dspN.M (eg dsp0.0) sound card entries.
+  * Problem reported by Lars Eggert <larse@isi.edu>
+  *
+  * Revision 1.57  2003/01/06 19:25:07  rogerh
+  * Add NetBSD video support.
+  * Add correct includes for OSS ioctls (note the proper way to do this now
+  * is via pwlib commands)
+  * From Andreas Wrede, taken in part from NetBSD's package system
+  *
+  * Revision 1.56  2003/01/06 19:10:22  rogerh
+  * NetBSD uses /dev/audio and not /dev/dsp
+  *
   * Revision 1.55  2002/12/12 09:03:56  rogerh
   * On two FreeBSD machines, Read() calls from the sound card were not blocking
   * correctly and returned with less bytes than asked for. This made OpenH323
***************
*** 223,229 ****
  
  #ifdef P_LINUX
  #include <sys/soundcard.h>
- #include <sys/time.h>
  #endif
  
  #ifdef P_FREEBSD
--- 236,241 ----
*************** PSoundChannel::~PSoundChannel()
*** 456,468 ****
  }
  
  static BOOL IsNumericString(PString numbers) {
!   // return true if 'numbers' contains only digits 0 to 9
    for (PINDEX p = 0; p < numbers.GetLength(); p++) {
!     if (!isdigit(numbers[p])) {
!       return FALSE;
      }
    }
!   return TRUE;
  }
  
  static void CollectSoundDevices(PDirectory devdir, POrdinalToString & dsp, POrdinalToString & mixer, BOOL collect_with_names)
--- 468,485 ----
  }
  
  static BOOL IsNumericString(PString numbers) {
!   // return true if 'numbers' contains only digits (0 to 9)
!   // or if it contains digits followed by a '.'
! 
!   BOOL isNumber = FALSE;
    for (PINDEX p = 0; p < numbers.GetLength(); p++) {
!     if (isdigit(numbers[p])) {
!       isNumber = TRUE;
!     } else {
!       return isNumber;
      }
    }
!   return isNumber;
  }
  
  static void CollectSoundDevices(PDirectory devdir, POrdinalToString & dsp, POrdinalToString & mixer, BOOL collect_with_names)
*************** static void CollectSoundDevices(PDirecto
*** 499,520 ****
          // On Linux devfs systems, the major numbers can change dynamically.
  	// On FreeBSD and other OSs, the major numbes are different to Linux.
  	// So collect devices by looking for dsp(N) and mixer(N).
! 	// Notes. FreeBSD supports audio stream mixing. For /dev/dsp0
! 	// there are also entries for /dev/dsp0.0 dsp0.1 dsp0.2 and dsp0.3
! 	// We will ignore these N.M devices.
  
          // Look for dsp
          if (filename == "dsp") {
            dsp.SetAt(0, devname);
          }
!         // Look for dspN. Insert at position cardnum + 1
          if ((filename.GetLength() > 3) && (filename.Left(3) == "dsp")) {
  	  PString numbers = filename.Mid(3); // get everything after 'dsp'
  	  if (IsNumericString(numbers)) {
              PINDEX cardnum = numbers.AsInteger();
              dsp.SetAt(cardnum+1, devname);
  	  }
          }
          // Look for mixer
          if (filename == "mixer") {
            mixer.SetAt(0, devname);
--- 516,562 ----
          // On Linux devfs systems, the major numbers can change dynamically.
  	// On FreeBSD and other OSs, the major numbes are different to Linux.
  	// So collect devices by looking for dsp(N) and mixer(N).
!         // (or /dev/audio(N) and mixer(N) on NetBSD
! 	// Notes. FreeBSD supports audio stream mixing. A single sound card
! 	// may have multiple /dev entries in the form /dev/dspN.M
! 	// eg /dev/dsp0.0 /dev/dsp0.1 /dev/dsp0.2 and /dev/dsp0.3
! 	// When adding these to the 'dsp' string array, only the first one
! 	// found is used.
  
+ #ifndef P_NETBSD
          // Look for dsp
          if (filename == "dsp") {
            dsp.SetAt(0, devname);
          }
! 
!         // Look for dspN entries. Insert at position N + 1
!         // and look for dspN.M entries. Insert at position N + 1 (ignoring M)
! 
          if ((filename.GetLength() > 3) && (filename.Left(3) == "dsp")) {
+ 
  	  PString numbers = filename.Mid(3); // get everything after 'dsp'
  	  if (IsNumericString(numbers)) {
+             PINDEX cardnum = numbers.AsInteger(); //dspN.M is truncated to dspN.
+ 	    // If we have not yet inserted something for this cardnum, insert it
+ 	    if (dsp.GetAt(cardnum+1) == NULL) {
+               dsp.SetAt(cardnum+1, devname);
+ 	    }
+ 	  }
+         }
+ #else
+         // Look for audio on NetBSD 
+         if (filename == "audio") {
+           dsp.SetAt(0, devname);
+         }
+         // Look for audioN. Insert at position cardnum + 1
+         if ((filename.GetLength() > 5) && (filename.Left(5) == "audio")) {
+ 	  PString numbers = filename.Mid(5); // get everything after 'audio'
+ 	  if (IsNumericString(numbers)) {
              PINDEX cardnum = numbers.AsInteger();
              dsp.SetAt(cardnum+1, devname);
  	  }
          }
+ #endif
          // Look for mixer
          if (filename == "mixer") {
            mixer.SetAt(0, devname);
*************** PString PSoundChannel::GetDefaultDevice(
*** 604,611 ****
--- 646,656 ----
  {
    // Normally /dev/dsp points to the default sound device. If this is not
    // present, probe /dev for sound devices and return the first detected device.
+ 
    if (PFile::Exists("/dev/dsp")) {
      return "/dev/dsp";
+   } else if (PFile::Exists("/dev/audio")) { // the NetBSD default name
+     return "/dev/audio";
    } else {
      // return the first dsp device detected
      PStringArray devicenames;