Skip to content
Snippets Groups Projects
Commit 96192c16 authored by Chris Wolf's avatar Chris Wolf
Browse files

Make semaphore handle a per-instance variable instead of global.

git-svn-id: http://svn.xiph.org/trunk/ao@1992 0101bb08-14d6-0310-b084-bc0e0c8e3800
parent 6219679e
No related branches found
No related tags found
No related merge requests found
Debug
Release
*.ncb
*.opt
*.plg
*.dsw
......@@ -29,22 +29,13 @@
#include <ao/ao.h>
#include <ao/plugin.h>
HANDLE notdone;
static void CALLBACK waveOutProc(HWAVEOUT hwo,UINT uMsg,DWORD dwInstance,DWORD dwParam1,DWORD dwParam2)
{
if (uMsg == WOM_DONE)
{
ReleaseSemaphore(notdone, 1, NULL);
}
}
typedef struct ao_mmsound_internal {
HWAVEOUT m_hWaveOut;
WAVEHDR m_waveHeader[2];
uint_32 buf_size;
void *buffer[2];
int currentb;
HANDLE notdone;
} ao_mmsound_internal;
static char *ao_mmsound_options[] = {"buf_size"};
......@@ -62,19 +53,26 @@ static ao_info ao_mmsound_info =
1
};
static void CALLBACK waveOutProc(HWAVEOUT hwo,UINT uMsg,DWORD dwInstance,DWORD dwParam1,DWORD dwParam2)
{
ao_mmsound_internal *internal = (ao_mmsound_internal *)dwInstance;
if (uMsg == WOM_DONE)
{
ReleaseSemaphore(internal->notdone, 1, NULL);
}
}
int ao_plugin_test()
{
return 1; /* This plugin works in default mode */
}
ao_info *ao_plugin_driver_info(void)
{
return &ao_mmsound_info;
}
int ao_plugin_device_init(ao_device *device)
{
ao_mmsound_internal *internal;
......@@ -91,7 +89,6 @@ int ao_plugin_device_init(ao_device *device)
return 1; /* Memory alloc successful */
}
int ao_plugin_set_option(ao_device *device, const char *key, const char *value)
{
ao_mmsound_internal *internal = (ao_mmsound_internal *) device->internal;
......@@ -101,7 +98,6 @@ int ao_plugin_set_option(ao_device *device, const char *key, const char *value)
return 1;
}
/*
* open the audio device for writing to
*/
......@@ -124,7 +120,7 @@ int ao_plugin_open(ao_device *device, ao_sample_format *format)
WAVE_MAPPER,
&wfx,
(DWORD)waveOutProc,
0,
(DWORD)device->internal,
(DWORD)CALLBACK_FUNCTION);
if (errCode != MMSYSERR_NOERROR) return 0;
......@@ -140,8 +136,7 @@ int ao_plugin_open(ao_device *device, ao_sample_format *format)
internal->buffer[1] = malloc(internal->buf_size);
internal->currentb = 0;
notdone = CreateSemaphore(NULL, 0, 1, NULL);
ReleaseSemaphore(notdone, 1, NULL);
internal->notdone = CreateSemaphore(NULL, 0, 1, NULL);
device->driver_byte_format = AO_FMT_NATIVE;
......@@ -171,7 +166,7 @@ int ao_plugin_play(ao_device *device, const char *output_samples,
// Send internal->buffer[n] to the WaveOut device buffer.
waveOutWrite(internal->m_hWaveOut,&internal->m_waveHeader[internal->currentb],sizeof(WAVEHDR));
WaitForSingleObject(notdone, INFINITE);
WaitForSingleObject(internal->notdone, INFINITE);
internal->currentb++;
if(internal->currentb >= 2) internal->currentb = 0;
......@@ -183,7 +178,7 @@ int ao_plugin_close(ao_device *device)
{
ao_mmsound_internal *internal = (ao_mmsound_internal *) device->internal;
CloseHandle(notdone);
CloseHandle(internal->notdone);
free(internal->buffer[0]);
free(internal->buffer[1]);
......@@ -193,7 +188,6 @@ int ao_plugin_close(ao_device *device)
return 1;
}
void ao_plugin_device_clear(ao_device *device)
{
ao_mmsound_internal *internal = (ao_mmsound_internal *) device->internal;
......
......@@ -54,7 +54,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib winmm.lib /nologo /dll /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib winmm.lib /nologo /dll /machine:I386 /out:"../../../win32/lib/mmsound.dll"
!ELSEIF "$(CFG)" == "mmsound - Win32 Debug"
......@@ -70,7 +70,7 @@ LINK32=link.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMSOUND_EXPORTS" /YX /FD /GZ /c
# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\..\..\include" /I "..\..\..\win32\include" /I "." /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMSOUND_EXPORTS" /FD /GZ /c
# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\..\..\include" /I "..\..\..\win32\include" /I "." /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMSOUND_EXPORTS" /FR /FD /GZ /c
# SUBTRACT CPP /YX
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
......@@ -81,7 +81,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib winmm.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib winmm.lib /nologo /dll /debug /machine:I386 /out:"../../../win32/lib/mmsound_d.dll" /pdbtype:sept
!ENDIF
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment