gx_image_reader.h 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. /**************************************************************************/
  2. /* */
  3. /* Copyright (c) Microsoft Corporation. All rights reserved. */
  4. /* */
  5. /* This software is licensed under the Microsoft Software License */
  6. /* Terms for Microsoft Azure RTOS. Full text of the license can be */
  7. /* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA */
  8. /* and in the root directory of this software. */
  9. /* */
  10. /**************************************************************************/
  11. /**************************************************************************/
  12. /**************************************************************************/
  13. /** */
  14. /** GUIX Component */
  15. /** */
  16. /** Image Reader Management (Image Reader) */
  17. /** */
  18. /**************************************************************************/
  19. /**************************************************************************/
  20. /**************************************************************************/
  21. /* */
  22. /* COMPONENT DEFINITION RELEASE */
  23. /* */
  24. /* gx_image_reader.h PORTABLE C */
  25. /* 6.0 */
  26. /* AUTHOR */
  27. /* */
  28. /* Kenneth Maxwell, Microsoft Corporation */
  29. /* */
  30. /* DESCRIPTION */
  31. /* */
  32. /* This file defines the GUIX image reader management component, */
  33. /* including all data types and external references. It is assumed */
  34. /* that gx_api.h and gx_port.h have already been included. */
  35. /* */
  36. /* RELEASE HISTORY */
  37. /* */
  38. /* DATE NAME DESCRIPTION */
  39. /* */
  40. /* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */
  41. /* */
  42. /**************************************************************************/
  43. #if defined(GX_SOFTWARE_DECODER_SUPPORT)
  44. #ifndef GX_IMAGE_READER_H
  45. #define GX_IMAGE_READER_H
  46. #define GX_IMAGE_FORMAT_1BPP 0xf0
  47. #define GX_IMAGE_FORMAT_2BPP 0xf1
  48. #define GX_IMAGE_FORMAT_4BPP 0xf2
  49. #define GX_IMAGE_FORMAT_8BPP 0xf3
  50. #define GX_IMAGE_FORMAT_16BPP_GRAY 0xf4 /* Internal format: 16bits for each gray value. */
  51. #define GX_IMAGE_FORMAT_16BPP_GRAY_ALPHA 0xf5 /* Internal format: gray: alpha stream, 8 bits. */
  52. #define GX_IMAGE_FORMAT_32BPP_GRAY_ALPHA 0xf6 /* Internal format: gray: alpha steam, 16bits. */
  53. #define GX_IMAGE_FORMAT_24BPP 0xf7 /* Internal format: r:g:b stream, 8bits for each channel. */
  54. #define GX_IMAGE_FORMAT_32BPP 0xf8 /* Internal format: r:g:b:a strem, 8bits for each channel. */
  55. #define GX_IMAGE_FORMAT_48BPP 0xf9 /* Internal format: r:g:b stream, 16bits for each channel. */
  56. #define GX_IMAGE_FORMAT_64BPP 0xfa /* Internal format: r:g:b:a stream, 16bits for each channel */
  57. #define GX_TRANSPARENT_COLOR 0xff
  58. /* Control block used internally for jpeg reader. */
  59. typedef struct GX_JPEG_INFO_STRUCT
  60. {
  61. USHORT gx_jpeg_width;
  62. USHORT gx_jpeg_height;
  63. INT gx_jpeg_num_of_components;
  64. GX_UBYTE gx_jpeg_sample_factor[3];
  65. GX_UBYTE gx_jpeg_component_id[3];
  66. GX_UBYTE gx_jpeg_qantization_table_index[3];
  67. GX_UBYTE gx_jpeg_dc_table_index[3];
  68. GX_UBYTE gx_jpeg_ac_table_index[3];
  69. INT gx_jpeg_quantization_table[4][64];
  70. INT *gx_jpeg_huffman_table[2][2];
  71. GX_VALUE gx_jpeg_huffman_bits_count[2][2][16];
  72. INT gx_jpeg_restart_interval;
  73. GX_UBYTE gx_jpeg_Y_block[256];
  74. GX_UBYTE gx_jpeg_Cr_block[64];
  75. GX_UBYTE gx_jpeg_Cb_block[64];
  76. INT gx_jpeg_pre_dc[3];
  77. INT gx_jpeg_vecter[64];
  78. GX_UBYTE *gx_jpeg_data;
  79. INT gx_jpeg_data_size;
  80. INT gx_jpeg_data_index;
  81. GX_UBYTE *gx_jpeg_decoded_data;
  82. UINT gx_jpeg_decoded_data_size;
  83. GX_DRAW_CONTEXT *gx_jpeg_draw_context;
  84. UINT (*gx_jpeg_mcu_draw)(struct GX_JPEG_INFO_STRUCT *, INT, INT);
  85. INT gx_jpeg_draw_xpos;
  86. INT gx_jpeg_draw_ypos;
  87. } GX_JPEG_INFO;
  88. /* control block used internally for png reader */
  89. typedef struct GX_PNG_STRUCT
  90. {
  91. GX_UBYTE *gx_png_data;
  92. INT gx_png_data_size;
  93. INT gx_png_data_index;
  94. GX_UBYTE *gx_png_decoded_data;
  95. INT gx_png_decoded_data_len;
  96. INT gx_png_width;
  97. INT gx_png_height;
  98. GX_UBYTE gx_png_bit_depth;
  99. INT gx_png_color_type;
  100. GX_UBYTE gx_png_bpp; /* bits per pixel */
  101. INT gx_png_compression_method;
  102. INT gx_png_filter_method;
  103. INT gx_png_interlace_method;
  104. UINT gx_png_crc_table[256];
  105. INT gx_png_gamma;
  106. INT gx_png_huffman_clen_table[20];
  107. INT gx_png_huffman_clen_bits_count[17];
  108. INT gx_png_huffman_lit_table[286];
  109. INT gx_png_huffman_lit_code_len[286];
  110. INT gx_png_huffman_lit_bits_count[17];
  111. INT gx_png_huffman_dist_table[30];
  112. INT gx_png_huffman_dist_code_len[30];
  113. INT gx_png_huffman_dist_bits_count[17];
  114. GX_COLOR gx_png_palette_table[256];
  115. INT gx_png_palette_table_size;
  116. GX_COLOR *gx_png_trans;
  117. INT gx_png_trans_num;
  118. INT gx_png_trunk_end_index;
  119. UINT gx_png_trunk_crc;
  120. } GX_PNG;
  121. /* Define API functions for image reader. */
  122. UINT _gx_image_reader_start(GX_IMAGE_READER *image_reader, GX_PIXELMAP *outmap);
  123. UINT _gx_image_reader_colorspace_convert(GX_IMAGE_READER *image_reader, GX_PIXELMAP *outmap);
  124. UINT _gx_image_reader_create(GX_IMAGE_READER *image_reader,
  125. GX_CONST GX_UBYTE *read_data,
  126. INT read_data_size,
  127. GX_UBYTE color_format,
  128. GX_UBYTE mode);
  129. /* Define internal function prototypes. */
  130. UINT _gx_image_reader_png_decode(GX_CONST GX_UBYTE *read_data, ULONG read_data_size, GX_PIXELMAP *outmap);
  131. UINT _gx_image_reader_jpeg_decode(GX_CONST GX_UBYTE *read_data, ULONG data_size, GX_PIXELMAP *outmap);
  132. UINT _gx_image_reader_jpeg_mcu_decode(GX_CONST GX_UBYTE * read_data, ULONG data_size,
  133. GX_DRAW_CONTEXT * context, INT xpos, INT ypos,
  134. UINT(draw_function)(GX_JPEG_INFO *, INT, INT));
  135. UINT _gx_image_reader_pixel_read_callback_set(GX_IMAGE_READER *image_reader, GX_PIXELMAP *outmap);
  136. UINT _gx_image_reader_pixel_write_callback_set(GX_IMAGE_READER *image_reader, GX_PIXELMAP *outmap);
  137. UINT _gx_image_reader_image_decode(GX_IMAGE_READER *image_reader, GX_PIXELMAP *outmap);
  138. UINT _gx_image_reader_palette_set(GX_IMAGE_READER *image_reader, GX_COLOR *pal, UINT palsize);
  139. UINT _gx_image_reader_nearest_palette_color_get(GX_IMAGE_READER *image_reader, GX_PIXEL *want_color, INT *index);
  140. VOID _gx_image_reader_rgb2gray(GX_PIXEL *pixel, GX_UBYTE *gray);
  141. UINT _gx_image_reader_rle_encode(GX_IMAGE_READER *image_reader, GX_PIXELMAP *pRLEmap);
  142. UINT _gx_image_reader_rle_encode_size_get(GX_IMAGE_READER *image_reader, UINT *data_size, UINT *aux_size);
  143. VOID _gx_image_reader_rgb2gray(GX_PIXEL *pixel, GX_UBYTE *gray);
  144. /* Define error checking shells for API services. These are only referenced by the
  145. application. */
  146. UINT _gxe_image_reader_create(GX_IMAGE_READER *image_reader,
  147. GX_CONST GX_UBYTE *read_data,
  148. INT read_data_size,
  149. GX_UBYTE color_format,
  150. GX_UBYTE mode);
  151. UINT _gxe_image_reader_palette_set(GX_IMAGE_READER *image_reader, GX_COLOR *pal, UINT palsize);
  152. UINT _gxe_image_reader_start(GX_IMAGE_READER *image_reader, GX_PIXELMAP *outmap);
  153. #endif
  154. #endif