changeset 1020:72cacd3b8f30

Solaris 8 support - patch by Marcus Comstedt <marcus@idonex.se>
author arpi_esp
date Tue, 05 Jun 2001 02:26:56 +0000
parents 990047bcb1b8
children e8cc983945fe
files configure dec_audio.c libao2/ao_oss.c loader/setup_FS.c mixer.c mplayer.c stream.c vcd_read.h
diffstat 8 files changed, 154 insertions(+), 24 deletions(-) [+]
line wrap: on
line diff
--- a/configure	Tue Jun 05 02:22:38 2001 +0000
+++ b/configure	Tue Jun 05 02:26:56 2001 +0000
@@ -149,11 +149,11 @@
 TMPO="mplayer-conf-${RANDOM}-$$-${RANDOM}.o"
 TMPS="mplayer-conf-${RANDOM}-$$-${RANDOM}.S"
 
-if [ ! -z $TMPDIR ]; then
+if [ ! -z "$TMPDIR" ]; then
 	TMPC="${TMPDIR}/${TMPC}"
 	TMPO="${TMPDIR}/${TMPO}"
 	TMPS="${TMPDIR}/${TMPS}"
-elif [ ! -z $TEMPDIR ]; then
+elif [ ! -z "$TEMPDIR" ]; then
 	TMPC="${TEMPDIR}/${TMPC}"
 	TMPO="${TEMPDIR}/${TMPO}"
 	TMPS="${TEMPDIR}/${TMPS}"
@@ -175,10 +175,10 @@
 _x11=auto
 
 _x11libdir=
-if [ -e /usr/X11R6 ]; then
+if [ -d /usr/X11R6 ]; then
  _x11libdir=-L/usr/X11R6/lib
 else
- if [ -e /usr/X11 ]; then
+ if [ -d /usr/X11 ]; then
   _x11libdir=-L/usr/X11/lib
  fi
 fi
@@ -327,10 +327,10 @@
 
 
 _win32libdirnotify=no
-if [ -e /usr/lib/win32 ]; then
+if [ -d /usr/lib/win32 ]; then
  _win32libdir=/usr/lib/win32
 else
- if [ -e /usr/local/lib/win32 ]; then
+ if [ -d /usr/local/lib/win32 ]; then
   _win32libdir=/usr/local/lib/win32
  else
 # This is our default:
@@ -340,7 +340,7 @@
 fi
 
 
-if [ -e /dev/mga_vid ]; then
+if [ -c /dev/mga_vid ]; then
  _mga=yes
  _syncfb=yes
 fi
@@ -487,8 +487,9 @@
 # Atmosfear: added SDL versioncheck and autodetect; removed warnings.
 _sdl=no
 if $_cc $TMPC -o $TMPO `$_sdlconfig --libs` &> /dev/null ; then
-	if test `$_sdlconfig --version | sed s/[=[:punct:]=]//g` -gt 116 ; then
-		if test `$_sdlconfig --version | sed s/[=[:punct:]=]//g` -lt 121 ; then
+	if test `$_sdlconfig --version | sed s/[^0-9]//g` -gt 116 ; then
+		if test `$_sdlconfig --version | sed s/[^0-9]//g` -lt 121 ; then
+
 			_sdlbuggy='#define BUGGY_SDL'
 		else	
 			_sdlbuggy='#undef BUGGY_SDL'
@@ -521,7 +522,7 @@
 $_cc $TMPC -o $TMPO -ltermcap &> /dev/null && _termcap=yes
 
 _png=no
-$_cc $TMPC -o $TMPO -lpng -lz&> /dev/null && _png=yes
+$_cc $TMPC -o $TMPO -lpng -lz -lm &> /dev/null && _png=yes
 
 _binutils=no
 as libac3/downmix/downmix_i386.S -o $TMPO &> /dev/null && _binutils=yes
@@ -530,24 +531,28 @@
 
 # ----------- Check X11 and related libs (GL, Xxf86vm, Xv, DGA) --------------
 
+# for Solaris:
+_socklib=
+$_cc $TMPC -o $TMPO -lsocket >/dev/null 2>&1 && _socklib=-lsocket
+
 if [ $_x11 = auto ]; then
   _x11=no
