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