summaryrefslogtreecommitdiff
path: root/devel/SDL
diff options
context:
space:
mode:
authornat <nat@pkgsrc.org>2017-10-27 01:28:53 +0000
committernat <nat@pkgsrc.org>2017-10-27 01:28:53 +0000
commit801a1af5fe1ee610211df37ce9149fa692619cf8 (patch)
tree1e916c30117cc3853615e5dfd1a73e873f605b05 /devel/SDL
parenta749f1f6b5ab75af0114d74d4e0fcd6fefd3b894 (diff)
downloadpkgsrc-801a1af5fe1ee610211df37ce9149fa692619cf8.tar.gz
Enable oss dma backend for NetBSD-8.
Bump PKG_REVISION. OK wiz@.
Diffstat (limited to 'devel/SDL')
-rw-r--r--devel/SDL/MESSAGE16
-rw-r--r--devel/SDL/Makefile4
-rw-r--r--devel/SDL/distinfo3
-rw-r--r--devel/SDL/patches/patch-src_audio_dma_SDL__dmaaudio.c124
4 files changed, 144 insertions, 3 deletions
diff --git a/devel/SDL/MESSAGE b/devel/SDL/MESSAGE
new file mode 100644
index 00000000000..050c295f0d4
--- /dev/null
+++ b/devel/SDL/MESSAGE
@@ -0,0 +1,16 @@
+===========================================================================
+$NetBSD: MESSAGE,v 1.1 2017/10/27 01:28:53 nat Exp $
+
+To enable dma for use with NetBSD-8 or above.
+
+Set the following environment variables:
+ SDL_DSP_DMA_PRECISION
+ SDL_DSP_DMA_FREQ
+ SDL_DSP_DMA_CHANNELS
+
+ SDL_DSP_NOSELECT=1
+
+DMA parameters must match the hw virtual channel format for playback to
+work with dma.
+
+===========================================================================
diff --git a/devel/SDL/Makefile b/devel/SDL/Makefile
index 84a6819ad42..7c0a1736dc0 100644
--- a/devel/SDL/Makefile
+++ b/devel/SDL/Makefile
@@ -1,7 +1,7 @@
-# $NetBSD: Makefile,v 1.126 2017/09/08 02:38:38 ryoon Exp $
+# $NetBSD: Makefile,v 1.127 2017/10/27 01:28:53 nat Exp $
DISTNAME= SDL-1.2.15
-PKGREVISION= 21
+PKGREVISION= 22
CATEGORIES= devel games
MASTER_SITES= http://www.libsdl.org/release/
diff --git a/devel/SDL/distinfo b/devel/SDL/distinfo
index 51d8742609c..6a6a8fa88f3 100644
--- a/devel/SDL/distinfo
+++ b/devel/SDL/distinfo
@@ -1,4 +1,4 @@
-$NetBSD: distinfo,v 1.78 2015/11/03 03:27:12 agc Exp $
+$NetBSD: distinfo,v 1.79 2017/10/27 01:28:53 nat Exp $
SHA1 (SDL-1.2.15.tar.gz) = 0c5f193ced810b0d7ce3ab06d808cbb5eef03a2c
RMD160 (SDL-1.2.15.tar.gz) = d4802a090cb4a24eeb0c8ce5690802f596d394c3
@@ -7,6 +7,7 @@ Size (SDL-1.2.15.tar.gz) = 3920622 bytes
SHA1 (patch-aa) = 00fb7a85caf8fc9f08298d0a07a4587757fdffb0
SHA1 (patch-ac) = 8b2dddff9ad449b19b35ef364e2d960e46284563
SHA1 (patch-src_audio_bsd_SDL__bsdaudio.c) = 7f5fbf4d839e52fce028810dc807b404fcd51442
+SHA1 (patch-src_audio_dma_SDL__dmaaudio.c) = cede64d04e8872b11851bfcacbc99059df973881
SHA1 (patch-src_audio_sun_SDL__sunaudio.c) = 4b492b40d39e6444037dfda55766e4a149cc6c30
SHA1 (patch-src_joystick_bsd_SDL__sysjoystick.c) = 46029dda8975dcb891a5b14b718c27b034ce5b06
SHA1 (patch-src_video_quartz_SDL__QuartzVideo.h) = 19d952bade06dbd646e94f42139c38436969b1a8
diff --git a/devel/SDL/patches/patch-src_audio_dma_SDL__dmaaudio.c b/devel/SDL/patches/patch-src_audio_dma_SDL__dmaaudio.c
new file mode 100644
index 00000000000..0af79580700
--- /dev/null
+++ b/devel/SDL/patches/patch-src_audio_dma_SDL__dmaaudio.c
@@ -0,0 +1,124 @@
+$NetBSD: patch-src_audio_dma_SDL__dmaaudio.c,v 1.1 2017/10/27 01:28:53 nat Exp $
+
+Enable dma for use with netbsd-8.
+
+DMA parameters must match the hw virtual channel format.
+These parameters are controlled by environment variables:
+ SDL_DSP_DMA_PRECISION, SDL_DSP_DMA_FREQ and SDL_DSP_DMA_CHANNELS.
+I found it also necessary to set SDL_DSP_NOSELECT=1 for playback to work with
+dma.
+--- src/audio/dma/SDL_dmaaudio.c.orig 2012-01-19 06:30:06.000000000 +0000
++++ src/audio/dma/SDL_dmaaudio.c
+@@ -24,6 +24,7 @@
+ /* Allow access to a raw mixing buffer */
+
+ #include <stdio.h>
++#include <stdbool.h>
+ #include <string.h> /* For strerror() */
+ #include <errno.h>
+ #include <unistd.h>
+@@ -29,6 +31,7 @@
+ #include <unistd.h>
+ #include <fcntl.h>
+ #include <signal.h>
++#include <sys/param.h>
+ #include <sys/types.h>
+ #include <sys/time.h>
+ #include <sys/ioctl.h>
+@@ -311,7 +313,9 @@ static int DMA_OpenAudio(_THIS, SDL_Audi
+ int format;
+ int stereo;
+ int value;
++#if !defined(__NetBSD__) || (__NetBSD_Version__ < 800000000)
+ Uint16 test_format;
++#endif
+ struct audio_buf_info info;
+
+ /* Reset the timer synchronization flag */
+@@ -333,6 +337,7 @@ static int DMA_OpenAudio(_THIS, SDL_Audi
+ }
+
+ /* Try for a closest match on audio format */
++#if !defined(__NetBSD__) || (__NetBSD_Version__ < 800000000)
+ format = 0;
+ for ( test_format = SDL_FirstAudioFormat(spec->format);
+ ! format && test_format; ) {
+@@ -383,6 +388,78 @@ static int DMA_OpenAudio(_THIS, SDL_Audi
+ return(-1);
+ }
+ spec->format = test_format;
++#else
++ char *tmpenv;
++ int prec;
++ bool be = false;
++
++ if (_BYTE_ORDER == _BIG_ENDIAN)
++ be = true;
++ tmpenv = getenv("SDL_DSP_DMA_PRECISION");
++ if (tmpenv == NULL)
++ prec = 0;
++ else
++ prec = atoi(tmpenv);
++ tmpenv = getenv("SDL_DSP_DMA_FREQ");
++ if (tmpenv == NULL)
++ spec->freq = 0;
++ else
++ spec->freq = atoi(tmpenv);
++ tmpenv = getenv("SDL_DSP_DMA_CHANNELS");
++ if (tmpenv == NULL)
++ spec->channels = 0;
++ else
++ spec->channels = atoi(tmpenv);
++ if (prec == 0) {
++ fprintf(stderr, "SDL_DSP_DMA_PRECISION must be set to virtual "
++ "format precision");
++ return -1;
++ }
++ if (spec->channels == 0) {
++ fprintf(stderr, "SDL_DSP_DMA_CHANNELS must be set to virtual "
++ "format number of harware channels");
++ return -1;
++ }
++ if (spec->freq == 0) {
++ fprintf(stderr, "SDL_DSP_DMA_FREQ must be set to virtual "
++ "format frequency");
++ return -1;
++ }
++ switch(prec) {
++ case 8:
++ spec->format = AUDIO_S8;
++ format = AFMT_S8;
++ break;
++#ifdef notyet
++ case 24:
++ if (be) {
++ spec->format = AUDIO_S24MSB;
++ format = AFMT_S24_BE;
++ } else {
++ spec->format = AUDIO_S24LSB;
++ format = AFMT_S24_LE;
++ }
++ break;
++ case 32:
++ if (be) {
++ spec->format = AUDIO_S32MSB;
++ format = AFMT_S32_BE;
++ } else {
++ spec->format = AUDIO_S32LSB;
++ format = AFMT_S32_LE;
++ }
++ break;
++#endif
++ default:
++ if (be) {
++ spec->format = AUDIO_S16MSB;
++ format = AFMT_S16_BE;
++ } else {
++ spec->format = AUDIO_S16LSB;
++ format = AFMT_S16_LE;
++ }
++ }
++#endif
+
+ /* Set the audio format */
+ value = format;