-  $_cc $TMPC -o $TMPO $_x11libdir -lX11 -lXext &> /dev/null && _x11=yes
+  $_cc $TMPC -o $TMPO $_x11libdir -lX11 -lXext $_socklib &> /dev/null && _x11=yes
 fi
 
 if [ $_x11 = yes ]; then
 
-$_cc $TMPC -o $TMPO $_x11libdir -lX11 -lXext -lXdpms &> /dev/null && _xdpms=yes
-$_cc $TMPC -o $TMPO $_x11libdir -lX11 -lXext -lXv &> /dev/null && _xv=yes
-$_cc $TMPC -o $TMPO $_x11libdir -lX11 -lXext -lXxf86vm &> /dev/null && _vm=yes
+$_cc $TMPC -o $TMPO $_x11libdir -lX11 -lXext -lXdpms $_socklib &> /dev/null && _xdpms=yes
+$_cc $TMPC -o $TMPO $_x11libdir -lX11 -lXext -lXv $_socklib &> /dev/null && _xv=yes
+$_cc $TMPC -o $TMPO $_x11libdir -lX11 -lXext -lXxf86vm $_socklib &> /dev/null && _vm=yes
 
-$_cc $TMPC -o $TMPO $_x11libdir -lX11 -lXext -lGL &> /dev/null && _gl=yes
+$_cc $TMPC -o $TMPO $_x11libdir -lX11 -lXext -lGL $_socklib &> /dev/null && _gl=yes
 
 cat > $TMPC << EOF
 #include <GL/gl.h>
 int main( void ) { return 0; }
 EOF
-$_cc $TMPC -o $TMPO $_x11libdir -lX11 -lXext -lGL &> /dev/null || \
+$_cc $TMPC -o $TMPO $_x11libdir -lX11 -lXext -lGL $_socklib &> /dev/null || \
  { _gl=no; echo "GL includes not found!";}
 
 cat > $TMPC << EOF
@@ -557,7 +562,7 @@
 int main (void) { return 0;}
 EOF
 
-$_cc $TMPC -o $TMPO -L/usr/X11R6/lib -L/usr/X11/lib -lX11 -lXext -lXxf86dga -lXxf86vm &> /dev/null && _dga=yes
+$_cc $TMPC -o $TMPO -L/usr/X11R6/lib -L/usr/X11/lib -lX11 -lXext -lXxf86dga -lXxf86vm $_socklib &> /dev/null && _dga=yes
 # Note: the -lXxf86vm library is the VideoMode extension and though it's
 # not needed for DGA, AFAIK every distribution packages together with DGA
 # stuffs named 'X extensions' or something similar. This check can be usefull
@@ -573,7 +578,7 @@
 EOF
 
 _dga2=no
-$_cc $TMPC -o $TMPO -L/usr/X11R6/lib -L/usr/X11/lib -lX11 -lXext -lXxf86dga -lXxf86vm &> /dev/null && _dga2=yes
+$_cc $TMPC -o $TMPO -L/usr/X11R6/lib -L/usr/X11/lib -lX11 -lXext -lXxf86dga -lXxf86vm $_socklib &> /dev/null && _dga2=yes
 
 fi
 
@@ -904,13 +909,13 @@
 fi
 
 if [ $_css = yes ]; then
-   if [ ! -z $_csslibdir ]; then
+   if [ ! -z "$_csslibdir" ]; then
      _csslib="-L${_csslibdir} -lcss"
    else
      _csslib='-lcss'
    fi
    _css='#define HAVE_LIBCSS'
-   if [ ! -z $_cssincdir ]; then
+   if [ ! -z "$_cssincdir" ]; then
      _cssinc="-I${_cssincdir}"
    else
      _cssinc=""
@@ -1012,7 +1017,7 @@
 # OPTFLAGS=-O4 $_profile $_debug -march=$proc -mcpu=$proc -pipe -fomit-frame-pointer -ffast-math
 OPTFLAGS=$CFLAGS
 # LIBS=-L/usr/lib -L/usr/local/lib $_x11libdir $_gllib $_sdllib $_dgalib $_x11lib $_xvlib
