- use the sun audio interface instead of the OpenBSD interface

- sync patches with update-patches
- bump PKGNAME

the sun interface keeps fewer samples in the play buffer, and with
less fluctuation than the OpenBSD interface.  results in better
audio-video synchronization in e.g. ffplay and gnash

go for it -pval
This commit is contained in:
jakemsr 2007-07-20 05:23:41 +00:00
parent 1c0fe4e22d
commit 26a9c9cc52
6 changed files with 159 additions and 22 deletions

View File

@ -1,11 +1,11 @@
# $OpenBSD: Makefile,v 1.51 2007/04/08 15:31:01 sturm Exp $
# $OpenBSD: Makefile,v 1.52 2007/07/20 05:23:41 jakemsr Exp $
# Uses pthreads
COMMENT= "cross-platform multimedia library"
VERSION= 1.2.9
DISTNAME= SDL-${VERSION}
PKGNAME= ${DISTNAME:L}p4
PKGNAME= ${DISTNAME:L}p5
CATEGORIES= devel
HOMEPAGE= http://www.libsdl.org/
@ -60,9 +60,9 @@ CONFIGURE_ARGS+= --disable-nasm
.endif
.if ${FLAVOR:L:Msun}
CONFIGURE_ARGS+= --enable-openbsdaudio
CONFIGURE_ARGS+= --enable-sunaudio
.else
CONFIGURE_ARGS+= --disable-openbsdaudio
CONFIGURE_ARGS+= --disable-sunaudio
.endif
.if ${FLAVOR:L:Mesd}

View File

@ -1,6 +1,6 @@
$OpenBSD: patch-configure_in,v 1.27 2006/10/19 00:26:34 pvalchev Exp $
--- configure.in.orig Sun Aug 28 00:31:18 2005
+++ configure.in Sat Sep 10 20:34:34 2005
$OpenBSD: patch-configure_in,v 1.28 2007/07/20 05:23:41 jakemsr Exp $
--- configure.in.orig Sat Aug 27 23:31:18 2005
+++ configure.in Sun Jul 8 01:07:57 2007
@@ -535,9 +535,6 @@ CheckNASM()
win32)
NASMFLAGS="-f win32"
@ -50,6 +50,19 @@ $OpenBSD: patch-configure_in,v 1.27 2006/10/19 00:26:34 pvalchev Exp $
CFLAGS="$CFLAGS -DUSE_DLOPEN"
AC_CHECK_LIB(c, dlopen, SYSTEM_LIBS="$SYSTEM_LIBS",
AC_CHECK_LIB(dl, dlopen, SYSTEM_LIBS="$SYSTEM_LIBS -ldl",
@@ -2115,9 +2109,9 @@ case "$target" in
CheckRPATH
# Set up files for the audio library
if test x$enable_audio = xyes; then
- CFLAGS="$CFLAGS -DOPENBSD_AUDIO_SUPPORT"
- AUDIO_SUBDIRS="$AUDIO_SUBDIRS openbsd"
- AUDIO_DRIVERS="$AUDIO_DRIVERS openbsd/libaudio_openbsd.la"
+ CFLAGS="$CFLAGS -DSUNAUDIO_SUPPORT"
+ AUDIO_SUBDIRS="$AUDIO_SUBDIRS sun"
+ AUDIO_DRIVERS="$AUDIO_DRIVERS sun/libaudio_sun.la"
fi
# OpenBSD needs linking with ossaudio emulation library
if test x$have_oss = xyes; then
@@ -2764,6 +2758,9 @@ if test "x$enable_rpath" = "xyes"; then
else
SDL_RLD_FLAGS=""

View File

@ -1,6 +1,6 @@
$OpenBSD: patch-src_audio_openbsd_SDL_openbsdaudio_c,v 1.7 2006/10/19 00:26:34 pvalchev Exp $
--- src/audio/openbsd/SDL_openbsdaudio.c.orig 2003-12-28 19:42:30.000000000 +0100
+++ src/audio/openbsd/SDL_openbsdaudio.c 2003-12-28 19:43:45.000000000 +0100
$OpenBSD: patch-src_audio_openbsd_SDL_openbsdaudio_c,v 1.8 2007/07/20 05:23:41 jakemsr Exp $
--- src/audio/openbsd/SDL_openbsdaudio.c.orig Sun Jan 4 08:49:15 2004
+++ src/audio/openbsd/SDL_openbsdaudio.c Sat Jul 7 19:05:13 2007
@@ -262,21 +262,21 @@ OBSD_Status(_THIS)
return;
}
@ -38,7 +38,7 @@ $OpenBSD: patch-src_audio_openbsd_SDL_openbsdaudio_c,v 1.7 2006/10/19 00:26:34 p
info.play.buffer_size,
info.play.sample_rate,
info.play.channels,
@@ -290,14 +290,14 @@ active : %s
@@ -290,19 +290,19 @@ active : %s
info.play.waiting ? "yes" : "no",
info.play.active ? "yes": "no");
@ -61,3 +61,9 @@ $OpenBSD: patch-src_audio_openbsd_SDL_openbsdaudio_c,v 1.7 2006/10/19 00:26:34 p
info.monitor_gain,
info.blocksize,
info.hiwat, info.lowat,
(info.mode == AUMODE_PLAY) ? "PLAY"
- : (info.mode = AUMODE_RECORD) ? "RECORD"
+ : (info.mode == AUMODE_RECORD) ? "RECORD"
: (info.mode == AUMODE_PLAY_ALL ? "PLAY_ALL"
: "?"));
}

