[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)
{
CaptureFrame frame;
CaptureResult result;
CaptureFrame frame;
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");
app.reinit = true;
break;
}

View file

@ -24,8 +24,8 @@ Place, Suite 330, Boston, MA 02111-1307 USA
typedef enum CaptureResult
{
CAPTURE_RESULT_OK,
CAPTURE_RESULT_REINIT,
CAPTURE_RESULT_OK ,
CAPTURE_RESULT_REINIT ,
CAPTURE_RESULT_TIMEOUT,
CAPTURE_RESULT_ERROR
}
@ -78,9 +78,8 @@ typedef struct CaptureInterface
void (*free )();
unsigned int (*getMaxFrameSize)();
CaptureResult (*capture)();
bool (*getFrame )(CaptureFrame * frame );
bool (*getPointer)(CapturePointer * pointer);
CaptureResult (*capture )();
CaptureResult (*getFrame )(CaptureFrame * frame );
CaptureResult (*getPointer)(CapturePointer * pointer);
}
CaptureInterface;

View file

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