mirror of
				https://github.com/gnif/LookingGlass.git
				synced 2025-11-04 06:31:54 +00:00 
			
		
		
		
	[client] initial support for compressed frames
This commit is contained in:
		@@ -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;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user