libdrm: add encoder retrival
parent
8ae82f3a2f
commit
16a8f824fa
|
@ -139,6 +139,8 @@ drmModeResPtr drmModeGetResources(int fd)
|
|||
res.crtc_id_ptr = VOID2U64(drmMalloc(res.count_crtcs*sizeof(uint32_t)));
|
||||
if (res.count_outputs)
|
||||
res.output_id_ptr = VOID2U64(drmMalloc(res.count_outputs*sizeof(uint32_t)));
|
||||
if (res.count_encoders)
|
||||
res.encoder_id_ptr = VOID2U64(drmMalloc(res.count_encoders*sizeof(uint32_t)));
|
||||
|
||||
if (ioctl(fd, DRM_IOCTL_MODE_GETRESOURCES, &res)) {
|
||||
r = NULL;
|
||||
|
@ -164,11 +166,13 @@ drmModeResPtr drmModeGetResources(int fd)
|
|||
r->fbs = drmAllocCpy(U642VOID(res.fb_id_ptr), res.count_fbs, sizeof(uint32_t));
|
||||
r->crtcs = drmAllocCpy(U642VOID(res.crtc_id_ptr), res.count_crtcs, sizeof(uint32_t));
|
||||
r->outputs = drmAllocCpy(U642VOID(res.output_id_ptr), res.count_outputs, sizeof(uint32_t));
|
||||
r->encoders = drmAllocCpy(U642VOID(res.encoder_id_ptr), res.count_encoders, sizeof(uint32_t));
|
||||
|
||||
err_allocs:
|
||||
drmFree(U642VOID(res.fb_id_ptr));
|
||||
drmFree(U642VOID(res.crtc_id_ptr));
|
||||
drmFree(U642VOID(res.output_id_ptr));
|
||||
drmFree(U642VOID(res.encoder_id_ptr));
|
||||
|
||||
return r;
|
||||
}
|
||||
|
@ -333,6 +337,29 @@ int drmModeMoveCursor(int fd, uint32_t crtcId, int x, int y)
|
|||
return ioctl(fd, DRM_IOCTL_MODE_CURSOR, &arg);
|
||||
}
|
||||
|
||||
/*
|
||||
* Encoder get
|
||||
*/
|
||||
drmModeEncoderPtr drmModeGetEncoder(int fd, uint32_t encoder_id)
|
||||
{
|
||||
struct drm_mode_get_encoder enc;
|
||||
drmModeEncoderPtr r = NULL;
|
||||
|
||||
enc.encoder_id = encoder_id;
|
||||
enc.encoder_type = 0;
|
||||
enc.crtcs = 0;
|
||||
enc.clones = 0;
|
||||
|
||||
if (ioctl(fd, DRM_IOCTL_MODE_GETENCODER, &enc))
|
||||
return 0;
|
||||
|
||||
r->encoder_type = enc.encoder_type;
|
||||
r->crtcs = enc.crtcs;
|
||||
r->clones = enc.clones;
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
/*
|
||||
* Output manipulation
|
||||
*/
|
||||
|
|
|
@ -63,6 +63,9 @@ typedef struct _drmModeRes {
|
|||
int count_outputs;
|
||||
uint32_t *outputs;
|
||||
|
||||
int count_encoders;
|
||||
uint32_t *encoders;
|
||||
|
||||
uint32_t min_width, max_width;
|
||||
uint32_t min_height, max_height;
|
||||
} drmModeRes, *drmModeResPtr;
|
||||
|
@ -106,6 +109,13 @@ typedef struct _drmModeCrtc {
|
|||
|
||||
} drmModeCrtc, *drmModeCrtcPtr;
|
||||
|
||||
typedef struct _drmModeEncoder {
|
||||
unsigned int encoder_id;
|
||||
unsigned int encoder_type;
|
||||
uint32_t crtcs;
|
||||
uint32_t clones;
|
||||
} drmModeEncoder, *drmModeEncoderPtr;
|
||||
|
||||
typedef enum {
|
||||
DRM_MODE_CONNECTED = 1,
|
||||
DRM_MODE_DISCONNECTED = 2,
|
||||
|
@ -221,6 +231,11 @@ int drmModeSetCursor(int fd, uint32_t crtcId, uint32_t bo_handle, uint32_t width
|
|||
*/
|
||||
int drmModeMoveCursor(int fd, uint32_t crtcId, int x, int y);
|
||||
|
||||
/**
|
||||
* Encoder functions
|
||||
*/
|
||||
drmModeEncoderPtr drmModeGetEncoder(int fd, uint32_t encoder_id);
|
||||
|
||||
/*
|
||||
* Output manipulation
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue