#include #include #pragma once // PNG File Struct struct PNG_START_FILE_STRUCT { unsigned char file_sig[8]; unsigned char ihdr_length[4]; unsigned char ihdr_header[4]; unsigned char file_width[4]; unsigned char file_height[4]; unsigned char bit_depth[1]; unsigned char color_type[1]; unsigned char compression_method[1]; unsigned char filter_method[1]; unsigned char interlace_method[1]; unsigned char ihdr_crc[4]; }; struct PNG_IDAT_FILE_STRUCT { union{ unsigned char idat_length[4]; uint32_t idat_data_length; }; unsigned char idat_header[4]; unsigned char idat_crc[4]; unsigned char *idat_data; }; struct PNG_FILE_STRUCT { struct PNG_START_FILE_STRUCT png_start_data; struct PNG_IDAT_FILE_STRUCT png_idat_data; }; struct EMBED_THREAD_STRUCT { pthread_mutex_t *mutex_lock; pthread_t thread_id; int *searching; unsigned char *data; unsigned int data_len; size_t uncom_data_len; int width; int color_range; unsigned int win_size; }; extern const long png_signature[8]; unsigned long check_header_length(unsigned char *addr, long offset); int check_file_header(char *addr); int create_cc_file(unsigned char *addr, unsigned long file_length); unsigned char* file_to_char_array(FILE *in_file, size_t* size); void populate_start_png(unsigned char *addr, struct PNG_START_FILE_STRUCT *png_data); void populate_idat_png(unsigned char *addr, struct PNG_IDAT_FILE_STRUCT *png_data, unsigned long offset);