事件流是一种文件格式规范。它是存储事件流的标准,可用于在电子设备之间传输事件。该规范包括版本控制系统,以便在保持向后兼容性的同时允许进行大规模更改。事件流文件的建议扩展名是.es 。
对于字节b
, b[0]
表示 LSB(最低有效位), b[7]
表示 MSB(最高有效位)。
每个事件流文件都以 15 字节的标头开头:
位置 | 内容 |
---|---|
字节 0 到 11 | 0x45 0x76 0x65 0x6e 0x74 0x20 0x53 0x74 0x72 0x65 0x61 0x6d (事件流ASCII 编码) |
字节12 | 主要版本 |
字节13 | 次要版本 |
字节14 | 补丁版本 |
版本编号遵循语义版本控制约定。字节 15 到末尾取决于版本。下面给出内容描述。
该文件可以表示五种类型的流:通用事件、DVS 事件、ATIS 事件、异步和模块化显示事件以及颜色事件。类型存储在字节 15 中:
字节15 | 码流类型 |
---|---|
0x00 | 通用事件 |
0x01 | DVS 事件 |
0x02 | ATIS 事件 |
0x03 | 异步和模块化显示事件 |
0x04 | 颜色事件 |
字节16到末尾可以是复位、溢出、字节0 、大小字节和数据字节中的任何一个。这些字节的可能顺序由状态机给出:
字节编码以下数据:
字节名称 | 最高位 | 位 6 | 位 5 | 位 4 | 位 3 | 位 2 | 位 1 | 最低有效位 |
---|---|---|---|---|---|---|---|---|
重置 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
溢出 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
字节0 | t[7] | t[6] | t[5] | t[4] | t[3] | t[2] | t[1] | t[0] |
大小字节 | s[6] | s[5] | s[4] | s[3] | s[2] | s[1] | s[0] | is_last |
数据字节 | d[7] | d[6] | d[5] | d[4] | d[3] | d[2] | d[1] | d[0] |
复位是在认为有必要纠正由位错误引起的状态机错误时插入的特殊字节。
t编码自上一个事件以来经过的时间(以微秒为单位),并且不能是0b11111110
也不能是0b11111111
。如果该时间等于或大于0b11111110
微秒,则在事件之前插入一个或多个溢出字节。自上次事件以来经过的实际时间可以计算为当前事件的时间戳加上0b11111110
微秒乘以溢出字节数。
每个事件的数据有效负载以一个或多个 size 字节开始,对要读取的数据字节数进行编码。要读取的数据字节数n
由下式给出:
n = ∑ (s_i) << (7 * i)
其中s_i, i ∈ [0, k - 1]
表示第 (i + 1) 个s
值, k
为 size 字节数。 size 字节的最小数量取决于数据字节的数量。同一流的事件可以具有不同数量的数据字节和不同数量的大小字节。 n
数据字节至少需要Γlb(n + 1) / 7⅂
大小的字节,其中Γ…⅂
是 ceil 函数, lb(…)
是二进制对数。尽管事件流规范允许更大数量的大小字节,但鼓励生成通用事件的应用程序或设备使用这个最小数量。
对于数据字节之前的最后一个大小字节, is_last
等于0
,否则等于1
。
d
对用户提供的数据进行编码。
字节 16 到 19 编码传感器的宽度和高度:
字节名称 | 最高位 | 位 6 | 位 5 | 位 4 | 位 3 | 位 2 | 位 1 | 最低有效位 |
---|---|---|---|---|---|---|---|---|
字节16 | w[7] | w[6] | w[5] | w[4] | w[3] | w[2] | w[1] | w[0] |
字节17 | w[15] | w[14] | w[13] | w[12] | w[11] | w[10] | w[9] | w[8] |
字节 18 | h[7] | h[6] | h[5] | h[4] | h[3] | h[2] | h[1] | h[0] |
字节 19 | h[15] | h[14] | h[13] | h[12] | h[11] | h[10] | h[9] | h[8] |
w
(分别为h
)编码传感器的宽度(分别为高度)。事件的 x(分别为 y)坐标必须在整数范围[0, w - 1]
(分别为[0, h - 1]
)内。
字节20到末尾可以是复位、溢出、字节0 、字节1 、字节2 、字节3和字节4中的任何一个。这些字节的可能顺序由状态机给出:
字节编码以下数据:
字节名称 | 最高位 | 位 6 | 位 5 | 位 4 | 位 3 | 位 2 | 位 1 | 最低有效位 |
---|---|---|---|---|---|---|---|---|
重置 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
溢出 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
字节0 | t[6] | t[5] | t[4] | t[3] | t[2] | t[1] | t[0] | is_increase |
字节1 | x[7] | x[6] | x[5] | x[4] | x[3] | x[2] | x[1] | x[0] |
字节2 | x[15] | x[14] | x[13] | x[12] | x[11] | x[10] | x[9] | x[8] |
字节3 | y[7] | y[6] | y[5] | y[4] | y[3] | y[2] | y[1] | y[0] |
字节4 | y[15] | y[14] | y[13] | y[12] | y[11] | y[10] | y[9] | y[8] |
复位是在认为有必要纠正由位错误引起的状态机错误时插入的特殊事件。复位字节应一次插入五个,以便在空闲状态下至少读取一个字节。
t
编码自上一个事件以来经过的时间(以微秒为单位),并且不能是0b1111111
。如果该时间等于或大于0b1111111
微秒,则在事件之前插入一个或多个溢出字节。自上次事件以来经过的实际时间可以计算为当前事件的时间戳加上0b1111111
微秒乘以溢出字节数。
对于光增强事件, is_increase
等于1
,否则等于0
。
x
和y
编码与事件关联的像素坐标。
字节 16 到 19 编码传感器的宽度和高度:
字节名称 | 最高位 | 位 6 | 位 5 | 位 4 | 位 3 | 位 2 | 位 1 | 最低有效位 |
---|---|---|---|---|---|---|---|---|
字节16 | w[7] | w[6] | w[5] | w[4] | w[3] | w[2] | w[1] | w[0] |
字节17 | w[15] | w[14] | w[13] | w[12] | w[11] | w[10] | w[9] | w[8] |
字节 18 | h[7] | h[6] | h[5] | h[4] | h[3] | h[2] | h[1] | h[0] |
字节 19 | h[15] | h[14] | h[13] | h[12] | h[11] | h[10] | h[9] | h[8] |
w
(分别为h
)编码传感器的宽度(分别为高度)。事件的 x(分别为 y)坐标必须在整数范围[0, w - 1]
(分别为[0, h - 1]
)内。
字节20到末尾可以是复位、溢出、字节0 、字节1 、字节2 、字节3和字节4中的任意一个。这些字节的可能顺序由状态机给出:
字节编码以下数据:
字节名称 | 最高位 | 位 6 | 位 5 | 位 4 | 位 3 | 位 2 | 位 1 | 最低有效位 |
---|---|---|---|---|---|---|---|---|
重置 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 |
溢出 | 1 | 1 | 1 | 1 | 1 | 1 | overflow[1] | overflow[0] |
字节0 | t[5] | t[4] | t[3] | t[2] | t[1] | t[0] | polarity | is_tc |
字节1 | x[7] | x[6] | x[5] | x[4] | x[3] | x[2] | x[1] | x[0] |
字节2 | x[15] | x[14] | x[13] | x[12] | x[11] | x[10] | x[9] | x[8] |
字节3 | y[7] | y[6] | y[5] | y[4] | y[3] | y[2] | y[1] | y[0] |
字节4 | y[15] | y[14] | y[13] | y[12] | y[11] | y[10] | y[9] | y[8] |
复位是在认为有必要纠正由位错误引起的状态机错误时插入的特殊事件。复位字节应一次插入五个,以便在空闲状态下至少读取一个字节。
t
编码自上一个事件以来经过的时间(以微秒为单位),并且不能是0b111111
。如果该时间等于或大于0b111111
微秒,则在事件之前插入一个或多个溢出字节。自上一个事件以来经过的实际时间可以计算为当前事件的时间戳加上0b111111
微秒乘以每个溢出事件的overflow[0]
、 overflow[1]
编码的数字。
对于 DVS 事件, is_tc
等于0
;对于阈值跨越(曝光测量的一半),is_tc 等于1
。对于 DVS 事件, polarity
存储is_increase
,对于阈值交叉存储is_second
。
x
和y
编码与事件关联的像素坐标。
字节16 到末尾可以是复位、溢出、字节0 、字节1 、字节2和字节_3中的任何一个。这些字节的可能顺序由状态机给出:
字节编码以下数据:
字节名称 | 最高位 | 位 6 | 位 5 | 位 4 | 位 3 | 位 2 | 位 1 | 最低有效位 |
---|---|---|---|---|---|---|---|---|
重置 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
溢出 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
字节0 | t[7] | t[6] | t[5] | t[4] | t[3] | t[2] | t[1] | t[0] |
字节1 | x[7] | x[6] | x[5] | x[4] | x[3] | x[2] | x[1] | x[0] |
字节2 | y[7] | y[6] | y[5] | y[4] | y[3] | y[2] | y[1] | y[0] |
字节3 | s[7] | s[6] | s[5] | s[4] | s[3] | s[2] | s[1] | s[0] |
复位是在认为有必要纠正由位错误引起的状态机错误时插入的特殊事件。复位字节应一次插入四个,以便在空闲状态下至少读取一个字节。
t
编码自上一个事件以来经过的时间(以微秒为单位),并且不能是0b11111110
也不能是0b11111111
。如果该时间等于或大于0b11111110
微秒,则在事件之前插入一个或多个溢出字节。自上次事件以来经过的实际时间可以计算为当前事件的时间戳加上0b11111110
微秒乘以溢出字节数。
x
和y
编码与事件关联的像素坐标。
s
对金字塔中的当前阶段进行编码。在显示之外,其值应为0b00000000
(有关详细信息,请参阅异步和模块化显示文档)。
字节 16 到 19 编码传感器的宽度和高度:
字节名称 | 最高位 | 位 6 | 位 5 | 位 4 | 位 3 | 位 2 | 位 1 | 最低有效位 |
---|---|---|---|---|---|---|---|---|
字节16 | w[7] | w[6] | w[5] | w[4] | w[3] | w[2] | w[1] | w[0] |
字节17 | w[15] | w[14] | w[13] | w[12] | w[11] | w[10] | w[9] | w[8] |
字节 18 | h[7] | h[6] | h[5] | h[4] | h[3] | h[2] | h[1] | h[0] |
字节 19 | h[15] | h[14] | h[13] | h[12] | h[11] | h[10] | h[9] | h[8] |
w
(分别为h
)编码传感器的宽度(分别为高度)。事件的 x(分别为 y)坐标必须在整数范围[0, w - 1]
(分别为[0, h - 1]
)内。
字节20到末尾可以是复位、溢出、字节0 、字节1 、字节2 、字节3 、字节4 、字节5 、字节6和字节7中的任意一个。这些字节的可能顺序由状态机给出:
字节编码以下数据:
字节名称 | 最高位 | 位 6 | 位 5 | 位 4 | 位 3 | 位 2 | 位 1 | 最低有效位 |
---|---|---|---|---|---|---|---|---|
重置 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
溢出 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
字节0 | t[7] | t[6] | t[5] | t[4] | t[3] | t[2] | t[1] | t[0] |
字节1 | x[7] | x[6] | x[5] | x[4] | x[3] | x[2] | x[1] | x[0] |
字节2 | x[15] | x[14] | x[13] | x[12] | x[11] | x[10] | x[9] | x[8] |
字节3 | y[7] | y[6] | y[5] | y[4] | y[3] | y[2] | y[1] | y[0] |
字节4 | y[15] | y[14] | y[13] | y[12] | y[11] | y[10] | y[9] | y[8] |
字节5 | r[7] | r[6] | r[5] | r[4] | r[3] | r[2] | r[1] | r[0] |
字节6 | g[7] | g[6] | g[5] | g[4] | g[3] | g[2] | g[1] | g[0] |
字节7 | b[7] | b[6] | b[5] | b[4] | b[3] | b[2] | b[1] | b[0] |
复位是在认为有必要纠正由位错误引起的状态机错误时插入的特殊事件。复位字节应一次插入高度,以便在空闲状态下至少读取一个字节。
t
编码自上一个事件以来经过的时间(以微秒为单位),并且不能是0b11111110
也不能是0b11111111
。如果该时间等于或大于0b11111110
微秒,则在事件之前插入一个或多个溢出字节。自上次事件以来经过的实际时间可以计算为当前事件的时间戳加上0b11111110
微秒乘以溢出字节数。
x
和y
编码与事件关联的像素坐标。
r
、 g
和b
编码红色、绿色和蓝色分量。
请参阅 LICENSE 文件以了解许可权利和限制 (GNU GPLv3)。