-X_LIBS=$_x11libdir $_gllib $_sdllib $_dgalib $_x11lib $_xvlib $_vmlib $_svgalib $_libpng
+X_LIBS=$_x11libdir $_gllib $_sdllib $_dgalib $_x11lib $_xvlib $_vmlib $_svgalib $_libpng $_socklib
 TERMCAP_LIB=$_libtermcap
 XMM_LIBS = $_xmmplibs
 LIRC_LIBS = $_lirclibs
--- a/dec_audio.c	Tue Jun 05 02:22:38 2001 +0000
+++ b/dec_audio.c	Tue Jun 05 02:26:56 2001 +0000
@@ -2,7 +2,16 @@
 #include <stdio.h>
 #include <stdlib.h>
 
+#ifdef __sun
+#include <sys/audioio.h>
+#define AFMT_MU_LAW     AUDIO_ENCODING_ULAW
+#define AFMT_A_LAW      AUDIO_ENCODING_ALAW
+#define AFMT_S16_LE     AUDIO_ENCODING_LINEAR
+#define AFMT_IMA_ADPCM  AUDIO_ENCODING_DVI
+#define AFMT_U8         AUDIO_ENCODING_LINEAR8
+#else
 #include <sys/soundcard.h>
+#endif
 
 #include "config.h"
 
@@ -161,7 +170,9 @@
     case 0x6:  sh_audio->sample_format=AFMT_A_LAW;break;
     case 0x7:  sh_audio->sample_format=AFMT_MU_LAW;break;
     case 0x11: sh_audio->sample_format=AFMT_IMA_ADPCM;break;
+#ifndef __sun
     case 0x50: sh_audio->sample_format=AFMT_MPEG;break;
+#endif
 //    case 0x2000: sh_audio->sample_format=AFMT_AC3;
     default: sh_audio->sample_format=(sh_audio->samplesize==2)?AFMT_S16_LE:AFMT_U8;
     }
--- a/libao2/ao_oss.c	Tue Jun 05 02:22:38 2001 +0000
+++ b/libao2/ao_oss.c	Tue Jun 05 02:26:56 2001 +0000
@@ -7,7 +7,11 @@
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>
+#ifdef __sun
+#include <sys/audioio.h>
+#else
 #include <sys/soundcard.h>
+#endif
 
 #include "../config.h"
 
@@ -32,9 +36,14 @@
 // ao_outburst
 // ao_buffersize
 
-static char* dsp="/dev/dsp";
+#ifdef __sun
+static char *dsp="/dev/audio";
+static int queued_bursts = 0;
+#else
+static char *dsp="/dev/dsp";
+static audio_buf_info zz;
+#endif
 static int audio_fd=-1;
-static audio_buf_info zz;
 
 // to set/get/query special features/parameters
 static int control(int cmd,int arg){
@@ -60,6 +69,22 @@
     return 0;
   }
 
+#ifdef __sun
+  {
+    audio_info_t info;
+    ioctl(audio_fd, AUDIO_GETINFO, &info);
+    ioctl(audio_fd, AUDIO_DRAIN, 0);
+    info.play.encoding = ao_format = format;
+    info.play.precision = (format==AUDIO_ENCODING_LINEAR? AUDIO_PRECISION_16:AUDIO_PRECISION_8);
+    info.play.channels = ao_channels = channels;
+    --ao_channels;
+    info.play.sample_rate = ao_samplerate = rate;
+    if(ioctl (audio_fd, AUDIO_SETINFO, &info)<0)
+      printf("audio_setup: your card doesn't support %d Hz samplerate\n",rate);
+    ao_outburst=8192;
+    queued_bursts = 0;
+  }
+#else
   ao_format=format;
   ioctl (audio_fd, SNDCTL_DSP_SETFMT, &ao_format);
   printf("audio_setup: sample format: 0x%X  (requested: 0x%X)\n",ao_format,format);
@@ -87,6 +112,7 @@
       if(ao_buffersize==-1) ao_buffersize=zz.bytes;
       ao_outburst=zz.fragsize;
   }
+#endif
 
   if(ao_buffersize==-1){
     // Measuring buffer size:
@@ -109,6 +135,9 @@
           printf("Recompile mplayer with #undef HAVE_AUDIO_SELECT in config.h !\n\n");
         return 0;
     }
+#ifdef __sun
+    ioctl(audio_fd, AUDIO_DRAIN, 0);
+#endif
 #endif
   }
 
