Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
M
miniaudio
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
MyCard
miniaudio
Commits
c78a11be
Commit
c78a11be
authored
Dec 01, 2019
by
David Reid
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Implement semaphores in preparation for future work.
parent
483d62e3
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
148 additions
and
10 deletions
+148
-10
miniaudio.h
miniaudio.h
+140
-2
tests/ma_test_0.vcxproj
tests/ma_test_0.vcxproj
+8
-8
No files found.
miniaudio.h
View file @
c78a11be
...
@@ -492,6 +492,7 @@ extern "C" {
...
@@ -492,6 +492,7 @@ extern "C" {
#else
#else
#define MA_POSIX
#define MA_POSIX
#include <pthread.h> /* Unfortunate #include, but needed for pthread_t, pthread_mutex_t and pthread_cond_t types. */
#include <pthread.h> /* Unfortunate #include, but needed for pthread_t, pthread_mutex_t and pthread_cond_t types. */
#include <semaphore.h>
#ifdef __unix__
#ifdef __unix__
#define MA_UNIX
#define MA_UNIX
...
@@ -744,7 +745,8 @@ typedef int ma_result;
...
@@ -744,7 +745,8 @@ typedef int ma_result;
#define MA_FAILED_TO_CONFIGURE_BACKEND_DEVICE -310
#define MA_FAILED_TO_CONFIGURE_BACKEND_DEVICE -310
#define MA_FAILED_TO_CREATE_MUTEX -311
#define MA_FAILED_TO_CREATE_MUTEX -311
#define MA_FAILED_TO_CREATE_EVENT -312
#define MA_FAILED_TO_CREATE_EVENT -312
#define MA_FAILED_TO_CREATE_THREAD -313
#define MA_FAILED_TO_CREATE_SEMAPHORE -313
#define MA_FAILED_TO_CREATE_THREAD -314
/* Standard sample rates. */
/* Standard sample rates. */
...
@@ -1798,6 +1800,28 @@ typedef struct
...
@@ -1798,6 +1800,28 @@ typedef struct
};
};
} ma_event;
} ma_event;
typedef struct
{
ma_context* pContext;
union
{
#ifdef MA_WIN32
struct
{
/*HANDLE*/ ma_handle hSemaphore;
} win32;
#endif
#ifdef MA_POSIX
struct
{
sem_t semaphore;
} posix;
#endif
int _unused;
};
} ma_semaphore;
/*
/*
The callback for processing audio data from the device.
The callback for processing audio data from the device.
...
@@ -3838,11 +3862,13 @@ Standard Library Stuff
...
@@ -3838,11 +3862,13 @@ Standard Library Stuff
#endif
#endif
#endif
#endif
#define MA_ZERO_OBJECT(p) MA_ZERO_MEMORY((p), sizeof(*(p)))
#define ma_zero_memory MA_ZERO_MEMORY
#define ma_zero_memory MA_ZERO_MEMORY
#define ma_zero_object MA_ZERO_OBJECT
#define ma_copy_memory MA_COPY_MEMORY
#define ma_copy_memory MA_COPY_MEMORY
#define ma_assert MA_ASSERT
#define ma_assert MA_ASSERT
#define ma_zero_object(p) ma_zero_memory((p), sizeof(*(p)))
#define ma_countof(x) (sizeof(x) / sizeof(x[0]))
#define ma_countof(x) (sizeof(x) / sizeof(x[0]))
#define ma_max(x, y) (((x) > (y)) ? (x) : (y))
#define ma_max(x, y) (((x) > (y)) ? (x) : (y))
#define ma_min(x, y) (((x) < (y)) ? (x) : (y))
#define ma_min(x, y) (((x) < (y)) ? (x) : (y))
...
@@ -4995,6 +5021,34 @@ ma_bool32 ma_event_signal__win32(ma_event* pEvent)
...
@@ -4995,6 +5021,34 @@ ma_bool32 ma_event_signal__win32(ma_event* pEvent)
{
{
return SetEvent(pEvent->win32.hEvent);
return SetEvent(pEvent->win32.hEvent);
}
}
ma_result ma_semaphore_init__win32(ma_context* pContext, int initialValue, ma_semaphore* pSemaphore)
{
(void)pContext;
pSemaphore->win32.hSemaphore = CreateSemaphoreA(NULL, (LONG)initialValue, LONG_MAX, NULL);
if (pSemaphore->win32.hSemaphore == NULL) {
return MA_FAILED_TO_CREATE_SEMAPHORE;
}
return MA_SUCCESS;
}
void ma_semaphore_uninit__win32(ma_semaphore* pSemaphore)
{
CloseHandle((HANDLE)pSemaphore->win32.hSemaphore);
}
ma_bool32 ma_semaphore_wait__win32(ma_semaphore* pSemaphore)
{
return WaitForSingleObject((HANDLE)pSemaphore->win32.hSemaphore, INFINITE) == WAIT_OBJECT_0;
}
ma_bool32 ma_semaphore_release__win32(ma_semaphore* pSemaphore)
{
return ReleaseSemaphore((HANDLE)pSemaphore->win32.hSemaphore, 1, NULL) != 0;
}
#endif
#endif
...
@@ -5181,6 +5235,33 @@ ma_bool32 ma_event_signal__posix(ma_event* pEvent)
...
@@ -5181,6 +5235,33 @@ ma_bool32 ma_event_signal__posix(ma_event* pEvent)
return MA_TRUE;
return MA_TRUE;
}
}
ma_result ma_semaphore_init__posix(ma_context* pContext, int initialValue, ma_semaphore* pSemaphore)
{
(void)pContext;
if (sem_init(&pSemaphore->posix.semaphore, 0, (unsigned int)initialValue) == 0) {
return MA_FAILED_TO_CREATE_SEMAPHORE;
}
return MA_SUCCESS;
}
void ma_semaphore_uninit__posix(ma_semaphore* pSemaphore)
{
sem_close(&pSemaphore->posix.semaphore);
}
ma_bool32 ma_semaphore_wait__posix(ma_semaphore* pSemaphore)
{
return sem_wait(&pSemaphore->posix.semaphore) != -1;
}
ma_bool32 ma_semaphore_release__posix(ma_semaphore* pSemaphore)
{
return sem_post(&pSemaphore->posix.semaphore) != -1;
}
#endif
#endif
ma_result ma_thread_create(ma_context* pContext, ma_thread* pThread, ma_thread_entry_proc entryProc, void* pData)
ma_result ma_thread_create(ma_context* pContext, ma_thread* pThread, ma_thread_entry_proc entryProc, void* pData)
...
@@ -5342,6 +5423,63 @@ ma_bool32 ma_event_signal(ma_event* pEvent)
...
@@ -5342,6 +5423,63 @@ ma_bool32 ma_event_signal(ma_event* pEvent)
}
}
ma_result ma_semaphore_init(ma_context* pContext, int initialValue, ma_semaphore* pSemaphore)
{
if (pContext == NULL || pSemaphore == NULL) {
return MA_INVALID_ARGS;
}
#ifdef MA_WIN32
return ma_semaphore_init__win32(pContext, initialValue, pSemaphore);
#endif
#ifdef MA_POSIX
return ma_semaphore_init__posix(pContext, initialValue, pSemaphore);
#endif
}
void ma_semaphore_uninit(ma_semaphore* pSemaphore)
{
if (pSemaphore == NULL) {
return;
}
#ifdef MA_WIN32
ma_semaphore_uninit__win32(pSemaphore);
#endif
#ifdef MA_POSIX
ma_semaphore_uninit__posix(pSemaphore);
#endif
}
ma_bool32 ma_semaphore_wait(ma_semaphore* pSemaphore)
{
if (pSemaphore == NULL) {
return MA_FALSE;
}
#ifdef MA_WIN32
return ma_semaphore_wait__win32(pSemaphore);
#endif
#ifdef MA_POSIX
return ma_semaphore_wait__posix(pSemaphore);
#endif
}
ma_bool32 ma_semaphore_release(ma_semaphore* pSemaphore)
{
if (pSemaphore == NULL) {
return MA_FALSE;
}
#ifdef MA_WIN32
return ma_semaphore_release__win32(pSemaphore);
#endif
#ifdef MA_POSIX
return ma_semaphore_release__posix(pSemaphore);
#endif
}
ma_uint32 ma_get_best_sample_rate_within_range(ma_uint32 sampleRateMin, ma_uint32 sampleRateMax)
ma_uint32 ma_get_best_sample_rate_within_range(ma_uint32 sampleRateMin, ma_uint32 sampleRateMax)
{
{
/* Normalize the range in case we were given something stupid. */
/* Normalize the range in case we were given something stupid. */
tests/ma_test_0.vcxproj
View file @
c78a11be
...
@@ -327,14 +327,6 @@
...
@@ -327,14 +327,6 @@
<ExcludedFromBuild
Condition=
"'$(Configuration)|$(Platform)'=='Release|x64'"
>
true
</ExcludedFromBuild>
<ExcludedFromBuild
Condition=
"'$(Configuration)|$(Platform)'=='Release|x64'"
>
true
</ExcludedFromBuild>
</ClCompile>
</ClCompile>
<ClCompile
Include=
"..\examples\simple_playback_emscripten.c"
>
<ClCompile
Include=
"..\examples\simple_playback_emscripten.c"
>
<ExcludedFromBuild
Condition=
"'$(Configuration)|$(Platform)'=='Debug|Win32'"
>
true
</ExcludedFromBuild>
<ExcludedFromBuild
Condition=
"'$(Configuration)|$(Platform)'=='Release|Win32'"
>
true
</ExcludedFromBuild>
<ExcludedFromBuild
Condition=
"'$(Configuration)|$(Platform)'=='Debug|ARM'"
>
true
</ExcludedFromBuild>
<ExcludedFromBuild
Condition=
"'$(Configuration)|$(Platform)'=='Release|ARM'"
>
true
</ExcludedFromBuild>
<ExcludedFromBuild
Condition=
"'$(Configuration)|$(Platform)'=='Debug|x64'"
>
true
</ExcludedFromBuild>
<ExcludedFromBuild
Condition=
"'$(Configuration)|$(Platform)'=='Release|x64'"
>
true
</ExcludedFromBuild>
</ClCompile>
<ClCompile
Include=
"..\research\tests\ma_resampler_test_0.c"
>
<ExcludedFromBuild
Condition=
"'$(Configuration)|$(Platform)'=='Debug|Win32'"
>
false
</ExcludedFromBuild>
<ExcludedFromBuild
Condition=
"'$(Configuration)|$(Platform)'=='Debug|Win32'"
>
false
</ExcludedFromBuild>
<ExcludedFromBuild
Condition=
"'$(Configuration)|$(Platform)'=='Release|Win32'"
>
false
</ExcludedFromBuild>
<ExcludedFromBuild
Condition=
"'$(Configuration)|$(Platform)'=='Release|Win32'"
>
false
</ExcludedFromBuild>
<ExcludedFromBuild
Condition=
"'$(Configuration)|$(Platform)'=='Debug|ARM'"
>
false
</ExcludedFromBuild>
<ExcludedFromBuild
Condition=
"'$(Configuration)|$(Platform)'=='Debug|ARM'"
>
false
</ExcludedFromBuild>
...
@@ -342,6 +334,14 @@
...
@@ -342,6 +334,14 @@
<ExcludedFromBuild
Condition=
"'$(Configuration)|$(Platform)'=='Debug|x64'"
>
false
</ExcludedFromBuild>
<ExcludedFromBuild
Condition=
"'$(Configuration)|$(Platform)'=='Debug|x64'"
>
false
</ExcludedFromBuild>
<ExcludedFromBuild
Condition=
"'$(Configuration)|$(Platform)'=='Release|x64'"
>
false
</ExcludedFromBuild>
<ExcludedFromBuild
Condition=
"'$(Configuration)|$(Platform)'=='Release|x64'"
>
false
</ExcludedFromBuild>
</ClCompile>
</ClCompile>
<ClCompile
Include=
"..\research\tests\ma_resampler_test_0.c"
>
<ExcludedFromBuild
Condition=
"'$(Configuration)|$(Platform)'=='Debug|Win32'"
>
true
</ExcludedFromBuild>
<ExcludedFromBuild
Condition=
"'$(Configuration)|$(Platform)'=='Release|Win32'"
>
true
</ExcludedFromBuild>
<ExcludedFromBuild
Condition=
"'$(Configuration)|$(Platform)'=='Debug|ARM'"
>
true
</ExcludedFromBuild>
<ExcludedFromBuild
Condition=
"'$(Configuration)|$(Platform)'=='Release|ARM'"
>
true
</ExcludedFromBuild>
<ExcludedFromBuild
Condition=
"'$(Configuration)|$(Platform)'=='Debug|x64'"
>
true
</ExcludedFromBuild>
<ExcludedFromBuild
Condition=
"'$(Configuration)|$(Platform)'=='Release|x64'"
>
true
</ExcludedFromBuild>
</ClCompile>
<ClCompile
Include=
"ma_dithering.c"
>
<ClCompile
Include=
"ma_dithering.c"
>
<ExcludedFromBuild
Condition=
"'$(Configuration)|$(Platform)'=='Debug|Win32'"
>
true
</ExcludedFromBuild>
<ExcludedFromBuild
Condition=
"'$(Configuration)|$(Platform)'=='Debug|Win32'"
>
true
</ExcludedFromBuild>
<ExcludedFromBuild
Condition=
"'$(Configuration)|$(Platform)'=='Release|Win32'"
>
true
</ExcludedFromBuild>
<ExcludedFromBuild
Condition=
"'$(Configuration)|$(Platform)'=='Release|Win32'"
>
true
</ExcludedFromBuild>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment