| 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 | #[derive (Clone, Copy, Debug, PartialEq, Eq)] |
| 12 | pub enum Marker { |
| 13 | /// Start Of Frame markers |
| 14 | /// |
| 15 | /// - SOF(0): Baseline DCT (Huffman coding) |
| 16 | /// - SOF(1): Extended sequential DCT (Huffman coding) |
| 17 | /// - SOF(2): Progressive DCT (Huffman coding) |
| 18 | /// - SOF(3): Lossless (sequential) (Huffman coding) |
| 19 | /// - SOF(5): Differential sequential DCT (Huffman coding) |
| 20 | /// - SOF(6): Differential progressive DCT (Huffman coding) |
| 21 | /// - SOF(7): Differential lossless (sequential) (Huffman coding) |
| 22 | /// - SOF(9): Extended sequential DCT (arithmetic coding) |
| 23 | /// - SOF(10): Progressive DCT (arithmetic coding) |
| 24 | /// - SOF(11): Lossless (sequential) (arithmetic coding) |
| 25 | /// - SOF(13): Differential sequential DCT (arithmetic coding) |
| 26 | /// - SOF(14): Differential progressive DCT (arithmetic coding) |
| 27 | /// - SOF(15): Differential lossless (sequential) (arithmetic coding) |
| 28 | SOF(u8), |
| 29 | /// Define Huffman table(s) |
| 30 | DHT, |
| 31 | /// Define arithmetic coding conditioning(s) |
| 32 | DAC, |
| 33 | /// Restart with modulo 8 count `m` |
| 34 | RST(u8), |
| 35 | /// Start of image |
| 36 | SOI, |
| 37 | /// End of image |
| 38 | EOI, |
| 39 | /// Start of scan |
| 40 | SOS, |
| 41 | /// Define quantization table(s) |
| 42 | DQT, |
| 43 | /// Define number of lines |
| 44 | DNL, |
| 45 | /// Define restart interval |
| 46 | DRI, |
| 47 | /// Reserved for application segments |
| 48 | APP(u8), |
| 49 | /// Comment |
| 50 | COM |
| 51 | } |
| 52 | |
| 53 | impl Marker { |
| 54 | pub fn from_u8(n: u8) -> Option<Marker> { |
| 55 | use self::Marker::{APP, COM, DAC, DHT, DNL, DQT, DRI, EOI, RST, SOF, SOI, SOS}; |
| 56 | |
| 57 | match n { |
| 58 | 0xFE => Some(COM), |
| 59 | 0xC0 => Some(SOF(0)), |
| 60 | 0xC1 => Some(SOF(1)), |
| 61 | 0xC2 => Some(SOF(2)), |
| 62 | 0xC4 => Some(DHT), |
| 63 | 0xCC => Some(DAC), |
| 64 | 0xD0 => Some(RST(0)), |
| 65 | 0xD1 => Some(RST(1)), |
| 66 | 0xD2 => Some(RST(2)), |
| 67 | 0xD3 => Some(RST(3)), |
| 68 | 0xD4 => Some(RST(4)), |
| 69 | 0xD5 => Some(RST(5)), |
| 70 | 0xD6 => Some(RST(6)), |
| 71 | 0xD7 => Some(RST(7)), |
| 72 | 0xD8 => Some(SOI), |
| 73 | 0xD9 => Some(EOI), |
| 74 | 0xDA => Some(SOS), |
| 75 | 0xDB => Some(DQT), |
| 76 | 0xDC => Some(DNL), |
| 77 | 0xDD => Some(DRI), |
| 78 | 0xE0 => Some(APP(0)), |
| 79 | 0xE1 => Some(APP(1)), |
| 80 | 0xE2 => Some(APP(2)), |
| 81 | 0xEE => Some(APP(14)), |
| 82 | _ => None |
| 83 | } |
| 84 | } |
| 85 | } |
| 86 | |