Windows XP 如何使用显示器的 EDID 来确定允许的显示模式?

发布于 2024-07-16 09:28:00 字数 993 浏览 10 评论 0原文

我正在开发一种视频显示设备,该设备使用自定义时序来处理 848x480 和 800x480 的分辨率,但不符合任何 VESA 标准。 该设备具有指定这些时序的 EDID。

我想知道 Windows XP 用于确定显示分辨率的过程,以及它如何向用户提供选择列表。 这似乎高度依赖于显卡制造商和驱动程序。

我在不同的系统上观察到了截然不同的行为:

  • 似乎普通的 Windows XP 除了在启动时之外不会查询 EDID,但是笔记本电脑和自定义视频驱动程序有时似乎会随意查询 EDID(插入计算机而不重新启动,点击演示模式,并显示设备名称)
  • 有些 PC 生成 848x480 或 800x480 似乎没有问题,但有些 PC 似乎忽略了详细的时序并回退到 VESA 640x480。 如果您指定自定义计时模式,任何给定的视频驱动程序/卡能够生成正确的 VGA 信号的机会有多大?
  • 通常,EDID 信息会传输到系统,但如果您打开 Windows 显示属性,并在设置选项卡中选择设备,可用模式的滑块不会显示 848x480 或 800x480。 它通常仅在其他标准模式列表中显示 640x480(但不提供提供的自定义模式)。
  • 如果发生这种情况,那么您通常可以通过在显示属性 -> 下的所有模式列表中选择设备来以 848x480 或 800x480 的分辨率显示设备。 设置-> 高级-> 适配器-> 列出所有模式。 当您选择此选项时,它会切换到正确的分辨率。
  • 但是,如果您返回显示属性 -> 设置中,您将在滑块中看到您选择的模式,但滑块只有一种分辨率。 它应该(至少)也显示 640x480。 在处理 Windows XP 和非标准视频计时时,这只是生活中的事实吗? 如果能够准确地了解 Windows 如何填充该滑块,那就太好了。

我将非常感谢任何讨论与所有这些相关的细节的资源。 我知道严格来说这不是一个编程问题,但它与我遇到的编程问题密切相关,并且我很难找到有关此主题的任何信息。

I'm working on a video display device that uses custom timings for resolutions at848x480 and 800x480 that do not conform to any VESA standard. The device has an EDID that specifies these timings.

I would like to know the process that Windows XP uses to determine the resolution to display at, and how it presents the user with a list of choices. This seems highly dependent on the video card manufacturer and driver.

I have observed wildly different behaviors on different systems:

  • It seems that vanilla Windows XP does not query the EDID except at boot time, however laptops and custom video drivers sometimes seem to query the EDID at will (plug in a computer with no reboot, hit presentation mode, and the device name shows up)
  • Some PCs seem to have no trouble generating 848x480 or 800x480, but some just seem to ignore the detailed timings and fall back to a VESA 640x480. If you specify a custom timing mode, what is the chance that any given video driver/card will be able to generate the proper VGA signal?
  • Often times, the EDID information will be transmitted to the system, but if you open the Windows display properties, and select the device in the settings tab, the slider of available modes does not show either 848x480 or 800x480. It usually just shows 640x480 among a list of other standard modes (but not the custom modes supplied).
  • If this happens, then you can often get the device to display at 848x480 or 800x480 by selecting it in the list of all modes under display properties -> settings -> advanced -> adapter -> list all modes. When you select this, it switches to the proper resolution.
  • However, if you go back in to display properties -> settings, you will see the mode you selected in the slider, but the slider only has the one resolution. It should (at least) also show 640x480. Is this just a fact of life when dealing with Windows XP and non-standard video timings? It would be great to know exactly how Windows populates that slider.

I would greatly appreciate any resources that discuss the details associated with all of this. I know that this is not strictly speaking a programming question, but it is closely related to a programming problem that I am having, and I am having trouble finding any information on this subject.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

提笔书几行 2024-07-23 09:28:00

啊,我感受到你的痛苦。 以前去过那里。 你也在写显示驱动吗? 显示驱动程序还可以调整模式,但通常只有在由于某种原因无法物理处理时才会这样做。 此外,许多显示驱动程序都会添加特定的默认模式列表(例如 640x480),而不管 EDID 中的内容是什么。

我知道 Windows 会对 EDID 中指定的监视器范围限制进行一些检查。 而且它们也不是直观的检查,因此您可以使用它。 此外,刷新率也会影响 Windows 修剪逻辑。

关于何时读取 EDID,我通常会在启动后第二次打开显示属性时以及此后每次都看到 EDID 被读取。

Ah, I feel your pain. Been there before. Are you writing the display driver as well? The display driver can also trim modes, but generally this will only be if there's some reason it cannot physically handle it. Additionally, many display drivers will add a certain list of default modes (like 640x480), regardless of what was in the EDID.