@@ -117,7 +146,9 @@
 
 // close audio device
 static void uninit(){
+#ifdef SNDCTL_DSP_RESET
     ioctl(audio_fd, SNDCTL_DSP_RESET, NULL);
+#endif
     close(audio_fd);
 }
 
@@ -130,9 +161,23 @@
 	return;
     }
 
+#ifdef __sun
+  {
+    audio_info_t info;
+    ioctl(audio_fd, AUDIO_GETINFO, &info);
+    ioctl(audio_fd, AUDIO_DRAIN, 0);
+    info.play.encoding = ao_format;
+    info.play.precision = (ao_format==AUDIO_ENCODING_LINEAR? AUDIO_PRECISION_16:AUDIO_PRECISION_8);
+    info.play.channels = ao_channels+1;
+    info.play.sample_rate = ao_samplerate;
+    ioctl (audio_fd, AUDIO_SETINFO, &info);
+    queued_bursts = 0;
+  }
+#else
   ioctl (audio_fd, SNDCTL_DSP_SETFMT, &ao_format);
   ioctl (audio_fd, SNDCTL_DSP_STEREO, &ao_channels);
   ioctl (audio_fd, SNDCTL_DSP_SPEED, &ao_samplerate);
+#endif
 
 }
 
@@ -140,10 +185,12 @@
 static int get_space(){
   int playsize=ao_outburst;
 
+#ifdef SNDCTL_DSP_GETOSPACE
   if(ioctl(audio_fd, SNDCTL_DSP_GETOSPACE, &zz)!=-1){
       // calculate exact buffer space:
       return zz.fragments*zz.fragsize;
   }
+#endif
 
     // check buffer
 #ifdef HAVE_AUDIO_SELECT
@@ -157,7 +204,15 @@
     }
 #endif
 
-    return ao_outburst;
+#ifdef __sun
+  {
+    audio_info_t info;
+    ioctl(audio_fd, AUDIO_GETINFO, &info);
+    if(queued_bursts - info.play.eof > 2)
+      return 0;
+  }
+#endif
+  return ao_outburst;
 }
 
 // plays 'len' bytes of 'data'
@@ -166,6 +221,12 @@
 static int play(void* data,int len,int flags){
     len/=ao_outburst;
     len=write(audio_fd,data,len*ao_outburst);
+#ifdef __sun
+    if(len>0) {
+      queued_bursts ++;
+      write(audio_fd,data,0);
+    }
+#endif
     return len;
 }
 
@@ -173,6 +234,14 @@
 
 // return: how many unplayed bytes are in the buffer
 static int get_delay(){
+#ifdef __sun
+ {
+   int q;
+    audio_info_t info;
+    ioctl(audio_fd, AUDIO_GETINFO, &info);
+    return (queued_bursts - info.play.eof) * ao_outburst;
+ }
+#else
   if(audio_delay_method==2){
       // 
       int r=0;
@@ -187,5 +256,6 @@
       audio_delay_method=0; // fallback if not supported
   }
   return ao_buffersize;
+#endif
 }
 
--- a/loader/setup_FS.c	Tue Jun 05 02:22:38 2001 +0000
+++ b/loader/setup_FS.c	Tue Jun 05 02:26:56 2001 +0000
@@ -176,6 +176,7 @@
 #endif  /* __NetBSD__ || __FreeBSD__ || __OpenBSD__ */
 
 #if defined(__svr4__)
+ {
     struct ssd ssd;
     ssd.sel = TEB_SEL;
     ssd.bo = array.base_addr;
@@ -188,6 +189,7 @@
 	perror("sysi86(SI86DSCR)");
 	printf("Couldn't install fs segment, expect segfault\n");
     }
+ }
 #endif
 
     setup_FS_Segment();
--- a/mixer.c	Tue Jun 05 02:22:38 2001 +0000
+++ b/mixer.c	Tue Jun 05 02:26:56 2001 +0000
@@ -1,14 +1,22 @@
 
 #include <string.h>
 #include <sys/ioctl.h>
+#ifdef __sun
+#include <sys/audioio.h>
+#else
 #include <sys/soundcard.h>
+#endif
 #include <fcntl.h>
 #include <stdio.h>
 #include <unistd.h>
 
 #include "mixer.h"
 
