mirror of
https://github.com/GRRLIB/GRRLIB.git
synced 2024-11-22 15:02:20 +00:00
libjpeg updated to preliminary version 9b (10 Dec 2015).
This commit is contained in:
parent
539a46ad8d
commit
a9955687ab
3 changed files with 103 additions and 50 deletions
|
@ -45,11 +45,23 @@ LOCAL(boolean)
|
||||||
use_merged_upsample (j_decompress_ptr cinfo)
|
use_merged_upsample (j_decompress_ptr cinfo)
|
||||||
{
|
{
|
||||||
#ifdef UPSAMPLE_MERGING_SUPPORTED
|
#ifdef UPSAMPLE_MERGING_SUPPORTED
|
||||||
/* Merging is the equivalent of plain box-filter upsampling */
|
/* Merging is the equivalent of plain box-filter upsampling. */
|
||||||
if (cinfo->do_fancy_upsampling || cinfo->CCIR601_sampling)
|
/* The following condition is only needed if fancy shall select
|
||||||
|
* a different upsampling method. In our current implementation
|
||||||
|
* fancy only affects the DCT scaling, thus we can use fancy
|
||||||
|
* upsampling and merged upsample simultaneously, in particular
|
||||||
|
* with scaled DCT sizes larger than the default DCTSIZE.
|
||||||
|
*/
|
||||||
|
#if 0
|
||||||
|
if (cinfo->do_fancy_upsampling)
|
||||||
|
return FALSE;
|
||||||
|
#endif
|
||||||
|
if (cinfo->CCIR601_sampling)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
/* jdmerge.c only supports YCC=>RGB color conversion */
|
/* jdmerge.c only supports YCC=>RGB color conversion */
|
||||||
if (cinfo->jpeg_color_space != JCS_YCbCr || cinfo->num_components != 3 ||
|
if ((cinfo->jpeg_color_space != JCS_YCbCr &&
|
||||||
|
cinfo->jpeg_color_space != JCS_BG_YCC) ||
|
||||||
|
cinfo->num_components != 3 ||
|
||||||
cinfo->out_color_space != JCS_RGB ||
|
cinfo->out_color_space != JCS_RGB ||
|
||||||
cinfo->out_color_components != RGB_PIXELSIZE ||
|
cinfo->out_color_components != RGB_PIXELSIZE ||
|
||||||
cinfo->color_transform)
|
cinfo->color_transform)
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* jdmerge.c
|
* jdmerge.c
|
||||||
*
|
*
|
||||||
* Copyright (C) 1994-1996, Thomas G. Lane.
|
* Copyright (C) 1994-1996, Thomas G. Lane.
|
||||||
* Modified 2013 by Guido Vollbeding.
|
* Modified 2013-2015 by Guido Vollbeding.
|
||||||
* This file is part of the Independent JPEG Group's software.
|
* This file is part of the Independent JPEG Group's software.
|
||||||
* For conditions of distribution and use, see the accompanying README file.
|
* For conditions of distribution and use, see the accompanying README file.
|
||||||
*
|
*
|
||||||
|
@ -24,7 +24,7 @@
|
||||||
* multiplications needed for color conversion.
|
* multiplications needed for color conversion.
|
||||||
*
|
*
|
||||||
* This file currently provides implementations for the following cases:
|
* This file currently provides implementations for the following cases:
|
||||||
* YCbCr => RGB color conversion only.
|
* YCC => RGB color conversion only (YCbCr or BG_YCC).
|
||||||
* Sampling ratios of 2h1v or 2h2v.
|
* Sampling ratios of 2h1v or 2h2v.
|
||||||
* No scaling needed at upsample time.
|
* No scaling needed at upsample time.
|
||||||
* Corner-aligned (non-CCIR601) sampling alignment.
|
* Corner-aligned (non-CCIR601) sampling alignment.
|
||||||
|
@ -76,12 +76,13 @@ typedef my_upsampler * my_upsample_ptr;
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Initialize tables for YCC->RGB colorspace conversion.
|
* Initialize tables for YCbCr->RGB and BG_YCC->RGB colorspace conversion.
|
||||||
* This is taken directly from jdcolor.c; see that file for more info.
|
* This is taken directly from jdcolor.c; see that file for more info.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
LOCAL(void)
|
LOCAL(void)
|
||||||
build_ycc_rgb_table (j_decompress_ptr cinfo)
|
build_ycc_rgb_table (j_decompress_ptr cinfo)
|
||||||
|
/* Normal case, sYCC */
|
||||||
{
|
{
|
||||||
my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample;
|
my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample;
|
||||||
int i;
|
int i;
|
||||||
|
@ -119,6 +120,46 @@ build_ycc_rgb_table (j_decompress_ptr cinfo)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
LOCAL(void)
|
||||||
|
build_bg_ycc_rgb_table (j_decompress_ptr cinfo)
|
||||||
|
/* Wide gamut case, bg-sYCC */
|
||||||
|
{
|
||||||
|
my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample;
|
||||||
|
int i;
|
||||||
|
INT32 x;
|
||||||
|
SHIFT_TEMPS
|
||||||
|
|
||||||
|
upsample->Cr_r_tab = (int *)
|
||||||
|
(*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
|
||||||
|
(MAXJSAMPLE+1) * SIZEOF(int));
|
||||||
|
upsample->Cb_b_tab = (int *)
|
||||||
|
(*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
|
||||||
|
(MAXJSAMPLE+1) * SIZEOF(int));
|
||||||
|
upsample->Cr_g_tab = (INT32 *)
|
||||||
|
(*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
|
||||||
|
(MAXJSAMPLE+1) * SIZEOF(INT32));
|
||||||
|
upsample->Cb_g_tab = (INT32 *)
|
||||||
|
(*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
|
||||||
|
(MAXJSAMPLE+1) * SIZEOF(INT32));
|
||||||
|
|
||||||
|
for (i = 0, x = -CENTERJSAMPLE; i <= MAXJSAMPLE; i++, x++) {
|
||||||
|
/* i is the actual input pixel value, in the range 0..MAXJSAMPLE */
|
||||||
|
/* The Cb or Cr value we are thinking of is x = i - CENTERJSAMPLE */
|
||||||
|
/* Cr=>R value is nearest int to 2.804 * x */
|
||||||
|
upsample->Cr_r_tab[i] = (int)
|
||||||
|
RIGHT_SHIFT(FIX(2.804) * x + ONE_HALF, SCALEBITS);
|
||||||
|
/* Cb=>B value is nearest int to 3.544 * x */
|
||||||
|
upsample->Cb_b_tab[i] = (int)
|
||||||
|
RIGHT_SHIFT(FIX(3.544) * x + ONE_HALF, SCALEBITS);
|
||||||
|
/* Cr=>G value is scaled-up -1.428272572 * x */
|
||||||
|
upsample->Cr_g_tab[i] = (- FIX(1.428272572)) * x;
|
||||||
|
/* Cb=>G value is scaled-up -0.688272572 * x */
|
||||||
|
/* We also add in ONE_HALF so that need not do it in inner loop */
|
||||||
|
upsample->Cb_g_tab[i] = (- FIX(0.688272572)) * x + ONE_HALF;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Initialize for an upsampling pass.
|
* Initialize for an upsampling pass.
|
||||||
*/
|
*/
|
||||||
|
@ -375,7 +416,7 @@ jinit_merged_upsampler (j_decompress_ptr cinfo)
|
||||||
upsample = (my_upsample_ptr)
|
upsample = (my_upsample_ptr)
|
||||||
(*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
|
(*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
|
||||||
SIZEOF(my_upsampler));
|
SIZEOF(my_upsampler));
|
||||||
cinfo->upsample = (struct jpeg_upsampler *) upsample;
|
cinfo->upsample = &upsample->pub;
|
||||||
upsample->pub.start_pass = start_pass_merged_upsample;
|
upsample->pub.start_pass = start_pass_merged_upsample;
|
||||||
upsample->pub.need_context_rows = FALSE;
|
upsample->pub.need_context_rows = FALSE;
|
||||||
|
|
||||||
|
@ -395,6 +436,9 @@ jinit_merged_upsampler (j_decompress_ptr cinfo)
|
||||||
upsample->spare_row = NULL;
|
upsample->spare_row = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (cinfo->jpeg_color_space == JCS_BG_YCC)
|
||||||
|
build_bg_ycc_rgb_table(cinfo);
|
||||||
|
else
|
||||||
build_ycc_rgb_table(cinfo);
|
build_ycc_rgb_table(cinfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* jdsample.c
|
* jdsample.c
|
||||||
*
|
*
|
||||||
* Copyright (C) 1991-1996, Thomas G. Lane.
|
* Copyright (C) 1991-1996, Thomas G. Lane.
|
||||||
* Modified 2002-2008 by Guido Vollbeding.
|
* Modified 2002-2015 by Guido Vollbeding.
|
||||||
* This file is part of the Independent JPEG Group's software.
|
* This file is part of the Independent JPEG Group's software.
|
||||||
* For conditions of distribution and use, see the accompanying README file.
|
* For conditions of distribution and use, see the accompanying README file.
|
||||||
*
|
*
|
||||||
|
@ -296,13 +296,12 @@ jinit_upsampler (j_decompress_ptr cinfo)
|
||||||
my_upsample_ptr upsample;
|
my_upsample_ptr upsample;
|
||||||
int ci;
|
int ci;
|
||||||
jpeg_component_info * compptr;
|
jpeg_component_info * compptr;
|
||||||
boolean need_buffer;
|
|
||||||
int h_in_group, v_in_group, h_out_group, v_out_group;
|
int h_in_group, v_in_group, h_out_group, v_out_group;
|
||||||
|
|
||||||
upsample = (my_upsample_ptr)
|
upsample = (my_upsample_ptr)
|
||||||
(*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
|
(*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
|
||||||
SIZEOF(my_upsampler));
|
SIZEOF(my_upsampler));
|
||||||
cinfo->upsample = (struct jpeg_upsampler *) upsample;
|
cinfo->upsample = &upsample->pub;
|
||||||
upsample->pub.start_pass = start_pass_upsample;
|
upsample->pub.start_pass = start_pass_upsample;
|
||||||
upsample->pub.upsample = sep_upsample;
|
upsample->pub.upsample = sep_upsample;
|
||||||
upsample->pub.need_context_rows = FALSE; /* until we find out differently */
|
upsample->pub.need_context_rows = FALSE; /* until we find out differently */
|
||||||
|
@ -325,17 +324,17 @@ jinit_upsampler (j_decompress_ptr cinfo)
|
||||||
h_out_group = cinfo->max_h_samp_factor;
|
h_out_group = cinfo->max_h_samp_factor;
|
||||||
v_out_group = cinfo->max_v_samp_factor;
|
v_out_group = cinfo->max_v_samp_factor;
|
||||||
upsample->rowgroup_height[ci] = v_in_group; /* save for use later */
|
upsample->rowgroup_height[ci] = v_in_group; /* save for use later */
|
||||||
need_buffer = TRUE;
|
|
||||||
if (! compptr->component_needed) {
|
if (! compptr->component_needed) {
|
||||||
/* Don't bother to upsample an uninteresting component. */
|
/* Don't bother to upsample an uninteresting component. */
|
||||||
upsample->methods[ci] = noop_upsample;
|
upsample->methods[ci] = noop_upsample;
|
||||||
need_buffer = FALSE;
|
continue; /* don't need to allocate buffer */
|
||||||
} else if (h_in_group == h_out_group && v_in_group == v_out_group) {
|
}
|
||||||
|
if (h_in_group == h_out_group && v_in_group == v_out_group) {
|
||||||
/* Fullsize components can be processed without any work. */
|
/* Fullsize components can be processed without any work. */
|
||||||
upsample->methods[ci] = fullsize_upsample;
|
upsample->methods[ci] = fullsize_upsample;
|
||||||
need_buffer = FALSE;
|
continue; /* don't need to allocate buffer */
|
||||||
} else if (h_in_group * 2 == h_out_group &&
|
}
|
||||||
v_in_group == v_out_group) {
|
if (h_in_group * 2 == h_out_group && v_in_group == v_out_group) {
|
||||||
/* Special case for 2h1v upsampling */
|
/* Special case for 2h1v upsampling */
|
||||||
upsample->methods[ci] = h2v1_upsample;
|
upsample->methods[ci] = h2v1_upsample;
|
||||||
} else if (h_in_group * 2 == h_out_group &&
|
} else if (h_in_group * 2 == h_out_group &&
|
||||||
|
@ -350,12 +349,10 @@ jinit_upsampler (j_decompress_ptr cinfo)
|
||||||
upsample->v_expand[ci] = (UINT8) (v_out_group / v_in_group);
|
upsample->v_expand[ci] = (UINT8) (v_out_group / v_in_group);
|
||||||
} else
|
} else
|
||||||
ERREXIT(cinfo, JERR_FRACT_SAMPLE_NOTIMPL);
|
ERREXIT(cinfo, JERR_FRACT_SAMPLE_NOTIMPL);
|
||||||
if (need_buffer) {
|
|
||||||
upsample->color_buf[ci] = (*cinfo->mem->alloc_sarray)
|
upsample->color_buf[ci] = (*cinfo->mem->alloc_sarray)
|
||||||
((j_common_ptr) cinfo, JPOOL_IMAGE,
|
((j_common_ptr) cinfo, JPOOL_IMAGE,
|
||||||
(JDIMENSION) jround_up((long) cinfo->output_width,
|
(JDIMENSION) jround_up((long) cinfo->output_width,
|
||||||
(long) cinfo->max_h_samp_factor),
|
(long) cinfo->max_h_samp_factor),
|
||||||
(JDIMENSION) cinfo->max_v_samp_factor);
|
(JDIMENSION) cinfo->max_v_samp_factor);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue