diff options
author | Ørjan Malde <red@foxi.me> | 2020-11-11 23:20:05 +0100 |
---|---|---|
committer | Lucio Andrés Illanes Albornoz <lucio@lucioillanes.de> | 2020-11-12 00:02:36 +0000 |
commit | 589402e4275455caea6475a451b4d1d08da749bf (patch) | |
tree | 2b6b7d1ec6d4a89f8576b614de29293d83a25f8a /patches | |
parent | a5063cd4a9d2b98903334f0470bcc073136d378a (diff) | |
download | midipix_build-589402e4275455caea6475a451b4d1d08da749bf.tar.bz2 midipix_build-589402e4275455caea6475a451b4d1d08da749bf.tar.xz |
groups/251.native_packages_lib.group: libsndfile: win32 sound out support
Signed-off-by: Lucio Andrés Illanes Albornoz <lucio@lucioillanes.de>
Diffstat (limited to 'patches')
-rw-r--r-- | patches/libsndfile-1.0.28.local.patch | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/patches/libsndfile-1.0.28.local.patch b/patches/libsndfile-1.0.28.local.patch new file mode 100644 index 00000000..708ae2c7 --- /dev/null +++ b/patches/libsndfile-1.0.28.local.patch @@ -0,0 +1,105 @@ +diff -ru libsndfile-1.0.28.orig/programs/sndfile-play.c libsndfile-1.0.28/programs/sndfile-play.c +--- libsndfile-1.0.28.orig/programs/sndfile-play.c 2017-04-01 09:18:02.000000000 +0200 ++++ libsndfile-1.0.28/programs/sndfile-play.c 2020-11-11 13:46:51.824586591 +0100 +@@ -71,10 +71,31 @@ + #include <sys/ioctl.h> + #include <sys/audioio.h> + +-#elif (OS_IS_WIN32 == 1) ++#elif (OS_IS_WIN32 == 1) || defined(__midipix__) ++ #include <pthread.h> + #include <windows.h> + #include <mmsystem.h> + ++#ifndef INFINITE ++#define INFINITE 0xffffffff ++#endif ++ ++#ifndef CALLBACK_FUNCTION ++#define CALLBACK_FUNCTION (uint32_t)0x00030000 ++#endif ++ ++#ifndef WAVE_MAPPER ++#define WAVE_MAPPER ((UINT)-1) ++#endif ++ ++#ifndef WAVE_FORMAT_PCM ++#define WAVE_FORMAT_PCM 1 ++#endif ++ ++#ifndef MM_WOM_DONE ++#define MM_WOM_DONE 0x3BD ++#endif ++ + #endif + + #define SIGNED_SIZEOF(x) ((int) sizeof (x)) +@@ -482,15 +503,16 @@ + ** point to data instead of short*. It plain sucks! + */ + +-#if (OS_IS_WIN32 == 1) ++#if (OS_IS_WIN32 == 1) || defined(__midipix__) + + #define WIN32_BUFFER_LEN (1 << 15) + ++static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER ; ++ + typedef struct + { HWAVEOUT hwave ; + WAVEHDR whdr [2] ; + +- CRITICAL_SECTION mutex ; /* to control access to BuffersInUSe */ + HANDLE Event ; /* signal that a buffer is free */ + + short buffer [WIN32_BUFFER_LEN / sizeof (short)] ; +@@ -524,9 +546,9 @@ + waveOutWrite (audio_data->hwave, (LPWAVEHDR) &(audio_data->whdr [audio_data->current]), sizeof (WAVEHDR)) ; + + /* count another buffer in use */ +- EnterCriticalSection (&audio_data->mutex) ; ++ pthread_mutex_lock (&mutex) ; + audio_data->BuffersInUse ++ ; +- LeaveCriticalSection (&audio_data->mutex) ; ++ pthread_mutex_unlock (&mutex) ; + + /* use the other buffer next time */ + audio_data->current = (audio_data->current + 1) % 2 ; +@@ -556,9 +578,9 @@ + + /* let main loop know a buffer is free */ + if (msg == MM_WOM_DONE) +- { EnterCriticalSection (&audio_data->mutex) ; ++ { pthread_mutex_lock (&mutex) ; + audio_data->BuffersInUse -- ; +- LeaveCriticalSection (&audio_data->mutex) ; ++ pthread_mutex_unlock (&mutex) ; + SetEvent (audio_data->Event) ; + } ; + +@@ -586,7 +608,6 @@ + audio_data.remaining = audio_data.sfinfo.frames * audio_data.sfinfo.channels ; + audio_data.current = 0 ; + +- InitializeCriticalSection (&audio_data.mutex) ; + audio_data.Event = CreateEvent (0, FALSE, FALSE, 0) ; + + wf.nChannels = audio_data.sfinfo.channels ; +@@ -655,8 +676,6 @@ + waveOutClose (audio_data.hwave) ; + audio_data.hwave = 0 ; + +- DeleteCriticalSection (&audio_data.mutex) ; +- + sf_close (audio_data.sndfile) ; + } ; + +@@ -848,7 +867,7 @@ + sndio_play (argc, argv) ; + #elif (defined (sun) && defined (unix)) + solaris_play (argc, argv) ; +-#elif (OS_IS_WIN32 == 1) ++#elif (OS_IS_WIN32 == 1) || defined(__midipix__) + win32_play (argc, argv) ; + #elif (defined (__MACH__) && defined (__APPLE__)) + printf ("OS X 10.8 and later have a new Audio API.\n") ; |