View File

@ -0,0 +1,118 @@
$OpenBSD: patch-src_audio_sun_SDL_sunaudio_c,v 1.1 2007/07/20 05:23:41 jakemsr Exp $
--- src/audio/sun/SDL_sunaudio.c.orig Sun Jan 4 08:49:15 2004
+++ src/audio/sun/SDL_sunaudio.c Sat Jul 14 15:54:19 2007
@@ -32,7 +32,7 @@ static char rcsid =
#include <fcntl.h>
#include <errno.h>
#include <string.h>
-#ifdef __NetBSD__
+#if defined(__NetBSD__) || defined(__OpenBSD__)
#include <sys/ioctl.h>
#include <sys/audioio.h>
#endif
@@ -141,12 +141,18 @@ void CheckUnderflow(_THIS)
void DSP_WaitAudio(_THIS)
{
#ifdef AUDIO_GETINFO
-#define SLEEP_FUDGE 10 /* 10 ms scheduling fudge factor */
+#define SLEEP_FUDGE 100 /* 100 ms scheduling fudge factor */
audio_info_t info;
Sint32 left;
+#ifdef AUDIO_WSEEK
+ ioctl(audio_fd, AUDIO_WSEEK, &left);
+ left = left / (this->spec.channels * (this->spec.format & 0xff) / 8);
+#else
+ /* OpenBSD and NetBSD return bytes, not samples in info.play.samples */
ioctl(audio_fd, AUDIO_GETINFO, &info);
left = (written - info.play.samples);
+#endif
if ( left > fragsize ) {
Sint32 sleepy;
@@ -221,9 +227,22 @@ void DSP_PlayAudio(_THIS)
#ifdef DEBUG_AUDIO
CheckUnderflow(this);
#endif
- if ( write(audio_fd, mixbuf, this->spec.size) < 0 ) {
+ while ( write(audio_fd, mixbuf, this->spec.size) < 0 ) {
+#ifdef DEBUG_AUDIO
+ fprintf(stderr, "audio write error: %s\n", strerror(errno));
+#endif
+#ifndef AUDIO_GETINFO
/* Assume fatal error, for now */
this->enabled = 0;
+ break;
+#else
+ /* no guarantee against EAGAIN doing our own timing */
+ if (!((errno == EAGAIN) && (OPEN_FLAGS & O_NONBLOCK))) {
+ /* Assume fatal error, for now */
+ this->enabled = 0;
+ break;
+ }
+#endif
}
written += fragsize;
}
@@ -266,16 +285,28 @@ int DSP_OpenAudio(_THIS, SDL_AudioSpec *spec)
case 8: { /* Unsigned 8 bit audio data */
spec->format = AUDIO_U8;
#ifdef AUDIO_SETINFO
+#ifdef __OpenBSD__
+ enc = AUDIO_ENCODING_ULINEAR;
+#else
enc = AUDIO_ENCODING_LINEAR8;
#endif
+#endif
}
break;
case 16: { /* Signed 16 bit audio data */
spec->format = AUDIO_S16SYS;
#ifdef AUDIO_SETINFO
+#ifdef __OpenBSD__
+#if BYTE_ORDER == LITTLE_ENDIAN
+ enc = AUDIO_ENCODING_SLINEAR_LE;
+#else
+ enc = AUDIO_ENCODING_SLINEAR_BE;
+#endif
+#else
enc = AUDIO_ENCODING_LINEAR;
#endif
+#endif
}
break;
@@ -324,13 +355,22 @@ int DSP_OpenAudio(_THIS, SDL_AudioSpec *spec)
}
switch(enc) {
+#ifdef __OpenBSD__
+ case AUDIO_ENCODING_ULINEAR:
+#else
case AUDIO_ENCODING_LINEAR8:
+#endif
/* unsigned 8bit apparently not supported here */
enc = AUDIO_ENCODING_LINEAR;
spec->format = AUDIO_S16SYS;
break; /* try again */
+#ifdef __OpenBSD__
+ case AUDIO_ENCODING_SLINEAR_LE:
+ case AUDIO_ENCODING_SLINEAR_BE:
+#else
case AUDIO_ENCODING_LINEAR:
+#endif
/* linear 16bit didn't work either, resort to µ-law */
enc = AUDIO_ENCODING_ULAW;
spec->channels = 1;
@@ -348,6 +388,9 @@ int DSP_OpenAudio(_THIS, SDL_AudioSpec *spec)
}
#endif /* AUDIO_SETINFO */
written = 0;
+
+ /* reset counters */
+ ioctl(audio_fd, AUDIO_FLUSH, NULL);
/* We can actually convert on-the-fly to U-Law */
if ( ulaw_only ) {

View File

@ -1,6 +1,6 @@
$OpenBSD: patch-src_joystick_bsd_SDL_sysjoystick_c,v 1.8 2006/10/19 00:26:34 pvalchev Exp $
--- src/joystick/bsd/SDL_sysjoystick.c.orig Mon Dec 13 18:54:32 2004
+++ src/joystick/bsd/SDL_sysjoystick.c Fri Dec 17 16:36:39 2004
$OpenBSD: patch-src_joystick_bsd_SDL_sysjoystick_c,v 1.9 2007/07/20 05:23:41 jakemsr Exp $
--- src/joystick/bsd/SDL_sysjoystick.c.orig Fri Nov 12 13:24:46 2004
+++ src/joystick/bsd/SDL_sysjoystick.c Sat Jul 7 18:07:10 2007
@@ -60,7 +60,7 @@ static char rcsid =
#include <sys/joystick.h>
#endif
@ -10,7 +10,7 @@ $OpenBSD: patch-src_joystick_bsd_SDL_sysjoystick_c,v 1.8 2006/10/19 00:26:34 pva
#include <machine/joystick.h>
#endif
@@ -370,7 +370,7 @@ SDL_SYS_JoystickUpdate(SDL_Joystick *joy
@@ -370,7 +370,7 @@ SDL_SYS_JoystickUpdate(SDL_Joystick *joy)
int nbutton, naxe = -1;
Sint32 v;

View File

@ -1,6 +1,6 @@
$OpenBSD: patch-src_video_x11_SDL_x11modes_c,v 1.7 2006/10/19 00:26:34 pvalchev Exp $
--- src/video/x11/SDL_x11modes.c.orig Mon Dec 13 18:54:37 2004
+++ src/video/x11/SDL_x11modes.c Fri Dec 17 16:36:39 2004
$OpenBSD: patch-src_video_x11_SDL_x11modes_c,v 1.8 2007/07/20 05:23:41 jakemsr Exp $
--- src/video/x11/SDL_x11modes.c.orig Fri Nov 12 13:25:42 2004
+++ src/video/x11/SDL_x11modes.c Sat Jul 7 18:07:10 2007
@@ -44,6 +44,8 @@ static char rcsid =
#endif
@ -10,7 +10,7 @@ $OpenBSD: patch-src_video_x11_SDL_x11modes_c,v 1.7 2006/10/19 00:26:34 pvalchev
#ifdef XFREE86_VM
Bool SDL_NAME(XF86VidModeGetModeInfo)(Display *dpy, int scr, SDL_NAME(XF86VidModeModeInfo) *info)
@@ -92,6 +94,82 @@ static int cmpmodes(const void *va, cons
@@ -92,6 +94,82 @@ static int cmpmodes(const void *va, const void *vb)
}
#endif
@ -93,7 +93,7 @@ $OpenBSD: patch-src_video_x11_SDL_x11modes_c,v 1.7 2006/10/19 00:26:34 pvalchev
static void get_real_resolution(_THIS, int* w, int* h);
static void set_best_resolution(_THIS, int width, int height)
@@ -103,9 +181,11 @@ static void set_best_resolution(_THIS, i
@@ -103,9 +181,11 @@ static void set_best_resolution(_THIS, int width, int
int i;
int best_width = 0, best_height = 0;
int nmodes;
@ -106,7 +106,7 @@ $OpenBSD: patch-src_video_x11_SDL_x11modes_c,v 1.7 2006/10/19 00:26:34 pvalchev
#ifdef XFREE86_DEBUG
printf("Available modes (unsorted):\n");
for ( i = 0; i < nmodes; ++i ) {
@@ -117,14 +197,16 @@ static void set_best_resolution(_THIS, i
@@ -117,14 +197,16 @@ static void set_best_resolution(_THIS, int width, int
#endif
for ( i = 0; i < nmodes ; i++ ) {
if ( (modes[i]->hdisplay == width) &&
@ -125,7 +125,7 @@ $OpenBSD: patch-src_video_x11_SDL_x11modes_c,v 1.7 2006/10/19 00:26:34 pvalchev
best_width = modes[i]->hdisplay;
best_height = modes[i]->vdisplay;
}
@@ -142,6 +224,7 @@ static void set_best_resolution(_THIS, i
@@ -142,6 +224,7 @@ static void set_best_resolution(_THIS, int width, int
SDL_NAME(XF86VidModeSwitchToMode)(SDL_Display, SDL_Screen, modes[i]);
}
XFree(modes);