[host] NvFBC is now functional

This commit is contained in:
Geoffrey McRae
2017-11-01 01:46:47 +11:00
parent 85f39b7070
commit ffbd89fb77
8 changed files with 143 additions and 24 deletions

View File

@@ -65,11 +65,16 @@ bool Service::Initialize()
}
KVMGFXHeader * header = static_cast<KVMGFXHeader*>(m_memory);
// we save this as it might actually be valid
UINT16 hostID = header->hostID;
ZeroMemory(header, sizeof(KVMGFXHeader));
memcpy(header->magic, KVMGFX_HEADER_MAGIC, sizeof(KVMGFX_HEADER_MAGIC));
header->version = 2;
header->guestID = m_ivshmem->GetPeerID();
header->hostID = hostID;
m_initialized = true;
return true;
@@ -109,17 +114,26 @@ bool Service::Process(HANDLE stopEvent)
// setup the header
header->frameType = m_capture->GetFrameType();
header->compType = m_capture->GetFrameCompression();
header->dataLen = 0;
FrameInfo frame;
frame.buffer = data;
frame.bufferSize = m_ivshmem->GetSize() - sizeof(KVMGFXHeader);
// capture a frame of data
if (!m_capture->GrabFrame(
data,
m_ivshmem->GetSize() - sizeof(KVMGFXHeader),
&header->dataLen))
if (!m_capture->GrabFrame(frame))
{
header->dataLen = 0;
DEBUG_ERROR("Capture failed");
return false;
}
// copy the frame details into the header
header->width = frame.width;
header->height = frame.height;
header->stride = frame.stride;
header->dataLen = frame.outSize;
// tell the host where the cursor is
POINT cursorPos;
GetCursorPos(&cursorPos);