gecko/media/libjpeg/jdtrans.c
Ryan VanderMeulen 6bca192856 Bug 1061240 - Update libjpeg-turbo to version 1.4. r=jmuizelaar, r=glandium, f=rankov
--HG--
rename : media/libjpeg/config.h => media/libjpeg/jconfigint.h
rename : media/libjpeg/simd/jcclrmmx.asm => media/libjpeg/simd/jccolext-mmx.asm
rename : media/libjpeg/simd/jcclrss2-64.asm => media/libjpeg/simd/jccolext-sse2-64.asm
rename : media/libjpeg/simd/jcclrss2.asm => media/libjpeg/simd/jccolext-sse2.asm
rename : media/libjpeg/simd/jccolmmx.asm => media/libjpeg/simd/jccolor-mmx.asm
rename : media/libjpeg/simd/jccolss2-64.asm => media/libjpeg/simd/jccolor-sse2-64.asm
rename : media/libjpeg/simd/jccolss2.asm => media/libjpeg/simd/jccolor-sse2.asm
rename : media/libjpeg/simd/jcgrammx.asm => media/libjpeg/simd/jcgray-mmx.asm
rename : media/libjpeg/simd/jcgrass2-64.asm => media/libjpeg/simd/jcgray-sse2-64.asm
rename : media/libjpeg/simd/jcgrass2.asm => media/libjpeg/simd/jcgray-sse2.asm
rename : media/libjpeg/simd/jcgrymmx.asm => media/libjpeg/simd/jcgryext-mmx.asm
rename : media/libjpeg/simd/jcgryss2-64.asm => media/libjpeg/simd/jcgryext-sse2-64.asm
rename : media/libjpeg/simd/jcgryss2.asm => media/libjpeg/simd/jcgryext-sse2.asm
rename : media/libjpeg/simd/jcsammmx.asm => media/libjpeg/simd/jcsample-mmx.asm
rename : media/libjpeg/simd/jcsamss2-64.asm => media/libjpeg/simd/jcsample-sse2-64.asm
rename : media/libjpeg/simd/jcsamss2.asm => media/libjpeg/simd/jcsample-sse2.asm
rename : media/libjpeg/simd/jdclrmmx.asm => media/libjpeg/simd/jdcolext-mmx.asm
rename : media/libjpeg/simd/jdclrss2-64.asm => media/libjpeg/simd/jdcolext-sse2-64.asm
rename : media/libjpeg/simd/jdclrss2.asm => media/libjpeg/simd/jdcolext-sse2.asm
rename : media/libjpeg/simd/jdcolmmx.asm => media/libjpeg/simd/jdcolor-mmx.asm
rename : media/libjpeg/simd/jdcolss2-64.asm => media/libjpeg/simd/jdcolor-sse2-64.asm
rename : media/libjpeg/simd/jdcolss2.asm => media/libjpeg/simd/jdcolor-sse2.asm
rename : media/libjpeg/simd/jdmermmx.asm => media/libjpeg/simd/jdmerge-mmx.asm
rename : media/libjpeg/simd/jdmerss2-64.asm => media/libjpeg/simd/jdmerge-sse2-64.asm
rename : media/libjpeg/simd/jdmerss2.asm => media/libjpeg/simd/jdmerge-sse2.asm
rename : media/libjpeg/simd/jdmrgmmx.asm => media/libjpeg/simd/jdmrgext-mmx.asm
rename : media/libjpeg/simd/jdmrgss2-64.asm => media/libjpeg/simd/jdmrgext-sse2-64.asm
rename : media/libjpeg/simd/jdmrgss2.asm => media/libjpeg/simd/jdmrgext-sse2.asm
rename : media/libjpeg/simd/jdsammmx.asm => media/libjpeg/simd/jdsample-mmx.asm
rename : media/libjpeg/simd/jdsamss2-64.asm => media/libjpeg/simd/jdsample-sse2-64.asm
rename : media/libjpeg/simd/jdsamss2.asm => media/libjpeg/simd/jdsample-sse2.asm
rename : media/libjpeg/simd/jf3dnflt.asm => media/libjpeg/simd/jfdctflt-3dn.asm
rename : media/libjpeg/simd/jfsseflt-64.asm => media/libjpeg/simd/jfdctflt-sse-64.asm
rename : media/libjpeg/simd/jfsseflt.asm => media/libjpeg/simd/jfdctflt-sse.asm
rename : media/libjpeg/simd/jfmmxfst.asm => media/libjpeg/simd/jfdctfst-mmx.asm
rename : media/libjpeg/simd/jfss2fst-64.asm => media/libjpeg/simd/jfdctfst-sse2-64.asm
rename : media/libjpeg/simd/jfss2fst.asm => media/libjpeg/simd/jfdctfst-sse2.asm
rename : media/libjpeg/simd/jfmmxint.asm => media/libjpeg/simd/jfdctint-mmx.asm
rename : media/libjpeg/simd/jfss2int-64.asm => media/libjpeg/simd/jfdctint-sse2-64.asm
rename : media/libjpeg/simd/jfss2int.asm => media/libjpeg/simd/jfdctint-sse2.asm
rename : media/libjpeg/simd/ji3dnflt.asm => media/libjpeg/simd/jidctflt-3dn.asm
rename : media/libjpeg/simd/jisseflt.asm => media/libjpeg/simd/jidctflt-sse.asm
rename : media/libjpeg/simd/jiss2flt-64.asm => media/libjpeg/simd/jidctflt-sse2-64.asm
rename : media/libjpeg/simd/jiss2flt.asm => media/libjpeg/simd/jidctflt-sse2.asm
rename : media/libjpeg/simd/jimmxfst.asm => media/libjpeg/simd/jidctfst-mmx.asm
rename : media/libjpeg/simd/jiss2fst-64.asm => media/libjpeg/simd/jidctfst-sse2-64.asm
rename : media/libjpeg/simd/jiss2fst.asm => media/libjpeg/simd/jidctfst-sse2.asm
rename : media/libjpeg/simd/jimmxint.asm => media/libjpeg/simd/jidctint-mmx.asm
rename : media/libjpeg/simd/jiss2int-64.asm => media/libjpeg/simd/jidctint-sse2-64.asm
rename : media/libjpeg/simd/jiss2int.asm => media/libjpeg/simd/jidctint-sse2.asm
rename : media/libjpeg/simd/jimmxred.asm => media/libjpeg/simd/jidctred-mmx.asm
rename : media/libjpeg/simd/jiss2red-64.asm => media/libjpeg/simd/jidctred-sse2-64.asm
rename : media/libjpeg/simd/jiss2red.asm => media/libjpeg/simd/jidctred-sse2.asm
rename : media/libjpeg/simd/jcqnt3dn.asm => media/libjpeg/simd/jquant-3dn.asm
rename : media/libjpeg/simd/jcqntmmx.asm => media/libjpeg/simd/jquant-mmx.asm
rename : media/libjpeg/simd/jcqntsse.asm => media/libjpeg/simd/jquant-sse.asm
rename : media/libjpeg/simd/jcqnts2f-64.asm => media/libjpeg/simd/jquantf-sse2-64.asm
rename : media/libjpeg/simd/jcqnts2f.asm => media/libjpeg/simd/jquantf-sse2.asm
rename : media/libjpeg/simd/jcqnts2i-64.asm => media/libjpeg/simd/jquanti-sse2-64.asm
rename : media/libjpeg/simd/jcqnts2i.asm => media/libjpeg/simd/jquanti-sse2.asm
2015-01-20 22:19:57 -05:00

