bool rpng_load_image_argb_process_init(struct rpng_t *rpng, uint32_t **data, unsigned *width, unsigned *height) { rpng->process.inflate_buf_size = 0; rpng->process.inflate_buf = NULL; png_pass_geom(&rpng->ihdr, rpng->ihdr.width, rpng->ihdr.height, NULL, NULL, &rpng->process.inflate_buf_size); if (rpng->ihdr.interlace == 1) /* To be sure. */ rpng->process.inflate_buf_size *= 2; rpng->process.stream = zlib_stream_new(); if (!rpng->process.stream) return false; if (!zlib_inflate_init(rpng->process.stream)) return false; rpng->process.inflate_buf = (uint8_t*)malloc(rpng->process.inflate_buf_size); if (!rpng->process.inflate_buf) return false; zlib_set_stream( rpng->process.stream, rpng->idat_buf.size, rpng->process.inflate_buf_size, rpng->idat_buf.data, rpng->process.inflate_buf); rpng->process.initialized = true; return true; }
bool zlib_inflate_data_to_file_init( zlib_file_handle_t *handle, const uint8_t *cdata, uint32_t csize, uint32_t size) { z_stream *stream = NULL; if (!handle) return false; if (!(handle->stream = (z_stream*)zlib_stream_new())) goto error; if (!(zlib_inflate_init2(handle->stream))) goto error; handle->data = (uint8_t*)malloc(size); if (!handle->data) goto error; stream = (z_stream*)handle->stream; if (!stream) goto error; zlib_set_stream(stream, csize, size, (const uint8_t*)cdata, handle->data ); return true; error: if (handle->stream) zlib_stream_free(handle->stream); if (handle->data) free(handle->data); return false; }