我没有看到其他人试图这样做。我完全有可能以错误的方式接近这个。基本上,我有一台带 DVI 输入的电脑。如果没有任何东西连接到 DVI 输入,则计算机上的程序会在屏幕上加载一些图像。如果输出源连接到 DVI 端口,那么我的程序应该停止写入图像并改用 DVI 视频馈送。
存在哪些机制来确定是否存在 DVI 输入,以及当前是否存在有效的视频信号?如何阅读视频流?
还是我以完全错误的方式解决这个问题?
我没有看到其他人试图这样做。我完全有可能以错误的方式接近这个。基本上,我有一台带 DVI 输入的电脑。如果没有任何东西连接到 DVI 输入,则计算机上的程序会在屏幕上加载一些图像。如果输出源连接到 DVI 端口,那么我的程序应该停止写入图像并改用 DVI 视频馈送。
存在哪些机制来确定是否存在 DVI 输入,以及当前是否存在有效的视频信号?如何阅读视频流?
还是我以完全错误的方式解决这个问题?
在硬件级别上,大多数模拟或数字视频输入子系统都能够检测输入信号的存在,或者至少能够检测具有许多特征的输入信号的存在。
对于数字标准,您可以在自己的线路上拥有实际的时钟数据,或者在串行数据流中进行编码。如果似乎有一个时钟,并且它的频率是否规律且合理,将是第一个测试(尽管对于某些标准,合理可以涵盖很大的频率范围)。
其次,视频(不仅是数字的,甚至是模拟的)具有行和场的重复结构,因此像素时钟应该有两个可识别的因数,一个对应于每行的开始或结束,另一个对应于开始或每个字段(屏幕)的结尾。同样,这些可能有自己的线路,可能有独特的编码方式(模拟情况下的特殊电压),或者可能代表像素数据中的时间间隙。即使没有同步和回溯时间,像素数据的统计分析也可能会提供 X 和 Y 维度的线索,因为图片中的许多特征会重复。
实际的视频输入子系统(想想平板显示器)可能有更复杂的检测和自适应电路 - 例如,它们可能会及时重新采样输入以改变每行点的分辨率,或者它们甚至可能将其放入帧缓冲区并在 X 和 Y 上缩放它。
视频捕获电路内部工作的哪些细节会暴露给消费者,甚至驱动级软件将在很大程度上取决于所使用的芯片组的细节——希望有数据表可用。尽管很可能某处有一个可读的寄存器位,该位指示输入是否正在捕获电路“认为”是视频信号的东西。您甚至可以读出 X 和 Y 分辨率以及扫描速率或像素时钟速率等参数。
类似地,从端口获取数据的能力将取决于芯片组,但如果端口对任何事情有用,那么大概有一个操作系统驱动程序为它提供某种有用的 API 到视频消费应用程序。