mirror of
https://github.com/mackron/miniaudio.git
synced 2026-04-22 00:06:59 +02:00
107 lines
3.3 KiB
C
107 lines
3.3 KiB
C
#ifndef miniaudio_vfs_debugging_c
|
|
#define miniaudio_vfs_debugging_c
|
|
|
|
#include "miniaudio_vfs_debugging.h"
|
|
|
|
MA_API ma_vfs_debugging_config ma_vfs_debugging_config_init(ma_vfs* pUnderlyingVFS, ma_uint32 latencyInMilliseconds)
|
|
{
|
|
ma_vfs_debugging_config config;
|
|
|
|
MA_ZERO_OBJECT(&config);
|
|
config.pUnderlyingVFS = pUnderlyingVFS;
|
|
config.latencyInMilliseconds = latencyInMilliseconds;
|
|
|
|
return config;
|
|
}
|
|
|
|
|
|
static ma_vfs_debugging* ma_vfs_debugging_cast(ma_vfs* pVFS)
|
|
{
|
|
return (ma_vfs_debugging*)pVFS;
|
|
}
|
|
|
|
static ma_vfs* ma_vfs_debugging_get_underlying_vfs(ma_vfs* pVFS)
|
|
{
|
|
return ma_vfs_debugging_cast(pVFS)->config.pUnderlyingVFS;
|
|
}
|
|
|
|
|
|
static ma_result ma_vfs_debugging_open(ma_vfs* pVFS, const char* pFilePath, ma_uint32 openMode, ma_vfs_file* pFile)
|
|
{
|
|
return ma_vfs_open(ma_vfs_debugging_get_underlying_vfs(pVFS), pFilePath, openMode, pFile);
|
|
}
|
|
|
|
static ma_result ma_vfs_debugging_open_w(ma_vfs* pVFS, const wchar_t* pFilePath, ma_uint32 openMode, ma_vfs_file* pFile)
|
|
{
|
|
return ma_vfs_open_w(ma_vfs_debugging_get_underlying_vfs(pVFS), pFilePath, openMode, pFile);
|
|
}
|
|
|
|
static ma_result ma_vfs_debugging_close(ma_vfs* pVFS, ma_vfs_file file)
|
|
{
|
|
return ma_vfs_close(ma_vfs_debugging_get_underlying_vfs(pVFS), file);
|
|
}
|
|
|
|
static ma_result ma_vfs_debugging_read(ma_vfs* pVFS, ma_vfs_file file, void* pDst, size_t sizeInBytes, size_t* pBytesRead)
|
|
{
|
|
ma_vfs_debugging* pDebuggingVFS = ma_vfs_debugging_cast(pVFS);
|
|
ma_result result;
|
|
|
|
/* Introduce artificial latency if requested. */
|
|
if (pDebuggingVFS->config.latencyInMilliseconds > 0) {
|
|
ma_sleep(pDebuggingVFS->config.latencyInMilliseconds);
|
|
}
|
|
|
|
/*printf("READING\n");*/
|
|
|
|
result = ma_vfs_read(ma_vfs_debugging_get_underlying_vfs(pVFS), file, pDst, sizeInBytes, pBytesRead);
|
|
return result;
|
|
}
|
|
|
|
static ma_result ma_vfs_debugging_write(ma_vfs* pVFS, ma_vfs_file file, const void* pSrc, size_t sizeInBytes, size_t* pBytesWritten)
|
|
{
|
|
return ma_vfs_write(ma_vfs_debugging_get_underlying_vfs(pVFS), file, pSrc, sizeInBytes, pBytesWritten);
|
|
}
|
|
|
|
static ma_result ma_vfs_debugging_seek(ma_vfs* pVFS, ma_vfs_file file, ma_int64 offset, ma_seek_origin origin)
|
|
{
|
|
return ma_vfs_seek(ma_vfs_debugging_get_underlying_vfs(pVFS), file, offset, origin);
|
|
}
|
|
|
|
static ma_result ma_vfs_debugging_tell(ma_vfs* pVFS, ma_vfs_file file, ma_int64* pCursor)
|
|
{
|
|
return ma_vfs_tell(ma_vfs_debugging_get_underlying_vfs(pVFS), file, pCursor);
|
|
}
|
|
|
|
static ma_result ma_vfs_debugging_info(ma_vfs* pVFS, ma_vfs_file file, ma_file_info* pInfo)
|
|
{
|
|
return ma_vfs_info(ma_vfs_debugging_get_underlying_vfs(pVFS), file, pInfo);
|
|
}
|
|
|
|
MA_API ma_result ma_vfs_debugging_init(const ma_vfs_debugging_config* pConfig, ma_vfs_debugging* pVFS)
|
|
{
|
|
if (pVFS == NULL) {
|
|
return MA_INVALID_ARGS;
|
|
}
|
|
|
|
MA_ZERO_OBJECT(pVFS);
|
|
|
|
if (pConfig == NULL) {
|
|
pVFS->config = ma_vfs_debugging_config_init(NULL, 0);
|
|
} else {
|
|
pVFS->config = *pConfig;
|
|
}
|
|
|
|
pVFS->cb.onOpen = ma_vfs_debugging_open;
|
|
pVFS->cb.onOpenW = ma_vfs_debugging_open_w;
|
|
pVFS->cb.onClose = ma_vfs_debugging_close;
|
|
pVFS->cb.onRead = ma_vfs_debugging_read;
|
|
pVFS->cb.onWrite = ma_vfs_debugging_write;
|
|
pVFS->cb.onSeek = ma_vfs_debugging_seek;
|
|
pVFS->cb.onTell = ma_vfs_debugging_tell;
|
|
pVFS->cb.onInfo = ma_vfs_debugging_info;
|
|
|
|
return MA_SUCCESS;
|
|
}
|
|
|
|
#endif /* miniaudio_vfs_debugging_c */
|