From c9c615d4c711618e66e95220643d3f97f9fc7b87 Mon Sep 17 00:00:00 2001 From: dec05eba Date: Sat, 15 Apr 2023 19:41:49 +0200 Subject: [PATCH] Apply rotation fix for intel as well (for kms capture) --- TODO | 6 +++++- src/capture/kms_vaapi.c | 5 ++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/TODO b/TODO index 1552d20..bfcdba4 100644 --- a/TODO +++ b/TODO @@ -54,4 +54,8 @@ Monitor capture on steam deck is slightly below the game fps, but only when capt Make sure rgb to yuv color conversion is 100% correct. Fallback to vaapi copy in kms if opengl version fails. This can happen on steam deck for some reason (driver bug?). -Test if vaapi copy version uses less memory than opengl version. \ No newline at end of file +Test if vaapi copy version uses less memory than opengl version. + +Intel is a bit weird with monitor capture and multiple monitors. If one of the monitors is rotated then all the kms will be rotated as well. + Is that only the case when the primary monitor is rotated? Also the primary monitor becomes position 0, 0 so crtc (x11 randr) position doesn't match the drm pos. Maybe get monitor position and size from drm instead. + How about if multiple monitors are rotated? \ No newline at end of file diff --git a/src/capture/kms_vaapi.c b/src/capture/kms_vaapi.c index 8d650ed..ce97400 100644 --- a/src/capture/kms_vaapi.c +++ b/src/capture/kms_vaapi.c @@ -145,11 +145,10 @@ static int gsr_capture_kms_vaapi_start(gsr_capture *cap, AVCodecContext *video_c // TODO: Find a better way to do this. Is this info available somewhere in drm? it should be! - // TODO: test on intel - // Note: workaround AMD issue. If there is one monitor enabled and it's rotated then + // Note: workaround AMD/Intel issue. If there is one monitor enabled and it's rotated then // the drm buf will also be rotated. This only happens when you only have one monitor enabled. cap_kms->x11_rot = monitor_callback_userdata.rotation; - if(monitor_callback_userdata.num_monitors == 1 && cap_kms->x11_rot != X11_ROT_0 && cap_kms->params.gpu_inf.vendor == GSR_GPU_VENDOR_AMD) { + if(monitor_callback_userdata.num_monitors == 1 && cap_kms->x11_rot != X11_ROT_0) { cap_kms->requires_rotation = true; } else { cap_kms->requires_rotation = false;