[c-host] change getFrame/Pointer to return a real status

This commit is contained in:
Geoffrey McRae 2019-03-04 17:55:45 +11:00
parent 496fd79714
commit 88c2e55acf
3 changed files with 39 additions and 16 deletions

View File

@ -86,12 +86,20 @@ static int frameThread(void * opaque)
while(app.running) while(app.running)
{ {
CaptureResult result;
CaptureFrame frame; CaptureFrame frame;
frame.data = app.frame[frameIndex]; frame.data = app.frame[frameIndex];
if (!app.iface->getFrame(&frame)) result = app.iface->getFrame(&frame);
if (result == CAPTURE_RESULT_REINIT)
{
app.reinit = true;
break;
}
if (result == CAPTURE_RESULT_ERROR)
{ {
DEBUG_ERROR("Failed to get the frame"); DEBUG_ERROR("Failed to get the frame");
app.reinit = true;
break; break;
} }

View File

@ -79,8 +79,7 @@ typedef struct CaptureInterface
unsigned int (*getMaxFrameSize)(); unsigned int (*getMaxFrameSize)();
CaptureResult (*capture )(); CaptureResult (*capture )();
CaptureResult (*getFrame )(CaptureFrame * frame );
bool (*getFrame )(CaptureFrame * frame ); CaptureResult (*getPointer)(CapturePointer * pointer);
bool (*getPointer)(CapturePointer * pointer);
} }
CaptureInterface; CaptureInterface;

View File

@ -579,22 +579,22 @@ static CaptureResult dxgi_capture(bool * hasFrameUpdate, bool * hasPointerUpdate
return result; return result;
} }
static bool dxgi_getFrame(CaptureFrame * frame) static CaptureResult dxgi_getFrame(CaptureFrame * frame)
{ {
assert(this); assert(this);
assert(this->initialized); assert(this->initialized);
if (this->reinit) if (this->reinit)
return true; return CAPTURE_RESULT_REINIT;
if (!os_waitEvent(this->frameEvent, TIMEOUT_INFINITE)) if (!os_waitEvent(this->frameEvent, TIMEOUT_INFINITE))
{ {
DEBUG_ERROR("Failed to wait on the frame event"); DEBUG_ERROR("Failed to wait on the frame event");
return false; return CAPTURE_RESULT_ERROR;
} }
if (this->reinit) if (this->reinit)
return true; return CAPTURE_RESULT_REINIT;
Texture * tex = &this->texture[this->texRIndex]; Texture * tex = &this->texture[this->texRIndex];
@ -610,12 +610,28 @@ static bool dxgi_getFrame(CaptureFrame * frame)
if (++this->texRIndex == MAX_TEXTURES) if (++this->texRIndex == MAX_TEXTURES)
this->texRIndex = 0; this->texRIndex = 0;
return true; return CAPTURE_RESULT_OK;
} }
static bool dxgi_getPointer(CapturePointer * pointer) static CaptureResult dxgi_getPointer(CapturePointer * pointer)
{ {
return false; assert(this);
assert(this->initialized);
if (this->reinit)
return CAPTURE_RESULT_REINIT;
if (!os_waitEvent(this->pointerEvent, TIMEOUT_INFINITE))
{
DEBUG_ERROR("Failed to wait on the pointer event");
return CAPTURE_RESULT_ERROR;
}
if (this->reinit)
return CAPTURE_RESULT_REINIT;
return CAPTURE_RESULT_OK;
} }
static CaptureResult dxgi_releaseFrame() static CaptureResult dxgi_releaseFrame()