瀏覽代碼

JPGLoader: Move JPGLoader internal structs and #defines to JPGLoader.cpp

devashish 5 年之前
父節點
當前提交
4b19b99b36
共有 2 個文件被更改,包括 152 次插入150 次删除
  1. 151 0
      Libraries/LibGfx/JPGLoader.cpp
  2. 1 150
      Libraries/LibGfx/JPGLoader.h

+ 151 - 0
Libraries/LibGfx/JPGLoader.cpp

@@ -40,6 +40,60 @@
     if (JPG_DBG)   \
     dbg() << x
 
+#define JPG_INVALID 0X0000
+
+#define JPG_APPN0 0XFFE0
+#define JPG_APPN1 0XFFE1
+#define JPG_APPN2 0XFFE2
+#define JPG_APPN3 0XFFE3
+#define JPG_APPN4 0XFFE4
+#define JPG_APPN5 0XFFE5
+#define JPG_APPN6 0XFFE6
+#define JPG_APPN7 0XFFE7
+#define JPG_APPN8 0XFFE8
+#define JPG_APPN9 0XFFE9
+#define JPG_APPNA 0XFFEA
+#define JPG_APPNB 0XFFEB
+#define JPG_APPNC 0XFFEC
+#define JPG_APPND 0XFFED
+#define JPG_APPNE 0xFFEE
+#define JPG_APPNF 0xFFEF
+
+#define JPG_RESERVED1 0xFFF1
+#define JPG_RESERVED2 0xFFF2
+#define JPG_RESERVED3 0xFFF3
+#define JPG_RESERVED4 0xFFF4
+#define JPG_RESERVED5 0xFFF5
+#define JPG_RESERVED6 0xFFF6
+#define JPG_RESERVED7 0xFFF7
+#define JPG_RESERVED8 0xFFF8
+#define JPG_RESERVED9 0xFFF9
+#define JPG_RESERVEDA 0xFFFA
+#define JPG_RESERVEDB 0xFFFB
+#define JPG_RESERVEDC 0xFFFC
+#define JPG_RESERVEDD 0xFFFD
+
+#define JPG_RST0 0xFFD0
+#define JPG_RST1 0xFFD1
+#define JPG_RST2 0xFFD2
+#define JPG_RST3 0xFFD3
+#define JPG_RST4 0xFFD4
+#define JPG_RST5 0xFFD5
+#define JPG_RST6 0xFFD6
+#define JPG_RST7 0xFFD7
+
+#define JPG_DHP 0xFFDE
+#define JPG_EXP 0xFFDF
+
+#define JPG_DHT 0XFFC4
+#define JPG_DQT 0XFFDB
+#define JPG_EOI 0xFFD9
+#define JPG_RST 0XFFDD
+#define JPG_SOF0 0XFFC0
+#define JPG_SOI 0XFFD8
+#define JPG_SOS 0XFFDA
+#define JPG_COM 0xFFFE
+
 namespace Gfx {
 
 constexpr static u8 zigzag_map[64] {
@@ -55,6 +109,103 @@ constexpr static u8 zigzag_map[64] {
 
 using Marker = u16;
 
+/**
+ * MCU means group of data units that are coded together. A data unit is an 8x8
+ * block of component data. In interleaved scans, number of non-interleaved data
+ * units of a component C is Ch * Cv, where Ch and Cv represent the horizontal &
+ * vertical subsampling factors of the component, respectively. A MacroBlock is
+ * an 8x8 block of RGB values before encoding, and 8x8 block of YCbCr values when
+ * we're done decoding the huffman stream.
+ */
+struct Macroblock {
+    union {
+        i32 y[64] = { 0 };
+        i32 r[64];
+    };
+
+    union {
+        i32 cb[64] = { 0 };
+        i32 g[64];
+    };
+
+    union {
+        i32 cr[64] = { 0 };
+        i32 b[64];
+    };
+};
+
+struct MacroblockMeta {
+    u32 total;
+    u32 padded_total;
+    u32 hcount;
+    u32 vcount;
+    u32 hpadded_count;
+    u32 vpadded_count;
+};
+
+struct ComponentSpec {
+    i8 id { -1 };
+    u8 hsample_factor { 1 }; // Horizontal sampling factor.
+    u8 vsample_factor { 1 }; // Vertical sampling factor.
+    u8 ac_destination_id;
+    u8 dc_destination_id;
+    u8 qtable_id; // Quantization table id.
+};
+
+struct StartOfFrame {
+    enum class FrameType {
+        Baseline = 0
+        // Progressive = 1
+    };
+
+    FrameType type { FrameType::Baseline };
+    u8 precision;
+    u16 height;
+    u16 width;
+};
+
+struct HuffmanTableSpec {
+    u8 type;
+    u8 destination_id;
+    u8 code_counts[16] = { 0 };
+    Vector<u8> symbols;
+    Vector<u16> codes;
+};
+
+struct HuffmanStreamState {
+    Vector<u8> stream;
+    u8 bit_offset { 0 };
+    size_t byte_offset { 0 };
+};
+
+struct JPGLoadingContext {
+    enum State {
+        NotDecoded = 0,
+        Error,
+        FrameDecoded,
+        BitmapDecoded
+    };
+
+    State state { State::NotDecoded };
+    const u8* data { nullptr };
+    size_t data_size { 0 };
+    u32 luma_table[64];
+    u32 chroma_table[64];
+    StartOfFrame frame;
+    u8 hsample_factor;
+    u8 vsample_factor;
+    bool has_zero_based_ids;
+    u8 component_count;
+    ComponentSpec components[3];
+    RefPtr<Gfx::Bitmap> bitmap;
+    u16 dc_reset_interval;
+    Vector<HuffmanTableSpec> dc_tables;
+    Vector<HuffmanTableSpec> ac_tables;
+    HuffmanStreamState huffman_stream;
+    i32 previous_dc_values[3] = { 0 };
+    MacroblockMeta mblock_meta;
+};
+
 void generate_huffman_codes(HuffmanTableSpec& table)
 {
     unsigned code = 0;

+ 1 - 150
Libraries/LibGfx/JPGLoader.h

@@ -31,161 +31,12 @@
 #include <LibGfx/ImageDecoder.h>
 #include <LibGfx/Size.h>
 
-#define JPG_INVALID 0X0000
-
-#define JPG_APPN0 0XFFE0
-#define JPG_APPN1 0XFFE1
-#define JPG_APPN2 0XFFE2
-#define JPG_APPN3 0XFFE3
-#define JPG_APPN4 0XFFE4
-#define JPG_APPN5 0XFFE5
-#define JPG_APPN6 0XFFE6
-#define JPG_APPN7 0XFFE7
-#define JPG_APPN8 0XFFE8
-#define JPG_APPN9 0XFFE9
-#define JPG_APPNA 0XFFEA
-#define JPG_APPNB 0XFFEB
-#define JPG_APPNC 0XFFEC
-#define JPG_APPND 0XFFED
-#define JPG_APPNE 0xFFEE
-#define JPG_APPNF 0xFFEF
-
-#define JPG_RESERVED1 0xFFF1
-#define JPG_RESERVED2 0xFFF2
-#define JPG_RESERVED3 0xFFF3
-#define JPG_RESERVED4 0xFFF4
-#define JPG_RESERVED5 0xFFF5
-#define JPG_RESERVED6 0xFFF6
-#define JPG_RESERVED7 0xFFF7
-#define JPG_RESERVED8 0xFFF8
-#define JPG_RESERVED9 0xFFF9
-#define JPG_RESERVEDA 0xFFFA
-#define JPG_RESERVEDB 0xFFFB
-#define JPG_RESERVEDC 0xFFFC
-#define JPG_RESERVEDD 0xFFFD
-
-#define JPG_RST0 0xFFD0
-#define JPG_RST1 0xFFD1
-#define JPG_RST2 0xFFD2
-#define JPG_RST3 0xFFD3
-#define JPG_RST4 0xFFD4
-#define JPG_RST5 0xFFD5
-#define JPG_RST6 0xFFD6
-#define JPG_RST7 0xFFD7
-
-#define JPG_DHP 0xFFDE
-#define JPG_EXP 0xFFDF
-
-#define JPG_DHT 0XFFC4
-#define JPG_DQT 0XFFDB
-#define JPG_EOI 0xFFD9
-#define JPG_RST 0XFFDD
-#define JPG_SOF0 0XFFC0
-#define JPG_SOI 0XFFD8
-#define JPG_SOS 0XFFDA
-#define JPG_COM 0xFFFE
-
 namespace Gfx {
 
 RefPtr<Gfx::Bitmap> load_jpg(const StringView& path);
 RefPtr<Gfx::Bitmap> load_jpg_from_memory(const u8* data, size_t length);
 
-/**
- * MCU means group of data units that are coded together. A data unit is an 8x8
- * block of component data. In interleaved scans, number of non-interleaved data
- * units of a component C is Ch * Cv, where Ch and Cv represent the horizontal &
- * vertical subsampling factors of the component, respectively. A MacroBlock is
- * an 8x8 block of RGB values before encoding, and 8x8 block of YCbCr values when
- * we're done decoding the huffman stream.
- */
-struct Macroblock {
-    union {
-        i32 y[64] = { 0 };
-        i32 r[64];
-    };
-
-    union {
-        i32 cb[64] = { 0 };
-        i32 g[64];
-    };
-
-    union {
-        i32 cr[64] = { 0 };
-        i32 b[64];
-    };
-};
-
-struct MacroblockMeta {
-    u32 total;
-    u32 padded_total;
-    u32 hcount;
-    u32 vcount;
-    u32 hpadded_count;
-    u32 vpadded_count;
-};
-
-struct ComponentSpec {
-    i8 id { -1 };
-    u8 hsample_factor { 1 }; // Horizontal sampling factor.
-    u8 vsample_factor { 1 }; // Vertical sampling factor.
-    u8 ac_destination_id;
-    u8 dc_destination_id;
-    u8 qtable_id; // Quantization table id.
-};
-
-struct StartOfFrame {
-    enum class FrameType {
-        Baseline = 0
-        // Progressive = 1
-    };
-
-    FrameType type { FrameType::Baseline };
-    u8 precision;
-    u16 height;
-    u16 width;
-};
-
-struct HuffmanTableSpec {
-    u8 type;
-    u8 destination_id;
-    u8 code_counts[16] = { 0 };
-    Vector<u8> symbols;
-    Vector<u16> codes;
-};
-
-struct HuffmanStreamState {
-    Vector<u8> stream;
-    u8 bit_offset { 0 };
-    size_t byte_offset { 0 };
-};
-
-struct JPGLoadingContext {
-    enum State {
-        NotDecoded = 0,
-        Error,
-        FrameDecoded,
-        BitmapDecoded
-    };
-
-    State state { State::NotDecoded };
-    const u8* data { nullptr };
-    size_t data_size { 0 };
-    u32 luma_table[64];
-    u32 chroma_table[64];
-    StartOfFrame frame;
-    u8 hsample_factor;
-    u8 vsample_factor;
-    bool has_zero_based_ids;
-    u8 component_count;
-    ComponentSpec components[3];
-    RefPtr<Gfx::Bitmap> bitmap;
-    u16 dc_reset_interval;
-    Vector<HuffmanTableSpec> dc_tables;
-    Vector<HuffmanTableSpec> ac_tables;
-    HuffmanStreamState huffman_stream;
-    i32 previous_dc_values[3] = { 0 };
-    MacroblockMeta mblock_meta;
-};
+struct JPGLoadingContext;
 
 class JPGImageDecoderPlugin : public ImageDecoderPlugin {
 public: