1
0
mirror of https://github.com/azure-rtos/guix.git synced 2025-02-04 07:13:17 +08:00
guix/common/inc/gx_image_reader.h
2020-05-11 08:48:55 -06:00

175 lines
9.0 KiB
C

/**************************************************************************/
/* */
/* Copyright (c) Microsoft Corporation. All rights reserved. */
/* */
/* This software is licensed under the Microsoft Software License */
/* Terms for Microsoft Azure RTOS. Full text of the license can be */
/* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA */
/* and in the root directory of this software. */
/* */
/**************************************************************************/
/**************************************************************************/
/**************************************************************************/
/** */
/** GUIX Component */
/** */
/** Image Reader Management (Image Reader) */
/** */
/**************************************************************************/
/**************************************************************************/
/**************************************************************************/
/* */
/* COMPONENT DEFINITION RELEASE */
/* */
/* gx_image_reader.h PORTABLE C */
/* 6.0 */
/* AUTHOR */
/* */
/* Kenneth Maxwell, Microsoft Corporation */
/* */
/* DESCRIPTION */
/* */
/* This file defines the GUIX image reader management component, */
/* including all data types and external references. It is assumed */
/* that gx_api.h and gx_port.h have already been included. */
/* */
/* RELEASE HISTORY */
/* */
/* DATE NAME DESCRIPTION */
/* */
/* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */
/* */
/**************************************************************************/
#if defined(GX_SOFTWARE_DECODER_SUPPORT)
#ifndef GX_IMAGE_READER_H
#define GX_IMAGE_READER_H
#define GX_IMAGE_FORMAT_1BPP 0xf0
#define GX_IMAGE_FORMAT_2BPP 0xf1
#define GX_IMAGE_FORMAT_4BPP 0xf2
#define GX_IMAGE_FORMAT_8BPP 0xf3
#define GX_IMAGE_FORMAT_16BPP_GRAY 0xf4 /* Internal format: 16bits for each gray value. */
#define GX_IMAGE_FORMAT_16BPP_GRAY_ALPHA 0xf5 /* Internal format: gray: alpha stream, 8 bits. */
#define GX_IMAGE_FORMAT_32BPP_GRAY_ALPHA 0xf6 /* Internal format: gray: alpha steam, 16bits. */
#define GX_IMAGE_FORMAT_24BPP 0xf7 /* Internal format: r:g:b stream, 8bits for each channel. */
#define GX_IMAGE_FORMAT_32BPP 0xf8 /* Internal format: r:g:b:a strem, 8bits for each channel. */
#define GX_IMAGE_FORMAT_48BPP 0xf9 /* Internal format: r:g:b stream, 16bits for each channel. */
#define GX_IMAGE_FORMAT_64BPP 0xfa /* Internal format: r:g:b:a stream, 16bits for each channel */
#define GX_TRANSPARENT_COLOR 0xff
/* Control block used internally for jpeg reader. */
typedef struct GX_JPEG_INFO_STRUCT
{
USHORT gx_jpeg_width;
USHORT gx_jpeg_height;
INT gx_jpeg_num_of_components;
GX_UBYTE gx_jpeg_sample_factor[3];
GX_UBYTE gx_jpeg_component_id[3];
GX_UBYTE gx_jpeg_qantization_table_index[3];
GX_UBYTE gx_jpeg_dc_table_index[3];
GX_UBYTE gx_jpeg_ac_table_index[3];
INT gx_jpeg_quantization_table[4][64];
INT *gx_jpeg_huffman_table[2][2];
GX_VALUE gx_jpeg_huffman_bits_count[2][2][16];
INT gx_jpeg_restart_interval;
GX_UBYTE gx_jpeg_Y_block[256];
GX_UBYTE gx_jpeg_Cr_block[64];
GX_UBYTE gx_jpeg_Cb_block[64];
INT gx_jpeg_pre_dc[3];
INT gx_jpeg_vecter[64];
GX_UBYTE *gx_jpeg_data;
INT gx_jpeg_data_size;
INT gx_jpeg_data_index;
GX_UBYTE *gx_jpeg_decoded_data;
UINT gx_jpeg_decoded_data_size;
GX_DRAW_CONTEXT *gx_jpeg_draw_context;
UINT (*gx_jpeg_mcu_draw)(struct GX_JPEG_INFO_STRUCT *, INT, INT);
INT gx_jpeg_draw_xpos;
INT gx_jpeg_draw_ypos;
} GX_JPEG_INFO;
/* control block used internally for png reader */
typedef struct GX_PNG_STRUCT
{
GX_UBYTE *gx_png_data;
INT gx_png_data_size;
INT gx_png_data_index;
GX_UBYTE *gx_png_decoded_data;
INT gx_png_decoded_data_len;
INT gx_png_width;
INT gx_png_height;
GX_UBYTE gx_png_bit_depth;
INT gx_png_color_type;
GX_UBYTE gx_png_bpp; /* bits per pixel */
INT gx_png_compression_method;
INT gx_png_filter_method;
INT gx_png_interlace_method;
UINT gx_png_crc_table[256];
INT gx_png_gamma;
INT gx_png_huffman_clen_table[20];
INT gx_png_huffman_clen_bits_count[17];
INT gx_png_huffman_lit_table[286];
INT gx_png_huffman_lit_code_len[286];
INT gx_png_huffman_lit_bits_count[17];
INT gx_png_huffman_dist_table[30];
INT gx_png_huffman_dist_code_len[30];
INT gx_png_huffman_dist_bits_count[17];
GX_COLOR gx_png_palette_table[256];
INT gx_png_palette_table_size;
GX_COLOR *gx_png_trans;
INT gx_png_trans_num;
INT gx_png_trunk_end_index;
UINT gx_png_trunk_crc;
} GX_PNG;
/* Define API functions for image reader. */
UINT _gx_image_reader_start(GX_IMAGE_READER *image_reader, GX_PIXELMAP *outmap);
UINT _gx_image_reader_colorspace_convert(GX_IMAGE_READER *image_reader, GX_PIXELMAP *outmap);
UINT _gx_image_reader_create(GX_IMAGE_READER *image_reader,
GX_CONST GX_UBYTE *read_data,
INT read_data_size,
GX_UBYTE color_format,
GX_UBYTE mode);
/* Define internal function prototypes. */
UINT _gx_image_reader_png_decode(GX_CONST GX_UBYTE *read_data, ULONG read_data_size, GX_PIXELMAP *outmap);
UINT _gx_image_reader_jpeg_decode(GX_CONST GX_UBYTE *read_data, ULONG data_size, GX_PIXELMAP *outmap);
UINT _gx_image_reader_jpeg_mcu_decode(GX_CONST GX_UBYTE * read_data, ULONG data_size,
GX_DRAW_CONTEXT * context, INT xpos, INT ypos,
UINT(draw_function)(GX_JPEG_INFO *, INT, INT));
UINT _gx_image_reader_pixel_read_callback_set(GX_IMAGE_READER *image_reader, GX_PIXELMAP *outmap);
UINT _gx_image_reader_pixel_write_callback_set(GX_IMAGE_READER *image_reader, GX_PIXELMAP *outmap);
UINT _gx_image_reader_image_decode(GX_IMAGE_READER *image_reader, GX_PIXELMAP *outmap);
UINT _gx_image_reader_palette_set(GX_IMAGE_READER *image_reader, GX_COLOR *pal, UINT palsize);
UINT _gx_image_reader_nearest_palette_color_get(GX_IMAGE_READER *image_reader, GX_PIXEL *want_color, INT *index);
VOID _gx_image_reader_rgb2gray(GX_PIXEL *pixel, GX_UBYTE *gray);
UINT _gx_image_reader_rle_encode(GX_IMAGE_READER *image_reader, GX_PIXELMAP *pRLEmap);
UINT _gx_image_reader_rle_encode_size_get(GX_IMAGE_READER *image_reader, UINT *data_size, UINT *aux_size);
VOID _gx_image_reader_rgb2gray(GX_PIXEL *pixel, GX_UBYTE *gray);
/* Define error checking shells for API services. These are only referenced by the
application. */
UINT _gxe_image_reader_create(GX_IMAGE_READER *image_reader,
GX_CONST GX_UBYTE *read_data,
INT read_data_size,
GX_UBYTE color_format,
GX_UBYTE mode);
UINT _gxe_image_reader_palette_set(GX_IMAGE_READER *image_reader, GX_COLOR *pal, UINT palsize);
UINT _gxe_image_reader_start(GX_IMAGE_READER *image_reader, GX_PIXELMAP *outmap);
#endif
#endif