附图说明
当结合附图考虑时,通过阅读下文的详细描述将了解本发明的许多其它特点和优点,其中:
图1以方块图形式说明与本发明的实施例有关的所使用的主要组件;
图2说明根据本发明的实施例的帧的格式;
图3A和图3B分别说明第一数据包和随后的数据包的格式;
图4A和图4B说明根据本发明的实施例的数据包内的视频数据的组织;
图5A和图5B说明根据本发明的实施例的数据包内的音频数据的组织;
图6和图7说明根据本发明的实施例的帧中所包括的报头的元素;
图8说明根据本发明的实施例的经结合以便形成一帧的包集合;
图9A-9D说明本发明的一个替代实施例,其中根据本发明的实施例使用SDTI帧的变体;
图9E说明一替代实施例,其中传输器分开SDTI流使其遍及多个通道;
图10以流程图形式说明根据本发明的实施例的被执行以便提供一计算机与一硬件接口之间的外部定时的动作;
图11说明根据本发明的实施例的接口器件的寄存器存储器映射;
图12说明本发明的接口内含有的A/V全局寄存器的组织;
图13说明本发明的接口器件内含有的全局状态寄存器的组织;
图14说明本发明的接口器件中含有的等时控制寄存器;
图15说明本发明的接口器件中含有的流量控制寄存器的组织;
图16说明本发明的接口器件中含有的等时通道寄存器的组织。
具体实施方式
注意图1,以方块图形式展示了经连接以便在一计算机100与客户端102之间传输音频和视频数据的组件,所述计算机和客户端由总线104连接到接口106。优选实施例中的计算机100是一个能够处理视频和音频数据并以一可识别形式向一用户显示所述数据的计算器件。这些器件包括桌上型、膝上型和掌上型计算机。如本文所涉及的客户端102是一视频消费者或视频生产者,且包括如数码相机和诸如线性和随机存取器件的视频存储器件的这类器件。如本文所涉及的总线104包括计算机100与接口106之间的物理连接,也包括由通过总线104进行通信的器件所符合的串行协议。在优选实施例中,总线104利用被称为火线(Firewire)的IEEE 1394串行总线协议。接口106从客户端102处接受模拟和数字输入,并将所述输入转换为在计算机100上执行的音频/视频播放器可使用的扫描线。在一替代实施例中,接口106从客户端102处接受一数字压缩/未压缩信号并传输所述整个信号或所述信号的子集。在一个实施例中,接口106将输入分成帧108,通过总线104传到计算机100。
图2中说明帧108的格式。帧108包括一帧报头110、视频块112、音频块114,以及选择性地包括一音频报头116。相对于视频块112中的视频数据取样音频块114中的音频数据。每帧的音频样本计数根据ANSI/SMPTE272M规格中所定义的数目而变化,这个规格全文以引用的方式并入本文中。音频样本计数节拍是将每秒的整数个样本在NTSC帧频(29.97fps)上划分所必需的。同样地,帧108的大小可变化以便适合各种视频格式,诸如PAL或NTSC和8或10位视频数据,以及诸如48Khz和96Khz的16和24位的音频格式等等。同样地,压缩数据的帧大小可变化以便适合压缩格式。在一个实施例中,视频块112和音频块或压缩块具有一预定大小以便使得分析帧108简单并使得诸如直接存储器存取程序的应用程序需要很少的处理开销。在一部分视频块112或音频块114不是完全充满数据的情况下,可用零填充块112、114的剩余部分。在一个实施例中,视频块112和音频块114中所含有的数据未被压缩,进一步减少了接口106上的处理开销,并减少了在计算机100上运行的解压缩程序所需要的处理开销。
一旦对从客户端102所接收的输入进行转换并将其转换为扫描线并将其组织入帧108中,接口106就以每一垂直消隐间隔发送一帧以便提供与计算机100的同步。计算机100可从所接收的帧的频率得出所述垂直消隐间隔并使其自身与从接口106所接收的传入帧108的音频和视频数据同步。以这种方式保持了处理资源,这是由于不需要在接收到每一帧时对其执行同步,因此提供了计算机100上的较高质量性能的音频和视频显示。
图3A和3B分别说明第一数据包和随后的数据包的格式。
图4A和4B说明数据包内的视频数据的组织。图5A和5B说明数据包内的音频数据的组织。
图6说明帧报头110的内容。其中包括指示每一样本有多少位的格式标记130、SMPTE时间码132、递增帧计数器134、音频循环计数136、音频样本计数138、通道计数140、块大小字节计数142、音频格式标记144和视频格式标记146。音频样本计数138指示样本数目,其与一节拍相一致。音频循环计数136中的值指示所述节拍内的位置。帧的节拍形成一循环型式。
在一替代实施例中,可将帧报头110的某些内容移动或复制到可选音频报头116中。图7中展示帧报头110的一个替代图,其展示字节计数、数据长度和一帧位。
如图8中所说明,从预定大小的复数个包150构造帧108。与每一包相关联的是一1394等时包报头。根据本发明的数据传输利用一同步位来找到一帧的开始。帧108中的第一包标有所述同步位。这允许计算机100在接收到数据流时识别数据流,进一步减少了允许计算机100与从接口106所接收的帧流同步的处理开销。
在本发明的一个替代实施例中,可如图9A直到9E中所说明地利用符合串行数字接口(SDI)标准的帧。在这些实施例中,总线104符合IEEE 1394B串行总线协议以便适合所述SDI标准所陈述的数据速率限制。如上文所描述,接口106通过创建扫描线、执行去交错、分包和创建固定大小的音频和视频数据的SDTI帧而从所接收的输入形成帧。取决于计算机100、接口106、客户端102或其它器件上可用的处理资源可对SDTI帧作出各种修改。如上文所描述的,使通过总线104所发送的SDTI帧的传输与所接受信号的垂直消隐间隔同步。
如图9A中所示,SDTI帧160通常具有两个组成部分:垂直消隐部分162和水平回扫164。或者,在另一实施例(图9B)中,为进一步同步和故障检测的目的(诸如恢复传输中所丢失的数据或发生总线复位),将SDI帧报头166添加到SDTI帧160中,所述帧报头166是一具有一同步位和一帧计数的报头。在这个实施例中,SDTI帧报头166中包括一帧计数同步位,且SDTI帧报头166与垂直消隐部分162同步。举例来说,在接口106不能读取压缩数据或要求接口106的过度升级的应用中,可将SDTI帧160传输到计算机100,其中由软件以一非实时方式执行对SDTI流的处理。
或者,如图9C中所示,可构造没有水平回扫164的SDTI帧160以便进一步减少处理开销。如图9D中所示,在一个实施例中也可利用构造成没有水平回扫但具有报头166的SDTI帧。在又一个实施例中,如图9E中所示,可在多个通道之间分割所述SDTI帧,且所述帧也包括SDTI帧报头166。在这个实施例中,传输器将所述SDTI流分割成两半,一半线通过通道A传输,另一半通过通道B传输。每一部分帧的一个附加的报头可用于帮助重组帧数据。
在本发明的另一个方面中,可利用外部定时以使计算机100、接口106和客户端102之间的数据传输同步。在一个实施例中,客户端102包括一高质量参考时钟180(图1),其可用于使接口106上的时钟182同步和防止接口106上的缓冲器184的溢出。在这个实施例中,根据从计算机102传输数据到接口106的频率在接口106上得出客户端102上的参考时钟180的值。为执行流量控制,在帧传输之间跳过循环。跳过的循环增加帧传输之间的时间量,以使帧传输的数据速率变慢。注意图10,在参考数字200处,计算机轮询接口106来读取缓冲器184的大小。尽管为示范起见以诸如“较大的”和“较小的”的术语来称谓所述缓冲器,但应了解,在固定大小的缓冲器的情况下,较大的和较小的指这个缓冲器的充满度。在参考数字202处,计算机100随后向接口106发送复数个帧。在参考数字204处,计算机100再次轮询接口106来判定缓冲器184的大小。如果缓冲器184自从上次对其大小的轮询以来在大小上有增长(判定参考数字206处),那么控制进行到参考数字208处,此处计算机100增大发送到接口106的帧之间的延迟。在一个实施例中,所发送帧之间的延迟为125毫秒。在另一个实施例中,通过对若干帧进行延迟调整而获得分数延迟。举例来说,如果要求帧之间的延迟为2.5乘1.25微秒,则2个和3个循环(125微秒)的交替帧延迟被散置(intersperse)。然后控制返回参考数字202处,此处将帧发送到接口106,而帧之间有额外延迟。然而,返回判定参考数字206处,如果缓冲器184自从上次对其大小的轮询以来在大小上没有增长,那么控制转变到判定参考数字210处。在判定参考数字210处,如果缓冲器206在大小上已减小,那么控制转变到参考数字212处,此处减小从计算机100发送到接口106的帧之间的延迟。在一个实施例中,这个减小的量也是125MS。然后控制转变到参考数字202处,此处将帧从计算机100发送到接口106,而帧之间有减小的延迟。返回判定参考数字210处,如果缓冲器184的大小自从上次对缓冲器184的大小的轮询以来还没有减小,那么不需要调整帧之间的延迟,并且控制转变到参考数字202处。
接口106包括一串行单元300,其用于使得能够通过总线104进行通信。串行单元300包括一如表1中所示的单元目录302。
名称 |
关键字 |
值 |
Unit_Spec_ID |
0×12 |
0×000a27 |
Unit_SW_Version |
0×13 |
0×000022 |
Unit_Register_Location |
0×54 |
寄存器的Csr_offset |
Unit_Signals_Supported |
0×55 |
所支持的RS232信号 |
表1
Unit_Spec_ID值指定负责串行单元300的架构定义的机构。Unit_SW_Version值结合Unit_Spec_ID值共同指定所述单元的软件接口。Unit_Register_Location值指定所述串行单元寄存器的目标器件的起始地址空间的偏移量。Unit_Signals_Supported值指定支持哪些RS-232信号(如表2中所示)。如果从所述串行单元目录302中省略这项,那么不支持这些信号。
栏 |
位 |
描述 |
准备发送(RTS) |
0 |
如果支持RTS/RFR就置位 |
清零发送(CTS) |
1 |
如果支持CTS就置位 |
数据准备好(DSR) |
2 |
如果支持DSR就置位 |
数据传输准备就绪(DTR) |
3 |
如果支持DTR就置位 |
响铃指示(RI) |
4 |
如果支持RI就置位 |
载波(CAR) |
5 |
如果支持CAR/DCD就置位 |
保留 |
[31..6] |
保留 |
表2
串行单元300中还包括一串行单元寄存器映射304,其涉及串行单元300中含有的寄存器。表3中展示串行单元寄存器映射304的组织。
十六进制偏移 |
名称 |
存取 |
大小 |
值 |
0×0 |
登陆 |
W |
2 |
启动器的串行寄存器的地址 |
0×8 |
退出 |
W |
1 |
任何值 |
0×c |
重新连接 |
W |
1 |
启动器的节点ID |
0×10 |
T×FIFO大小 |
R |
1 |
T×FIFO的字节大小 |
0×14 |
R×FIFO大小 |
R |
1 |
R×FIFO的字节大小 |
0×18 |
状态 |
R |
1 |
CTS/DSR/RI/CAR |
0×1c |
控制 |
W |
1 |
DTR/RTS |
0×20 |
刷新T×FIFO |
W |
1 |
任何值 |
0×24 |
刷新R×FIFO |
W |
1 |
任何值 |
0×28 |
发送中断 |
W |
1 |
任何值 |
0×2c |
设置波特率 |
W |
1 |
波特率300->230400 |
0×30 |
设置字符大 |
W |
1 |
7或8位字符 |
0×34 |
设置停止大 |
W |
1 |
1、1.5或2位 |
0×38 |
设置奇偶校 |
W |
1 |
无、奇或偶校验 |
0×3c |
设置流量控制 |
W |
1 |
无、RTS/CTS或Xon/Xoff(继续/停止) |
0×40 |
保留 |
- |
4 |
保留 |
0×50 |
发送数据 |
W |
T×FIFO大小 |
待传输的字节 |
表3
串行单元寄存器映射304涉及一登陆寄存器。一试图与串行单元300进行通信的器件在本文中被称为一启动器。举例来说,启动器可以是计算机100或通过一高速串行总线连接在一网络上且与接口106进行通信的其它节点。所述启动器将其串行寄存器映射的基址的64位地址写到所述登陆寄存器以便登陆到串行单元300中。如果另一启动器已经登陆,那么串行单元300返回一冲突出错应答消息。所述地址的高32位被写入到登陆地址,低32位被写入到登陆+4处。所述串行单元寄存器映射还涉及一退出寄存器。启动器将任何值写到这个寄存器以便退出这个串行单元。在每一总线复位之后,启动器必须将其(可能已改变的)节点ID写入到重新连接寄存器。如果在总线复位后启动器在一秒之内未能这样做,那么其将自动退出。将16位节点ID写入到这个寄存器的底部16位,应将上部16位写为零。读取T×FIFO大小寄存器返回串行单元的传输FIFO的字节大小。读取R×FIFO大小寄存器返回串行单元300的接收FIFO的字节大小。读取状态寄存器返回当前CTS/DSR/RI/CAR的状态(如果支持)。如表4中所示地组织状态寄存器。
栏 |
位 |
描述 |
CTS |
0 |
如果CTS为高就为1,否则为0 |
DSR |
1 |
如果DSR为高就为1,否则为0 |
RI |
2 |
如果RI为高就为1,否则为0 |
CAR |
3 |
如果CAR为高就为1,否则为0 |
保留 |
[31..4] |
总为0 |
表4
控制寄存器的写入设置DTR和RTS的状态(如果支持)。表5中展示所述控制寄存器的组织。
栏 |
位 |
描述 |
RTS |
0 |
如果为1就将RTS设为高,否则将RTS设为低 |
DTR |
1 |
如果为1就将DTR设为高,否则将DTR设为低 |
保留 |
[31..2] |
总为0 |
表5
将任何值写入刷新T×FIFO寄存器使得串行单元300刷新其传输FIFO,丢弃当前其中的任何字节。将任何值写入刷新R×FIFO寄存器使得串行单元刷新其接收FIFO,丢弃当前其中的任何字节。将任何值写入发送中断寄存器使得串行单元300在传输T×FIFO的当前内容之后在其串行端口上设置一中断状态。设置波特率寄存器的写入设置串行单元300的串行端口的波特率。如表6中所示的组织所述设置波特率寄存器。
写入值 |
波特率 |
0 |
300 |
1 |
600 |
2 |
1200 |
3 |
2400 |
4 |
4800 |
5 |
9600 |
6 |
19200 |
7 |
38400 |
8 |
57600 |
9 |
115200 |
10 |
230400 |
表6
设置字符大小寄存器设置所发送和所接收的字符的位大小。表7中展示所述设置字符大小寄存器的组织。通过添加一填充位作为最高有效位来将7位字符填充为8位。
表7
设置停止大小寄存器指明停止位的数目。如表8中所示地组织所述设置停止大小寄存器。
表8
设置奇偶校验寄存器设置串行端口的奇偶校验。表9中展示所述设置奇偶校验寄存器的组织。
写入值 |
奇偶校验 |
0 |
无奇偶校验位 |
1 |
偶校验 |
2 |
奇校验 |
表9
设置流量控制寄存器设置串行端口所使用的流量控制类型。表10中展示所述设置流量寄存器的组织。
写入值 |
流量控制 |
0 |
无 |
1 |
CTS/RTS |
2 |
XOn/Xoff |
表10
当启动器发送块写入请求到发送数据寄存器来将字符写入传输FIFO时使用这个发送数据寄存器。块写入必须不大于由T×FIFO大小寄存器所指定的传输FIFO大小。如果T×FIFO中没有足够的空间用于整个块写入,那么返回一个冲突出错应答消息并且没有字符被复制到这个FIFO中。
串联单元300中还包括一具有复数个寄存器的启动器寄存器映射,如表11中所示地组织这个映射。
十六进制偏移量 |
名称 |
存取 |
大小(quad) |
值 |
0×0 |
中断 |
W |
1 |
任何值 |
0×4 |
组帧出错 |
W |
1 |
所接收的字符 |
0×8 |
奇偶校验出错 |
W |
1 |
所接收的字符 |
0×c |
R×FIFO溢出 |
W |
1 |
任何值 |
0×10 |
状态变化 |
W |
1 |
CTS/DSR/RI/CAR |
0×14 |
保留 |
- |
3 |
保留 |
0×20 |
所接收的数据 |
W |
R×FIFO大小 |
所接收的字节 |
表11
当串行单元300在其串行端口上检测到一中断状态时,其将一任意值写入到这个寄存器。当串行单元300在其串行端口上检测到一组帧出错时,其将所接收的字符写入到组帧寄存器。当串行单元300在其串行端口上检测到一奇偶校验出错时,其将所接收的字符写入到奇偶校验出错寄存器。当串行单元300的接收FIFO溢出时,串行单元300将一任意值写入到R×FIFO溢出寄存器。当串行单元300检测到CTS/DSR/RI/CAR的任一状态的变化时,其写入到指示新的串行端口信号状态的状态改变寄存器。表12中展示所述状态寄存器的组织。
栏 |
位 |
描述 |
CTS |
0 |
如果CTS为高就为1,否则为0 |
DSR |
1 |
如果DSR为高就为1,否则为0 |
RI |
2 |
如果RI为高就为1,否则为0 |
CAR |
3 |
如果CAR为高就为1,否则为0 |
保留 |
[31..4] |
总为0 |
表12
当串行单元300从其串行端口接收字符时,其用块写入事务将所接收的字符写入到所接收数据寄存器。它从不写入比由R×FIFO大小寄存器所指定的接收FIFO大小多的字节。如果启动器不能接收所发送的所有字符,那么其用一冲突出错应答消息回应并且不接收所发送的字符。
图11说明根据本发明的实施例的接口器件的寄存器存储器映射。图12说明本发明的接口内含有的A/V全局寄存器的组织。图13说明本发明的接口器件内含有的全局状态寄存器的组织。图14说明本发明的接口器件中含有的等时控制寄存器。图15说明本发明的接口器件中含有的流量控制寄存器的组织。图16说明本发明的接口器件中含有的等时通道寄存器的组织。
在本发明的另一实施例中,通过轮询接口106上的一垂直消隐寄存器而得出一合成垂直消隐信号。这个垂直消隐信号调用码到在计算机100上运行的程序。在一个实施例中,也向在计算机100上运行的程序提供计时信息,其与所调用的码结合或代替所调用的码。在本发明的一个实施例中,接口106含有一寄存器,其具有一指示帧中当前进程的计数器,由此可推断或另外得出下一垂直回扫。通过得出帧传输的边界,可定位和存取帧内的且与一垂直消隐间隔的发生同步的其它数据,诸如对于取样操作。此外,本发明的一个实施例得出用于定位与垂直消隐间隔相一致但不包括关于所述垂直消隐的信息的数据的帧边界。在一个实施例中,本发明用于获得在一视频消隐间隔发生之后一段时期内有效的数据,诸如可读取且可用于各种处理应用中的帧内所含有的时间码。在一个实施例中,然后计算机100调度一中断以便在这个推断时间发送,因此发送出一帧。