19f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/* 29f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * jdapimin.c 39f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * 49f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Copyright (C) 1994-1998, Thomas G. Lane. 59f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * This file is part of the Independent JPEG Group's software. 69f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * For conditions of distribution and use, see the accompanying README file. 79f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * 89f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * This file contains application interface code for the decompression half 99f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * of the JPEG library. These are the "minimum" API routines that may be 109f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * needed in either the normal full-decompression case or the 119f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * transcoding-only case. 129f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * 139f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Most of the routines intended to be called directly by an application 149f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * are in this file or in jdapistd.c. But also see jcomapi.c for routines 159f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * shared by compression and decompression, and jdtrans.c for the transcoding 169f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * case. 179f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project */ 189f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 199f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define JPEG_INTERNALS 209f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#include "jinclude.h" 219f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#include "jpeglib.h" 229f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 239f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 249f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/* 259f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Initialization of a JPEG decompression object. 269f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * The error manager must already be set up (in case memory manager fails). 279f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project */ 289f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 299f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectGLOBAL(void) 309f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectjpeg_CreateDecompress (j_decompress_ptr cinfo, int version, size_t structsize) 319f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project{ 329f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project int i; 339f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 349f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project /* Guard against version mismatches between library and caller. */ 359f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->mem = NULL; /* so jpeg_destroy knows mem mgr not called */ 369f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project if (version != JPEG_LIB_VERSION) 379f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project ERREXIT2(cinfo, JERR_BAD_LIB_VERSION, JPEG_LIB_VERSION, version); 389f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project if (structsize != SIZEOF(struct jpeg_decompress_struct)) 399f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project ERREXIT2(cinfo, JERR_BAD_STRUCT_SIZE, 409f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project (int) SIZEOF(struct jpeg_decompress_struct), (int) structsize); 419f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 429f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project /* For debugging purposes, we zero the whole master structure. 439f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * But the application has already set the err pointer, and may have set 449f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * client_data, so we have to save and restore those fields. 459f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Note: if application hasn't set client_data, tools like Purify may 469f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * complain here. 479f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project */ 489f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project { 499f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project struct jpeg_error_mgr * err = cinfo->err; 509f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project void * client_data = cinfo->client_data; /* ignore Purify complaint here */ 519f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project MEMZERO(cinfo, SIZEOF(struct jpeg_decompress_struct)); 529f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->err = err; 539f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->client_data = client_data; 549f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project } 559f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->is_decompressor = TRUE; 56f5b94eebe742df1a9bb3941fc0a0ec0137e936efJoseph Wen cinfo->tile_decode = FALSE; 579f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 589f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project /* Initialize a memory manager instance for this object */ 599f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project jinit_memory_mgr((j_common_ptr) cinfo); 609f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 619f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project /* Zero out pointers to permanent structures. */ 629f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->progress = NULL; 639f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->src = NULL; 649f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 659f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project for (i = 0; i < NUM_QUANT_TBLS; i++) 669f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->quant_tbl_ptrs[i] = NULL; 679f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 689f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project for (i = 0; i < NUM_HUFF_TBLS; i++) { 699f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->dc_huff_tbl_ptrs[i] = NULL; 709f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->ac_huff_tbl_ptrs[i] = NULL; 719f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project } 729f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 739f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project /* Initialize marker processor so application can override methods 749f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * for COM, APPn markers before calling jpeg_read_header. 759f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project */ 769f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->marker_list = NULL; 779f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project jinit_marker_reader(cinfo); 789f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 799f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project /* And initialize the overall input controller. */ 809f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project jinit_input_controller(cinfo); 819f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 829f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project /* OK, I'm ready */ 839f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->global_state = DSTATE_START; 849f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project} 859f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 869f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 879f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/* 889f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Destruction of a JPEG decompression object 899f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project */ 909f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 919f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectGLOBAL(void) 929f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectjpeg_destroy_decompress (j_decompress_ptr cinfo) 939f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project{ 949f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project jpeg_destroy((j_common_ptr) cinfo); /* use common routine */ 959f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project} 969f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 979f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 989f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/* 999f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Abort processing of a JPEG decompression operation, 1009f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * but don't destroy the object itself. 1019f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project */ 1029f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 1039f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectGLOBAL(void) 1049f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectjpeg_abort_decompress (j_decompress_ptr cinfo) 1059f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project{ 1069f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project jpeg_abort((j_common_ptr) cinfo); /* use common routine */ 1079f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project} 1089f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 1099f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 1109f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/* 1119f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Set default decompression parameters. 1129f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project */ 1139f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 1149f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectLOCAL(void) 1159f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectdefault_decompress_parms (j_decompress_ptr cinfo) 1169f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project{ 1179f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project /* Guess the input colorspace, and set output colorspace accordingly. */ 1189f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project /* (Wish JPEG committee had provided a real way to specify this...) */ 1199f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project /* Note application may override our guesses. */ 1209f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project switch (cinfo->num_components) { 1219f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project case 1: 1229f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->jpeg_color_space = JCS_GRAYSCALE; 1239f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->out_color_space = JCS_GRAYSCALE; 1249f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project break; 1259f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 1269f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project case 3: 1279f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project if (cinfo->saw_JFIF_marker) { 1289f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->jpeg_color_space = JCS_YCbCr; /* JFIF implies YCbCr */ 1299f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project } else if (cinfo->saw_Adobe_marker) { 1309f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project switch (cinfo->Adobe_transform) { 1319f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project case 0: 1329f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->jpeg_color_space = JCS_RGB; 1339f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project break; 1349f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project case 1: 1359f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->jpeg_color_space = JCS_YCbCr; 1369f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project break; 1379f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project default: 1389f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project WARNMS1(cinfo, JWRN_ADOBE_XFORM, cinfo->Adobe_transform); 1399f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->jpeg_color_space = JCS_YCbCr; /* assume it's YCbCr */ 1409f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project break; 1419f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project } 1429f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project } else { 1439f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project /* Saw no special markers, try to guess from the component IDs */ 1449f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project int cid0 = cinfo->comp_info[0].component_id; 1459f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project int cid1 = cinfo->comp_info[1].component_id; 1469f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project int cid2 = cinfo->comp_info[2].component_id; 1479f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 1489f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project if (cid0 == 1 && cid1 == 2 && cid2 == 3) 1499f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->jpeg_color_space = JCS_YCbCr; /* assume JFIF w/out marker */ 1509f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project else if (cid0 == 82 && cid1 == 71 && cid2 == 66) 1519f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->jpeg_color_space = JCS_RGB; /* ASCII 'R', 'G', 'B' */ 1529f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project else { 1539f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project TRACEMS3(cinfo, 1, JTRC_UNKNOWN_IDS, cid0, cid1, cid2); 1549f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->jpeg_color_space = JCS_YCbCr; /* assume it's YCbCr */ 1559f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project } 1569f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project } 1579f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project /* Always guess RGB is proper output colorspace. */ 1589f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->out_color_space = JCS_RGB; 1599f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project break; 1609f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 1619f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project case 4: 1629f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project if (cinfo->saw_Adobe_marker) { 1639f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project switch (cinfo->Adobe_transform) { 1649f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project case 0: 1659f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->jpeg_color_space = JCS_CMYK; 1669f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project break; 1679f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project case 2: 1689f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->jpeg_color_space = JCS_YCCK; 1699f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project break; 1709f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project default: 1719f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project WARNMS1(cinfo, JWRN_ADOBE_XFORM, cinfo->Adobe_transform); 1729f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->jpeg_color_space = JCS_YCCK; /* assume it's YCCK */ 1739f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project break; 1749f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project } 1759f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project } else { 1769f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project /* No special markers, assume straight CMYK. */ 1779f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->jpeg_color_space = JCS_CMYK; 1789f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project } 1799f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->out_color_space = JCS_CMYK; 1809f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project break; 1819f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 1829f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project default: 1839f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->jpeg_color_space = JCS_UNKNOWN; 1849f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->out_color_space = JCS_UNKNOWN; 1859f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project break; 1869f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project } 1879f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 1889f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project /* Set defaults for other decompression parameters. */ 1899f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->scale_num = 1; /* 1:1 scaling */ 1909f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->scale_denom = 1; 1919f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->output_gamma = 1.0; 1929f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->buffered_image = FALSE; 1939f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->raw_data_out = FALSE; 1949f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->dct_method = JDCT_DEFAULT; 1959f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->do_fancy_upsampling = TRUE; 1969f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->do_block_smoothing = TRUE; 1979f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->quantize_colors = FALSE; 1989f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project /* We set these in case application only sets quantize_colors. */ 1999f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->dither_mode = JDITHER_FS; 2009f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#ifdef QUANT_2PASS_SUPPORTED 2019f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->two_pass_quantize = TRUE; 2029f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#else 2039f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->two_pass_quantize = FALSE; 2049f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#endif 2059f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->desired_number_of_colors = 256; 2069f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->colormap = NULL; 2079f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project /* Initialize for no mode change in buffered-image mode. */ 2089f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->enable_1pass_quant = FALSE; 2099f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->enable_external_quant = FALSE; 2109f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->enable_2pass_quant = FALSE; 2119f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project} 2129f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 2139f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 2149f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/* 2159f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Decompression startup: read start of JPEG datastream to see what's there. 2169f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Need only initialize JPEG object and supply a data source before calling. 2179f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * 2189f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * This routine will read as far as the first SOS marker (ie, actual start of 2199f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * compressed data), and will save all tables and parameters in the JPEG 2209f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * object. It will also initialize the decompression parameters to default 2219f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * values, and finally return JPEG_HEADER_OK. On return, the application may 2229f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * adjust the decompression parameters and then call jpeg_start_decompress. 2239f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * (Or, if the application only wanted to determine the image parameters, 2249f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * the data need not be decompressed. In that case, call jpeg_abort or 2259f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * jpeg_destroy to release any temporary space.) 2269f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * If an abbreviated (tables only) datastream is presented, the routine will 2279f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * return JPEG_HEADER_TABLES_ONLY upon reaching EOI. The application may then 2289f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * re-use the JPEG object to read the abbreviated image datastream(s). 2299f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * It is unnecessary (but OK) to call jpeg_abort in this case. 2309f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * The JPEG_SUSPENDED return code only occurs if the data source module 2319f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * requests suspension of the decompressor. In this case the application 2329f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * should load more source data and then re-call jpeg_read_header to resume 2339f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * processing. 2349f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * If a non-suspending data source is used and require_image is TRUE, then the 2359f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * return code need not be inspected since only JPEG_HEADER_OK is possible. 2369f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * 2379f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * This routine is now just a front end to jpeg_consume_input, with some 2389f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * extra error checking. 2399f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project */ 2409f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 2419f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectGLOBAL(int) 2429f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectjpeg_read_header (j_decompress_ptr cinfo, boolean require_image) 2439f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project{ 2449f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project int retcode; 2459f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 2469f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project if (cinfo->global_state != DSTATE_START && 2479f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->global_state != DSTATE_INHEADER) 2489f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); 2499f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 2509f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project retcode = jpeg_consume_input(cinfo); 2519f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 2529f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project switch (retcode) { 2539f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project case JPEG_REACHED_SOS: 2549f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project retcode = JPEG_HEADER_OK; 2559f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project break; 2569f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project case JPEG_REACHED_EOI: 2579f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project if (require_image) /* Complain if application wanted an image */ 2589f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project ERREXIT(cinfo, JERR_NO_IMAGE); 2599f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project /* Reset to start state; it would be safer to require the application to 2609f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * call jpeg_abort, but we can't change it now for compatibility reasons. 2619f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * A side effect is to free any temporary memory (there shouldn't be any). 2629f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project */ 2639f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project jpeg_abort((j_common_ptr) cinfo); /* sets state = DSTATE_START */ 2649f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project retcode = JPEG_HEADER_TABLES_ONLY; 2659f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project break; 2669f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project case JPEG_SUSPENDED: 2679f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project /* no work */ 2689f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project break; 2699f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project } 2709f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 2719f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project return retcode; 2729f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project} 2739f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 2749f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 2759f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/* 2769f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Consume data in advance of what the decompressor requires. 2779f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * This can be called at any time once the decompressor object has 2789f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * been created and a data source has been set up. 2799f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * 2809f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * This routine is essentially a state machine that handles a couple 2819f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * of critical state-transition actions, namely initial setup and 2829f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * transition from header scanning to ready-for-start_decompress. 2839f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * All the actual input is done via the input controller's consume_input 2849f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * method. 2859f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project */ 2869f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 2879f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectGLOBAL(int) 2889f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectjpeg_consume_input (j_decompress_ptr cinfo) 2899f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project{ 2909f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project int retcode = JPEG_SUSPENDED; 2919f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 2929f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project /* NB: every possible DSTATE value should be listed in this switch */ 2939f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project switch (cinfo->global_state) { 2949f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project case DSTATE_START: 2959f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project /* Start-of-datastream actions: reset appropriate modules */ 2969f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project (*cinfo->inputctl->reset_input_controller) (cinfo); 2979f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project /* Initialize application's data source module */ 2989f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project (*cinfo->src->init_source) (cinfo); 2999f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->global_state = DSTATE_INHEADER; 3009f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project /*FALLTHROUGH*/ 3019f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project case DSTATE_INHEADER: 3029f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project retcode = (*cinfo->inputctl->consume_input) (cinfo); 3039f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project if (retcode == JPEG_REACHED_SOS) { /* Found SOS, prepare to decompress */ 3049f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project /* Set up default parameters based on header data */ 3059f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project default_decompress_parms(cinfo); 3069f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project /* Set global state: ready for start_decompress */ 3079f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->global_state = DSTATE_READY; 3089f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project } 3099f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project break; 3109f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project case DSTATE_READY: 3119f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project /* Can't advance past first SOS until start_decompress is called */ 3129f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project retcode = JPEG_REACHED_SOS; 3139f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project break; 3149f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project case DSTATE_PRELOAD: 3159f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project case DSTATE_PRESCAN: 3169f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project case DSTATE_SCANNING: 3179f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project case DSTATE_RAW_OK: 3189f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project case DSTATE_BUFIMAGE: 3199f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project case DSTATE_BUFPOST: 3209f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project case DSTATE_STOPPING: 3219f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project retcode = (*cinfo->inputctl->consume_input) (cinfo); 3229f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project break; 3239f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project default: 3249f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); 3259f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project } 3269f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project return retcode; 3279f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project} 3289f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 3299f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 3309f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/* 3319f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Have we finished reading the input file? 3329f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project */ 3339f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 3349f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectGLOBAL(boolean) 3359f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectjpeg_input_complete (j_decompress_ptr cinfo) 3369f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project{ 3379f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project /* Check for valid jpeg object */ 3389f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project if (cinfo->global_state < DSTATE_START || 3399f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->global_state > DSTATE_STOPPING) 3409f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); 3419f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project return cinfo->inputctl->eoi_reached; 3429f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project} 3439f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 3449f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 3459f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/* 3469f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Is there more than one scan? 3479f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project */ 3489f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 3499f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectGLOBAL(boolean) 3509f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectjpeg_has_multiple_scans (j_decompress_ptr cinfo) 3519f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project{ 3529f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project /* Only valid after jpeg_read_header completes */ 3539f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project if (cinfo->global_state < DSTATE_READY || 3549f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->global_state > DSTATE_STOPPING) 3559f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); 3569f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project return cinfo->inputctl->has_multiple_scans; 3579f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project} 3589f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 3599f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 3609f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/* 3619f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Finish JPEG decompression. 3629f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * 3639f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * This will normally just verify the file trailer and release temp storage. 3649f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * 3659f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Returns FALSE if suspended. The return value need be inspected only if 3669f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * a suspending data source is used. 3679f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project */ 3689f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 3699f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectGLOBAL(boolean) 3709f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectjpeg_finish_decompress (j_decompress_ptr cinfo) 3719f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project{ 3729f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project if ((cinfo->global_state == DSTATE_SCANNING || 3739f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->global_state == DSTATE_RAW_OK) && ! cinfo->buffered_image) { 3749f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project /* Terminate final pass of non-buffered mode */ 3753147fbe7688fc353e6ae03825a37cf101a4ee01dJoseph Wen#ifdef ANDROID_TILE_BASED_DECODE 3763147fbe7688fc353e6ae03825a37cf101a4ee01dJoseph Wen cinfo->output_scanline = cinfo->output_height; 3773147fbe7688fc353e6ae03825a37cf101a4ee01dJoseph Wen#endif 3789f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project if (cinfo->output_scanline < cinfo->output_height) 3799f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project ERREXIT(cinfo, JERR_TOO_LITTLE_DATA); 3809f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project (*cinfo->master->finish_output_pass) (cinfo); 3819f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->global_state = DSTATE_STOPPING; 3829f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project } else if (cinfo->global_state == DSTATE_BUFIMAGE) { 3839f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project /* Finishing after a buffered-image operation */ 3849f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->global_state = DSTATE_STOPPING; 3859f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project } else if (cinfo->global_state != DSTATE_STOPPING) { 3869f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project /* STOPPING = repeat call after a suspension, anything else is error */ 3879f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); 3889f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project } 3899f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project /* Read until EOI */ 3903147fbe7688fc353e6ae03825a37cf101a4ee01dJoseph Wen#ifndef ANDROID_TILE_BASED_DECODE 3919f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project while (! cinfo->inputctl->eoi_reached) { 3929f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project if ((*cinfo->inputctl->consume_input) (cinfo) == JPEG_SUSPENDED) 3939f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project return FALSE; /* Suspend, come back later */ 3949f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project } 3953147fbe7688fc353e6ae03825a37cf101a4ee01dJoseph Wen#endif 3969f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project /* Do final cleanup */ 3979f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project (*cinfo->src->term_source) (cinfo); 3989f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project /* We can use jpeg_abort to release memory and reset global_state */ 3999f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project jpeg_abort((j_common_ptr) cinfo); 4009f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project return TRUE; 4019f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project} 402