mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-27 23:02:20 +00:00
2d0b90011e
--HG-- rename : jpeg/MOZCHANGES => media/libjpeg/MOZCHANGES rename : jpeg/Makefile.in => media/libjpeg/Makefile.in rename : jpeg/README => media/libjpeg/README rename : jpeg/README-turbo.txt => media/libjpeg/README-turbo.txt rename : jpeg/cderror.h => media/libjpeg/cderror.h rename : jpeg/cdjpeg.h => media/libjpeg/cdjpeg.h rename : jpeg/jaricom.c => media/libjpeg/jaricom.c rename : jpeg/jcapimin.c => media/libjpeg/jcapimin.c rename : jpeg/jcapistd.c => media/libjpeg/jcapistd.c rename : jpeg/jcarith.c => media/libjpeg/jcarith.c rename : jpeg/jccoefct.c => media/libjpeg/jccoefct.c rename : jpeg/jccolor.c => media/libjpeg/jccolor.c rename : jpeg/jcdctmgr.c => media/libjpeg/jcdctmgr.c rename : jpeg/jchuff.c => media/libjpeg/jchuff.c rename : jpeg/jchuff.h => media/libjpeg/jchuff.h rename : jpeg/jcinit.c => media/libjpeg/jcinit.c rename : jpeg/jcmainct.c => media/libjpeg/jcmainct.c rename : jpeg/jcmarker.c => media/libjpeg/jcmarker.c rename : jpeg/jcmaster.c => media/libjpeg/jcmaster.c rename : jpeg/jcomapi.c => media/libjpeg/jcomapi.c rename : jpeg/jconfig.h => media/libjpeg/jconfig.h rename : jpeg/jconfig.h.in => media/libjpeg/jconfig.h.in rename : jpeg/jcparam.c => media/libjpeg/jcparam.c rename : jpeg/jcphuff.c => media/libjpeg/jcphuff.c rename : jpeg/jcprepct.c => media/libjpeg/jcprepct.c rename : jpeg/jcsample.c => media/libjpeg/jcsample.c rename : jpeg/jdapimin.c => media/libjpeg/jdapimin.c rename : jpeg/jdapistd.c => media/libjpeg/jdapistd.c rename : jpeg/jdarith.c => media/libjpeg/jdarith.c rename : jpeg/jdatadst.c => media/libjpeg/jdatadst.c rename : jpeg/jdatasrc.c => media/libjpeg/jdatasrc.c rename : jpeg/jdcoefct.c => media/libjpeg/jdcoefct.c rename : jpeg/jdcolor.c => media/libjpeg/jdcolor.c rename : jpeg/jdct.h => media/libjpeg/jdct.h rename : jpeg/jddctmgr.c => media/libjpeg/jddctmgr.c rename : jpeg/jdhuff.c => media/libjpeg/jdhuff.c rename : jpeg/jdhuff.h => media/libjpeg/jdhuff.h rename : jpeg/jdinput.c => media/libjpeg/jdinput.c rename : jpeg/jdmainct.c => media/libjpeg/jdmainct.c rename : jpeg/jdmarker.c => media/libjpeg/jdmarker.c rename : jpeg/jdmaster.c => media/libjpeg/jdmaster.c rename : jpeg/jdmerge.c => media/libjpeg/jdmerge.c rename : jpeg/jdphuff.c => media/libjpeg/jdphuff.c rename : jpeg/jdpostct.c => media/libjpeg/jdpostct.c rename : jpeg/jdsample.c => media/libjpeg/jdsample.c rename : jpeg/jdtrans.c => media/libjpeg/jdtrans.c rename : jpeg/jerror.c => media/libjpeg/jerror.c rename : jpeg/jerror.h => media/libjpeg/jerror.h rename : jpeg/jfdctflt.c => media/libjpeg/jfdctflt.c rename : jpeg/jfdctfst.c => media/libjpeg/jfdctfst.c rename : jpeg/jfdctint.c => media/libjpeg/jfdctint.c rename : jpeg/jidctflt.c => media/libjpeg/jidctflt.c rename : jpeg/jidctfst.c => media/libjpeg/jidctfst.c rename : jpeg/jidctint.c => media/libjpeg/jidctint.c rename : jpeg/jidctred.c => media/libjpeg/jidctred.c rename : jpeg/jinclude.h => media/libjpeg/jinclude.h rename : jpeg/jmemmgr.c => media/libjpeg/jmemmgr.c rename : jpeg/jmemnobs.c => media/libjpeg/jmemnobs.c rename : jpeg/jmemsys.h => media/libjpeg/jmemsys.h rename : jpeg/jmorecfg.h => media/libjpeg/jmorecfg.h rename : jpeg/jpegcomp.h => media/libjpeg/jpegcomp.h rename : jpeg/jpegint.h => media/libjpeg/jpegint.h rename : jpeg/jpeglib.h => media/libjpeg/jpeglib.h rename : jpeg/jquant1.c => media/libjpeg/jquant1.c rename : jpeg/jquant2.c => media/libjpeg/jquant2.c rename : jpeg/jsimd.h => media/libjpeg/jsimd.h rename : jpeg/jsimd_none.c => media/libjpeg/jsimd_none.c rename : jpeg/jsimddct.h => media/libjpeg/jsimddct.h rename : jpeg/jutils.c => media/libjpeg/jutils.c rename : jpeg/jversion.h => media/libjpeg/jversion.h rename : jpeg/simd/Makefile.in => media/libjpeg/simd/Makefile.in rename : jpeg/simd/jcclrmmx.asm => media/libjpeg/simd/jcclrmmx.asm rename : jpeg/simd/jcclrss2-64.asm => media/libjpeg/simd/jcclrss2-64.asm rename : jpeg/simd/jcclrss2.asm => media/libjpeg/simd/jcclrss2.asm rename : jpeg/simd/jccolmmx.asm => media/libjpeg/simd/jccolmmx.asm rename : jpeg/simd/jccolss2-64.asm => media/libjpeg/simd/jccolss2-64.asm rename : jpeg/simd/jccolss2.asm => media/libjpeg/simd/jccolss2.asm rename : jpeg/simd/jcolsamp.inc => media/libjpeg/simd/jcolsamp.inc rename : jpeg/simd/jcqnt3dn.asm => media/libjpeg/simd/jcqnt3dn.asm rename : jpeg/simd/jcqntmmx.asm => media/libjpeg/simd/jcqntmmx.asm rename : jpeg/simd/jcqnts2f-64.asm => media/libjpeg/simd/jcqnts2f-64.asm rename : jpeg/simd/jcqnts2f.asm => media/libjpeg/simd/jcqnts2f.asm rename : jpeg/simd/jcqnts2i-64.asm => media/libjpeg/simd/jcqnts2i-64.asm rename : jpeg/simd/jcqnts2i.asm => media/libjpeg/simd/jcqnts2i.asm rename : jpeg/simd/jcqntsse.asm => media/libjpeg/simd/jcqntsse.asm rename : jpeg/simd/jcsammmx.asm => media/libjpeg/simd/jcsammmx.asm rename : jpeg/simd/jcsamss2-64.asm => media/libjpeg/simd/jcsamss2-64.asm rename : jpeg/simd/jcsamss2.asm => media/libjpeg/simd/jcsamss2.asm rename : jpeg/simd/jdclrmmx.asm => media/libjpeg/simd/jdclrmmx.asm rename : jpeg/simd/jdclrss2-64.asm => media/libjpeg/simd/jdclrss2-64.asm rename : jpeg/simd/jdclrss2.asm => media/libjpeg/simd/jdclrss2.asm rename : jpeg/simd/jdcolmmx.asm => media/libjpeg/simd/jdcolmmx.asm rename : jpeg/simd/jdcolss2-64.asm => media/libjpeg/simd/jdcolss2-64.asm rename : jpeg/simd/jdcolss2.asm => media/libjpeg/simd/jdcolss2.asm rename : jpeg/simd/jdct.inc => media/libjpeg/simd/jdct.inc rename : jpeg/simd/jdmermmx.asm => media/libjpeg/simd/jdmermmx.asm rename : jpeg/simd/jdmerss2-64.asm => media/libjpeg/simd/jdmerss2-64.asm rename : jpeg/simd/jdmerss2.asm => media/libjpeg/simd/jdmerss2.asm rename : jpeg/simd/jdmrgmmx.asm => media/libjpeg/simd/jdmrgmmx.asm rename : jpeg/simd/jdmrgss2-64.asm => media/libjpeg/simd/jdmrgss2-64.asm rename : jpeg/simd/jdmrgss2.asm => media/libjpeg/simd/jdmrgss2.asm rename : jpeg/simd/jdsammmx.asm => media/libjpeg/simd/jdsammmx.asm rename : jpeg/simd/jdsamss2-64.asm => media/libjpeg/simd/jdsamss2-64.asm rename : jpeg/simd/jdsamss2.asm => media/libjpeg/simd/jdsamss2.asm rename : jpeg/simd/jf3dnflt.asm => media/libjpeg/simd/jf3dnflt.asm rename : jpeg/simd/jfmmxfst.asm => media/libjpeg/simd/jfmmxfst.asm rename : jpeg/simd/jfmmxint.asm => media/libjpeg/simd/jfmmxint.asm rename : jpeg/simd/jfss2fst-64.asm => media/libjpeg/simd/jfss2fst-64.asm rename : jpeg/simd/jfss2fst.asm => media/libjpeg/simd/jfss2fst.asm rename : jpeg/simd/jfss2int-64.asm => media/libjpeg/simd/jfss2int-64.asm rename : jpeg/simd/jfss2int.asm => media/libjpeg/simd/jfss2int.asm rename : jpeg/simd/jfsseflt-64.asm => media/libjpeg/simd/jfsseflt-64.asm rename : jpeg/simd/jfsseflt.asm => media/libjpeg/simd/jfsseflt.asm rename : jpeg/simd/ji3dnflt.asm => media/libjpeg/simd/ji3dnflt.asm rename : jpeg/simd/jimmxfst.asm => media/libjpeg/simd/jimmxfst.asm rename : jpeg/simd/jimmxint.asm => media/libjpeg/simd/jimmxint.asm rename : jpeg/simd/jimmxred.asm => media/libjpeg/simd/jimmxred.asm rename : jpeg/simd/jiss2flt-64.asm => media/libjpeg/simd/jiss2flt-64.asm rename : jpeg/simd/jiss2flt.asm => media/libjpeg/simd/jiss2flt.asm rename : jpeg/simd/jiss2fst-64.asm => media/libjpeg/simd/jiss2fst-64.asm rename : jpeg/simd/jiss2fst.asm => media/libjpeg/simd/jiss2fst.asm rename : jpeg/simd/jiss2int-64.asm => media/libjpeg/simd/jiss2int-64.asm rename : jpeg/simd/jiss2int.asm => media/libjpeg/simd/jiss2int.asm rename : jpeg/simd/jiss2red-64.asm => media/libjpeg/simd/jiss2red-64.asm rename : jpeg/simd/jiss2red.asm => media/libjpeg/simd/jiss2red.asm rename : jpeg/simd/jisseflt.asm => media/libjpeg/simd/jisseflt.asm rename : jpeg/simd/jsimd.h => media/libjpeg/simd/jsimd.h rename : jpeg/simd/jsimd_i386.c => media/libjpeg/simd/jsimd_i386.c rename : jpeg/simd/jsimd_x86_64.c => media/libjpeg/simd/jsimd_x86_64.c rename : jpeg/simd/jsimdcfg.inc => media/libjpeg/simd/jsimdcfg.inc rename : jpeg/simd/jsimdcfg.inc.h => media/libjpeg/simd/jsimdcfg.inc.h rename : jpeg/simd/jsimdcpu.asm => media/libjpeg/simd/jsimdcpu.asm rename : jpeg/simd/jsimdext.inc => media/libjpeg/simd/jsimdext.inc rename : jpeg/transupp.h => media/libjpeg/transupp.h
291 lines
9.5 KiB
C
291 lines
9.5 KiB
C
/*
|
|
* jdpostct.c
|
|
*
|
|
* Copyright (C) 1994-1996, Thomas G. Lane.
|
|
* This file is part of the Independent JPEG Group's software.
|
|
* For conditions of distribution and use, see the accompanying README file.
|
|
*
|
|
* This file contains the decompression postprocessing controller.
|
|
* This controller manages the upsampling, color conversion, and color
|
|
* quantization/reduction steps; specifically, it controls the buffering
|
|
* between upsample/color conversion and color quantization/reduction.
|
|
*
|
|
* If no color quantization/reduction is required, then this module has no
|
|
* work to do, and it just hands off to the upsample/color conversion code.
|
|
* An integrated upsample/convert/quantize process would replace this module
|
|
* entirely.
|
|
*/
|
|
|
|
#define JPEG_INTERNALS
|
|
#include "jinclude.h"
|
|
#include "jpeglib.h"
|
|
|
|
|
|
/* Private buffer controller object */
|
|
|
|
typedef struct {
|
|
struct jpeg_d_post_controller pub; /* public fields */
|
|
|
|
/* Color quantization source buffer: this holds output data from
|
|
* the upsample/color conversion step to be passed to the quantizer.
|
|
* For two-pass color quantization, we need a full-image buffer;
|
|
* for one-pass operation, a strip buffer is sufficient.
|
|
*/
|
|
jvirt_sarray_ptr whole_image; /* virtual array, or NULL if one-pass */
|
|
JSAMPARRAY buffer; /* strip buffer, or current strip of virtual */
|
|
JDIMENSION strip_height; /* buffer size in rows */
|
|
/* for two-pass mode only: */
|
|
JDIMENSION starting_row; /* row # of first row in current strip */
|
|
JDIMENSION next_row; /* index of next row to fill/empty in strip */
|
|
} my_post_controller;
|
|
|
|
typedef my_post_controller * my_post_ptr;
|
|
|
|
|
|
/* Forward declarations */
|
|
METHODDEF(void) post_process_1pass
|
|
JPP((j_decompress_ptr cinfo,
|
|
JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr,
|
|
JDIMENSION in_row_groups_avail,
|
|
JSAMPARRAY output_buf, JDIMENSION *out_row_ctr,
|
|
JDIMENSION out_rows_avail));
|
|
#ifdef QUANT_2PASS_SUPPORTED
|
|
METHODDEF(void) post_process_prepass
|
|
JPP((j_decompress_ptr cinfo,
|
|
JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr,
|
|
JDIMENSION in_row_groups_avail,
|
|
JSAMPARRAY output_buf, JDIMENSION *out_row_ctr,
|
|
JDIMENSION out_rows_avail));
|
|
METHODDEF(void) post_process_2pass
|
|
JPP((j_decompress_ptr cinfo,
|
|
JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr,
|
|
JDIMENSION in_row_groups_avail,
|
|
JSAMPARRAY output_buf, JDIMENSION *out_row_ctr,
|
|
JDIMENSION out_rows_avail));
|
|
#endif
|
|
|
|
|
|
/*
|
|
* Initialize for a processing pass.
|
|
*/
|
|
|
|
METHODDEF(void)
|
|
start_pass_dpost (j_decompress_ptr cinfo, J_BUF_MODE pass_mode)
|
|
{
|
|
my_post_ptr post = (my_post_ptr) cinfo->post;
|
|
|
|
switch (pass_mode) {
|
|
case JBUF_PASS_THRU:
|
|
if (cinfo->quantize_colors) {
|
|
/* Single-pass processing with color quantization. */
|
|
post->pub.post_process_data = post_process_1pass;
|
|
/* We could be doing buffered-image output before starting a 2-pass
|
|
* color quantization; in that case, jinit_d_post_controller did not
|
|
* allocate a strip buffer. Use the virtual-array buffer as workspace.
|
|
*/
|
|
if (post->buffer == NULL) {
|
|
post->buffer = (*cinfo->mem->access_virt_sarray)
|
|
((j_common_ptr) cinfo, post->whole_image,
|
|
(JDIMENSION) 0, post->strip_height, TRUE);
|
|
}
|
|
} else {
|
|
/* For single-pass processing without color quantization,
|
|
* I have no work to do; just call the upsampler directly.
|
|
*/
|
|
post->pub.post_process_data = cinfo->upsample->upsample;
|
|
}
|
|
break;
|
|
#ifdef QUANT_2PASS_SUPPORTED
|
|
case JBUF_SAVE_AND_PASS:
|
|
/* First pass of 2-pass quantization */
|
|
if (post->whole_image == NULL)
|
|
ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);
|
|
post->pub.post_process_data = post_process_prepass;
|
|
break;
|
|
case JBUF_CRANK_DEST:
|
|
/* Second pass of 2-pass quantization */
|
|
if (post->whole_image == NULL)
|
|
ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);
|
|
post->pub.post_process_data = post_process_2pass;
|
|
break;
|
|
#endif /* QUANT_2PASS_SUPPORTED */
|
|
default:
|
|
ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);
|
|
break;
|
|
}
|
|
post->starting_row = post->next_row = 0;
|
|
}
|
|
|
|
|
|
/*
|
|
* Process some data in the one-pass (strip buffer) case.
|
|
* This is used for color precision reduction as well as one-pass quantization.
|
|
*/
|
|
|
|
METHODDEF(void)
|
|
post_process_1pass (j_decompress_ptr cinfo,
|
|
JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr,
|
|
JDIMENSION in_row_groups_avail,
|
|
JSAMPARRAY output_buf, JDIMENSION *out_row_ctr,
|
|
JDIMENSION out_rows_avail)
|
|
{
|
|
my_post_ptr post = (my_post_ptr) cinfo->post;
|
|
JDIMENSION num_rows, max_rows;
|
|
|
|
/* Fill the buffer, but not more than what we can dump out in one go. */
|
|
/* Note we rely on the upsampler to detect bottom of image. */
|
|
max_rows = out_rows_avail - *out_row_ctr;
|
|
if (max_rows > post->strip_height)
|
|
max_rows = post->strip_height;
|
|
num_rows = 0;
|
|
(*cinfo->upsample->upsample) (cinfo,
|
|
input_buf, in_row_group_ctr, in_row_groups_avail,
|
|
post->buffer, &num_rows, max_rows);
|
|
/* Quantize and emit data. */
|
|
(*cinfo->cquantize->color_quantize) (cinfo,
|
|
post->buffer, output_buf + *out_row_ctr, (int) num_rows);
|
|
*out_row_ctr += num_rows;
|
|
}
|
|
|
|
|
|
#ifdef QUANT_2PASS_SUPPORTED
|
|
|
|
/*
|
|
* Process some data in the first pass of 2-pass quantization.
|
|
*/
|
|
|
|
METHODDEF(void)
|
|
post_process_prepass (j_decompress_ptr cinfo,
|
|
JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr,
|
|
JDIMENSION in_row_groups_avail,
|
|
JSAMPARRAY output_buf, JDIMENSION *out_row_ctr,
|
|
JDIMENSION out_rows_avail)
|
|
{
|
|
my_post_ptr post = (my_post_ptr) cinfo->post;
|
|
JDIMENSION old_next_row, num_rows;
|
|
|
|
/* Reposition virtual buffer if at start of strip. */
|
|
if (post->next_row == 0) {
|
|
post->buffer = (*cinfo->mem->access_virt_sarray)
|
|
((j_common_ptr) cinfo, post->whole_image,
|
|
post->starting_row, post->strip_height, TRUE);
|
|
}
|
|
|
|
/* Upsample some data (up to a strip height's worth). */
|
|
old_next_row = post->next_row;
|
|
(*cinfo->upsample->upsample) (cinfo,
|
|
input_buf, in_row_group_ctr, in_row_groups_avail,
|
|
post->buffer, &post->next_row, post->strip_height);
|
|
|
|
/* Allow quantizer to scan new data. No data is emitted, */
|
|
/* but we advance out_row_ctr so outer loop can tell when we're done. */
|
|
if (post->next_row > old_next_row) {
|
|
num_rows = post->next_row - old_next_row;
|
|
(*cinfo->cquantize->color_quantize) (cinfo, post->buffer + old_next_row,
|
|
(JSAMPARRAY) NULL, (int) num_rows);
|
|
*out_row_ctr += num_rows;
|
|
}
|
|
|
|
/* Advance if we filled the strip. */
|
|
if (post->next_row >= post->strip_height) {
|
|
post->starting_row += post->strip_height;
|
|
post->next_row = 0;
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
* Process some data in the second pass of 2-pass quantization.
|
|
*/
|
|
|
|
METHODDEF(void)
|
|
post_process_2pass (j_decompress_ptr cinfo,
|
|
JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr,
|
|
JDIMENSION in_row_groups_avail,
|
|
JSAMPARRAY output_buf, JDIMENSION *out_row_ctr,
|
|
JDIMENSION out_rows_avail)
|
|
{
|
|
my_post_ptr post = (my_post_ptr) cinfo->post;
|
|
JDIMENSION num_rows, max_rows;
|
|
|
|
/* Reposition virtual buffer if at start of strip. */
|
|
if (post->next_row == 0) {
|
|
post->buffer = (*cinfo->mem->access_virt_sarray)
|
|
((j_common_ptr) cinfo, post->whole_image,
|
|
post->starting_row, post->strip_height, FALSE);
|
|
}
|
|
|
|
/* Determine number of rows to emit. */
|
|
num_rows = post->strip_height - post->next_row; /* available in strip */
|
|
max_rows = out_rows_avail - *out_row_ctr; /* available in output area */
|
|
if (num_rows > max_rows)
|
|
num_rows = max_rows;
|
|
/* We have to check bottom of image here, can't depend on upsampler. */
|
|
max_rows = cinfo->output_height - post->starting_row;
|
|
if (num_rows > max_rows)
|
|
num_rows = max_rows;
|
|
|
|
/* Quantize and emit data. */
|
|
(*cinfo->cquantize->color_quantize) (cinfo,
|
|
post->buffer + post->next_row, output_buf + *out_row_ctr,
|
|
(int) num_rows);
|
|
*out_row_ctr += num_rows;
|
|
|
|
/* Advance if we filled the strip. */
|
|
post->next_row += num_rows;
|
|
if (post->next_row >= post->strip_height) {
|
|
post->starting_row += post->strip_height;
|
|
post->next_row = 0;
|
|
}
|
|
}
|
|
|
|
#endif /* QUANT_2PASS_SUPPORTED */
|
|
|
|
|
|
/*
|
|
* Initialize postprocessing controller.
|
|
*/
|
|
|
|
GLOBAL(void)
|
|
jinit_d_post_controller (j_decompress_ptr cinfo, boolean need_full_buffer)
|
|
{
|
|
my_post_ptr post;
|
|
|
|
post = (my_post_ptr)
|
|
(*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
|
|
SIZEOF(my_post_controller));
|
|
cinfo->post = (struct jpeg_d_post_controller *) post;
|
|
post->pub.start_pass = start_pass_dpost;
|
|
post->whole_image = NULL; /* flag for no virtual arrays */
|
|
post->buffer = NULL; /* flag for no strip buffer */
|
|
|
|
/* Create the quantization buffer, if needed */
|
|
if (cinfo->quantize_colors) {
|
|
/* The buffer strip height is max_v_samp_factor, which is typically
|
|
* an efficient number of rows for upsampling to return.
|
|
* (In the presence of output rescaling, we might want to be smarter?)
|
|
*/
|
|
post->strip_height = (JDIMENSION) cinfo->max_v_samp_factor;
|
|
if (need_full_buffer) {
|
|
/* Two-pass color quantization: need full-image storage. */
|
|
/* We round up the number of rows to a multiple of the strip height. */
|
|
#ifdef QUANT_2PASS_SUPPORTED
|
|
post->whole_image = (*cinfo->mem->request_virt_sarray)
|
|
((j_common_ptr) cinfo, JPOOL_IMAGE, FALSE,
|
|
cinfo->output_width * cinfo->out_color_components,
|
|
(JDIMENSION) jround_up((long) cinfo->output_height,
|
|
(long) post->strip_height),
|
|
post->strip_height);
|
|
#else
|
|
ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);
|
|
#endif /* QUANT_2PASS_SUPPORTED */
|
|
} else {
|
|
/* One-pass color quantization: just make a strip buffer. */
|
|
post->buffer = (*cinfo->mem->alloc_sarray)
|
|
((j_common_ptr) cinfo, JPOOL_IMAGE,
|
|
cinfo->output_width * cinfo->out_color_components,
|
|
post->strip_height);
|
|
}
|
|
}
|
|
}
|