Event Stream ist eine Dateiformatspezifikation. Es ist als Standard zum Speichern von Ereignisströmen gedacht und kann zur Übertragung von Ereignissen zwischen elektronischen Geräten verwendet werden. Die Spezifikation umfasst ein Versionierungssystem, um umfangreiche Änderungen zu ermöglichen und gleichzeitig die Abwärtskompatibilität zu gewährleisten. Die empfohlene Erweiterung für Event Stream-Dateien ist .es .
Für ein Byte b
bezeichnet b[0]
das LSB (niederwertigstes Bit) und b[7]
bezeichnet das MSB (höchstwertiges Bit).
Jede Event Stream-Datei beginnt mit einem 15-Byte-Header:
Position | Inhalt |
---|---|
Bytes 0 bis 11 | 0x45 0x76 0x65 0x6e 0x74 0x20 0x53 0x74 0x72 0x65 0x61 0x6d ( Ereignisstrom ASCII-kodiert) |
Byte 12 | Hauptversion |
Byte 13 | Nebenversion |
Byte 14 | Patch-Version |
Die Versionsnummerierung folgt der Konvention der semantischen Versionierung. Die Bytes 15 bis zum Ende sind versionabhängig. Die Inhaltsbeschreibung finden Sie unten.
Die Datei kann fünf Arten von Streams darstellen: generische Ereignisse, DVS-Ereignisse, ATIS-Ereignisse, asynchrone und modulare Anzeigeereignisse und Farbereignisse. Der Typ wird in Byte 15 gespeichert:
Byte 15 | Stream-Typ |
---|---|
0x00 | Allgemeine Ereignisse |
0x01 | DVS-Veranstaltungen |
0x02 | ATIS-Veranstaltungen |
0x03 | Asynchrone und modulare Anzeigeereignisse |
0x04 | Farbereignisse |
Die Bytes 16 bis zum Ende können Reset , Overflow , Byte 0 , Size Byte und Data Byte sein. Die mögliche Reihenfolge dieser Bytes wird durch die Zustandsmaschine vorgegeben:
Die Bytes kodieren die folgenden Daten:
Bytename | MSB | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | LSB |
---|---|---|---|---|---|---|---|---|
zurücksetzen | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
Überlauf | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
Byte 0 | t[7] | t[6] | t[5] | t[4] | t[3] | t[2] | t[1] | t[0] |
Größe Byte | s[6] | s[5] | s[4] | s[3] | s[2] | s[1] | s[0] | is_last |
Datenbyte | d[7] | d[6] | d[5] | d[4] | d[3] | d[2] | d[1] | d[0] |
Beim Zurücksetzen handelt es sich um ein spezielles Byte, das eingefügt wird, wenn es als notwendig erachtet wird, um Zustandsmaschinenfehler aufgrund von Bitfehlern zu korrigieren.
t kodiert die seit dem vorherigen Ereignis verstrichene Zeit in Mikrosekunden und kann weder 0b11111110
noch 0b11111111
sein. Wenn diese Zeit gleich oder größer als 0b11111110
Mikrosekunden ist, werden vor dem Ereignis ein oder mehrere Überlaufbytes eingefügt. Die tatsächlich seit dem letzten Ereignis verstrichene Zeit kann als Zeitstempel des aktuellen Ereignisses plus 0b11111110
Mikrosekunden multipliziert mit der Anzahl der Überlaufbytes berechnet werden.
Die Datennutzlast jedes Ereignisses beginnt mit einem oder mehreren Größenbytes, die die Anzahl der zu lesenden Datenbytes kodieren. Die Anzahl n
der zu lesenden Datenbytes ergibt sich aus:
n = ∑ (s_i) << (7 * i)
Dabei bezeichnet s_i, i ∈ [0, k - 1]
den (i + 1)-ten s
Wert und k
die Anzahl der Größenbytes. Die Mindestanzahl an Größenbytes hängt von der Anzahl der Datenbytes ab. Ereignisse desselben Streams können eine unterschiedliche Anzahl an Datenbytes und eine unterschiedliche Anzahl an Größenbytes haben. n
Datenbytes erfordern eine Größe von mindestens Γlb(n + 1) / 7⅂
Bytes, wobei Γ…⅂
die Deckenfunktion und lb(…)
der binäre Logarithmus ist. Anwendungen oder Geräten, die generische Ereignisse generieren, wird empfohlen, diese Mindestanzahl zu verwenden, obwohl die Event Stream-Spezifikation eine größere Anzahl von Größenbytes zulässt.
is_last
ist gleich 0
für das letzte Größenbyte vor den Datenbytes, andernfalls 1
.
d
kodiert vom Benutzer bereitgestellte Daten.
Die Bytes 16 bis 19 kodieren die Breite und Höhe des Sensors:
Bytename | MSB | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | LSB |
---|---|---|---|---|---|---|---|---|
Byte 16 | w[7] | w[6] | w[5] | w[4] | w[3] | w[2] | w[1] | w[0] |
Byte 17 | w[15] | w[14] | w[13] | w[12] | w[11] | w[10] | w[9] | w[8] |
Byte 18 | h[7] | h[6] | h[5] | h[4] | h[3] | h[2] | h[1] | h[0] |
Byte 19 | h[15] | h[14] | h[13] | h[12] | h[11] | h[10] | h[9] | h[8] |
w
(bzw. h
) kodiert die Breite (bzw. Höhe) des Sensors. Die x- (bzw. y-) Koordinate eines Ereignisses muss im Ganzzahlbereich [0, w - 1]
(bzw. [0, h - 1]
) liegen.
Die Bytes 20 bis zum Ende können Reset , Overflow , Byte 0 , Byte 1 , Byte 2 , Byte 3 und Byte 4 sein. Die mögliche Reihenfolge dieser Bytes wird durch die Zustandsmaschine vorgegeben:
Die Bytes kodieren die folgenden Daten:
Bytename | MSB | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | LSB |
---|---|---|---|---|---|---|---|---|
zurücksetzen | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
Überlauf | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
Byte 0 | t[6] | t[5] | t[4] | t[3] | t[2] | t[1] | t[0] | is_increase |
Byte 1 | x[7] | x[6] | x[5] | x[4] | x[3] | x[2] | x[1] | x[0] |
Byte 2 | x[15] | x[14] | x[13] | x[12] | x[11] | x[10] | x[9] | x[8] |
Byte 3 | y[7] | y[6] | y[5] | y[4] | y[3] | y[2] | y[1] | y[0] |
Byte 4 | y[15] | y[14] | y[13] | y[12] | y[11] | y[10] | y[9] | y[8] |
„Reset“ ist ein spezielles Ereignis, das eingefügt wird, wenn es als notwendig erachtet wird, um Zustandsmaschinenfehler aufgrund von Bitfehlern zu korrigieren. Reset- Bytes sollten jeweils zu fünft eingefügt werden, sodass im Ruhezustand mindestens ein Byte gelesen wird.
t
kodiert die seit dem vorherigen Ereignis verstrichene Zeit in Mikrosekunden und darf nicht 0b1111111
sein. Wenn diese Zeit gleich oder größer als 0b1111111
Mikrosekunden ist, werden vor dem Ereignis ein oder mehrere Überlaufbytes eingefügt. Die tatsächlich seit dem letzten Ereignis verstrichene Zeit kann als Zeitstempel des aktuellen Ereignisses plus 0b1111111
Mikrosekunden multipliziert mit der Anzahl der Überlaufbytes berechnet werden.
is_increase
ist für leichte Anstiegsereignisse gleich 1
und andernfalls 0
.
x
und y
kodieren die mit dem Ereignis verbundenen Pixelkoordinaten.
Die Bytes 16 bis 19 kodieren die Breite und Höhe des Sensors:
Bytename | MSB | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | LSB |
---|---|---|---|---|---|---|---|---|
Byte 16 | w[7] | w[6] | w[5] | w[4] | w[3] | w[2] | w[1] | w[0] |
Byte 17 | w[15] | w[14] | w[13] | w[12] | w[11] | w[10] | w[9] | w[8] |
Byte 18 | h[7] | h[6] | h[5] | h[4] | h[3] | h[2] | h[1] | h[0] |
Byte 19 | h[15] | h[14] | h[13] | h[12] | h[11] | h[10] | h[9] | h[8] |
w
(bzw. h
) kodiert die Breite (bzw. Höhe) des Sensors. Die x- (bzw. y-) Koordinate eines Ereignisses muss im Ganzzahlbereich [0, w - 1]
(bzw. [0, h - 1]
) liegen.
Die Bytes 20 bis zum Ende können Reset , Overflow , Byte 0 , Byte 1 , Byte 2 , Byte 3 und Byte 4 sein. Die mögliche Reihenfolge dieser Bytes wird durch die Zustandsmaschine vorgegeben:
Die Bytes kodieren die folgenden Daten:
Bytename | MSB | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | LSB |
---|---|---|---|---|---|---|---|---|
zurücksetzen | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 |
Überlauf | 1 | 1 | 1 | 1 | 1 | 1 | overflow[1] | overflow[0] |
Byte 0 | t[5] | t[4] | t[3] | t[2] | t[1] | t[0] | polarity | is_tc |
Byte 1 | x[7] | x[6] | x[5] | x[4] | x[3] | x[2] | x[1] | x[0] |
Byte 2 | x[15] | x[14] | x[13] | x[12] | x[11] | x[10] | x[9] | x[8] |
Byte 3 | y[7] | y[6] | y[5] | y[4] | y[3] | y[2] | y[1] | y[0] |
Byte 4 | y[15] | y[14] | y[13] | y[12] | y[11] | y[10] | y[9] | y[8] |
„Reset“ ist ein spezielles Ereignis, das eingefügt wird, wenn es als notwendig erachtet wird, um Zustandsmaschinenfehler aufgrund von Bitfehlern zu korrigieren. Reset- Bytes sollten jeweils zu fünft eingefügt werden, sodass im Ruhezustand mindestens ein Byte gelesen wird.
t
kodiert die seit dem vorherigen Ereignis verstrichene Zeit in Mikrosekunden und darf nicht 0b111111
sein. Wenn diese Zeit gleich oder größer als 0b111111
Mikrosekunden ist, werden vor dem Ereignis ein oder mehrere Überlaufbytes eingefügt. Die tatsächlich seit dem letzten Ereignis verstrichene Zeit kann als Zeitstempel des aktuellen Ereignisses plus 0b111111
Mikrosekunden multipliziert mit der durch overflow[0]
und overflow[1]
codierten Zahl für jedes Überlaufereignis berechnet werden.
is_tc
ist gleich 0
für ein DVS-Ereignis und 1
für eine Schwellenwertüberschreitung (halbe Belichtungsmessung). polarity
speichert is_increase
für ein DVS-Ereignis und is_second
für eine Schwellenwertüberschreitung.
x
und y
kodieren die mit dem Ereignis verbundenen Pixelkoordinaten.
Die Bytes 16 bis zum Ende können eines von reset , overflow , byte 0 , byte 1 , byte 2 und byte_3 sein. Die mögliche Reihenfolge dieser Bytes wird durch die Zustandsmaschine vorgegeben:
Die Bytes kodieren die folgenden Daten:
Bytename | MSB | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | LSB |
---|---|---|---|---|---|---|---|---|
zurücksetzen | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
Überlauf | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
Byte 0 | t[7] | t[6] | t[5] | t[4] | t[3] | t[2] | t[1] | t[0] |
Byte 1 | x[7] | x[6] | x[5] | x[4] | x[3] | x[2] | x[1] | x[0] |
Byte 2 | y[7] | y[6] | y[5] | y[4] | y[3] | y[2] | y[1] | y[0] |
Byte 3 | s[7] | s[6] | s[5] | s[4] | s[3] | s[2] | s[1] | s[0] |
„Reset“ ist ein spezielles Ereignis, das eingefügt wird, wenn es als notwendig erachtet wird, um Zustandsmaschinenfehler aufgrund von Bitfehlern zu korrigieren. Reset- Bytes sollten jeweils zu viert eingefügt werden, sodass im Ruhezustand mindestens ein Byte gelesen wird.
t
kodiert die seit dem vorherigen Ereignis verstrichene Zeit in Mikrosekunden und kann weder 0b11111110
noch 0b11111111
sein. Wenn diese Zeit gleich oder größer als 0b11111110
Mikrosekunden ist, werden vor dem Ereignis ein oder mehrere Überlaufbytes eingefügt. Die tatsächlich seit dem letzten Ereignis verstrichene Zeit kann als Zeitstempel des aktuellen Ereignisses plus 0b11111110
Mikrosekunden multipliziert mit der Anzahl der Überlaufbytes berechnet werden.
x
und y
kodieren die mit dem Ereignis verbundenen Pixelkoordinaten.
s
kodiert die aktuelle Stufe in der Pyramide. Außerhalb der Anzeige sollte der Wert 0b00000000
sein (Einzelheiten finden Sie in der Dokumentation zur asynchronen und modularen Anzeige).
Die Bytes 16 bis 19 kodieren die Breite und Höhe des Sensors:
Bytename | MSB | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | LSB |
---|---|---|---|---|---|---|---|---|
Byte 16 | w[7] | w[6] | w[5] | w[4] | w[3] | w[2] | w[1] | w[0] |
Byte 17 | w[15] | w[14] | w[13] | w[12] | w[11] | w[10] | w[9] | w[8] |
Byte 18 | h[7] | h[6] | h[5] | h[4] | h[3] | h[2] | h[1] | h[0] |
Byte 19 | h[15] | h[14] | h[13] | h[12] | h[11] | h[10] | h[9] | h[8] |
w
(bzw. h
) kodiert die Breite (bzw. Höhe) des Sensors. Die x- (bzw. y-) Koordinate eines Ereignisses muss im Ganzzahlbereich [0, w - 1]
(bzw. [0, h - 1]
) liegen.
Die Bytes 20 bis zum Ende können eines von Reset , Overflow , Byte 0 , Byte 1 , Byte 2 , Byte 3 , Byte 4 , Byte 5 , Byte 6 und Byte 7 sein. Die mögliche Reihenfolge dieser Bytes wird durch die Zustandsmaschine vorgegeben:
Die Bytes kodieren die folgenden Daten:
Bytename | MSB | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | LSB |
---|---|---|---|---|---|---|---|---|
zurücksetzen | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
Überlauf | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
Byte 0 | t[7] | t[6] | t[5] | t[4] | t[3] | t[2] | t[1] | t[0] |
Byte 1 | x[7] | x[6] | x[5] | x[4] | x[3] | x[2] | x[1] | x[0] |
Byte 2 | x[15] | x[14] | x[13] | x[12] | x[11] | x[10] | x[9] | x[8] |
Byte 3 | y[7] | y[6] | y[5] | y[4] | y[3] | y[2] | y[1] | y[0] |
Byte 4 | y[15] | y[14] | y[13] | y[12] | y[11] | y[10] | y[9] | y[8] |
Byte 5 | r[7] | r[6] | r[5] | r[4] | r[3] | r[2] | r[1] | r[0] |
Byte 6 | g[7] | g[6] | g[5] | g[4] | g[3] | g[2] | g[1] | g[0] |
Byte 7 | b[7] | b[6] | b[5] | b[4] | b[3] | b[2] | b[1] | b[0] |
„Reset“ ist ein spezielles Ereignis, das eingefügt wird, wenn es als notwendig erachtet wird, um Zustandsmaschinenfehler aufgrund von Bitfehlern zu korrigieren. Reset- Bytes sollten jeweils in der Höhe eingefügt werden, sodass im Ruhezustand mindestens ein Byte gelesen wird.
t
kodiert die seit dem vorherigen Ereignis verstrichene Zeit in Mikrosekunden und kann weder 0b11111110
noch 0b11111111
sein. Wenn diese Zeit gleich oder größer als 0b11111110
Mikrosekunden ist, werden vor dem Ereignis ein oder mehrere Überlaufbytes eingefügt. Die tatsächlich seit dem letzten Ereignis verstrichene Zeit kann als Zeitstempel des aktuellen Ereignisses plus 0b11111110
Mikrosekunden multipliziert mit der Anzahl der Überlaufbytes berechnet werden.
x
und y
kodieren die mit dem Ereignis verbundenen Pixelkoordinaten.
r
, g
und b
kodieren die Farbanteile Rot, Grün und Blau.
Informationen zu Lizenzrechten und -einschränkungen finden Sie in der LICENSE-Datei (GNU GPLv3).