aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2023-04-15 19:41:49 +0200
committerdec05eba <dec05eba@protonmail.com>2023-04-15 19:41:49 +0200
commitc9c615d4c711618e66e95220643d3f97f9fc7b87 (patch)
tree8968fb1ff61a1daebfa77c7a1279cdfe4a1816b2
parentf6107a0c5d41aa9fbaa41d64e2f6a5681f9237cc (diff)
Apply rotation fix for intel as well (for kms capture)
-rw-r--r--TODO6
-rw-r--r--src/capture/kms_vaapi.c5
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;