mirror of
https://github.com/gnif/LookingGlass.git
synced 2024-11-10 08:38:20 +00:00
[c-host] app: added pointer interface and support
This commit is contained in:
parent
88c2e55acf
commit
273ef55857
65
c-host/app.c
65
c-host/app.c
@ -59,19 +59,62 @@ static int pointerThread(void * opaque)
|
|||||||
{
|
{
|
||||||
DEBUG_INFO("Pointer thread started");
|
DEBUG_INFO("Pointer thread started");
|
||||||
|
|
||||||
#if 0
|
volatile KVMFRCursor * ci = &(app.shmHeader->cursor);
|
||||||
|
uint8_t flags;
|
||||||
|
|
||||||
while(app.running)
|
while(app.running)
|
||||||
{
|
{
|
||||||
CapturePointer pointer;
|
CaptureResult result;
|
||||||
pointer->data = app.pointerData;
|
CapturePointer pointer = { 0 };
|
||||||
if (!app.iface->getPointer(&pointer))
|
|
||||||
|
result = app.iface->getPointer(&pointer);
|
||||||
|
if (result == CAPTURE_RESULT_REINIT)
|
||||||
{
|
{
|
||||||
DEBUG_ERROR("Failed to get the pointer");
|
|
||||||
app.reinit = true;
|
app.reinit = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (result == CAPTURE_RESULT_ERROR)
|
||||||
|
{
|
||||||
|
DEBUG_ERROR("Failed to get the pointer");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// wait for the client to finish with the previous update
|
||||||
|
while((ci->flags & ~KVMFR_CURSOR_FLAG_UPDATE) != 0 && app.running)
|
||||||
|
usleep(1000);
|
||||||
|
|
||||||
|
flags = KVMFR_CURSOR_FLAG_UPDATE;
|
||||||
|
ci->x = pointer.x;
|
||||||
|
ci->y = pointer.y;
|
||||||
|
flags |= KVMFR_CURSOR_FLAG_POS;
|
||||||
|
if (pointer.visible)
|
||||||
|
flags |= KVMFR_CURSOR_FLAG_VISIBLE;
|
||||||
|
|
||||||
|
// if we have shape data
|
||||||
|
if (pointer.shapeUpdate)
|
||||||
|
{
|
||||||
|
switch(pointer.format)
|
||||||
|
{
|
||||||
|
case CAPTURE_FMT_COLOR : ci->type = CURSOR_TYPE_COLOR ; break;
|
||||||
|
case CAPTURE_FMT_MONO : ci->type = CURSOR_TYPE_MONOCHROME ; break;
|
||||||
|
case CAPTURE_FMT_MASKED: ci->type = CURSOR_TYPE_MASKED_COLOR; break;
|
||||||
|
default:
|
||||||
|
DEBUG_ERROR("Invalid pointer format: %d", pointer.format);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
ci->width = pointer.width;
|
||||||
|
ci->height = pointer.height;
|
||||||
|
ci->pitch = pointer.pitch;
|
||||||
|
ci->dataPos = app.pointerOffset;
|
||||||
|
++ci->version;
|
||||||
|
flags |= KVMFR_CURSOR_FLAG_SHAPE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// update the flags for the client
|
||||||
|
ci->flags = flags;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
DEBUG_INFO("Pointer thread stopped");
|
DEBUG_INFO("Pointer thread stopped");
|
||||||
return 0;
|
return 0;
|
||||||
@ -87,9 +130,11 @@ static int frameThread(void * opaque)
|
|||||||
while(app.running)
|
while(app.running)
|
||||||
{
|
{
|
||||||
CaptureResult result;
|
CaptureResult result;
|
||||||
CaptureFrame frame;
|
CaptureFrame frame =
|
||||||
|
{
|
||||||
|
.data = app.frame[frameIndex]
|
||||||
|
};
|
||||||
|
|
||||||
frame.data = app.frame[frameIndex];
|
|
||||||
result = app.iface->getFrame(&frame);
|
result = app.iface->getFrame(&frame);
|
||||||
if (result == CAPTURE_RESULT_REINIT)
|
if (result == CAPTURE_RESULT_REINIT)
|
||||||
{
|
{
|
||||||
@ -196,7 +241,7 @@ static bool captureRestart()
|
|||||||
if (!stopThreads())
|
if (!stopThreads())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (!app.iface->deinit() || !app.iface->init())
|
if (!app.iface->deinit() || !app.iface->init(app.pointerData, app.pointerDataSize))
|
||||||
{
|
{
|
||||||
DEBUG_ERROR("Failed to reinitialize the capture device");
|
DEBUG_ERROR("Failed to reinitialize the capture device");
|
||||||
return false;
|
return false;
|
||||||
@ -252,7 +297,7 @@ int app_main()
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (iface->init())
|
if (iface->init(app.pointerData, app.pointerDataSize))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
iface->free();
|
iface->free();
|
||||||
|
@ -62,10 +62,12 @@ CaptureFrame;
|
|||||||
typedef struct CapturePointer
|
typedef struct CapturePointer
|
||||||
{
|
{
|
||||||
int x, y;
|
int x, y;
|
||||||
|
bool visible;
|
||||||
|
|
||||||
|
bool shapeUpdate;
|
||||||
CaptureFormat format;
|
CaptureFormat format;
|
||||||
unsigned int width, height;
|
unsigned int width, height;
|
||||||
unsigned int pitch;
|
unsigned int pitch;
|
||||||
void * data;
|
|
||||||
}
|
}
|
||||||
CapturePointer;
|
CapturePointer;
|
||||||
|
|
||||||
@ -73,7 +75,7 @@ typedef struct CaptureInterface
|
|||||||
{
|
{
|
||||||
const char * (*getName )();
|
const char * (*getName )();
|
||||||
bool (*create )();
|
bool (*create )();
|
||||||
bool (*init )();
|
bool (*init )(void * pointerShape, const unsigned int pointerSize);
|
||||||
bool (*deinit )();
|
bool (*deinit )();
|
||||||
void (*free )();
|
void (*free )();
|
||||||
unsigned int (*getMaxFrameSize)();
|
unsigned int (*getMaxFrameSize)();
|
||||||
|
Loading…
Reference in New Issue
Block a user