mirror of https://github.com/mgba-emu/mgba.git
Core: Allow video playback to be non-blocking
This commit is contained in:
parent
3f92b1e67f
commit
b8593bdb7b
|
@ -168,9 +168,9 @@ void mVideoLoggerRendererFlush(struct mVideoLogger* logger) {
|
|||
logger->writeData(logger, &dirty, sizeof(dirty));
|
||||
}
|
||||
|
||||
bool mVideoLoggerRendererRun(struct mVideoLogger* logger) {
|
||||
bool mVideoLoggerRendererRun(struct mVideoLogger* logger, bool block) {
|
||||
struct mVideoLoggerDirtyInfo item = {0};
|
||||
while (logger->readData(logger, &item, sizeof(item), false)) {
|
||||
while (logger->readData(logger, &item, sizeof(item), block)) {
|
||||
switch (item.type) {
|
||||
case DIRTY_REGISTER:
|
||||
case DIRTY_PALETTE:
|
||||
|
@ -186,7 +186,7 @@ bool mVideoLoggerRendererRun(struct mVideoLogger* logger) {
|
|||
return false;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
return !block;
|
||||
}
|
||||
|
||||
static bool _writeData(struct mVideoLogger* logger, const void* data, size_t length) {
|
||||
|
|
|
@ -107,7 +107,7 @@ void mVideoLoggerRendererWriteOAM(struct mVideoLogger* logger, uint32_t address,
|
|||
void mVideoLoggerRendererDrawScanline(struct mVideoLogger* logger, int y);
|
||||
void mVideoLoggerRendererFlush(struct mVideoLogger* logger);
|
||||
|
||||
bool mVideoLoggerRendererRun(struct mVideoLogger* logger);
|
||||
bool mVideoLoggerRendererRun(struct mVideoLogger* logger, bool block);
|
||||
|
||||
struct mCore;
|
||||
struct mVideoLogContext* mVideoLoggerCreate(struct mCore* core);
|
||||
|
|
|
@ -769,7 +769,7 @@ static void _GBAVLPStartFrameCallback(void *context) {
|
|||
struct GBACore* gbacore = (struct GBACore*) core;
|
||||
struct GBA* gba = core->board;
|
||||
|
||||
if (!mVideoLoggerRendererRun(&gbacore->logProxy.logger)) {
|
||||
if (!mVideoLoggerRendererRun(&gbacore->logProxy.logger, true)) {
|
||||
GBAVideoProxyRendererUnshim(&gba->video, &gbacore->logProxy);
|
||||
gbacore->logProxy.logger.vf->seek(gbacore->logProxy.logger.vf, 0, SEEK_SET);
|
||||
core->loadState(core, gbacore->logContext->initialState);
|
||||
|
|
|
@ -174,7 +174,7 @@ static THREAD_ENTRY _proxyThread(void* renderer) {
|
|||
}
|
||||
proxyRenderer->threadState = PROXY_THREAD_BUSY;
|
||||
MutexUnlock(&proxyRenderer->mutex);
|
||||
if (!mVideoLoggerRendererRun(&proxyRenderer->d.logger)) {
|
||||
if (!mVideoLoggerRendererRun(&proxyRenderer->d.logger, false)) {
|
||||
// FIFO was corrupted
|
||||
proxyRenderer->threadState = PROXY_THREAD_STOPPED;
|
||||
mLOG(GBA_VIDEO, ERROR, "Proxy thread queue got corrupted!");
|
||||
|
|
Loading…
Reference in New Issue