[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
{
// frame formats
CAPTURE_FMT_BGRA ,
CAPTURE_FMT_RGBA ,
CAPTURE_FMT_RGBA10_SDR,
CAPTURE_FMT_RGBA10_HDR,
CAPTURE_FMT_RGBA16F ,
CAPTURE_FMT_BGRA ,
CAPTURE_FMT_RGBA ,
CAPTURE_FMT_RGBA10 ,
CAPTURE_FMT_RGBA16F,
// pointer formats
CAPTURE_FMT_COLOR ,
@ -79,6 +78,8 @@ typedef struct CaptureFrame
unsigned int pitch;
unsigned int stride;
CaptureFormat format;
bool hdr;
bool hdrPQ;
CaptureRotation rotation;
uint32_t damageRectsCount;
FrameDamageRect damageRects[KVMFR_MAX_DAMAGE_RECTS];

View File

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

View File

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

View File

@ -244,22 +244,19 @@ static bool sendFrame(void)
app.frameIndex = 0;
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)
{
case CAPTURE_FMT_BGRA : fi->type = FRAME_TYPE_BGRA ; 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;
break;
case CAPTURE_FMT_RGBA10_HDR:
fi->type = FRAME_TYPE_RGBA10;
flags |= FRAME_FLAG_HDR;
break;
case CAPTURE_FMT_RGBA16F:
fi->type = FRAME_TYPE_RGBA16F;
flags |= FRAME_FLAG_HDR;