jpeg_encoder/
marker.rs

1#![allow(clippy::upper_case_acronyms)]
2
3// Table B.1
4#[derive(Clone, Copy, Debug, PartialEq, Eq)]
5pub enum Marker {
6    ZERO,
7    /// Start Of Frame markers
8    SOF(SOFType),
9    /// Reserved for JPEG extensions
10    JPG,
11    /// Define Huffman table(s)
12    DHT,
13    /// Define arithmetic coding conditioning(s)
14    DAC,
15    /// Restart with modulo 8 count `m`
16    RST(u8),
17    /// Start of image
18    SOI,
19    /// End of image
20    EOI,
21    /// Start of scan
22    SOS,
23    /// Define quantization table(s)
24    DQT,
25    /// Define number of lines
26    DNL,
27    /// Define restart interval
28    DRI,
29    /// Define hierarchical progression
30    DHP,
31    /// Expand reference component(s)
32    EXP,
33    /// Reserved for application segments
34    APP(u8),
35    /// Reserved for JPEG extensions
36    JPGn(u8),
37    /// Comment
38    COM,
39    /// For temporary private use in arithmetic coding
40    TEM,
41    /// Reserved
42    RES,
43    /// Fill byte
44    FILL,
45}
46
47#[derive(Clone, Copy, Debug, PartialEq, Eq)]
48pub enum SOFType {
49    /// SOF(0)
50    BaselineDCT,
51    /// SOF(1)
52    ExtendedSequentialDCT,
53    /// SOF(2)
54    ProgressiveDCT,
55    /// SOF(3)
56    Lossless,
57    /// SOF(5)
58    DifferentialSequentialDCT,
59    /// SOF(6)
60    DifferentialProgressiveDCT,
61    /// SOF(7)
62    DifferentialLossless,
63    /// SOF(9)
64    ExtendedSequentialDCTArithmetic,
65    /// SOF(10)
66    ProgressiveDCTArithmetic,
67    /// SOF(11)
68    LosslessArithmeticCoding,
69    /// SOF(13)
70    DifferentialSequentialDCTArithmetic,
71    /// SOF(14)
72    DifferentialProgressiveDCTArithmetic,
73    /// SOF(15)
74    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}