Implement kms vaapi capture

This commit is contained in:
dec05eba
2023-04-07 05:31:46 +02:00
parent 10d7bf93e8
commit 75ed160122
28 changed files with 1306 additions and 197 deletions

21
include/kms/kms_client.h Normal file
View File

@@ -0,0 +1,21 @@
#ifndef GSR_KMS_CLIENT_H
#define GSR_KMS_CLIENT_H
#include "kms_shared.h"
#include <sys/types.h>
typedef struct {
pid_t kms_server_pid;
int socket_fd;
int client_fd;
char socket_path[27];
char *card_path;
} gsr_kms_client;
/* |card_path| should be a path to card, for example /dev/dri/card0 */
int gsr_kms_client_init(gsr_kms_client *self, const char *card_path, const char *program_dir);
void gsr_kms_client_deinit(gsr_kms_client *self);
int gsr_kms_client_get_kms(gsr_kms_client *self, gsr_kms_response *response);
#endif /* #define GSR_KMS_CLIENT_H */

45
include/kms/kms_shared.h Normal file
View File

@@ -0,0 +1,45 @@
#ifndef GSR_KMS_SHARED_H
#define GSR_KMS_SHARED_H
#include <stdint.h>
typedef enum {
KMS_REQUEST_TYPE_GET_KMS
} gsr_kms_request_type;
typedef enum {
KMS_RESULT_OK,
KMS_RESULT_INVALID_REQUEST,
KMS_RESULT_FAILED_TO_OPEN_CARD,
KMS_RESULT_INSUFFICIENT_PERMISSIONS,
KMS_RESULT_FAILED_TO_GET_KMS,
KMS_RESULT_NO_KMS_AVAILABLE,
KMS_RESULT_FAILED_TO_SEND
} gsr_kms_result;
typedef struct {
int type; /* gsr_kms_request_type */
union {
char card_path[255];
} data;
} gsr_kms_request;
typedef struct {
int fd;
uint32_t width;
uint32_t height;
uint32_t pitch;
uint32_t offset;
uint32_t pixel_format;
uint64_t modifier;
} gsr_kms_response_fd;
typedef struct {
int result; /* gsr_kms_result */
union {
char err_msg[128];
gsr_kms_response_fd fd;
} data;
} gsr_kms_response;
#endif /* #define GSR_KMS_SHARED_H */