Hide cursor when it's on another display 2
This commit is contained in:
parent
4e8c47a154
commit
b898bddb63
@ -234,11 +234,21 @@ static bool gsr_capture_kms_cuda_should_stop(gsr_capture *cap, bool *err) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Prefer non combined planes */
|
||||||
static gsr_kms_response_fd* find_drm_by_connector_id(gsr_kms_response *kms_response, uint32_t connector_id) {
|
static gsr_kms_response_fd* find_drm_by_connector_id(gsr_kms_response *kms_response, uint32_t connector_id) {
|
||||||
|
int index_combined = -1;
|
||||||
for(int i = 0; i < kms_response->num_fds; ++i) {
|
for(int i = 0; i < kms_response->num_fds; ++i) {
|
||||||
if(kms_response->fds[i].connector_id == connector_id && !kms_response->fds[i].is_cursor)
|
if(kms_response->fds[i].connector_id == connector_id && !kms_response->fds[i].is_cursor) {
|
||||||
|
if(kms_response->fds[i].is_combined_plane)
|
||||||
|
index_combined = i;
|
||||||
|
else
|
||||||
return &kms_response->fds[i];
|
return &kms_response->fds[i];
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(index_combined != -1)
|
||||||
|
return &kms_response->fds[index_combined];
|
||||||
|
else
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -338,11 +338,21 @@ static bool gsr_capture_kms_vaapi_should_stop(gsr_capture *cap, bool *err) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Prefer non combined planes */
|
||||||
static gsr_kms_response_fd* find_drm_by_connector_id(gsr_kms_response *kms_response, uint32_t connector_id) {
|
static gsr_kms_response_fd* find_drm_by_connector_id(gsr_kms_response *kms_response, uint32_t connector_id) {
|
||||||
|
int index_combined = -1;
|
||||||
for(int i = 0; i < kms_response->num_fds; ++i) {
|
for(int i = 0; i < kms_response->num_fds; ++i) {
|
||||||
if(kms_response->fds[i].connector_id == connector_id && !kms_response->fds[i].is_cursor)
|
if(kms_response->fds[i].connector_id == connector_id && !kms_response->fds[i].is_cursor) {
|
||||||
|
if(kms_response->fds[i].is_combined_plane)
|
||||||
|
index_combined = i;
|
||||||
|
else
|
||||||
return &kms_response->fds[i];
|
return &kms_response->fds[i];
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(index_combined != -1)
|
||||||
|
return &kms_response->fds[index_combined];
|
||||||
|
else
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -453,15 +463,16 @@ static int gsr_capture_kms_vaapi_capture(gsr_capture *cap, AVFrame *frame) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
cursor_drm_fd = find_cursor_drm(&cap_kms->kms_response);
|
cursor_drm_fd = find_cursor_drm(&cap_kms->kms_response);
|
||||||
/* Hide cursor when it's on another display */
|
|
||||||
if(cursor_drm_fd && drm_fd && cursor_drm_fd->connector_id != drm_fd->connector_id)
|
|
||||||
cursor_drm_fd = NULL;
|
|
||||||
capture_is_combined_plane = (drm_fd && drm_fd->is_combined_plane) || count_non_cursor_planes(&cap_kms->kms_response) == 1;
|
capture_is_combined_plane = (drm_fd && drm_fd->is_combined_plane) || count_non_cursor_planes(&cap_kms->kms_response) == 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!drm_fd)
|
if(!drm_fd)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
/* Hide cursor when it's on another display */
|
||||||
|
if(!capture_is_combined_plane && cursor_drm_fd && cursor_drm_fd->connector_id != drm_fd->connector_id)
|
||||||
|
cursor_drm_fd = NULL;
|
||||||
|
|
||||||
// TODO: This causes a crash sometimes on steam deck, why? is it a driver bug? a vaapi pure version doesn't cause a crash.
|
// TODO: This causes a crash sometimes on steam deck, why? is it a driver bug? a vaapi pure version doesn't cause a crash.
|
||||||
// Even ffmpeg kmsgrab causes this crash. The error is:
|
// Even ffmpeg kmsgrab causes this crash. The error is:
|
||||||
// amdgpu: Failed to allocate a buffer:
|
// amdgpu: Failed to allocate a buffer:
|
||||||
|
Loading…
Reference in New Issue
Block a user