zune_jpeg/marker.rs
1/*
2 * Copyright (c) 2023.
3 *
4 * This software is free software;
5 *
6 * You can redistribute it or modify it under terms of the MIT, Apache License or Zlib license
7 */
8
9#![allow(clippy::upper_case_acronyms)]
10
11/// JPEG Markers
12///
13/// **NOTE** This doesn't cover all markers, just the ones zune-jpeg supports.
14#[derive(Clone, Copy, Debug, PartialEq, Eq)]
15pub enum Marker {
16 /// Start Of Frame markers
17 ///
18 /// - SOF(0): Baseline DCT (Huffman coding)
19 /// - SOF(1): Extended sequential DCT (Huffman coding)
20 /// - SOF(2): Progressive DCT (Huffman coding)
21 /// - SOF(3): Lossless (sequential) (Huffman coding)
22 /// - SOF(5): Differential sequential DCT (Huffman coding)
23 /// - SOF(6): Differential progressive DCT (Huffman coding)
24 /// - SOF(7): Differential lossless (sequential) (Huffman coding)
25 /// - SOF(9): Extended sequential DCT (arithmetic coding)
26 /// - SOF(10): Progressive DCT (arithmetic coding)
27 /// - SOF(11): Lossless (sequential) (arithmetic coding)
28 /// - SOF(13): Differential sequential DCT (arithmetic coding)
29 /// - SOF(14): Differential progressive DCT (arithmetic coding)
30 /// - SOF(15): Differential lossless (sequential) (arithmetic coding)
31 SOF(u8),
32 /// Define Huffman table(s)
33 DHT,
34 /// Define arithmetic coding conditioning(s)
35 DAC,
36 /// Restart with modulo 8 count `m`
37 RST(u8),
38 /// Start of image
39 SOI,
40 /// End of image
41 EOI,
42 /// Start of scan
43 SOS,
44 /// Define quantization table(s)
45 DQT,
46 /// Define number of lines
47 DNL,
48 /// Define restart interval
49 DRI,
50 /// Reserved for application segments
51 APP(u8),
52 /// Comment
53 COM,
54 /// Unknown markers
55 UNKNOWN(u8)
56}
57
58impl Marker {
59 pub fn from_u8(n: u8) -> Option<Marker> {
60 use self::Marker::{APP, COM, DAC, DHT, DNL, DQT, DRI, EOI, RST, SOF, SOI, SOS, UNKNOWN};
61
62 match n {
63 0xFE => Some(COM),
64 0xC0 => Some(SOF(0)),
65 0xC1 => Some(SOF(1)),
66 0xC2 => Some(SOF(2)),
67 0xC4 => Some(DHT),
68 0xCC => Some(DAC),
69 0xD0 => Some(RST(0)),
70 0xD1 => Some(RST(1)),
71 0xD2 => Some(RST(2)),
72 0xD3 => Some(RST(3)),
73 0xD4 => Some(RST(4)),
74 0xD5 => Some(RST(5)),
75 0xD6 => Some(RST(6)),
76 0xD7 => Some(RST(7)),
77 0xD8 => Some(SOI),
78 0xD9 => Some(EOI),
79 0xDA => Some(SOS),
80 0xDB => Some(DQT),
81 0xDC => Some(DNL),
82 0xDD => Some(DRI),
83 0xE0 => Some(APP(0)),
84 0xE1 => Some(APP(1)),
85 0xE2 => Some(APP(2)),
86 0xED => Some(APP(13)),
87 0xEE => Some(APP(14)),
88 _ => Some(UNKNOWN(n))
89 }
90 }
91}