GLOBAL(void)
jpeg_CreateDecompress(j_decompress_ptr cinfo, int version, size_t structsize)
{ int i;
/* Guard against version mismatches between library and caller. */
cinfo->mem = NULL; /* so jpeg_destroy knows mem mgr not called */ if (version != JPEG_LIB_VERSION)
ERREXIT2(cinfo, JERR_BAD_LIB_VERSION, JPEG_LIB_VERSION, version); if (structsize != sizeof(struct jpeg_decompress_struct))
ERREXIT2(cinfo, JERR_BAD_STRUCT_SIZE,
(int)sizeof(struct jpeg_decompress_struct), (int)structsize);
/* For debugging purposes, we zero the whole master structure. *Buttheapplicationhasalreadysettheerrpointer,andmayhaveset *client_data,sowehavetosaveandrestorethosefields. *Note:ifapplicationhasn'tsetclient_data,toolslikePurifymay *complainhere.
*/
{ struct jpeg_error_mgr *err = cinfo->err; void *client_data = cinfo->client_data; /* ignore Purify complaint here */
memset(cinfo, 0, sizeof(struct jpeg_decompress_struct));
cinfo->err = err;
cinfo->client_data = client_data;
}
cinfo->is_decompressor = TRUE;
/* Initialize a memory manager instance for this object */
jinit_memory_mgr((j_common_ptr)cinfo);
/* Zero out pointers to permanent structures. */
cinfo->progress = NULL;
cinfo->src = NULL;
for (i = 0; i < NUM_QUANT_TBLS; i++)
cinfo->quant_tbl_ptrs[i] = NULL;
for (i = 0; i < NUM_HUFF_TBLS; i++) {
cinfo->dc_huff_tbl_ptrs[i] = NULL;
cinfo->ac_huff_tbl_ptrs[i] = NULL;
}
/* Initialize marker processor so application can override methods *forCOM,APPnmarkersbeforecallingjpeg_read_header.
*/
cinfo->marker_list = NULL;
jinit_marker_reader(cinfo);
/* And initialize the overall input controller. */
jinit_input_controller(cinfo);
/* The master struct is used to store extension parameters, so we allocate it *here.
*/
cinfo->master = (struct jpeg_decomp_master *)
(*cinfo->mem->alloc_small) ((j_common_ptr)cinfo, JPOOL_PERMANENT, sizeof(my_decomp_master));
memset(cinfo->master, 0, sizeof(my_decomp_master));
}
/* *DestructionofaJPEGdecompressionobject
*/
GLOBAL(void)
jpeg_destroy_decompress(j_decompress_ptr cinfo)
{
jpeg_destroy((j_common_ptr)cinfo); /* use common routine */
}
switch (retcode) { case JPEG_REACHED_SOS:
retcode = JPEG_HEADER_OK; break; case JPEG_REACHED_EOI: if (require_image) /* Complain if application wanted an image */
ERREXIT(cinfo, JERR_NO_IMAGE); /* Reset to start state; it would be safer to require the application to *calljpeg_abort,butwecan'tchangeitnowforcompatibilityreasons. *Asideeffectistofreeanytemporarymemory(thereshouldn'tbeany).
*/
jpeg_abort((j_common_ptr)cinfo); /* sets state = DSTATE_START */
retcode = JPEG_HEADER_TABLES_ONLY; break; case JPEG_SUSPENDED: /* no work */ break;
}
GLOBAL(int)
jpeg_consume_input(j_decompress_ptr cinfo)
{ int retcode = JPEG_SUSPENDED;
/* NB: every possible DSTATE value should be listed in this switch */ switch (cinfo->global_state) { case DSTATE_START: /* Start-of-datastream actions: reset appropriate modules */
(*cinfo->inputctl->reset_input_controller) (cinfo); /* Initialize application's data source module */
(*cinfo->src->init_source) (cinfo);
cinfo->global_state = DSTATE_INHEADER;
FALLTHROUGH /*FALLTHROUGH*/ case DSTATE_INHEADER:
retcode = (*cinfo->inputctl->consume_input) (cinfo); if (retcode == JPEG_REACHED_SOS) { /* Found SOS, prepare to decompress */ /* Set up default parameters based on header data */
default_decompress_parms(cinfo); /* Set global state: ready for start_decompress */
cinfo->global_state = DSTATE_READY;
} break; case DSTATE_READY: /* Can't advance past first SOS until start_decompress is called */
retcode = JPEG_REACHED_SOS; break; case DSTATE_PRELOAD: case DSTATE_PRESCAN: case DSTATE_SCANNING: case DSTATE_RAW_OK: case DSTATE_BUFIMAGE: case DSTATE_BUFPOST: case DSTATE_STOPPING:
retcode = (*cinfo->inputctl->consume_input) (cinfo); break; default:
ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
} return retcode;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.