mirror of
https://github.com/gnif/LookingGlass.git
synced 2025-05-17 03:51:17 +00:00
[client] initial support for compressed frames
This commit is contained in:
parent
b5f2092e9c
commit
c239306d82
@ -63,13 +63,21 @@ typedef struct LG_RendererParams
|
|||||||
}
|
}
|
||||||
LG_RendererParams;
|
LG_RendererParams;
|
||||||
|
|
||||||
|
typedef enum LG_RendererComp
|
||||||
|
{
|
||||||
|
LG_COMPRESSION_NONE,
|
||||||
|
LG_COMPRESSION_H264
|
||||||
|
}
|
||||||
|
LG_RendererComp;
|
||||||
|
|
||||||
typedef struct LG_RendererFormat
|
typedef struct LG_RendererFormat
|
||||||
{
|
{
|
||||||
unsigned int width; // image width
|
LG_RendererComp comp; // compression format
|
||||||
unsigned int height; // image height
|
unsigned int width; // image width
|
||||||
unsigned int stride; // scanline width
|
unsigned int height; // image height
|
||||||
unsigned int pitch; // scanline bytes
|
unsigned int stride; // scanline width (zero if compresed)
|
||||||
unsigned int bpp; // bits per pixel
|
unsigned int pitch; // scanline bytes (or compressed size)
|
||||||
|
unsigned int bpp; // bits per pixel (zero if compressed)
|
||||||
}
|
}
|
||||||
LG_RendererFormat;
|
LG_RendererFormat;
|
||||||
|
|
||||||
|
@ -309,7 +309,6 @@ int frameThread(void * unused)
|
|||||||
header.detail.frame.type >= FRAME_TYPE_MAX ||
|
header.detail.frame.type >= FRAME_TYPE_MAX ||
|
||||||
header.detail.frame.width == 0 ||
|
header.detail.frame.width == 0 ||
|
||||||
header.detail.frame.height == 0 ||
|
header.detail.frame.height == 0 ||
|
||||||
header.detail.frame.stride == 0 ||
|
|
||||||
header.detail.frame.pitch == 0 ||
|
header.detail.frame.pitch == 0 ||
|
||||||
header.detail.frame.dataPos == 0 ||
|
header.detail.frame.dataPos == 0 ||
|
||||||
header.detail.frame.dataPos > state.shmSize ||
|
header.detail.frame.dataPos > state.shmSize ||
|
||||||
@ -329,11 +328,13 @@ int frameThread(void * unused)
|
|||||||
switch(header.detail.frame.type)
|
switch(header.detail.frame.type)
|
||||||
{
|
{
|
||||||
case FRAME_TYPE_ARGB:
|
case FRAME_TYPE_ARGB:
|
||||||
lgrFormat.bpp = 32;
|
lgrFormat.comp = LG_COMPRESSION_NONE;
|
||||||
|
lgrFormat.bpp = 32;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FRAME_TYPE_RGB:
|
case FRAME_TYPE_H264:
|
||||||
lgrFormat.bpp = 24;
|
lgrFormat.comp = LG_COMPRESSION_H264;
|
||||||
|
lgrFormat.bpp = 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -265,7 +265,13 @@ bool opengl_on_frame_event(void * opaque, const LG_RendererFormat format, const
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this->configured || memcmp(&this->format, &format, sizeof(LG_RendererFormat)) != 0)
|
if (!this->configured ||
|
||||||
|
this->format.comp != format.comp ||
|
||||||
|
this->format.width != format.width ||
|
||||||
|
this->format.height != format.height ||
|
||||||
|
this->format.stride != format.stride ||
|
||||||
|
this->format.bpp != format.bpp
|
||||||
|
)
|
||||||
{
|
{
|
||||||
memcpy(&this->format, &format, sizeof(LG_RendererFormat));
|
memcpy(&this->format, &format, sizeof(LG_RendererFormat));
|
||||||
this->reconfigure = true;
|
this->reconfigure = true;
|
||||||
@ -543,14 +549,20 @@ static bool configure(struct Inst * this, SDL_Window *window)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// assume 24 and 32 bit formats are RGB and RGBA
|
switch(this->format.comp)
|
||||||
switch(this->format.bpp)
|
|
||||||
{
|
{
|
||||||
case 24:
|
case LG_COMPRESSION_NONE:
|
||||||
this->intFormat = GL_RGB8;
|
|
||||||
this->vboFormat = GL_BGR;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case LG_COMPRESSION_H264:
|
||||||
|
DEBUG_INFO("h264 not supported yet");
|
||||||
|
LG_UNLOCK(this->formatLock);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// assume 32 bit formats are BGRA
|
||||||
|
switch(this->format.bpp)
|
||||||
|
{
|
||||||
case 32:
|
case 32:
|
||||||
this->intFormat = GL_RGBA8;
|
this->intFormat = GL_RGBA8;
|
||||||
this->vboFormat = GL_BGRA;
|
this->vboFormat = GL_BGRA;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user