Backend -> AudioBackend/HttpBackend

This commit is contained in:
UnknownShadow200 2021-08-07 16:30:34 +10:00
parent c9e1c9159e
commit 4bd2e4f49f
4 changed files with 44 additions and 36 deletions

View File

@ -160,7 +160,7 @@ static cc_result CreateALContext(void) {
return _alcGetError(audio_device); return _alcGetError(audio_device);
} }
static cc_bool Backend_Init(void) { static cc_bool AudioBackend_Init(void) {
static const cc_string msg = String_FromConst("Failed to init OpenAL. No audio will play."); static const cc_string msg = String_FromConst("Failed to init OpenAL. No audio will play.");
cc_result res; cc_result res;
if (audio_device) return true; if (audio_device) return true;
@ -171,7 +171,7 @@ static cc_bool Backend_Init(void) {
return true; return true;
} }
static void Backend_Free(void) { static void AudioBackend_Free(void) {
if (!audio_device) return; if (!audio_device) return;
_alcMakeContextCurrent(NULL); _alcMakeContextCurrent(NULL);
@ -198,7 +198,7 @@ void Audio_Init(struct AudioContext* ctx, int buffers) {
ctx->count = buffers; ctx->count = buffers;
} }
static cc_result Backend_Reset(struct AudioContext* ctx) { static cc_result AudioBackend_Reset(struct AudioContext* ctx) {
ALenum err; ALenum err;
ClearFree(ctx); ClearFree(ctx);
if (!ctx->source) return 0; if (!ctx->source) return 0;
@ -218,7 +218,7 @@ static ALenum GetALFormat(int channels) {
Logger_Abort("Unsupported audio format"); return 0; Logger_Abort("Unsupported audio format"); return 0;
} }
static cc_result Backend_SetFormat(struct AudioContext* ctx, struct AudioFormat* format) { static cc_result AudioBackend_SetFormat(struct AudioContext* ctx, struct AudioFormat* format) {
ALenum i, err; ALenum i, err;
ctx->dataFormat = GetALFormat(format->channels); ctx->dataFormat = GetALFormat(format->channels);
@ -256,7 +256,7 @@ cc_result Audio_Play(struct AudioContext* ctx) {
return _alGetError(); return _alGetError();
} }
static void Backend_Stop(struct AudioContext* ctx) { static void AudioBackend_Stop(struct AudioContext* ctx) {
if (ctx->source == -1) return; if (ctx->source == -1) return;
_alSourceStop(ctx->source); _alSourceStop(ctx->source);
@ -340,8 +340,8 @@ struct AudioContext {
struct AudioFormat format; struct AudioFormat format;
int count; int count;
}; };
static cc_bool Backend_Init(void) { return true; } static cc_bool AudioBackend_Init(void) { return true; }
static void Backend_Free(void) { } static void AudioBackend_Free(void) { }
void Audio_Init(struct AudioContext* ctx, int buffers) { void Audio_Init(struct AudioContext* ctx, int buffers) {
int i; int i;
@ -351,7 +351,7 @@ void Audio_Init(struct AudioContext* ctx, int buffers) {
ctx->count = buffers; ctx->count = buffers;
} }
static cc_result Backend_Reset(struct AudioContext* ctx) { static cc_result AudioBackend_Reset(struct AudioContext* ctx) {
cc_result res; cc_result res;
if (!ctx->handle) return 0; if (!ctx->handle) return 0;
@ -360,11 +360,11 @@ static cc_result Backend_Reset(struct AudioContext* ctx) {
return res; return res;
} }
static cc_result Backend_SetFormat(struct AudioContext* ctx, struct AudioFormat* format) { static cc_result AudioBackend_SetFormat(struct AudioContext* ctx, struct AudioFormat* format) {
WAVEFORMATEX fmt; WAVEFORMATEX fmt;
cc_result res; cc_result res;
int sampleSize = format->channels * 2; /* 16 bits per sample / 8 */ int sampleSize = format->channels * 2; /* 16 bits per sample / 8 */
if ((res = Backend_Reset(ctx))) return res; if ((res = AudioBackend_Reset(ctx))) return res;
fmt.wFormatTag = WAVE_FORMAT_PCM; fmt.wFormatTag = WAVE_FORMAT_PCM;
fmt.nChannels = format->channels; fmt.nChannels = format->channels;
@ -400,7 +400,7 @@ cc_result Audio_QueueData(struct AudioContext* ctx, void* data, cc_uint32 dataSi
cc_result Audio_Play(struct AudioContext* ctx) { return 0; } cc_result Audio_Play(struct AudioContext* ctx) { return 0; }
static void Backend_Stop(struct AudioContext* ctx) { static void AudioBackend_Stop(struct AudioContext* ctx) {
if (ctx->handle) waveOutReset(ctx->handle); if (ctx->handle) waveOutReset(ctx->handle);
} }
@ -465,7 +465,7 @@ static cc_bool LoadSLFuncs(void) {
return DynamicLib_GetAll(lib, funcs, Array_Elems(funcs)); return DynamicLib_GetAll(lib, funcs, Array_Elems(funcs));
} }
static cc_bool Backend_Init(void) { static cc_bool AudioBackend_Init(void) {
static const cc_string msg = String_FromConst("Failed to init OpenSLES. No audio will play."); static const cc_string msg = String_FromConst("Failed to init OpenSLES. No audio will play.");
SLInterfaceID ids[1]; SLInterfaceID ids[1];
SLboolean req[1]; SLboolean req[1];
@ -495,7 +495,7 @@ static cc_bool Backend_Init(void) {
return true; return true;
} }
static void Backend_Free(void) { static void AudioBackend_Free(void) {
if (slOutputObject) { if (slOutputObject) {
(*slOutputObject)->Destroy(slOutputObject); (*slOutputObject)->Destroy(slOutputObject);
slOutputObject = NULL; slOutputObject = NULL;
@ -511,7 +511,7 @@ void Audio_Init(struct AudioContext* ctx, int buffers) {
ctx->count = buffers; ctx->count = buffers;
} }
static void Backend_Reset(struct AudioContext* ctx) { static void AudioBackend_Reset(struct AudioContext* ctx) {
SLObjectItf bqPlayerObject = ctx->bqPlayerObject; SLObjectItf bqPlayerObject = ctx->bqPlayerObject;
if (!bqPlayerObject) return; if (!bqPlayerObject) return;
@ -521,7 +521,7 @@ static void Backend_Reset(struct AudioContext* ctx) {
ctx->bqPlayerQueue = NULL; ctx->bqPlayerQueue = NULL;
} }
static cc_result Backend_SetFormat(struct AudioContext* ctx, struct AudioFormat* format) { static cc_result AudioBackend_SetFormat(struct AudioContext* ctx, struct AudioFormat* format) {
SLDataLocator_AndroidSimpleBufferQueue input; SLDataLocator_AndroidSimpleBufferQueue input;
SLDataLocator_OutputMix output; SLDataLocator_OutputMix output;
SLObjectItf bqPlayerObject; SLObjectItf bqPlayerObject;
@ -531,7 +531,7 @@ static cc_result Backend_SetFormat(struct AudioContext* ctx, struct AudioFormat*
SLDataSource src; SLDataSource src;
SLDataSink dst; SLDataSink dst;
cc_result res; cc_result res;
Backend_Reset(ctx); AudioBackend_Reset(ctx);
fmt.formatType = SL_DATAFORMAT_PCM; fmt.formatType = SL_DATAFORMAT_PCM;
fmt.numChannels = format->channels; fmt.numChannels = format->channels;
@ -576,7 +576,7 @@ cc_result Audio_Play(struct AudioContext* ctx) {
return (*ctx->bqPlayerPlayer)->SetPlayState(ctx->bqPlayerPlayer, SL_PLAYSTATE_PLAYING); return (*ctx->bqPlayerPlayer)->SetPlayState(ctx->bqPlayerPlayer, SL_PLAYSTATE_PLAYING);
} }
static void Backend_Stop(struct AudioContext* ctx) { static void AudioBackend_Stop(struct AudioContext* ctx) {
if (!ctx->bqPlayerPlayer) return; if (!ctx->bqPlayerPlayer) return;
(*ctx->bqPlayerQueue)->Clear(ctx->bqPlayerQueue); (*ctx->bqPlayerQueue)->Clear(ctx->bqPlayerQueue);
@ -605,18 +605,18 @@ cc_result Audio_SetFormat(struct AudioContext* ctx, struct AudioFormat* format)
if (AudioFormat_Eq(cur, format)) return 0; if (AudioFormat_Eq(cur, format)) return 0;
ctx->format = *format; ctx->format = *format;
return Backend_SetFormat(ctx, format); return AudioBackend_SetFormat(ctx, format);
} }
void Audio_Close(struct AudioContext* ctx) { void Audio_Close(struct AudioContext* ctx) {
int inUse; int inUse;
Backend_Stop(ctx); AudioBackend_Stop(ctx);
Audio_Poll(ctx, &inUse); /* unqueue buffers */ Audio_Poll(ctx, &inUse); /* unqueue buffers */
ctx->count = 0; ctx->count = 0;
ctx->format.channels = 0; ctx->format.channels = 0;
ctx->format.sampleRate = 0; ctx->format.sampleRate = 0;
Backend_Reset(ctx); AudioBackend_Reset(ctx);
} }
@ -827,9 +827,13 @@ static void Sounds_Play(cc_uint8 type, struct Soundboard* board) {
if (type == SOUND_NONE || !Audio_SoundsVolume) return; if (type == SOUND_NONE || !Audio_SoundsVolume) return;
snd = Soundboard_PickRandom(board, type); snd = Soundboard_PickRandom(board, type);
if (!snd) return; if (!snd) return;
if (!Backend_Init()) { Backend_Free(); Audio_SoundsVolume = 0; return; }
if (!AudioBackend_Init()) {
AudioBackend_Free();
Audio_SoundsVolume = 0;
return;
}
fmt = snd->format; fmt = snd->format;
volume = Audio_SoundsVolume; volume = Audio_SoundsVolume;
@ -1088,7 +1092,11 @@ static void Music_RunLoop(void) {
static void Music_Init(void) { static void Music_Init(void) {
if (music_thread) return; if (music_thread) return;
if (!Backend_Init()) { Backend_Free(); Audio_MusicVolume = 0; return; } if (!AudioBackend_Init()) {
AudioBackend_Free();
Audio_MusicVolume = 0;
return;
}
music_joining = false; music_joining = false;
music_pendingStop = false; music_pendingStop = false;
@ -1152,7 +1160,7 @@ static void OnFree(void) {
Music_Free(); Music_Free();
Sounds_Free(); Sounds_Free();
Waitable_Free(music_waitable); Waitable_Free(music_waitable);
Backend_Free(); AudioBackend_Free();
} }
#endif #endif

View File

@ -103,7 +103,7 @@ EMSCRIPTEN_KEEPALIVE void Http_OnFinishedAsync(int reqID, void* data, int len, i
} }
/* Adds a req to the list of pending requests, waking up worker thread if needed */ /* Adds a req to the list of pending requests, waking up worker thread if needed */
static void Http_BackendAdd(struct HttpRequest* req, cc_bool priority) { static void HttpBackend_Add(struct HttpRequest* req, cc_bool priority) {
RequestList_Append(&queuedReqs, req, priority); RequestList_Append(&queuedReqs, req, priority);
Http_StartNextDownload(); Http_StartNextDownload();
} }

View File

@ -120,7 +120,7 @@ static void Http_SetRequestHeaders(struct HttpRequest* req) {
static void Http_SignalWorker(void) { Waitable_Signal(workerWaitable); } static void Http_SignalWorker(void) { Waitable_Signal(workerWaitable); }
/* Adds a req to the list of pending requests, waking up worker thread if needed */ /* Adds a req to the list of pending requests, waking up worker thread if needed */
static void Http_BackendAdd(struct HttpRequest* req, cc_bool priority) { static void HttpBackend_Add(struct HttpRequest* req, cc_bool priority) {
Mutex_Lock(pendingMutex); Mutex_Lock(pendingMutex);
{ {
RequestList_Append(&pendingReqs, req, priority); RequestList_Append(&pendingReqs, req, priority);
@ -283,7 +283,7 @@ cc_bool Http_DescribeError(cc_result res, cc_string* dst) {
return true; return true;
} }
static void Http_BackendInit(void) { static void HttpBackend_Init(void) {
static const cc_string msg = String_FromConst("Failed to init libcurl. All HTTP requests will therefore fail."); static const cc_string msg = String_FromConst("Failed to init libcurl. All HTTP requests will therefore fail.");
CURLcode res; CURLcode res;
@ -343,7 +343,7 @@ static void Http_SetCurlOpts(struct HttpRequest* req) {
_curl_easy_setopt(curl, CURLOPT_WRITEDATA, req); _curl_easy_setopt(curl, CURLOPT_WRITEDATA, req);
} }
static cc_result Http_BackendDo(struct HttpRequest* req, cc_string* url) { static cc_result HttpBackend_Do(struct HttpRequest* req, cc_string* url) {
char urlStr[NATIVE_STR_LEN]; char urlStr[NATIVE_STR_LEN];
void* post_data = req->data; void* post_data = req->data;
CURLcode res; CURLcode res;
@ -529,7 +529,7 @@ cc_bool Http_DescribeError(cc_result res, cc_string* dst) {
return Platform_DescribeErrorExt(res, dst, "wininet.dll"); return Platform_DescribeErrorExt(res, dst, "wininet.dll");
} }
static void Http_BackendInit(void) { static void HttpBackend_Init(void) {
/* TODO: Should we use INTERNET_OPEN_TYPE_PRECONFIG instead? */ /* TODO: Should we use INTERNET_OPEN_TYPE_PRECONFIG instead? */
hInternet = InternetOpenA(GAME_APP_NAME, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0); hInternet = InternetOpenA(GAME_APP_NAME, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
if (!hInternet) Logger_Abort2(GetLastError(), "Failed to init WinINet"); if (!hInternet) Logger_Abort2(GetLastError(), "Failed to init WinINet");
@ -609,7 +609,7 @@ static cc_result Http_DownloadData(struct HttpRequest* req, HINTERNET handle) {
return 0; return 0;
} }
static cc_result Http_BackendDo(struct HttpRequest* req, cc_string* url) { static cc_result HttpBackend_Do(struct HttpRequest* req, cc_string* url) {
HINTERNET handle; HINTERNET handle;
cc_result res = Http_StartRequest(req, url, &handle); cc_result res = Http_StartRequest(req, url, &handle);
HttpRequest_Free(req); HttpRequest_Free(req);
@ -684,7 +684,7 @@ static const JNINativeMethod methods[2] = {
{ "httpParseHeader", "(Ljava/lang/String;)V", java_HttpParseHeader }, { "httpParseHeader", "(Ljava/lang/String;)V", java_HttpParseHeader },
{ "httpAppendData", "([BI)V", java_HttpAppendData } { "httpAppendData", "([BI)V", java_HttpAppendData }
}; };
static void Http_BackendInit(void) { static void HttpBackend_Init(void) {
JNIEnv* env; JNIEnv* env;
JavaGetCurrentEnv(env); JavaGetCurrentEnv(env);
JavaRegisterNatives(env, methods); JavaRegisterNatives(env, methods);
@ -714,7 +714,7 @@ static cc_result Http_SetData(JNIEnv* env, struct HttpRequest* req) {
return res; return res;
} }
static cc_result Http_BackendDo(struct HttpRequest* req, cc_string* url) { static cc_result HttpBackend_Do(struct HttpRequest* req, cc_string* url) {
static const cc_string userAgent = String_FromConst(GAME_APP_NAME); static const cc_string userAgent = String_FromConst(GAME_APP_NAME);
JNIEnv* env; JNIEnv* env;
jint res; jint res;
@ -775,7 +775,7 @@ static void WorkerLoop(void) {
Http_BeginRequest(&request, &url); Http_BeginRequest(&request, &url);
beg = Stopwatch_Measure(); beg = Stopwatch_Measure();
request.result = Http_BackendDo(&request, &url); request.result = HttpBackend_Do(&request, &url);
end = Stopwatch_Measure(); end = Stopwatch_Measure();
elapsed = Stopwatch_ElapsedMS(beg, end); elapsed = Stopwatch_ElapsedMS(beg, end);
@ -796,7 +796,7 @@ static void Http_Init(void) {
ScheduledTask_Add(30, Http_CleanCacheTask); ScheduledTask_Add(30, Http_CleanCacheTask);
if (workerThread) return; if (workerThread) return;
Http_BackendInit(); HttpBackend_Init();
workerWaitable = Waitable_Create(); workerWaitable = Waitable_Create();
RequestList_Init(&pendingReqs); RequestList_Init(&pendingReqs);
RequestList_Init(&processedReqs); RequestList_Init(&processedReqs);

View File

@ -103,7 +103,7 @@ static void RequestList_Free(struct RequestList* list) {
static void* processedMutex; static void* processedMutex;
static struct RequestList processedReqs; static struct RequestList processedReqs;
static int nextReqID; static int nextReqID;
static void Http_BackendAdd(struct HttpRequest* req, cc_bool priority); static void HttpBackend_Add(struct HttpRequest* req, cc_bool priority);
/* Adds a req to the list of pending requests, waking up worker thread if needed. */ /* Adds a req to the list of pending requests, waking up worker thread if needed. */
static int Http_Add(const cc_string* url, cc_bool priority, cc_uint8 type, const cc_string* lastModified, static int Http_Add(const cc_string* url, cc_bool priority, cc_uint8 type, const cc_string* lastModified,
@ -144,7 +144,7 @@ static int Http_Add(const cc_string* url, cc_bool priority, cc_uint8 type, const
req.cookies = cookies; req.cookies = cookies;
req.progress = HTTP_PROGRESS_NOT_WORKING_ON; req.progress = HTTP_PROGRESS_NOT_WORKING_ON;
Http_BackendAdd(&req, priority); HttpBackend_Add(&req, priority);
return req.id; return req.id;
} }