aboutsummaryrefslogtreecommitdiff
path: root/vendor/jpeg-decoder/src/marker.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/jpeg-decoder/src/marker.rs')
-rw-r--r--vendor/jpeg-decoder/src/marker.rs136
1 files changed, 136 insertions, 0 deletions
diff --git a/vendor/jpeg-decoder/src/marker.rs b/vendor/jpeg-decoder/src/marker.rs
new file mode 100644
index 0000000..2fe74be
--- /dev/null
+++ b/vendor/jpeg-decoder/src/marker.rs
@@ -0,0 +1,136 @@
+// Table B.1
+#[derive(Clone, Copy, Debug, PartialEq)]
+// Note: Established names.
+#[allow(clippy::upper_case_acronyms)]
+pub enum Marker {
+ /// Start Of Frame markers
+ ///
+ /// - SOF(0): Baseline DCT (Huffman coding)
+ /// - SOF(1): Extended sequential DCT (Huffman coding)
+ /// - SOF(2): Progressive DCT (Huffman coding)
+ /// - SOF(3): Lossless (sequential) (Huffman coding)
+ /// - SOF(5): Differential sequential DCT (Huffman coding)
+ /// - SOF(6): Differential progressive DCT (Huffman coding)
+ /// - SOF(7): Differential lossless (sequential) (Huffman coding)
+ /// - SOF(9): Extended sequential DCT (arithmetic coding)
+ /// - SOF(10): Progressive DCT (arithmetic coding)
+ /// - SOF(11): Lossless (sequential) (arithmetic coding)
+ /// - SOF(13): Differential sequential DCT (arithmetic coding)
+ /// - SOF(14): Differential progressive DCT (arithmetic coding)
+ /// - SOF(15): Differential lossless (sequential) (arithmetic coding)
+ SOF(u8),
+ /// Reserved for JPEG extensions
+ JPG,
+ /// Define Huffman table(s)
+ DHT,
+ /// Define arithmetic coding conditioning(s)
+ DAC,
+ /// Restart with modulo 8 count `m`
+ RST(u8),
+ /// Start of image
+ SOI,
+ /// End of image
+ EOI,
+ /// Start of scan
+ SOS,
+ /// Define quantization table(s)
+ DQT,
+ /// Define number of lines
+ DNL,
+ /// Define restart interval
+ DRI,
+ /// Define hierarchical progression
+ DHP,
+ /// Expand reference component(s)
+ EXP,
+ /// Reserved for application segments
+ APP(u8),
+ /// Reserved for JPEG extensions
+ JPGn(u8),
+ /// Comment
+ COM,
+ /// For temporary private use in arithmetic coding
+ TEM,
+ /// Reserved
+ RES,
+}
+
+impl Marker {
+ pub fn has_length(self) -> bool {
+ use self::Marker::*;
+ ! matches!(self, RST(..) | SOI | EOI | TEM)
+ }
+
+ pub fn from_u8(n: u8) -> Option<Marker> {
+ use self::Marker::*;
+ match n {
+ 0x00 => None, // Byte stuffing
+ 0x01 => Some(TEM),
+ 0x02 ..= 0xBF => Some(RES),
+ 0xC0 => Some(SOF(0)),
+ 0xC1 => Some(SOF(1)),
+ 0xC2 => Some(SOF(2)),
+ 0xC3 => Some(SOF(3)),
+ 0xC4 => Some(DHT),
+ 0xC5 => Some(SOF(5)),
+ 0xC6 => Some(SOF(6)),
+ 0xC7 => Some(SOF(7)),
+ 0xC8 => Some(JPG),
+ 0xC9 => Some(SOF(9)),
+ 0xCA => Some(SOF(10)),
+ 0xCB => Some(SOF(11)),
+ 0xCC => Some(DAC),
+ 0xCD => Some(SOF(13)),
+ 0xCE => Some(SOF(14)),
+ 0xCF => Some(SOF(15)),
+ 0xD0 => Some(RST(0)),
+ 0xD1 => Some(RST(1)),
+ 0xD2 => Some(RST(2)),
+ 0xD3 => Some(RST(3)),
+ 0xD4 => Some(RST(4)),
+ 0xD5 => Some(RST(5)),
+ 0xD6 => Some(RST(6)),
+ 0xD7 => Some(RST(7)),
+ 0xD8 => Some(SOI),
+ 0xD9 => Some(EOI),
+ 0xDA => Some(SOS),
+ 0xDB => Some(DQT),
+ 0xDC => Some(DNL),
+ 0xDD => Some(DRI),
+ 0xDE => Some(DHP),
+ 0xDF => Some(EXP),
+ 0xE0 => Some(APP(0)),
+ 0xE1 => Some(APP(1)),
+ 0xE2 => Some(APP(2)),
+ 0xE3 => Some(APP(3)),
+ 0xE4 => Some(APP(4)),
+ 0xE5 => Some(APP(5)),
+ 0xE6 => Some(APP(6)),
+ 0xE7 => Some(APP(7)),
+ 0xE8 => Some(APP(8)),
+ 0xE9 => Some(APP(9)),
+ 0xEA => Some(APP(10)),
+ 0xEB => Some(APP(11)),
+ 0xEC => Some(APP(12)),
+ 0xED => Some(APP(13)),
+ 0xEE => Some(APP(14)),
+ 0xEF => Some(APP(15)),
+ 0xF0 => Some(JPGn(0)),
+ 0xF1 => Some(JPGn(1)),
+ 0xF2 => Some(JPGn(2)),
+ 0xF3 => Some(JPGn(3)),
+ 0xF4 => Some(JPGn(4)),
+ 0xF5 => Some(JPGn(5)),
+ 0xF6 => Some(JPGn(6)),
+ 0xF7 => Some(JPGn(7)),
+ 0xF8 => Some(JPGn(8)),
+ 0xF9 => Some(JPGn(9)),
+ 0xFA => Some(JPGn(10)),
+ 0xFB => Some(JPGn(11)),
+ 0xFC => Some(JPGn(12)),
+ 0xFD => Some(JPGn(13)),
+ 0xFE => Some(COM),
+ 0xFF => None, // Fill byte
+ }
+ }
+}