diff options
author | dec05eba <dec05eba@protonmail.com> | 2023-04-15 19:41:49 +0200 |
---|---|---|
committer | dec05eba <dec05eba@protonmail.com> | 2023-04-15 19:41:49 +0200 |
commit | c9c615d4c711618e66e95220643d3f97f9fc7b87 (patch) | |
tree | 8968fb1ff61a1daebfa77c7a1279cdfe4a1816b2 | |
parent | f6107a0c5d41aa9fbaa41d64e2f6a5681f9237cc (diff) |
Apply rotation fix for intel as well (for kms capture)
-rw-r--r-- | TODO | 6 | ||||
-rw-r--r-- | src/capture/kms_vaapi.c | 5 |
2 files changed, 7 insertions, 4 deletions
@@ -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; |