+#ifdef __sun
+char * mixer_device="/dev/audioctl";
+#else
 char * mixer_device="/dev/mixer";
+#endif
 int    mixer_usemaster=0;
 
 void mixer_getvolume( int *l,int *r )
@@ -18,6 +26,11 @@
  fd=open( mixer_device,O_RDONLY );
  if ( fd != -1 )
   {
+#ifdef __sun
+   audio_info_t info;
+   ioctl( fd,AUDIO_GETINFO,&info );
+   *r=*l=(info.play.gain * 100 + (AUDIO_MAX_GAIN-1))/AUDIO_MAX_GAIN;
+#else
    ioctl( fd,SOUND_MIXER_READ_DEVMASK,&devs );
    if ( ( devs & SOUND_MASK_PCM ) && ( mixer_usemaster==0 ) ) cmd=SOUND_MIXER_READ_PCM;
      else
@@ -30,6 +43,7 @@
    ioctl( fd,cmd,&v );
    *r=( v & 0xFF00 ) >> 8;
    *l=( v & 0x00FF );
+#endif
    close( fd );
   }
 }
@@ -41,6 +55,12 @@
  fd=open( mixer_device,O_RDONLY );
  if ( fd != -1 )
   {
+#ifdef __sun
+   audio_info_t info;
+   ioctl( fd,AUDIO_GETINFO,&info );
+   info.play.gain = ((l+r)*AUDIO_MAX_GAIN+199)/200;
+   ioctl( fd,AUDIO_SETINFO,&info );
+#else
    ioctl( fd,SOUND_MIXER_READ_DEVMASK,&devs );
    if ( ( devs & SOUND_MASK_PCM ) && ( mixer_usemaster==0 ) ) cmd=SOUND_MIXER_WRITE_PCM;
      else
@@ -52,6 +72,7 @@
            }
    v=( r << 8 ) | l;
    ioctl( fd,cmd,&v );
+#endif
    close( fd );
   }
 }
--- a/mplayer.c	Tue Jun 05 02:22:38 2001 +0000
+++ b/mplayer.c	Tue Jun 05 02:26:56 2001 +0000
@@ -16,7 +16,11 @@
 #include <sys/time.h>
 #include <sys/stat.h>
 #include <fcntl.h>
+#ifdef __sun
+#include <sys/audioio.h>
+#else
 #include <sys/soundcard.h>
+#endif
 
 #include "version.h"
 #include "config.h"
@@ -501,7 +505,11 @@
 #endif
 
 if(!filename){
+#ifdef __sun
+  if(vcd_track) filename="/vol/dev/aliases/cdrom0"; 
+#else
   if(vcd_track) filename="/dev/cdrom"; 
+#endif
   else {
     printf("%s",help_text); exit(0);
   }
--- a/stream.c	Tue Jun 05 02:22:38 2001 +0000
+++ b/stream.c	Tue Jun 05 02:26:56 2001 +0000
@@ -13,8 +13,12 @@
 #include <sys/cdio.h>
 #include <sys/cdrio.h>
 #else
+#ifdef __sun
+#include <sys/cdio.h>
+#else
 #include <linux/cdrom.h>
 #endif
+#endif
 
 #include "stream.h"
 
--- a/vcd_read.h	Tue Jun 05 02:22:38 2001 +0000
+++ b/vcd_read.h	Tue Jun 05 02:26:56 2001 +0000
@@ -68,8 +68,17 @@
 static char vcd_buf[VCD_SECTOR_SIZE];
 
 static int vcd_read(int fd,char *mem){
+#ifdef __sun
+      struct cdrom_cdxa xa;
+      xa.cdxa_addr = vcd_get_msf();
+      xa.cdxa_length = CDROM_BLK_2352;
+      xa.cdxa_data = vcd_buf;
+      xa.cdxa_format = CDROM_XA_SECTOR_DATA;
+      if(ioctl(fd,CDROMCDXA,&xa)==-1) return 0; // EOF?
+#else
       memcpy(vcd_buf,&vcd_entry.cdte_addr.msf,sizeof(struct cdrom_msf));
       if(ioctl(fd,CDROMREADRAW,vcd_buf)==-1) return 0; // EOF?
+#endif
 
       vcd_entry.cdte_addr.msf.frame++;
       if (vcd_entry.cdte_addr.msf.frame==75){