You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
100 lines
2.1 KiB
100 lines
2.1 KiB
syntax = "proto2";
|
|
// Proto description of the gif format.
|
|
// Refer to: https://www.fileformat.info/format/gif/egff.htm
|
|
// https://www.matthewflickinger.com/lab/whatsinagif/bits_and_bytes.asp
|
|
|
|
// TODO: Verify if this is correct
|
|
|
|
message LogicalScreenDescriptor {
|
|
required uint32 ScreenWidth = 1;
|
|
required uint32 ScreenHeight= 2;
|
|
required uint32 Packed = 3;
|
|
required uint32 BackgroundColor = 4;
|
|
required uint32 AspectRatio = 5;
|
|
}
|
|
|
|
message GlobalColorTable {
|
|
required bytes colors = 1;
|
|
}
|
|
|
|
message ImageDescriptor {
|
|
required uint32 Seperator =1;
|
|
required uint32 Left =2;
|
|
required uint32 Top = 3;
|
|
required uint32 Width = 4;
|
|
required uint32 Height = 5;
|
|
required uint32 Packed = 6;
|
|
}
|
|
|
|
message GraphicControlExtension {
|
|
required uint32 Packed = 1;
|
|
required uint32 DelayTime = 2;
|
|
required uint32 transparentColorIndex = 3;
|
|
}
|
|
|
|
message PlainTextExtension {
|
|
repeated SubBlock subs = 1;
|
|
optional GraphicControlExtension gcExt = 2;
|
|
}
|
|
|
|
message LocalColorTable {
|
|
required bytes colors = 1;
|
|
}
|
|
|
|
message SubBlock {
|
|
required uint32 len = 1;
|
|
required bytes data = 2;
|
|
}
|
|
|
|
message ImageData {
|
|
required uint32 lzw = 1;
|
|
repeated SubBlock subs = 2;
|
|
}
|
|
|
|
message BasicChunk {
|
|
required ImageDescriptor imDescriptor =1;
|
|
required LocalColorTable lct = 2;
|
|
required ImageData img = 3;
|
|
optional GraphicControlExtension gcExt = 4;
|
|
}
|
|
|
|
message ApplicationExtension {
|
|
required fixed64 appid = 1;
|
|
repeated SubBlock subs = 2;
|
|
}
|
|
|
|
message CommentExtension {
|
|
repeated SubBlock subs = 1;
|
|
}
|
|
|
|
message Header {
|
|
enum Version {
|
|
ENA = 1;
|
|
ESA = 2;
|
|
INV = 3;
|
|
}
|
|
required Version ver = 1;
|
|
}
|
|
|
|
message Trailer {}
|
|
|
|
message ImageChunk {
|
|
oneof chunk_oneof {
|
|
BasicChunk basic = 1;
|
|
PlainTextExtension plaintext = 2;
|
|
ApplicationExtension appExt = 3;
|
|
CommentExtension comExt = 4;
|
|
}
|
|
}
|
|
|
|
message GifProto {
|
|
required Header header = 1;
|
|
required LogicalScreenDescriptor lsd = 2;
|
|
// Instead of making GCT optional here, we condition its visit on LSD's packed byte
|
|
// in the converter
|
|
required GlobalColorTable gct = 3;
|
|
repeated ImageChunk chunks = 4;
|
|
required Trailer trailer = 5;
|
|
}
|
|
|
|
package gifProtoFuzzer; |