This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] OMAP3525:OMAP

Guru**** 665180 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

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);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Pradeep、您好!

    您使用的是哪个版本的软件?

    此致、

    Nick

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Nick、您好、感谢您的回答、我正在使用 OMAP4。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Pradeep、您好!

    我的意思是、这是 Linux 操作系统、RTOS 吗? 您从何处获得该软件、该软件的版本号是多少?

    通常、TI 不支持 GStreamer 等开源软件、因为它不是由 TI 编写的。 有关 我们的"开源软件支持免责声明"和潜在 GStreamer 资源的更多信息、请参阅处理器 SDK 技术支持页面。

    此致、

    Nick

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Nick、您好、我`m 使用 Linux OS 4.4 armv7l GNU/Linux。 我知道 GStreamer 不是由 TI 维护的。 我需要一个 API 来使用 DRM 捕获屏幕。

    我观察到 DRM_clone 示例,但我没有找到如何从 DRM 获取帧缓冲区(简单地说,应该从 LCD/HDMI 访问帧缓冲区)

    谢谢你。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Pradeep、您好!

    很抱歉、Linux 4.4太旧了、我们无法在这些论坛上提供支持。 谷歌搜索显示了您的问题的几个点击-希望您能在那里找到有用的东西。

    此致、

    Nick