diff --git a/src/emu/x64printer.c b/src/emu/x64printer.c index 1afc8680c..0109d3f82 100644 --- a/src/emu/x64printer.c +++ b/src/emu/x64printer.c @@ -6839,6 +6839,8 @@ void x64Print(x64emu_t* emu, char* buff, size_t buffsz, const char* func, int ti snprintf(buff, buffsz, "%04d|%p: Calling %s(%" PRIp ", %" PRIu32 ", %" PRIp ", %" PRIp ", %" PRIu32 ", %" PRIp ", %" PRIp ", %" PRIp ", %" PRIp ")", tid, *(void**)(R_RSP), func, (void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (uint32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } else if (w == iFEpupppLppL) { snprintf(buff, buffsz, "%04d|%p: Calling %s(%" PRIp ", %" PRIu32 ", %" PRIp ", %" PRIp ", %" PRIp ", %" PRIu64 ", %" PRIp ", %" PRIp ", %" PRIu64 ")", tid, *(void**)(R_RSP), func, (void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (uintptr_t)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(uintptr_t*)(R_RSP + 24)); + } else if (w == iFEppiiiippp) { + snprintf(buff, buffsz, "%04d|%p: Calling %s(%" PRIp ", %" PRIp ", %" PRIi32 ", %" PRIi32 ", %" PRIi32 ", %" PRIi32 ", %" PRIp ", %" PRIp ", %" PRIp ")", tid, *(void**)(R_RSP), func, (void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } else if (w == iFEppLuppupp) { snprintf(buff, buffsz, "%04d|%p: Calling %s(%" PRIp ", %" PRIp ", %" PRIu64 ", %" PRIu32 ", %" PRIp ", %" PRIp ", %" PRIu32 ", %" PRIp ", %" PRIp ")", tid, *(void**)(R_RSP), func, (void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(uint32_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } else if (w == iFEppppppipp) { diff --git a/src/wrapped/generated/wrappedvorbisfiletypes.h b/src/wrapped/generated/wrappedvorbisfiletypes.h index 6abe43d26..d9d3b88f0 100644 --- a/src/wrapped/generated/wrappedvorbisfiletypes.h +++ b/src/wrapped/generated/wrappedvorbisfiletypes.h @@ -12,9 +12,11 @@ #endif typedef int32_t (*iFppplPPPP_t)(void*, void*, void*, intptr_t, void*, void*, void*, void*); +typedef int32_t (*iFppiiiippp_t)(void*, void*, int32_t, int32_t, int32_t, int32_t, void*, void*, void*); #define SUPER() ADDED_FUNCTIONS() \ GO(ov_open_callbacks, iFppplPPPP_t) \ - GO(ov_test_callbacks, iFppplPPPP_t) + GO(ov_test_callbacks, iFppplPPPP_t) \ + GO(ov_read_filter, iFppiiiippp_t) #endif // __wrappedvorbisfileTYPES_H_ diff --git a/src/wrapped/generated/wrapper.c b/src/wrapped/generated/wrapper.c index 30ae25cae..769b2c70b 100644 --- a/src/wrapped/generated/wrapper.c +++ b/src/wrapped/generated/wrapper.c @@ -3727,6 +3727,7 @@ typedef int32_t (*iFEipiipippi_t)(x64emu_t*, int32_t, void*, int32_t, int32_t, v typedef int32_t (*iFEpiiiiippp_t)(x64emu_t*, void*, int32_t, int32_t, int32_t, int32_t, int32_t, void*, void*, void*); typedef int32_t (*iFEpuppupppp_t)(x64emu_t*, void*, uint32_t, void*, void*, uint32_t, void*, void*, void*, void*); typedef int32_t (*iFEpupppLppL_t)(x64emu_t*, void*, uint32_t, void*, void*, void*, uintptr_t, void*, void*, uintptr_t); +typedef int32_t (*iFEppiiiippp_t)(x64emu_t*, void*, void*, int32_t, int32_t, int32_t, int32_t, void*, void*, void*); typedef int32_t (*iFEppLuppupp_t)(x64emu_t*, void*, void*, uintptr_t, uint32_t, void*, void*, uint32_t, void*, void*); typedef int32_t (*iFEppppppipp_t)(x64emu_t*, void*, void*, void*, void*, void*, void*, int32_t, void*, void*); typedef int32_t (*iFEpppppppip_t)(x64emu_t*, void*, void*, void*, void*, void*, void*, void*, int32_t, void*); @@ -7820,6 +7821,7 @@ void iFEipiipippi(x64emu_t *emu, uintptr_t fcn) { iFEipiipippi_t fn = (iFEipiipi void iFEpiiiiippp(x64emu_t *emu, uintptr_t fcn) { iFEpiiiiippp_t fn = (iFEpiiiiippp_t)fcn; R_RAX=(int)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } void iFEpuppupppp(x64emu_t *emu, uintptr_t fcn) { iFEpuppupppp_t fn = (iFEpuppupppp_t)fcn; R_RAX=(int)fn(emu, (void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (uint32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } void iFEpupppLppL(x64emu_t *emu, uintptr_t fcn) { iFEpupppLppL_t fn = (iFEpupppLppL_t)fcn; R_RAX=(int)fn(emu, (void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (uintptr_t)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(uintptr_t*)(R_RSP + 24)); } +void iFEppiiiippp(x64emu_t *emu, uintptr_t fcn) { iFEppiiiippp_t fn = (iFEppiiiippp_t)fcn; R_RAX=(int)fn(emu, (void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } void iFEppLuppupp(x64emu_t *emu, uintptr_t fcn) { iFEppLuppupp_t fn = (iFEppLuppupp_t)fcn; R_RAX=(int)fn(emu, (void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(uint32_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } void iFEppppppipp(x64emu_t *emu, uintptr_t fcn) { iFEppppppipp_t fn = (iFEppppppipp_t)fcn; R_RAX=(int)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } void iFEpppppppip(x64emu_t *emu, uintptr_t fcn) { iFEpppppppip_t fn = (iFEpppppppip_t)fcn; R_RAX=(int)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(void**)(R_RSP + 24)); } diff --git a/src/wrapped/generated/wrapper.h b/src/wrapped/generated/wrapper.h index 47544dee6..c81891b6c 100644 --- a/src/wrapped/generated/wrapper.h +++ b/src/wrapped/generated/wrapper.h @@ -3738,6 +3738,7 @@ void iFEipiipippi(x64emu_t *emu, uintptr_t fnc); void iFEpiiiiippp(x64emu_t *emu, uintptr_t fnc); void iFEpuppupppp(x64emu_t *emu, uintptr_t fnc); void iFEpupppLppL(x64emu_t *emu, uintptr_t fnc); +void iFEppiiiippp(x64emu_t *emu, uintptr_t fnc); void iFEppLuppupp(x64emu_t *emu, uintptr_t fnc); void iFEppppppipp(x64emu_t *emu, uintptr_t fnc); void iFEpppppppip(x64emu_t *emu, uintptr_t fnc); diff --git a/src/wrapped/wrappedvorbisfile.c b/src/wrapped/wrappedvorbisfile.c index 402190477..9b561abc2 100644 --- a/src/wrapped/wrappedvorbisfile.c +++ b/src/wrapped/wrappedvorbisfile.c @@ -31,10 +31,12 @@ typedef struct { } ov_callbacks; typedef int32_t (*iFppplC_t)(void*, void*, void*, long, ov_callbacks); +typedef int32_t (*iFppiiiippp_t)(void*, void*, int, int, int, int, void*, void(*)(float**, long, long, void*), void*); #define SUPER() \ GO(ov_open_callbacks, iFppplC_t) \ GO(ov_test_callbacks, iFppplC_t) \ + GO(ov_read_filter, iFppiiiippp_t) \ #include "wrappercallback.h" @@ -136,6 +138,28 @@ static void* findtellFct(void* fct) printf_log(LOG_NONE, "Warning, no more slot for vorbisfile tell callback\n"); return NULL; } +// filter (for ov_read_filter: void (*filter)(float **pcm, long channels, long samples, void *filter_param)) +#define GO(A) \ +static uintptr_t my_filter_fct_##A = 0; \ +static void my_filter_##A(float** pcm, long channels, long samples, void* filter_param) \ +{ \ + RunFunctionFmt(my_filter_fct_##A, "pllp", pcm, channels, samples, filter_param);\ +} +SUPER() +#undef GO +static void* findfilterFct(void* fct) +{ + if(!fct) return NULL; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my_filter_fct_##A == (uintptr_t)fct) return my_filter_##A; + SUPER() + #undef GO + #define GO(A) if(my_filter_fct_##A == 0) {my_filter_fct_##A = (uintptr_t)fct; return my_filter_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for vorbisfile filter callback\n"); + return NULL; +} #undef SUPER @@ -161,4 +185,9 @@ EXPORT int32_t my_ov_test_callbacks(x64emu_t* emu, void* datasource, void* vf, v return ret; } +EXPORT int32_t my_ov_read_filter(x64emu_t* emu, void* vf, void* buffer, int length, int bigendianp, int word, int sgned, void* bitstream, void* filter, void* filter_param) +{ + return my->ov_read_filter(vf, buffer, length, bigendianp, word, sgned, bitstream, findfilterFct(filter), filter_param); +} + #include "wrappedlib_init.h" diff --git a/src/wrapped/wrappedvorbisfile_private.h b/src/wrapped/wrappedvorbisfile_private.h index d72132405..8432eb122 100644 --- a/src/wrapped/wrappedvorbisfile_private.h +++ b/src/wrapped/wrappedvorbisfile_private.h @@ -24,7 +24,7 @@ GO(ov_raw_seek_lap,iFpi) GO(ov_raw_tell,IFp) GO(ov_raw_total,IFpi) GO(ov_read,iFppiiiip) -//GO(ov_read_filter,iFppiiiipBp) +GOM(ov_read_filter,iFEppiiiippp) GO(ov_read_float,iFppip) GO(ov_seekable,iFp) GO(ov_serialnumber,iFpi)