mirror of
https://github.com/gnif/LookingGlass.git
synced 2024-11-25 14:57:20 +00:00
[common] Update framebuffer metadata + references
This commit is contained in:
parent
78d2b76313
commit
53c843d9dd
@ -742,7 +742,7 @@ int main_frameThread(void * unused)
|
|||||||
if (dma->fd == -1)
|
if (dma->fd == -1)
|
||||||
{
|
{
|
||||||
const uintptr_t pos = (uintptr_t)msg.mem - (uintptr_t)g_state.shm.mem;
|
const uintptr_t pos = (uintptr_t)msg.mem - (uintptr_t)g_state.shm.mem;
|
||||||
const uintptr_t offset = (uintptr_t)frame->offset + FrameBufferStructSize;
|
const uintptr_t offset = (uintptr_t)frame->offset + sizeof(FrameBuffer);
|
||||||
|
|
||||||
dma->dataSize = dataSize;
|
dma->dataSize = dataSize;
|
||||||
dma->fd = ivshmemGetDMABuf(&g_state.shm, pos + offset, dataSize);
|
dma->fd = ivshmemGetDMABuf(&g_state.shm, pos + offset, dataSize);
|
||||||
|
@ -24,16 +24,21 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include <stdatomic.h>
|
||||||
|
|
||||||
typedef struct stFrameBuffer FrameBuffer;
|
#define FB_CHUNK_SIZE 1048576 // 1MB
|
||||||
|
#define FB_SPIN_LIMIT 10000 // 10ms
|
||||||
|
#define FB_WP_TYPE atomic_uint_least32_t
|
||||||
|
#define FB_WP_SIZE sizeof(FB_WP_TYPE)
|
||||||
|
|
||||||
|
typedef struct stFrameBuffer
|
||||||
|
{
|
||||||
|
FB_WP_TYPE wp;
|
||||||
|
uint8_t data[0];
|
||||||
|
} FrameBuffer;
|
||||||
|
|
||||||
typedef bool (*FrameBufferReadFn)(void * opaque, const void * src, size_t size);
|
typedef bool (*FrameBufferReadFn)(void * opaque, const void * src, size_t size);
|
||||||
|
|
||||||
/**
|
|
||||||
* The size of the FrameBuffer struct
|
|
||||||
*/
|
|
||||||
extern const size_t FrameBufferStructSize;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Wait for the framebuffer to fill to the specified size
|
* Wait for the framebuffer to fill to the specified size
|
||||||
*/
|
*/
|
||||||
|
@ -27,22 +27,10 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdatomic.h>
|
|
||||||
#include <emmintrin.h>
|
#include <emmintrin.h>
|
||||||
#include <smmintrin.h>
|
#include <smmintrin.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#define FB_CHUNK_SIZE 1048576 // 1MB
|
|
||||||
#define FB_SPIN_LIMIT 10000 // 10ms
|
|
||||||
|
|
||||||
struct stFrameBuffer
|
|
||||||
{
|
|
||||||
atomic_uint_least32_t wp;
|
|
||||||
uint8_t data[0];
|
|
||||||
};
|
|
||||||
|
|
||||||
const size_t FrameBufferStructSize = sizeof(FrameBuffer);
|
|
||||||
|
|
||||||
bool framebuffer_wait(const FrameBuffer * frame, size_t size)
|
bool framebuffer_wait(const FrameBuffer * frame, size_t size)
|
||||||
{
|
{
|
||||||
while(atomic_load_explicit(&frame->wp, memory_order_acquire) < size)
|
while(atomic_load_explicit(&frame->wp, memory_order_acquire) < size)
|
||||||
|
@ -275,7 +275,7 @@ static bool sendFrame(void)
|
|||||||
fi->frameHeight = frame.frameHeight;
|
fi->frameHeight = frame.frameHeight;
|
||||||
fi->stride = frame.stride;
|
fi->stride = frame.stride;
|
||||||
fi->pitch = frame.pitch;
|
fi->pitch = frame.pitch;
|
||||||
fi->offset = app.pageSize - FrameBufferStructSize;
|
fi->offset = app.pageSize - sizeof(FrameBuffer);
|
||||||
fi->flags =
|
fi->flags =
|
||||||
(os_blockScreensaver() ?
|
(os_blockScreensaver() ?
|
||||||
FRAME_FLAG_BLOCK_SCREENSAVER : 0) |
|
FRAME_FLAG_BLOCK_SCREENSAVER : 0) |
|
||||||
|
2
obs/lg.c
2
obs/lg.c
@ -458,7 +458,7 @@ static int dmabufGetFd(LGPlugin * this, LGMPMessage * msg, KVMFRFrame * frame, s
|
|||||||
if (dma->fd == -1)
|
if (dma->fd == -1)
|
||||||
{
|
{
|
||||||
const uintptr_t pos = (uintptr_t) msg->mem - (uintptr_t) this->shmDev.mem;
|
const uintptr_t pos = (uintptr_t) msg->mem - (uintptr_t) this->shmDev.mem;
|
||||||
const uintptr_t offset = (uintptr_t) frame->offset + FrameBufferStructSize;
|
const uintptr_t offset = (uintptr_t) frame->offset + sizeof(FrameBuffer);
|
||||||
|
|
||||||
dma->dataSize = dataSize;
|
dma->dataSize = dataSize;
|
||||||
dma->fd = ivshmemGetDMABuf(&this->shmDev, pos + offset, dataSize);
|
dma->fd = ivshmemGetDMABuf(&this->shmDev, pos + offset, dataSize);
|
||||||
|
Loading…
Reference in New Issue
Block a user