JPEGShared.h 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. /*
  2. * Copyright (c) 2023, Lucas Chollet <lucas.chollet@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. // These names are defined in B.1.1.3 - Marker assignments
  8. #define JPEG_APPN0 0XFFE0
  9. #define JPEG_APPN1 0XFFE1
  10. #define JPEG_APPN2 0XFFE2
  11. #define JPEG_APPN3 0XFFE3
  12. #define JPEG_APPN4 0XFFE4
  13. #define JPEG_APPN5 0XFFE5
  14. #define JPEG_APPN6 0XFFE6
  15. #define JPEG_APPN7 0XFFE7
  16. #define JPEG_APPN8 0XFFE8
  17. #define JPEG_APPN9 0XFFE9
  18. #define JPEG_APPN10 0XFFEA
  19. #define JPEG_APPN11 0XFFEB
  20. #define JPEG_APPN12 0XFFEC
  21. #define JPEG_APPN13 0XFFED
  22. #define JPEG_APPN14 0xFFEE
  23. #define JPEG_APPN15 0xFFEF
  24. #define JPEG_RESERVED1 0xFFF1
  25. #define JPEG_RESERVED2 0xFFF2
  26. #define JPEG_RESERVED3 0xFFF3
  27. #define JPEG_RESERVED4 0xFFF4
  28. #define JPEG_RESERVED5 0xFFF5
  29. #define JPEG_RESERVED6 0xFFF6
  30. #define JPEG_RESERVED7 0xFFF7
  31. #define JPEG_RESERVED8 0xFFF8
  32. #define JPEG_RESERVED9 0xFFF9
  33. #define JPEG_RESERVEDA 0xFFFA
  34. #define JPEG_RESERVEDB 0xFFFB
  35. #define JPEG_RESERVEDC 0xFFFC
  36. #define JPEG_RESERVEDD 0xFFFD
  37. #define JPEG_RST0 0xFFD0
  38. #define JPEG_RST1 0xFFD1
  39. #define JPEG_RST2 0xFFD2
  40. #define JPEG_RST3 0xFFD3
  41. #define JPEG_RST4 0xFFD4
  42. #define JPEG_RST5 0xFFD5
  43. #define JPEG_RST6 0xFFD6
  44. #define JPEG_RST7 0xFFD7
  45. #define JPEG_ZRL 0xF0
  46. #define JPEG_DHP 0xFFDE
  47. #define JPEG_EXP 0xFFDF
  48. #define JPEG_DAC 0XFFCC
  49. #define JPEG_DHT 0XFFC4
  50. #define JPEG_DQT 0XFFDB
  51. #define JPEG_EOI 0xFFD9
  52. #define JPEG_DRI 0XFFDD
  53. #define JPEG_SOF0 0XFFC0
  54. #define JPEG_SOF1 0XFFC1
  55. #define JPEG_SOF2 0xFFC2
  56. #define JPEG_SOF15 0xFFCF
  57. #define JPEG_SOI 0XFFD8
  58. #define JPEG_SOS 0XFFDA
  59. #define JPEG_COM 0xFFFE
  60. namespace Gfx {
  61. using Marker = u16;
  62. constexpr static u8 zigzag_map[64] {
  63. 0, 1, 8, 16, 9, 2, 3, 10,
  64. 17, 24, 32, 25, 18, 11, 4, 5,
  65. 12, 19, 26, 33, 40, 48, 41, 34,
  66. 27, 20, 13, 6, 7, 14, 21, 28,
  67. 35, 42, 49, 56, 57, 50, 43, 36,
  68. 29, 22, 15, 23, 30, 37, 44, 51,
  69. 58, 59, 52, 45, 38, 31, 39, 46,
  70. 53, 60, 61, 54, 47, 55, 62, 63
  71. };
  72. /**
  73. * MCU means group of data units that are coded together. A data unit is an 8x8
  74. * block of component data. In interleaved scans, number of non-interleaved data
  75. * units of a component C is Ch * Cv, where Ch and Cv represent the horizontal &
  76. * vertical subsampling factors of the component, respectively. A MacroBlock is
  77. * an 8x8 block of RGB values before encoding, and 8x8 block of YCbCr values when
  78. * we're done decoding the huffman stream.
  79. */
  80. struct Macroblock {
  81. union {
  82. i16 y[64] = { 0 };
  83. i16 r[64];
  84. };
  85. union {
  86. i16 cb[64] = { 0 };
  87. i16 g[64];
  88. };
  89. union {
  90. i16 cr[64] = { 0 };
  91. i16 b[64];
  92. };
  93. i16 k[64] = { 0 };
  94. };
  95. }