I know that Windows does some checks against the monitor range limits specified in the EDID. And they aren't intuitive checks either, so you might play with that. Also, the refresh rate factors into Windows trimming logic as well.

Regarding when EDID is read, I typically see the EDID get read the 2nd time you open display properties after booting up, and each time thereafter.

晌融 2024-07-23 09:28:00

我正在研究类似的问题。 第一步是将所需的分辨率设置为 EDID 中的详细时序。

也就是说,而不是标准计时。 如果您有 EDID 规范,请参阅第 3.10 节。 根据规范,第一个详细时序将是最高优先级分辨率,其次是第二个详细时序、标准时序,然后是既定时序。

此外,您应该尝试不支持所有其他时间和分辨率。

I'm working on a similar problem. A first step would be to set the desired resolution(s) as the detailed timings in the EDID.

That is, instead of Standard Timings. If you've got the EDID spec, that's detailed in section 3.10. According to the spec, the first Detailed Timing is going to be the highest priority resolution, followed by the second detailed timing, the Standard Timings, and then the Established Timings.

Further, you should try leaving all other timings and resolutions unsupported.

单调的奢华 2024-07-23 09:28:00

根据我的经验,您需要一个具有足够大胆驱动程序的图形适配器,以便您也可以在驱动程序中配置时序。 据我所知,在 Windows 中,您目前唯一的选择是购买带有集成英特尔显卡的 PC。 而且您必须注意驱动程序:对于任何高达 3x/4x 系列 Extreme Graphics 的驱动程序,请获取 Intel IEGD(并且您必须在安装之前滚动 IEGD 的自定义版本),或者仅使用库存
适用于 Nehalem+ 的台式机/笔记本电脑高清显卡驱动程序。

我似乎记得也许 Nvidia 还允许您手动指定视频模式时序。

我似乎记得 Matrox 驱动程序确实允许进行一些调整,但如果没记错的话,请停止允许您输入低级分辨率和计时值。

而且,说到 EDID/DDC,您最好的选择是通过切断 SDA/SCL 线(实际上仅切断 SCL 也可以完成这项工作)来完全摆脱它,这将允许您强制驱动程序使用特定的解决。

有许多漂亮、漂亮、低功耗的芯片组和 SoC(Geode、Vortex、Via Nano) - 不幸的是,它们都不允许您在 Windows 中指定时序。 因此,您必须使用耗电的 Atom 或更高版本来掌握计时:-(

请注意,任何半像样的 SVGA+ 硬件本质上都完全能够在任何像素上产生几乎任何可以想象的分辨率(可能是模 8)您可以提供的时钟(受合成器和 DAC 带宽的限制,现在通常为 200-400 MHz) Windows 驱动程序施加了一个愚蠢的限制 - 它们倾向于坚持典型的 DMT/CVT Linux 屏幕格式的标准集。 + Xwindows 允许您在几乎任何 VGA 硬件上设置任何分辨率和时序,我曾经考虑使用 CRT 输出端口作为任意信号的快速三通道发生器,采样率高达 400 MHz @ 8 位分辨率,以及超过一百万个样本的缓冲空间:-)

In my experience, you need a graphics adapter with a bold enough driver to allow you to configure your timings in the driver as well. As far as I can tell, in Windows, your only option at the moment is to get a PC with integrated Intel graphics. And you have to pay attention to the driver: for anything up to 3x/4x series Extreme Graphics, get the Intel IEGD (and you'll have to roll a custom build of the IEGD before installing), or just the stock
desktop/laptop HD Graphics driver for Nehalem+.

I seem to recall that maybe Nvidia also allow you to specify the video mode timings by hand.

I seem to recall that Matrox drivers do allow some tweaking, but if memory serves, stop exactly short of allowing you to enter the low-level resolution and timing values.

And, speaking of EDID/DDC, your best bet is to get rid of it alltogether, by cutting the SDA/SCL lines (actually cutting just the SCL does the job too), which will allow you to force the driver to use a particular resolution.

There are a number of pretty, nifty, low-power chipsets and SoC's (Geode, Vortex, Via Nano) - unfortunately, none of them allow you to specify the timings in Windows. Thus, you have to use the power-hungry Atom or above to get your hands on the timings :-(

Note that any half-decent SVGA+ hardware is essentially perfectly capable of producing just about any thinkable resolution (maybe modulo 8) at any pixel clock you can come up with (limited by the synthesizer's and DAC's bandwidth, typically 200-400 MHz nowadays). It's the Windows drivers that impose a silly limit - they tend to stick to the standard set of typical DMT/CVT screen formats. Linux + Xwindows allow you to set any resolution and timing on pretty much any VGA hardware. I used to think of using a CRT output port as a fast three-channel generator of arbitrary signals, with up to 400 MHz of sampling rate @ 8bit resolution, and over a million samples worth of buffer space :-)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文