有没有办法从DVI端口获取原始数据?

时间:2012-05-17 23:59:33

标签: c# .net screen-scraping hardware-interface dvi

我没有看到其他人试图这样做。我完全有可能以错误的方式接受这种做法。基本上,我有一台带DVI输入的电脑。如果DVI输入没有附加任何内容,则计算机上的程序会在屏幕上加载一些图像。如果输出源连接到DVI端口,那么我的程序应该停止写入图像并改为使用DVI视频源。

有哪些机制可以确定DVI输入是否存在,以及当前是否存在有效的视频信号?如何阅读视频流?

或者我是以完全错误的方式解决这个问题?

1 个答案:

答案 0 :(得分:1)

在硬件级别,大多数模拟或数字视频输入子系统都能够检测到输入信号的存在,或至少具有很多特征的输入信号。

对于数字标准,您可以在自己的线路上或在串行数据流中编码实际的时钟数据。如果有一个时钟,如果它的频率是正常的,合理的将是第一次测试(虽然对于某些标准,合理的可以涵盖很大的频率范围)。

接下来,视频(不只是数字,甚至是模拟)具有重复的线和场结构,因此应该有两个可识别的像素时钟子数,一个对应于每一行的开头或结尾,另一个对应于每个字段(屏幕)的开始或结束。同样,这些可能有自己的线路,可能具有独特的编码方式(模拟情况下的特殊电压),或者可能代表像素数据中的时间间隙。即使没有同步也没有回扫时间,像素数据的统计分析可能会给出X和Y维度的线索,因为图片中的许多特征会重复。

实际的视频输入子系统(比如平板显示器)可以有更复杂的检测和自适应电路 - 例如它们可以及时重新采样输入以改变每线点数的分辨率,或者它们甚至可以将其放入一个帧缓冲区并在X和Y中缩放它。

视频捕获电路的内部工作原理的哪些细节会暴露给消费者,甚至驱动程序级别的软件在很大程度上取决于所使用的芯片组的具体情况 - 希望有数据表可用。很可能在某处有一个可读的寄存器位,表明输入是否正在捕获电路“认为”是视频信号的东西。您甚至可以读出参数,例如X和Y分辨率以及扫描速率或像素时钟速率。

类似地,从端口获取数据的能力将取决于芯片组,但是如果端口对任何东西都有用,那么可能有一个操作系统驱动程序,它为视频消费提供某种有用的API应用。