Difference between revisions of "Binary Blinken Movie"

From BlinkenArea Wiki
Jump to: navigation, search
m (typos)
Line 29: Line 29:
 
* framecnt (32 bit)
 
* framecnt (32 bit)
 
** die Anzahl der Einzelbilder in der Datei
 
** die Anzahl der Einzelbilder in der Datei
** wenn dieser Wert größer als die wirklich Anzahl der Einzelbilder in der Datei ist, kann das letzte Bild für die verbelibenden Bilder genutzt werden
+
** wenn dieser Wert größer als die wirkliche Anzahl der Einzelbilder in der Datei ist, kann das letzte Bild für die verbelibenden Bilder genutzt werden
** wenn dieser Wert kleiner als die wirklich Anzahl der Einzelbilder in der Datei ist, kann der Film abgeschnitten werden
+
** wenn dieser Wert kleiner als die wirkliche Anzahl der Einzelbilder in der Datei ist, kann der Film abgeschnitten werden
 
** es ist zulässig, diesen Wert zu ignorieren und stattdessen die wirkliche Anzahl der Einzelbilder in der Datei zu verwenden
 
** es ist zulässig, diesen Wert zu ignorieren und stattdessen die wirkliche Anzahl der Einzelbilder in der Datei zu verwenden
 
* duration (32 bit)
 
* duration (32 bit)

Revision as of 11:18, 21 June 2019

English Version of this Page

zurück zur Übersicht

Das Format Binary Blinken Movie wurde erstellt, um ein kleines und einfach zu verarbeitendes Format zu haben. Es wurde mit dem MCUF Protokoll im Hinterkopf entwickelt.

Jede *.bbm Datei beginnt mit einem main header, der einige genrelle Informationen über den Film. Danach können einige zusätzliche header platziert werden. Dahinter kommen dann die Einzelbilder nacheinander. Alle Werte, die länger als ein einzlenes Byte sind, werden in network-byte order, also big-endian oder highbyte first gespeichert.

  • .bbm Datei:
  • main header
  • [zusätzliche header]
  • frame start marker
  • frames

main header:

  • magic (32 bit)
    • immer 0x23542666
  • height (16 bit)
    • die Höhe des Films in Pixeln
  • width (16 bit)
    • die Breite des Films in Pixeln
  • channels (16 bit)
    • die Anzahl der Kanäle jedes Pixels
    • 1 für Graustufen, 3 für RGB
  • maxval (16 bit)
    • der maximale Wert in den Pixel-Daten
    • sollte 255 sein
    • Programme dürfen Dateien zurückweisen, die einen anderen Wert als 255 haben
  • framecnt (32 bit)
    • die Anzahl der Einzelbilder in der Datei
    • wenn dieser Wert größer als die wirkliche Anzahl der Einzelbilder in der Datei ist, kann das letzte Bild für die verbelibenden Bilder genutzt werden
    • wenn dieser Wert kleiner als die wirkliche Anzahl der Einzelbilder in der Datei ist, kann der Film abgeschnitten werden
    • es ist zulässig, diesen Wert zu ignorieren und stattdessen die wirkliche Anzahl der Einzelbilder in der Datei zu verwenden
  • duration (32 bit)
    • die Dauer des gesamten Films in Millisekunden
    • dieser Wert darf von Programmen gerundet werden (z.B. auf 25fps: "frame_cnt = (duration + 20) / 40")
    • wenn dieser Wert größer als die Summe der Einzelbild-Dauern ist, kann das letzte Bild für die verbleibende Zeit angezeigt werden
    • wenn dieser Wert kleiner als die Summe der Einzelbild-Dauern ist, kann der Film abgeschnitten werden
    • es ist zulässig, diesen Wert zu ignorieren und stattdessen die Summe der Einzelbild-Dauern zu verwenden
  • frameptr (32 bit)
    • Zeiger auf frame start marker
    • enthält den absoluten Offset des ersten Bytes des frame start marker

zusätzliche header:

  • sub-magic (32 bit)
  • size (16 bit)
    • Gesamtgröße dieses zusätzlichen headers
  • ...

info header (kann mehrfach vorkommen):

  • sub-magic (32 bit)
    • immer 'i' 'n' 'f' 'o' (ASCII)
  • size (16 bit)
    • Gesamtgröße dieses info header
  • Typ der Information (Null-terminierte ASCII-Zeichenkette)
    • z.B. "author"
  • Information (Null-terminierte ASCII-Zeichenkette)
    • z.B. "blinkender Verdächtiger"

frame start marker:

  • magic (32 bit)
    • immer 'f' 'r' 'm' 's' (ASCII)

frame:

  • duration (16 bit)
    • die Zeit in Millisekunden für die dieses Einzelbild angezeigt werden soll
    • dieser Wert darf von Programmen gerundet werden (z.B. auf 25fps: "frame_cnt = (duration + 20) / 40")
  • pixels (je 8 bit)
    • die Werte der channels * width * height Pixel
    • 0x00 für aus, maxval für an, Werte dazwischen für Graustufen
    • von links nach rechts, dann von oben nach unten (also alle Kanäle des oberen linken Pixels zuerst, dann der Pixel rechts daneben, ...)