[host] all: tell the client if HDR PQ is in use or not

This commit is contained in:
Geoffrey McRae 2023-10-27 01:11:57 +11:00
parent 2f36aaff5c
commit b41840b010
4 changed files with 17 additions and 15 deletions

View File

@ -44,11 +44,10 @@ CaptureResult;
typedef enum CaptureFormat typedef enum CaptureFormat
{ {
// frame formats // frame formats
CAPTURE_FMT_BGRA , CAPTURE_FMT_BGRA ,
CAPTURE_FMT_RGBA , CAPTURE_FMT_RGBA ,
CAPTURE_FMT_RGBA10_SDR, CAPTURE_FMT_RGBA10 ,
CAPTURE_FMT_RGBA10_HDR, CAPTURE_FMT_RGBA16F,
CAPTURE_FMT_RGBA16F ,
// pointer formats // pointer formats
CAPTURE_FMT_COLOR , CAPTURE_FMT_COLOR ,
@ -79,6 +78,8 @@ typedef struct CaptureFrame
unsigned int pitch; unsigned int pitch;
unsigned int stride; unsigned int stride;
CaptureFormat format; CaptureFormat format;
bool hdr;
bool hdrPQ;
CaptureRotation rotation; CaptureRotation rotation;
uint32_t damageRectsCount; uint32_t damageRectsCount;
FrameDamageRect damageRects[KVMFR_MAX_DAMAGE_RECTS]; FrameDamageRect damageRects[KVMFR_MAX_DAMAGE_RECTS];

View File

@ -802,7 +802,7 @@ next_output:
// we convert to HDR10 to save bandwidth // we convert to HDR10 to save bandwidth
case DXGI_FORMAT_R16G16B16A16_FLOAT: case DXGI_FORMAT_R16G16B16A16_FLOAT:
this->dxgiFormat = DXGI_FORMAT_R10G10B10A2_UNORM; this->dxgiFormat = DXGI_FORMAT_R10G10B10A2_UNORM;
this->format = CAPTURE_FMT_RGBA10_HDR; this->format = CAPTURE_FMT_RGBA10;
break; break;
default: default:
@ -1607,6 +1607,8 @@ static CaptureResult dxgi_waitFrame(CaptureFrame * frame, const size_t maxFrameS
frame->pitch = this->pitch; frame->pitch = this->pitch;
frame->stride = this->stride; frame->stride = this->stride;
frame->format = this->format; frame->format = this->format;
frame->hdr = this->hdr;
frame->hdrPQ = false;
frame->rotation = this->rotation; frame->rotation = this->rotation;
frame->damageRectsCount = tex->damageRectsCount; frame->damageRectsCount = tex->damageRectsCount;

View File

@ -757,8 +757,10 @@ static CaptureResult nvfbc_waitFrame(CaptureFrame * frame,
updateDamageRects(frame); updateDamageRects(frame);
frame->format = this->grabInfo.bIsHDR ? frame->format = CAPTURE_FMT_RGBA10;
CAPTURE_FMT_RGBA10_HDR : CAPTURE_FMT_RGBA10_SDR; frame->hdr = this->grabInfo.bIsHDR;
frame->hdrPQ = true;
return CAPTURE_RESULT_OK; return CAPTURE_RESULT_OK;
} }

View File

@ -244,22 +244,19 @@ static bool sendFrame(void)
app.frameIndex = 0; app.frameIndex = 0;
KVMFRFrame * fi = lgmpHostMemPtr(app.frameMemory[app.frameIndex]); KVMFRFrame * fi = lgmpHostMemPtr(app.frameMemory[app.frameIndex]);
KVMFRFrameFlags flags = 0; KVMFRFrameFlags flags =
(frame.hdr ? FRAME_FLAG_HDR : 0) |
(frame.hdrPQ ? FRAME_FLAG_HDR_PQ : 0);
switch(frame.format) switch(frame.format)
{ {
case CAPTURE_FMT_BGRA : fi->type = FRAME_TYPE_BGRA ; break; case CAPTURE_FMT_BGRA : fi->type = FRAME_TYPE_BGRA ; break;
case CAPTURE_FMT_RGBA : fi->type = FRAME_TYPE_RGBA ; break; case CAPTURE_FMT_RGBA : fi->type = FRAME_TYPE_RGBA ; break;
case CAPTURE_FMT_RGBA10_SDR: case CAPTURE_FMT_RGBA10:
fi->type = FRAME_TYPE_RGBA10; fi->type = FRAME_TYPE_RGBA10;
break; break;
case CAPTURE_FMT_RGBA10_HDR:
fi->type = FRAME_TYPE_RGBA10;
flags |= FRAME_FLAG_HDR;
break;
case CAPTURE_FMT_RGBA16F: case CAPTURE_FMT_RGBA16F:
fi->type = FRAME_TYPE_RGBA16F; fi->type = FRAME_TYPE_RGBA16F;
flags |= FRAME_FLAG_HDR; flags |= FRAME_FLAG_HDR;