linux设备端口编写,在Linux上开发HDMI端口

探讨了在不使用操作系统自动配置的情况下,如何通过应用程序直接驱动HDMI输出的方法。文章讨论了使用SVGALib和SDL等工具的可能性及其局限性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何在不允许操作系统自动配置显示输出的情况下,从应用程序专门驱动HDMI输出怎么可能?

例如,使用标准DVI/VGA作为主显示器,但使用设备文件将Mplayer视频输出发送到HDMI.

这是一个很难通过谷歌回答的问题.几乎所有结果都与通过HDMI进行音频工作有关.

(在这里编辑)

下面的评论提到使用单独的Xorg服务器.虽然这是一个有用的想法,但它没有回答我提出的一个问题,而且我暗示了一个问题:

1)如何让Linux不希望将控制台放在该显示器上,如果它在另一个显示器之前加载,或者它是唯一的显示器(当只使用SSH登录时)?2)如果没有X怎么办?我想直接将图形驱动到适配器.我可以使用标准功能从代码执行此操作,而无需直接与驱动程序交互(可能过时,但使用SVGALib或其他非X图形层)?

(在这里编辑)

我看了SVGALib(旧的)和SDL.后者在X内外工作,甚至可以访问OpenGL.我通过某个论坛链接找到了1.3版,但网站和FTP似乎只有1.2.一般来说,SDL是一个很好的解决方案,但它有以下两个特定的缺点:

1)常规create-device调用接受设备索引,但完全忽略它:

(src/video/bwindow/SDL_bvideo.cc)

BE_CreateDevice(int devindex)

特定于驱动程序的调用似乎具有相同的缺陷.例如,DirectFB(我假设,它在控制台下提供图形):

(src/video/directfb/SDL_DirectFB_video.c)

DirectFB_CreateDevice(int devindex)

这些函数的主体似乎都没有设置设备索引的位置......毫无疑问,由于缺乏对它们构建的标准接口的支持.

2)无论选择何种适配器,SDL似乎都会自动将所有显示器连接在一起.示例"testsprite2.c"(随附库)接受"--display"参数,该参数在"common.c"中处理(所有示例的通用功能).您可以看到它使用"--display"参数执行的操作是在一个大的组合画布中计算该屏幕的X/Y坐标:

if (SDL_strcasecmp(argv[index], "--display") == 0) {

++index;

if (!argv[index]) {

return -1;

}

state->display = SDL_atoi(argv[index]);

if (SDL_WINDOWPOS_ISUNDEFINED(state->window_x)) {

state->window_x = SDL_WINDOWPOS_UNDEFINED_DISPLAY(state->display);

state->window_y = SDL_WINDOWPOS_UNDEFINED_DISPLAY(state->display);

}

if (SDL_WINDOWPOS_ISCENTERED(state->window_x)) {

state->window_x = SDL_WINDOWPOS_CENTERED_DISPLAY(state->display);

state->window_y = SDL_WINDOWPOS_CENTERED_DISPLAY(state->display);

}

return 2;

}

因此,如果它们位于同一个适配器上,则无法将一个显示器与另一个显示器隔离.SDL不起作用.

除非有一个与SDL类似的解决方案,否则将特定设备(devindex)设置在适当的位置(这可能不是这种情况,因此,可能是它未被实现的原因)变得微不足道,似乎是专用和完全专用屏幕的最佳选择是在分配给第二个设备的单独Xorg实例下编写自己的窗口管理器.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值