libdrm: add encoder retrival

main
Dave Airlie 2008-05-30 12:10:01 +10:00
parent 8ae82f3a2f
commit 16a8f824fa
2 changed files with 42 additions and 0 deletions

View File

@ -139,6 +139,8 @@ drmModeResPtr drmModeGetResources(int fd)
res.crtc_id_ptr = VOID2U64(drmMalloc(res.count_crtcs*sizeof(uint32_t))); res.crtc_id_ptr = VOID2U64(drmMalloc(res.count_crtcs*sizeof(uint32_t)));
if (res.count_outputs) if (res.count_outputs)
res.output_id_ptr = VOID2U64(drmMalloc(res.count_outputs*sizeof(uint32_t))); 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)) { if (ioctl(fd, DRM_IOCTL_MODE_GETRESOURCES, &res)) {
r = NULL; 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->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->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->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: err_allocs:
drmFree(U642VOID(res.fb_id_ptr)); drmFree(U642VOID(res.fb_id_ptr));
drmFree(U642VOID(res.crtc_id_ptr)); drmFree(U642VOID(res.crtc_id_ptr));
drmFree(U642VOID(res.output_id_ptr)); drmFree(U642VOID(res.output_id_ptr));
drmFree(U642VOID(res.encoder_id_ptr));
return r; 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); 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 * Output manipulation
*/ */

View File

@ -63,6 +63,9 @@ typedef struct _drmModeRes {
int count_outputs; int count_outputs;
uint32_t *outputs; uint32_t *outputs;
int count_encoders;
uint32_t *encoders;
uint32_t min_width, max_width; uint32_t min_width, max_width;
uint32_t min_height, max_height; uint32_t min_height, max_height;
} drmModeRes, *drmModeResPtr; } drmModeRes, *drmModeResPtr;
@ -106,6 +109,13 @@ typedef struct _drmModeCrtc {
} drmModeCrtc, *drmModeCrtcPtr; } drmModeCrtc, *drmModeCrtcPtr;
typedef struct _drmModeEncoder {
unsigned int encoder_id;
unsigned int encoder_type;
uint32_t crtcs;
uint32_t clones;
} drmModeEncoder, *drmModeEncoderPtr;
typedef enum { typedef enum {
DRM_MODE_CONNECTED = 1, DRM_MODE_CONNECTED = 1,
DRM_MODE_DISCONNECTED = 2, 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); int drmModeMoveCursor(int fd, uint32_t crtcId, int x, int y);
/**
* Encoder functions
*/
drmModeEncoderPtr drmModeGetEncoder(int fd, uint32_t encoder_id);
/* /*
* Output manipulation * Output manipulation
*/ */