https://e2e.ti.com/support/processors-group/processors/f/processors-forum/924161/omap3525-omap
器件型号:OMAP3525如何使用 DRM API 捕获屏幕? 如何获取帧缓冲并将其传递到 Gstreamer API。
我`m ioctl
int main()
{
///----------------------------------
//打开 DRI 器件
///----------------------------------
int DRI_FD =打开("/dev/dri/card0、O_RDWR | O_CLOEXEC);
///----------------------------------
//内核模式设置(KMS)
///----------------------------------
uint64_t res_fb_buf[10]={0}、
RES_CRTC_BUF[10]={0}、
Res_conn_buf[10]={0}、
RES_enc_buf[10]={0};
struct drm_mode_card_res res={0};
//成为 DRI 器件的"主控"
ioctl (DRI_FD、DRM_IOCTL_SET_MASTER、0);
//获取资源计数
ioctl (DRI_FD、DRM_IOCTL_MODE_GETRESOURCES、&R);
res.fb_id_ptr=(uint64_t) res_fb_buf;
res.crtc_id_ptr=(uint64_t) res_crtc_buf;
res.connector_id_ptr=(uint64_t) res_conn_buf;
res.encoder_id_ptr=(uint64_t) res_enc_buf;
//获取资源 ID
ioctl (DRI_FD、DRM_IOCTL_MODE_GETRESOURCES、&R);
printf ("fb:%d、CRTC:%d、conn:%d、编码:%d\n"、res.count_FBS、res.count_crtcs、res.count_connectors、res.count_encoder);
void *fb_BASK[10];
long fb_w[10];
long fb_h[10];
//循环(通过所有可用连接器)
int i;
对于(i=0 <res.count_connectors;i++)
{
struct drm_mode_modeinfo conn_mode_buf[20]={0};
uint64_t conn_prop_buf[20]={0}、
Conn_propval_buf[20]={0}、
Conn_enc_buf[20]={0};
struct drm_mode_get_connector conn={0};
conn.connector_id=res_conn_buf[i];
ioctl (DRI_FD、DRM_IOCTL_MODE_GETCONNECTOR、&CONn);//获取连接器资源计数
conn.models_ptr=(uint64_t) conn_mode_buf;
conn.props_ptr=(uint64_t)conn_prop_buf;
conn.prop_values_ptr=(uint64_t)conn_propval_buf;
con.encoder_ptr=(uint64_t) conn_enc_buf;
ioctl (DRI_FD、DRM_IOCTL_MODE_GETCONNECTOR、&CONn);//获取连接器资源
//检查连接器是否可以使用(连接到某些设备)
if (conn.count_Encoder<1 || conn.count_modes<1 ||!conn.encoder_id ||!conn.connection)
{
printf ("未连接\n");
继续;
}
//内核模式设置(KMS)
///----------------------------------
printf (“%d”:模式:%d,prop:%d,enc:%d\n",conn.connection,conn.count_modes,conn.count_props,conn.count_encoder);
printf ("模式:%DX%d FB:%d\n"、conn_mode_buf[0].hdisplay、conn_mode_buf[0].vdisplay、fb_base[i]);
struct drm_mode_get_encoder enc ={0};
ENC.ENCODER_id=conn.ENCODER_ID;
ioctl (DRI_FD、DRM_IOCTL_MODE_GETENCODER、enc);//获取编码器
struct drm_mode_crTC CRTC={0};
crtc.crtc_id=enc.crtc_id;
ioctl (DRI_FD、DRM_IOCTL_MODE_GETCRTC、&CRTC);
printf("下一个:%s:%d\n", crtc.mode.name,crtc.fb_id );
}
fflush (stdout);
//停止为 DRI 器件的"主控"
ioctl (DRI_FD、DRM_IOCTL_DROP_MASTER、0);