about summary refs log tree commit diff stats
path: root/src/wrapped/wrappedlibasound.c
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2023-03-18 14:20:24 +0100
committerptitSeb <sebastien.chev@gmail.com>2023-03-18 14:20:24 +0100
commitf5bfb537da3a1ea8d24c573875602d211fc51cf5 (patch)
tree3c1f1a57030c8d1e9ad62dab5ea2a338f22bab2e /src/wrapped/wrappedlibasound.c
parente7f8ebaf77ad0eec62f14ee783e0a0b329eb1607 (diff)
downloadbox64-f5bfb537da3a1ea8d24c573875602d211fc51cf5.tar.gz
box64-f5bfb537da3a1ea8d24c573875602d211fc51cf5.zip
Added 3 more function to libasound
Diffstat (limited to 'src/wrapped/wrappedlibasound.c')
-rwxr-xr-xsrc/wrapped/wrappedlibasound.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/wrapped/wrappedlibasound.c b/src/wrapped/wrappedlibasound.c
index 11fffc68..b28a36ba 100755
--- a/src/wrapped/wrappedlibasound.c
+++ b/src/wrapped/wrappedlibasound.c
@@ -67,6 +67,28 @@ static void* findAsyncFct(void* fct)
     printf_log(LOG_NONE, "Warning, no more slot for Asound Async callback\n");
     return NULL;
 }
+// snd_mixer_elem_callback_t
+#define GO(A)   \
+static uintptr_t my_elem_fct_##A = 0;   \
+static int my_elem_##A(void* elem, uint32_t mask)                       \
+{                                                                       \
+    return (int)RunFunction(my_context, my_elem_fct_##A, 2, elem, mask);\
+}
+SUPER()
+#undef GO
+static void* findElemFct(void* fct)
+{
+    if(!fct) return fct;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_elem_fct_##A == (uintptr_t)fct) return my_elem_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_elem_fct_##A == 0) {my_elem_fct_##A = (uintptr_t)fct; return my_elem_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for Asound Elem callback\n");
+    return NULL;
+}
 
 
 EXPORT int my_snd_async_add_handler(x64emu_t *emu, void *handler, int fd, void* callback, void *private_data)
@@ -115,6 +137,11 @@ EXPORT int my_snd_lib_error_set_handler(x64emu_t* emu, void* handler)
     return my->snd_lib_error_set_handler(error_handler);
 }
 
+EXPORT void my_snd_mixer_elem_set_callback(x64emu_t* emu, void* handler, void* f)
+{
+    my->snd_mixer_elem_set_callback(handler, findElemFct(f));
+}
+
 void* my_dlopen(x64emu_t* emu, void *filename, int flag);   // defined in wrappedlibdl.c
 char* my_dlerror(x64emu_t* emu);
 int my_dlclose(x64emu_t* emu, void *handle);