Apply rotation fix for intel as well (for kms capture)

This commit is contained in:
dec05eba 2023-04-15 19:41:49 +02:00
parent f6107a0c5d
commit c9c615d4c7
2 changed files with 7 additions and 4 deletions

6
TODO
View File

@ -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. 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?). 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. 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?

View File

@ -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: Find a better way to do this. Is this info available somewhere in drm? it should be!
// TODO: test on intel // Note: workaround AMD/Intel issue. If there is one monitor enabled and it's rotated then
// Note: workaround AMD 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. // 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; 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; cap_kms->requires_rotation = true;
} else { } else {
cap_kms->requires_rotation = false; cap_kms->requires_rotation = false;