1#![allow(clippy::upper_case_acronyms)]
2
3#[derive(Clone, Copy, Debug, PartialEq, Eq)]
5pub enum Marker {
6 ZERO,
7 SOF(SOFType),
9 JPG,
11 DHT,
13 DAC,
15 RST(u8),
17 SOI,
19 EOI,
21 SOS,
23 DQT,
25 DNL,
27 DRI,
29 DHP,
31 EXP,
33 APP(u8),
35 JPGn(u8),
37 COM,
39 TEM,
41 RES,
43 FILL,
45}
46
47#[derive(Clone, Copy, Debug, PartialEq, Eq)]
48pub enum SOFType {
49 BaselineDCT,
51 ExtendedSequentialDCT,
53 ProgressiveDCT,
55 Lossless,
57 DifferentialSequentialDCT,
59 DifferentialProgressiveDCT,
61 DifferentialLossless,
63 ExtendedSequentialDCTArithmetic,
65 ProgressiveDCTArithmetic,
67 LosslessArithmeticCoding,
69 DifferentialSequentialDCTArithmetic,
71 DifferentialProgressiveDCTArithmetic,
73 DifferentialLosslessArithmetic,
75}
76
77impl From<Marker> for u8 {
78 fn from(marker: Marker) -> Self {
79 use self::{Marker::*, SOFType::*};
80
81 match marker {
82 ZERO => 0x00,
83 TEM => 0x01,
84 RES => 0x02,
85 SOF(BaselineDCT) => 0xC0,
86 SOF(ExtendedSequentialDCT) => 0xC1,
87 SOF(ProgressiveDCT) => 0xC2,
88 SOF(Lossless) => 0xC3,
89 DHT => 0xC4,
90 SOF(DifferentialSequentialDCT) => 0xC5,
91 SOF(DifferentialProgressiveDCT) => 0xC6,
92 SOF(DifferentialLossless) => 0xC7,
93 JPG => 0xC8,
94 SOF(ExtendedSequentialDCTArithmetic) => 0xC9,
95 SOF(ProgressiveDCTArithmetic) => 0xCA,
96 SOF(LosslessArithmeticCoding) => 0xCB,
97 DAC => 0xCC,
98 SOF(DifferentialSequentialDCTArithmetic) => 0xCD,
99 SOF(DifferentialProgressiveDCTArithmetic) => 0xCE,
100 SOF(DifferentialLosslessArithmetic) => 0xCF,
101 RST(v) => 0xD0 + v,
102 SOI => 0xD8,
103 EOI => 0xD9,
104 SOS => 0xDA,
105 DQT => 0xDB,
106 DNL => 0xDC,
107 DRI => 0xDD,
108 DHP => 0xDE,
109 EXP => 0xDF,
110 APP(v) => 0xE0 + v,
111 JPGn(v) => 0xF0 + v,
112 COM => 0xFE,
113 FILL => 0xFF,
114 }
115 }
116}