155 lines
5.3 KiB
C

/*
* jdtrans.c
*
* This file was part of the Independent JPEG Group's software:
* Copyright (C) 1995-1997, Thomas G. Lane.
* It was modified by The libjpeg-turbo Project to include only code relevant
* to libjpeg-turbo.
* For conditions of distribution and use, see the accompanying README file.
*
* This file contains library routines for transcoding decompression,
* that is, reading raw DCT coefficient arrays from an input JPEG file.
* The routines in jdapimin.c will also be needed by a transcoder.
*/
#define JPEG_INTERNALS
#include "jinclude.h"
#include "jpeglib.h"
/* Forward declarations */
LOCAL(void) transdecode_master_selection (j_decompress_ptr cinfo);
/*
* Read the coefficient arrays from a JPEG file.
* jpeg_read_header must be completed before calling this.
*
* The entire image is read into a set of virtual coefficient-block arrays,
* one per component. The return value is a pointer to the array of
* virtual-array descriptors. These can be manipulated directly via the
* JPEG memory manager, or handed off to jpeg_write_coefficients().
* To release the memory occupied by the virtual arrays, call
* jpeg_finish_decompress() when done with the data.
*
* An alternative usage is to simply obtain access to the coefficient arrays
* during a buffered-image-mode decompression operation. This is allowed
* after any jpeg_finish_output() call. The arrays can be accessed until
* jpeg_finish_decompress() is called. (Note that any call to the library
* may reposition the arrays, so don't rely on access_virt_barray() results
* to stay valid across library calls.)
*
* Returns NULL if suspended. This case need be checked only if
* a suspending data source is used.
*/
GLOBAL(jvirt_barray_ptr *)
jpeg_read_coefficients (j_decompress_ptr cinfo)
{
if (cinfo->global_state == DSTATE_READY) {
/* First call: initialize active modules */
transdecode_master_selection(cinfo);
cinfo->global_state = DSTATE_RDCOEFS;
}
if (cinfo->global_state == DSTATE_RDCOEFS) {
/* Absorb whole file into the coef buffer */
for (;;) {
int retcode;
/* Call progress monitor hook if present */
if (cinfo->progress != NULL)
(*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo);
/* Absorb some more input */
retcode = (*cinfo->inputctl->consume_input) (cinfo);
if (retcode == JPEG_SUSPENDED)
return NULL;
if (retcode == JPEG_REACHED_EOI)
break;
/* Advance progress counter if appropriate */
if (cinfo->progress != NULL &&
(retcode == JPEG_ROW_COMPLETED || retcode == JPEG_REACHED_SOS)) {
if (++cinfo->progress->pass_counter >= cinfo->progress->pass_limit) {
/* startup underestimated number of scans; ratchet up one scan */
cinfo->progress->pass_limit += (long) cinfo->total_iMCU_rows;
}
}
}
/* Set state so that jpeg_finish_decompress does the right thing */
cinfo->global_state = DSTATE_STOPPING;
}
/* At this point we should be in state DSTATE_STOPPING if being used
* standalone, or in state DSTATE_BUFIMAGE if being invoked to get access
* to the coefficients during a full buffered-image-mode decompression.
*/
if ((cinfo->global_state == DSTATE_STOPPING ||
cinfo->global_state == DSTATE_BUFIMAGE) && cinfo->buffered_image) {
return cinfo->coef->coef_arrays;
}
/* Oops, improper usage */
ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
return NULL; /* keep compiler happy */
}
/*
* Master selection of decompression modules for transcoding.
* This substitutes for jdmaster.c's initialization of the full decompressor.
*/
LOCAL(void)
transdecode_master_selection (j_decompress_ptr cinfo)
{
/* This is effectively a buffered-image operation. */
cinfo->buffered_image = TRUE;
#if JPEG_LIB_VERSION >= 80
/* Compute output image dimensions and related values. */
jpeg_core_output_dimensions(cinfo);
#endif
/* Entropy decoding: either Huffman or arithmetic coding. */
if (cinfo->arith_code) {
#ifdef D_ARITH_CODING_SUPPORTED
jinit_arith_decoder(cinfo);
#else
ERREXIT(cinfo, JERR_ARITH_NOTIMPL);
#endif
} else {
if (cinfo->progressive_mode) {
#ifdef D_PROGRESSIVE_SUPPORTED
jinit_phuff_decoder(cinfo);
#else
ERREXIT(cinfo, JERR_NOT_COMPILED);
#endif
} else
jinit_huff_decoder(cinfo);
}
/* Always get a full-image coefficient buffer. */
jinit_d_coef_controller(cinfo, TRUE);
/* We can now tell the memory manager to allocate virtual arrays. */
(*cinfo->mem->realize_virt_arrays) ((j_common_ptr) cinfo);
/* Initialize input side of decompressor to consume first scan. */
(*cinfo->inputctl->start_input_pass) (cinfo);
/* Initialize progress monitoring. */
if (cinfo->progress != NULL) {
int nscans;
/* Estimate number of scans to set pass_limit. */
if (cinfo->progressive_mode) {
/* Arbitrarily estimate 2 interleaved DC scans + 3 AC scans/component. */
nscans = 2 + 3 * cinfo->num_components;
} else if (cinfo->inputctl->has_multiple_scans) {
/* For a nonprogressive multiscan file, estimate 1 scan per component. */
nscans = cinfo->num_components;
} else {
nscans = 1;
}
cinfo->progress->pass_counter = 0L;
cinfo->progress->pass_limit = (long) cinfo->total_iMCU_rows * nscans;
cinfo->progress->completed_passes = 0;
cinfo->progress->total_passes = 1;
}
}