1f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org/* 2f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * transupp.h 3f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * 43395bcc26e390d2960d15020d4a4d27ae0c122fenoel@chromium.org * Copyright (C) 1997-2011, Thomas G. Lane, Guido Vollbeding. 5f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * This file is part of the Independent JPEG Group's software. 6f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * For conditions of distribution and use, see the accompanying README file. 7f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * 8f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * This file contains declarations for image transformation routines and 9f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * other utility code used by the jpegtran sample application. These are 10f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * NOT part of the core JPEG library. But we keep these routines separate 11f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * from jpegtran.c to ease the task of maintaining jpegtran-like programs 12f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * that have other user interfaces. 13f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * 14f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * NOTE: all the routines declared here have very specific requirements 15f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * about when they are to be executed during the reading and writing of the 16f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * source and destination files. See the comments in transupp.c, or see 17f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * jpegtran.c for an example of correct usage. 18f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org */ 19f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 20f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org/* If you happen not to want the image transform support, disable it here */ 21f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org#ifndef TRANSFORMS_SUPPORTED 22f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org#define TRANSFORMS_SUPPORTED 1 /* 0 disables transform code */ 23f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org#endif 24f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 25f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org/* 26f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * Although rotating and flipping data expressed as DCT coefficients is not 27f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * hard, there is an asymmetry in the JPEG format specification for images 28f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * whose dimensions aren't multiples of the iMCU size. The right and bottom 29f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * image edges are padded out to the next iMCU boundary with junk data; but 30f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * no padding is possible at the top and left edges. If we were to flip 31f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * the whole image including the pad data, then pad garbage would become 32f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * visible at the top and/or left, and real pixels would disappear into the 33f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * pad margins --- perhaps permanently, since encoders & decoders may not 34f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * bother to preserve DCT blocks that appear to be completely outside the 35f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * nominal image area. So, we have to exclude any partial iMCUs from the 36f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * basic transformation. 37f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * 38f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * Transpose is the only transformation that can handle partial iMCUs at the 39f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * right and bottom edges completely cleanly. flip_h can flip partial iMCUs 40f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * at the bottom, but leaves any partial iMCUs at the right edge untouched. 41f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * Similarly flip_v leaves any partial iMCUs at the bottom edge untouched. 42f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * The other transforms are defined as combinations of these basic transforms 43f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * and process edge blocks in a way that preserves the equivalence. 44f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * 45f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * The "trim" option causes untransformable partial iMCUs to be dropped; 46f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * this is not strictly lossless, but it usually gives the best-looking 47f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * result for odd-size images. Note that when this option is active, 48f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * the expected mathematical equivalences between the transforms may not hold. 49f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * (For example, -rot 270 -trim trims only the bottom edge, but -rot 90 -trim 50f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * followed by -rot 180 -trim trims both edges.) 51f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * 529862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org * We also offer a lossless-crop option, which discards data outside a given 539862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org * image region but losslessly preserves what is inside. Like the rotate and 549862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org * flip transforms, lossless crop is restricted by the JPEG format: the upper 559862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org * left corner of the selected region must fall on an iMCU boundary. If this 569862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org * does not hold for the given crop parameters, we silently move the upper left 579862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org * corner up and/or left to make it so, simultaneously increasing the region 589862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org * dimensions to keep the lower right crop corner unchanged. (Thus, the 599862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org * output image covers at least the requested region, but may cover more.) 603395bcc26e390d2960d15020d4a4d27ae0c122fenoel@chromium.org * The adjustment of the region dimensions may be optionally disabled. 619862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org * 629862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org * We also provide a lossless-resize option, which is kind of a lossless-crop 639862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org * operation in the DCT coefficient block domain - it discards higher-order 649862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org * coefficients and losslessly preserves lower-order coefficients of a 659862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org * sub-block. 669862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org * 679862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org * Rotate/flip transform, resize, and crop can be requested together in a 689862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org * single invocation. The crop is applied last --- that is, the crop region 699862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org * is specified in terms of the destination image after transform/resize. 709862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org * 71f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * We also offer a "force to grayscale" option, which simply discards the 72f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * chrominance channels of a YCbCr image. This is lossless in the sense that 73f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * the luminance channel is preserved exactly. It's not the same kind of 74f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * thing as the rotate/flip transformations, but it's convenient to handle it 75f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * as part of this package, mainly because the transformation routines have to 76f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * be aware of the option to know how many components to work on. 77f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org */ 78f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 799862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org 809862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org/* Short forms of external names for systems with brain-damaged linkers. */ 819862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org 829862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org#ifdef NEED_SHORT_EXTERNAL_NAMES 839862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org#define jtransform_parse_crop_spec jTrParCrop 849862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org#define jtransform_request_workspace jTrRequest 859862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org#define jtransform_adjust_parameters jTrAdjust 869862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org#define jtransform_execute_transform jTrExec 879862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org#define jtransform_perfect_transform jTrPerfect 889862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org#define jcopy_markers_setup jCMrkSetup 899862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org#define jcopy_markers_execute jCMrkExec 909862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org#endif /* NEED_SHORT_EXTERNAL_NAMES */ 919862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org 929862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org 939862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org/* 949862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org * Codes for supported types of image transformations. 959862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org */ 969862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org 979862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.orgtypedef enum { 989862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org JXFORM_NONE, /* no transformation */ 999862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org JXFORM_FLIP_H, /* horizontal flip */ 1009862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org JXFORM_FLIP_V, /* vertical flip */ 1019862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org JXFORM_TRANSPOSE, /* transpose across UL-to-LR axis */ 1029862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org JXFORM_TRANSVERSE, /* transpose across UR-to-LL axis */ 1039862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org JXFORM_ROT_90, /* 90-degree clockwise rotation */ 1049862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org JXFORM_ROT_180, /* 180-degree rotation */ 1059862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org JXFORM_ROT_270 /* 270-degree clockwise (or 90 ccw) */ 1069862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org} JXFORM_CODE; 1079862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org 1089862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org/* 1099862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org * Codes for crop parameters, which can individually be unspecified, 1103395bcc26e390d2960d15020d4a4d27ae0c122fenoel@chromium.org * positive or negative for xoffset or yoffset, 1113395bcc26e390d2960d15020d4a4d27ae0c122fenoel@chromium.org * positive or forced for width or height. 1129862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org */ 1139862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org 1149862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.orgtypedef enum { 1153395bcc26e390d2960d15020d4a4d27ae0c122fenoel@chromium.org JCROP_UNSET, 1163395bcc26e390d2960d15020d4a4d27ae0c122fenoel@chromium.org JCROP_POS, 1173395bcc26e390d2960d15020d4a4d27ae0c122fenoel@chromium.org JCROP_NEG, 1183395bcc26e390d2960d15020d4a4d27ae0c122fenoel@chromium.org JCROP_FORCE 1199862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org} JCROP_CODE; 1209862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org 1219862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org/* 1229862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org * Transform parameters struct. 1239862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org * NB: application must not change any elements of this struct after 1249862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org * calling jtransform_request_workspace. 1259862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org */ 1269862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org 127f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgtypedef struct { 128f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org /* Options: set by caller */ 129f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org JXFORM_CODE transform; /* image transform operator */ 1309862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org boolean perfect; /* if TRUE, fail if partial MCUs are requested */ 131f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org boolean trim; /* if TRUE, trim partial MCUs as needed */ 132f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org boolean force_grayscale; /* if TRUE, convert color image to grayscale */ 1339862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org boolean crop; /* if TRUE, crop source image */ 1349862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org boolean slow_hflip; /* For best performance, the JXFORM_FLIP_H transform 1359862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org normally modifies the source coefficients in place. 1369862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org Setting this to TRUE will instead use a slower, 1379862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org double-buffered algorithm, which leaves the source 1389862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org coefficients in tact (necessary if other transformed 1399862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org images must be generated from the same set of 1409862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org coefficients. */ 1419862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org 1429862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org /* Crop parameters: application need not set these unless crop is TRUE. 1439862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org * These can be filled in by jtransform_parse_crop_spec(). 1449862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org */ 1459862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org JDIMENSION crop_width; /* Width of selected region */ 1463395bcc26e390d2960d15020d4a4d27ae0c122fenoel@chromium.org JCROP_CODE crop_width_set; /* (forced disables adjustment) */ 1479862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org JDIMENSION crop_height; /* Height of selected region */ 1483395bcc26e390d2960d15020d4a4d27ae0c122fenoel@chromium.org JCROP_CODE crop_height_set; /* (forced disables adjustment) */ 1499862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org JDIMENSION crop_xoffset; /* X offset of selected region */ 1509862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org JCROP_CODE crop_xoffset_set; /* (negative measures from right edge) */ 1519862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org JDIMENSION crop_yoffset; /* Y offset of selected region */ 1529862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org JCROP_CODE crop_yoffset_set; /* (negative measures from bottom edge) */ 153f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 154f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org /* Internal workspace: caller should not touch these */ 155f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org int num_components; /* # of components in workspace */ 156f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org jvirt_barray_ptr * workspace_coef_arrays; /* workspace for transformations */ 1579862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org JDIMENSION output_width; /* cropped destination dimensions */ 1589862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org JDIMENSION output_height; 1599862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org JDIMENSION x_crop_offset; /* destination crop offsets measured in iMCUs */ 1609862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org JDIMENSION y_crop_offset; 1619862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org int iMCU_sample_width; /* destination iMCU size */ 1629862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org int iMCU_sample_height; 163f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org} jpeg_transform_info; 164f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 165f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 166f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org#if TRANSFORMS_SUPPORTED 167f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 1689862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org/* Parse a crop specification (written in X11 geometry style) */ 1699862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.orgEXTERN(boolean) jtransform_parse_crop_spec 1709862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org JPP((jpeg_transform_info *info, const char *spec)); 171f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org/* Request any required workspace */ 1729862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.orgEXTERN(boolean) jtransform_request_workspace 173f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org JPP((j_decompress_ptr srcinfo, jpeg_transform_info *info)); 174f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org/* Adjust output image parameters */ 175f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgEXTERN(jvirt_barray_ptr *) jtransform_adjust_parameters 176f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org JPP((j_decompress_ptr srcinfo, j_compress_ptr dstinfo, 177f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org jvirt_barray_ptr *src_coef_arrays, 178f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org jpeg_transform_info *info)); 179f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org/* Execute the actual transformation, if any */ 1809862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.orgEXTERN(void) jtransform_execute_transform 181f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org JPP((j_decompress_ptr srcinfo, j_compress_ptr dstinfo, 182f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org jvirt_barray_ptr *src_coef_arrays, 183f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org jpeg_transform_info *info)); 1849862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org/* Determine whether lossless transformation is perfectly 1859862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org * possible for a specified image and transformation. 1869862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org */ 1879862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.orgEXTERN(boolean) jtransform_perfect_transform 1889862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org JPP((JDIMENSION image_width, JDIMENSION image_height, 1899862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org int MCU_width, int MCU_height, 1909862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org JXFORM_CODE transform)); 1919862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org 1929862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org/* jtransform_execute_transform used to be called 1939862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org * jtransform_execute_transformation, but some compilers complain about 1949862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org * routine names that long. This macro is here to avoid breaking any 1959862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org * old source code that uses the original name... 1969862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org */ 1979862697206250265c6bb37a4186b0a411c78de3bhbono@chromium.org#define jtransform_execute_transformation jtransform_execute_transform 198f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 199f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org#endif /* TRANSFORMS_SUPPORTED */ 200f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 201f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 202f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org/* 203f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * Support for copying optional markers from source to destination file. 204f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org */ 205f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 206f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgtypedef enum { 207f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org JCOPYOPT_NONE, /* copy no optional markers */ 208f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org JCOPYOPT_COMMENTS, /* copy only comment (COM) markers */ 209f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org JCOPYOPT_ALL /* copy all optional markers */ 210f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org} JCOPY_OPTION; 211f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 212f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org#define JCOPYOPT_DEFAULT JCOPYOPT_COMMENTS /* recommended default */ 213f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 214f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org/* Setup decompression object to save desired markers in memory */ 215f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgEXTERN(void) jcopy_markers_setup 216f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org JPP((j_decompress_ptr srcinfo, JCOPY_OPTION option)); 217f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org/* Copy markers saved in the given source object to the destination object */ 218f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgEXTERN(void) jcopy_markers_execute 219f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org JPP((j_decompress_ptr srcinfo, j_compress_ptr dstinfo, 220f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org JCOPY_OPTION option)); 221