Mercurial > mplayer.hg
changeset 5872:02576893af2a
OpenBSD, NetBSD portability patches by
Bj«Órn Sandell <biorn@dce.chalmers.se>
Marcus <core@antbear.org>
Bernd Ernesti <mplayer@lists.veego.de>
author | arpi |
---|---|
date | Sat, 27 Apr 2002 22:42:27 +0000 |
parents | c03422eaaadf |
children | 74cbaabeaa33 |
files | configure libao2/afmt.h libao2/ao_oss.c libao2/ao_sun.c libdha/mtrr.c libmpdemux/dvdauth.c libmpdemux/stream.c libmpdemux/tvi_bsdbt848.c libmpdemux/vcd_read_nbsd.h loader/ldt_keeper.c loader/win32.c mangle.h vidix/vidixlib.c |
diffstat | 13 files changed, 298 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/configure Sat Apr 27 21:03:59 2002 +0000 +++ b/configure Sat Apr 27 22:42:27 2002 +0000 @@ -264,6 +264,7 @@ ;; --with-extralibdir=*) _ld_extra=-L`echo $ac_option | cut -d '=' -f 2 | sed 's,:, -L,g'` +# _ld_extra="${_ld_extra} -Wl,-R"`echo $ac_option | cut -d '=' -f 2 | sed 's,:, -Wl\,-R,g'`" -L"`echo $ac_option | cut -d '=' -f 2 | sed 's,:, -L,g'` ;; --enable-runtime-cpudetection) _runtime_cpudetection=yes @@ -1527,11 +1528,28 @@ cc_check && _sys_soundcard=yes if test "$_sys_soundcard" = yes ; then _def_sys_soundcard='#define HAVE_SYS_SOUNDCARD_H 1' + _inc_soundcard='#include <sys/soundcard.h>' else _def_sys_soundcard='#undef HAVE_SYS_SOUNDCARD_H' fi echores "$_sys_soundcard" +if test "$_sys_soundcard" != yes ; then +echocheck "soundcard.h" +cat > $TMPC << EOF +#include <soundcard.h> +int main(void) { return 0; } +EOF +_soundcard=no +cc_check && _soundcard=yes +if test "$_soundcard" = yes ; then + _def_soundcard='#define HAVE_SOUNDCARD_H 1' + _inc_soundcard='#include <soundcard.h>' +else + _def_soundcard='#undef HAVE_SOUNDCARD_H' +fi +echores "$_soundcard" +fi echocheck "sys/dvdio.h" cat > $TMPC << EOF @@ -2434,7 +2452,7 @@ echocheck "OSS Audio" if test "$_ossaudio" = auto ; then cat > $TMPC << EOF -#include <sys/soundcard.h> +$_inc_soundcard int main(void) { int arg = SNDCTL_DSP_SETFRAGMENT; return 0; } EOF _ossaudio=no @@ -2448,7 +2466,11 @@ _def_ossaudio_devdsp='#define PATH_DEV_DSP "/dev/sound/dsp"' _def_ossaudio_devmixer='#define PATH_DEV_MIXER "/dev/sound/mixer"' else - _def_ossaudio_devdsp='#define PATH_DEV_DSP "/dev/dsp"' + if netbsd || openbsd ; then + _def_ossaudio_devdsp='#define PATH_DEV_DSP "/dev/sound"' + else + _def_ossaudio_devdsp='#define PATH_DEV_DSP "/dev/dsp"' + fi _def_ossaudio_devmixer='#define PATH_DEV_MIXER "/dev/mixer"' fi else @@ -2575,7 +2597,7 @@ echocheck "VCD support" -if linux || bsdos || freebsd || sunos ; then +if linux || bsdos || freebsd || netbsd || sunos ; then _inputmodules="vcd $_inputmodules" _def_vcd='#define HAVE_VCD 1' echores "ok" @@ -3254,7 +3276,11 @@ if test "$_tv" = yes ; then cat > $TMPC <<EOF #include <sys/types.h> +#ifdef __NetBSD__ +#include <dev/ic/bt8xx.h> +#else #include <machine/ioctl_bt848.h> +#endif int main(void) { return 0; } EOF cc_check && _tv_bsdbt848=yes @@ -3482,6 +3508,7 @@ _ld_arch="$_ld_arch $_ld_pthread $_ld_dl $_ld_dl_dynamic" bsdos && _ld_arch="$_ld_arch -ldvd" +netbsd && _ld_arch="$_ld_arch -li386 -lossaudio" _def_debug='#undef MP_DEBUG' test "$_debug" && _def_debug='#define MP_DEBUG 1' @@ -3756,6 +3783,10 @@ /* Define this if your system has the header file for the OSS sound interface */ $_def_sys_soundcard +/* Define this if you system has the header file for the OSS sound interface + * in /usr/include */ +$_def_soundcard + /* Define this if your system uses ftello() for off_t seeking */ $_def_ftello
--- a/libao2/afmt.h Sat Apr 27 21:03:59 2002 +0000 +++ b/libao2/afmt.h Sat Apr 27 22:42:27 2002 +0000 @@ -3,6 +3,10 @@ #ifdef HAVE_SYS_SOUNDCARD_H #include <sys/soundcard.h> /* For AFMT_* on linux */ +#else +#ifdef HAVE_SOUNDCARD_H +#include <soundcard.h> /* OpenBSD have this instead of <sys/soundcard> */ +#endif #endif /* standard, old OSS audio formats */
--- a/libao2/ao_oss.c Sat Apr 27 21:03:59 2002 +0000 +++ b/libao2/ao_oss.c Sat Apr 27 22:42:27 2002 +0000 @@ -292,9 +292,11 @@ static float get_delay(){ /* Calculate how many bytes/second is sent out */ if(audio_delay_method==2){ +#ifdef SNDCTL_DSP_GETODELAY int r=0; if(ioctl(audio_fd, SNDCTL_DSP_GETODELAY, &r)!=-1) return ((float)r)/(float)ao_data.bps; +#endif audio_delay_method=1; // fallback if not supported } if(audio_delay_method==1){
--- a/libao2/ao_sun.c Sat Apr 27 21:03:59 2002 +0000 +++ b/libao2/ao_sun.c Sat Apr 27 22:42:27 2002 +0000 @@ -440,9 +440,11 @@ } #endif +#ifndef __OpenBSD__ ioctl(audio_fd, AUDIO_GETINFO, &info); if (queued_bursts - info.play.eof > 2) return 0; +#endif return ao_data.outburst; } @@ -500,9 +502,13 @@ static float get_delay(){ audio_info_t info; ioctl(audio_fd, AUDIO_GETINFO, &info); +#ifdef __OpenBSD__ + return (float) info.play.seek/ (float)byte_per_sec ; +#else if (info.play.samples && enable_sample_timing == RTSC_ENABLED) return (float)(queued_samples - info.play.samples) / (float)byte_per_sec; else return (float)((queued_bursts - info.play.eof) * ao_data.outburst) / (float)byte_per_sec; +#endif }
--- a/libdha/mtrr.c Sat Apr 27 21:03:59 2002 +0000 +++ b/libdha/mtrr.c Sat Apr 27 22:42:27 2002 +0000 @@ -12,6 +12,12 @@ #include "libdha.h" #include "AsmMacros.h" +#if defined (__i386__) && defined (__NetBSD__) +#include <stdint.h> +#include <stdlib.h> +#include <machine/mtrr.h> +#include <machine/sysarch.h> +#endif #if defined( __i386__ ) int mtrr_set_type(unsigned base,unsigned size,int type) @@ -40,6 +46,23 @@ return wr_len == strlen(sout) ? 0 : EPERM; } return ENOSYS; +#elif defined (__NetBSD__) + struct mtrr *mtrrp; + int n; + + mtrrp = malloc(sizeof (struct mtrr)); + mtrrp->base = base; + mtrrp->len = size; + mtrrp->type = type; + mtrrp->flags = MTRR_VALID | MTRR_PRIVATE; + n = 1; + + if (i386_set_mtrr(mtrrp, &n) < 0) { + free(mtrrp); + return errno; + } + free(mtrrp); + return 0; #else #warning Please port MTRR stuff!!! return ENOSYS;
--- a/libmpdemux/dvdauth.c Sat Apr 27 21:03:59 2002 +0000 +++ b/libmpdemux/dvdauth.c Sat Apr 27 22:42:27 2002 +0000 @@ -31,8 +31,11 @@ #include <sys/wait.h> // #include <css.h> -#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) +#if defined(__FreeBSD__) || defined(__NetBSD__) # include <sys/dvdio.h> +#elif defined(__OpenBSD__) +# include <sys/cdio.h> +# define RTLD_NOW RTLD_LAZY #elif defined(__linux__) # include <linux/cdrom.h> #elif defined(__sun) @@ -169,6 +172,9 @@ ioctl(dvd, DVDIOCREPORTKEY, &ai); } #else +#if defined(__OpenBSD__) + union +#endif dvd_authinfo ai; int i; for (i = 0; i < 4; i++) { @@ -219,9 +225,15 @@ return 1; } printf("DVD: dlopen OK!\n"); +#ifdef __OpenBSD__ +#define CSS_DLSYM(v,s) if (!(v=dlsym(dlid,"_" s))) {\ +fprintf(stderr,"DVD: %s\n Hint: use libcss version 0.1!\n",dlerror());\ +return 1; } +#else #define CSS_DLSYM(v,s) if (!(v=dlsym(dlid,s))) {\ fprintf(stderr,"DVD: %s\n Hint: use libcss version 0.1!\n",dlerror());\ return 1; } +#endif CSS_DLSYM(dl_CSSisEncrypted,"CSSisEncrypted"); CSS_DLSYM(dl_CSSAuthDisc,"CSSAuthDisc");
--- a/libmpdemux/stream.c Sat Apr 27 21:03:59 2002 +0000 +++ b/libmpdemux/stream.c Sat Apr 27 22:42:27 2002 +0000 @@ -22,6 +22,8 @@ #ifdef __FreeBSD__ #include "vcd_read_fbsd.h" +#elif defined(__NetBSD__) +#include "vcd_read_nbsd.h" #else #include "vcd_read.h" #endif
--- a/libmpdemux/tvi_bsdbt848.c Sat Apr 27 21:03:59 2002 +0000 +++ b/libmpdemux/tvi_bsdbt848.c Sat Apr 27 22:42:27 2002 +0000 @@ -39,8 +39,12 @@ #include <signal.h> #include <string.h> +#ifdef __NetBSD__ +#include <dev/ic/bt8xx.h> +#else #include <machine/ioctl_meteor.h> #include <machine/ioctl_bt848.h> +#endif #ifdef HAVE_SYS_SOUNDCARD_H #include <sys/soundcard.h>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libmpdemux/vcd_read_nbsd.h Sat Apr 27 22:42:27 2002 +0000 @@ -0,0 +1,198 @@ + +#include <sys/types.h> +#include <sys/inttypes.h> +#include <sys/cdio.h> +#include <sys/scsiio.h> + +#define CDROM_LEADOUT 0xAA + +static struct ioc_read_toc_entry vcd_entry; +static struct cd_toc_entry vcd_entry_data; +static char vcd_buf[VCD_SECTOR_SIZE]; + +static inline void +vcd_set_msf(unsigned int sect) +{ + unsigned int s = sect; + vcd_entry_data.addr.msf.frame = sect % 75; + sect = sect / 75; + vcd_entry_data.addr.msf.second = sect % 60; + sect = sect / 60; + vcd_entry_data.addr.msf.minute = sect; +} + +static inline unsigned int +vcd_get_msf() +{ + return vcd_entry_data.addr.msf.frame + + (vcd_entry_data.addr.msf.second + + vcd_entry_data.addr.msf.minute * 60) * 75; +} + +int +vcd_seek_to_track(int fd, int track) +{ + vcd_entry.address_format = CD_MSF_FORMAT; + vcd_entry.starting_track = track; + vcd_entry.data_len = sizeof(struct cd_toc_entry); + vcd_entry.data = &vcd_entry_data; + if (ioctl(fd, CDIOREADTOCENTRIES, &vcd_entry)) { + perror("ioctl dif1"); + return -1; + } + return VCD_SECTOR_DATA * vcd_get_msf(); +} + +int +vcd_get_track_end(int fd, int track) +{ + struct ioc_toc_header tochdr; + if (ioctl(fd, CDIOREADTOCHEADER, &tochdr) == -1) { + perror("read CDROM toc header: "); + return -1; + } + vcd_entry.address_format = CD_MSF_FORMAT; + vcd_entry.starting_track = track < tochdr.ending_track ? (track + 1) : CDROM_LEADOUT; + vcd_entry.data_len = sizeof(struct cd_toc_entry); + vcd_entry.data = &vcd_entry_data; + if (ioctl(fd, CDIOREADTOCENTRYS, &vcd_entry)) { + perror("ioctl dif2"); + return -1; + } + return VCD_SECTOR_DATA * vcd_get_msf(); +} + +void +vcd_read_toc(int fd) +{ + struct ioc_toc_header tochdr; + int i; + if (ioctl(fd, CDIOREADTOCHEADER, &tochdr) == -1) { + perror("read CDROM toc header: "); + return; + } + for (i = tochdr.starting_track; i <= tochdr.ending_track; i++) { + struct ioc_read_toc_entry tocentry; + struct cd_toc_entry tocentry_data; + + tocentry.starting_track = i; + tocentry.address_format = CD_MSF_FORMAT; + tocentry.data_len = sizeof(struct cd_toc_entry); + tocentry.data = &tocentry_data; + + if (ioctl(fd, CDIOREADTOCENTRYS, &tocentry) == -1) { + perror("read CDROM toc entry: "); + return; + } + printf("track %02d: adr=%d ctrl=%d format=%d %02d:%02d:%02d\n", + (int) tocentry.starting_track, + (int) tocentry.data->addr_type, + (int) tocentry.data->control, + (int) tocentry.address_format, + (int) tocentry.data->addr.msf.minute, + (int) tocentry.data->addr.msf.second, + (int) tocentry.data->addr.msf.frame + ); + } +} + +static int +vcd_read(int fd, char *mem) +{ + struct scsireq sc; + int lba = vcd_get_msf(); + int blocks; + int sector_type; + int sync, header_code, user_data, edc_ecc, error_field; + int sub_channel; + int rc; + + blocks = 1; + sector_type = 5; /* mode2/form2 */ + sync = 0; + header_code = 0; + user_data = 1; + edc_ecc = 0; + error_field = 0; + sub_channel = 0; + + memset(&sc, 0, sizeof(sc)); + sc.cmd[0] = 0xBE; + sc.cmd[1] = (sector_type) << 2; + sc.cmd[2] = (lba >> 24) & 0xff; + sc.cmd[3] = (lba >> 16) & 0xff; + sc.cmd[4] = (lba >> 8) & 0xff; + sc.cmd[5] = lba & 0xff; + sc.cmd[6] = (blocks >> 16) & 0xff; + sc.cmd[7] = (blocks >> 8) & 0xff; + sc.cmd[8] = blocks & 0xff; + sc.cmd[9] = (sync << 7) | (header_code << 5) | (user_data << 4) | + (edc_ecc << 3) | (error_field << 1); + sc.cmd[10] = sub_channel; + sc.cmdlen = 12; + sc.databuf = (caddr_t) mem; + sc.datalen = 2328; + sc.senselen = sizeof(sc.sense); + sc.flags = SCCMD_READ; + sc.timeout = 10000; + rc = ioctl(fd, SCIOCCOMMAND, &sc); + if (rc == -1) { + perror("SCIOCCOMMAND"); + return -1; + } + if (sc.retsts || sc.error) { + fprintf(stderr, "scsi command failed: status %d error %d\n", sc.retsts, + sc.error); + return -1; + } + return VCD_SECTOR_DATA; +} + +#ifdef VCD_CACHE + +static int vcd_cache_size = 0; +static char *vcd_cache_data = NULL; +static int *vcd_cache_sectors = NULL; +static int vcd_cache_index = 0; +static int vcd_cache_current = -1; + +void +vcd_cache_init(int s) +{ + vcd_cache_size = s; + vcd_cache_sectors = malloc(s * sizeof(int)); + vcd_cache_data = malloc(s * VCD_SECTOR_SIZE); + memset(vcd_cache_sectors, 255, s * sizeof(int)); +} + +static inline void +vcd_cache_seek(int sect) +{ + vcd_cache_current = sect; +} + +int +vcd_cache_read(int fd, char *mem) +{ + int i; + char *vcd_buf; + for (i = 0; i < vcd_cache_size; i++) + if (vcd_cache_sectors[i] == vcd_cache_current) { + vcd_buf = &vcd_cache_data[i * VCD_SECTOR_SIZE]; + ++vcd_cache_current; + memcpy(mem, &vcd_buf[VCD_SECTOR_OFFS], VCD_SECTOR_DATA); + return VCD_SECTOR_DATA; + } + vcd_buf = &vcd_cache_data[vcd_cache_index * VCD_SECTOR_SIZE]; + vcd_cache_sectors[vcd_cache_index] = vcd_cache_current; + ++vcd_cache_index; + if (vcd_cache_index >= vcd_cache_size) + vcd_cache_index = 0; + vcd_set_msf(vcd_cache_current); + memcpy(vcd_buf, &vcd_entry_data.addr.msf, sizeof(vcd_entry_data.addr.msf)); + ++vcd_cache_current; + memcpy(mem, &vcd_buf[VCD_SECTOR_OFFS], VCD_SECTOR_DATA); + return VCD_SECTOR_DATA; +} +#endif +
--- a/loader/ldt_keeper.c Sat Apr 27 21:03:59 2002 +0000 +++ b/loader/ldt_keeper.c Sat Apr 27 22:42:27 2002 +0000 @@ -21,6 +21,7 @@ #include <asm/ldt.h> #else #if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__) +#include <machine/segments.h> #include <machine/sysarch.h> #endif
--- a/loader/win32.c Sat Apr 27 21:03:59 2002 +0000 +++ b/loader/win32.c Sat Apr 27 22:42:27 2002 +0000 @@ -4096,7 +4096,7 @@ LL(msdmo) LL(msvfw32) }; - +#include "mangle.h" static char* called_unk = "Called unk_%s\n"; static void ext_stubs(void) { @@ -4109,9 +4109,9 @@ "movl $0, %eax \n\t" "movl $0, %edx \n\t" "shl $5,%eax \n\t" // ax * 32 - "addl $export_names,%eax \n\t" + "addl $"MANGLE(export_names)",%eax \n\t" "pushl %eax \n\t" - "pushl called_unk \n\t" + "pushl "MANGLE(called_unk)" \n\t" "call *%edx \n\t" // printf (via dx) "addl $8,%esp \n\t" "xorl %eax,%eax \n\t"
--- a/mangle.h Sat Apr 27 21:03:59 2002 +0000 +++ b/mangle.h Sat Apr 27 22:42:27 2002 +0000 @@ -8,7 +8,7 @@ #define __MANGLE_H /* Feel free to add more to the list, eg. a.out IMO */ -#if defined(__CYGWIN__) || defined(__OS2__) +#if defined(__CYGWIN__) || defined(__OS2__) || defined (__OpenBSD__) #define MANGLE(a) "_" #a #else #define MANGLE(a) #a
--- a/vidix/vidixlib.c Sat Apr 27 21:03:59 2002 +0000 +++ b/vidix/vidixlib.c Sat Apr 27 22:42:27 2002 +0000 @@ -91,6 +91,13 @@ return 1; } +#ifndef RTLD_GLOBAL +#define RTLD_GLOBAL RTLD_LAZY +#endif +#ifndef RTLD_NOW +#define RTLD_NOW RTLD_LAZY +#endif + static int vdl_probe_driver(VDL_HANDLE stream,const char *path,const char *name,unsigned cap,int verbose) { vidix_capability_t vid_cap;