100 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Protocol Buffer
		
	
	
	
			
		
		
	
	
			100 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Protocol Buffer
		
	
	
	
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; |