220 lines
5.3 KiB
C
220 lines
5.3 KiB
C
/*
|
|
* jcext.c
|
|
*
|
|
* Copyright (C) 2014, D. R. Commander.
|
|
* Copyright (C) 2014, Mozilla Corporation.
|
|
* For conditions of distribution and use, see the accompanying README file.
|
|
*
|
|
* This file contains accessor functions for extension parameters. These
|
|
* allow for extending the functionality of the libjpeg API without breaking
|
|
* backward ABI compatibility.
|
|
*/
|
|
|
|
#define JPEG_INTERNALS
|
|
#include "jinclude.h"
|
|
#include "jpeglib.h"
|
|
|
|
|
|
GLOBAL(boolean)
|
|
jpeg_c_bool_param_supported (const j_compress_ptr cinfo, J_BOOLEAN_PARAM param)
|
|
{
|
|
switch (param) {
|
|
case JBOOLEAN_OPTIMIZE_SCANS:
|
|
case JBOOLEAN_TRELLIS_QUANT:
|
|
case JBOOLEAN_TRELLIS_QUANT_DC:
|
|
case JBOOLEAN_TRELLIS_EOB_OPT:
|
|
case JBOOLEAN_USE_LAMBDA_WEIGHT_TBL:
|
|
case JBOOLEAN_USE_SCANS_IN_TRELLIS:
|
|
case JBOOLEAN_TRELLIS_Q_OPT:
|
|
case JBOOLEAN_OVERSHOOT_DERINGING:
|
|
return TRUE;
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
GLOBAL(void)
|
|
jpeg_c_set_bool_param (j_compress_ptr cinfo, J_BOOLEAN_PARAM param,
|
|
boolean value)
|
|
{
|
|
switch(param) {
|
|
case JBOOLEAN_OPTIMIZE_SCANS:
|
|
cinfo->master->optimize_scans = value;
|
|
break;
|
|
case JBOOLEAN_TRELLIS_QUANT:
|
|
cinfo->master->trellis_quant = value;
|
|
break;
|
|
case JBOOLEAN_TRELLIS_QUANT_DC:
|
|
cinfo->master->trellis_quant_dc = value;
|
|
break;
|
|
case JBOOLEAN_TRELLIS_EOB_OPT:
|
|
cinfo->master->trellis_eob_opt = value;
|
|
break;
|
|
case JBOOLEAN_USE_LAMBDA_WEIGHT_TBL:
|
|
cinfo->master->use_lambda_weight_tbl = value;
|
|
break;
|
|
case JBOOLEAN_USE_SCANS_IN_TRELLIS:
|
|
cinfo->master->use_scans_in_trellis = value;
|
|
break;
|
|
case JBOOLEAN_TRELLIS_Q_OPT:
|
|
cinfo->master->trellis_q_opt = value;
|
|
break;
|
|
case JBOOLEAN_OVERSHOOT_DERINGING:
|
|
cinfo->master->overshoot_deringing = value;
|
|
break;
|
|
default:
|
|
ERREXIT(cinfo, JERR_BAD_PARAM);
|
|
}
|
|
}
|
|
|
|
|
|
GLOBAL(boolean)
|
|
jpeg_c_get_bool_param (const j_compress_ptr cinfo, J_BOOLEAN_PARAM param)
|
|
{
|
|
switch(param) {
|
|
case JBOOLEAN_OPTIMIZE_SCANS:
|
|
return cinfo->master->optimize_scans;
|
|
case JBOOLEAN_TRELLIS_QUANT:
|
|
return cinfo->master->trellis_quant;
|
|
case JBOOLEAN_TRELLIS_QUANT_DC:
|
|
return cinfo->master->trellis_quant_dc;
|
|
case JBOOLEAN_TRELLIS_EOB_OPT:
|
|
return cinfo->master->trellis_eob_opt;
|
|
case JBOOLEAN_USE_LAMBDA_WEIGHT_TBL:
|
|
return cinfo->master->use_lambda_weight_tbl;
|
|
case JBOOLEAN_USE_SCANS_IN_TRELLIS:
|
|
return cinfo->master->use_scans_in_trellis;
|
|
case JBOOLEAN_TRELLIS_Q_OPT:
|
|
return cinfo->master->trellis_q_opt;
|
|
case JBOOLEAN_OVERSHOOT_DERINGING:
|
|
return cinfo->master->overshoot_deringing;
|
|
default:
|
|
ERREXIT(cinfo, JERR_BAD_PARAM);
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
GLOBAL(boolean)
|
|
jpeg_c_float_param_supported (const j_compress_ptr cinfo, J_FLOAT_PARAM param)
|
|
{
|
|
switch (param) {
|
|
case JFLOAT_LAMBDA_LOG_SCALE1:
|
|
case JFLOAT_LAMBDA_LOG_SCALE2:
|
|
case JFLOAT_TRELLIS_DELTA_DC_WEIGHT:
|
|
return TRUE;
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
GLOBAL(void)
|
|
jpeg_c_set_float_param (j_compress_ptr cinfo, J_FLOAT_PARAM param, float value)
|
|
{
|
|
switch (param) {
|
|
case JFLOAT_LAMBDA_LOG_SCALE1:
|
|
cinfo->master->lambda_log_scale1 = value;
|
|
break;
|
|
case JFLOAT_LAMBDA_LOG_SCALE2:
|
|
cinfo->master->lambda_log_scale2 = value;
|
|
break;
|
|
case JFLOAT_TRELLIS_DELTA_DC_WEIGHT:
|
|
cinfo->master->trellis_delta_dc_weight = value;
|
|
break;
|
|
default:
|
|
ERREXIT(cinfo, JERR_BAD_PARAM);
|
|
}
|
|
}
|
|
|
|
|
|
GLOBAL(float)
|
|
jpeg_c_get_float_param (const j_compress_ptr cinfo, J_FLOAT_PARAM param)
|
|
{
|
|
switch (param) {
|
|
case JFLOAT_LAMBDA_LOG_SCALE1:
|
|
return cinfo->master->lambda_log_scale1;
|
|
case JFLOAT_LAMBDA_LOG_SCALE2:
|
|
return cinfo->master->lambda_log_scale2;
|
|
case JFLOAT_TRELLIS_DELTA_DC_WEIGHT:
|
|
return cinfo->master->trellis_delta_dc_weight;
|
|
default:
|
|
ERREXIT(cinfo, JERR_BAD_PARAM);
|
|
}
|
|
|
|
return -1;
|
|
}
|
|
|
|
|
|
GLOBAL(boolean)
|
|
jpeg_c_int_param_supported (const j_compress_ptr cinfo, J_INT_PARAM param)
|
|
{
|
|
switch (param) {
|
|
case JINT_COMPRESS_PROFILE:
|
|
case JINT_TRELLIS_FREQ_SPLIT:
|
|
case JINT_TRELLIS_NUM_LOOPS:
|
|
case JINT_BASE_QUANT_TBL_IDX:
|
|
case JINT_DC_SCAN_OPT_MODE:
|
|
return TRUE;
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
GLOBAL(void)
|
|
jpeg_c_set_int_param (j_compress_ptr cinfo, J_INT_PARAM param, int value)
|
|
{
|
|
switch (param) {
|
|
case JINT_COMPRESS_PROFILE:
|
|
switch (value) {
|
|
case JCP_MAX_COMPRESSION:
|
|
case JCP_FASTEST:
|
|
cinfo->master->compress_profile = value;
|
|
break;
|
|
default:
|
|
ERREXIT(cinfo, JERR_BAD_PARAM_VALUE);
|
|
}
|
|
break;
|
|
case JINT_TRELLIS_FREQ_SPLIT:
|
|
cinfo->master->trellis_freq_split = value;
|
|
break;
|
|
case JINT_TRELLIS_NUM_LOOPS:
|
|
cinfo->master->trellis_num_loops = value;
|
|
break;
|
|
case JINT_BASE_QUANT_TBL_IDX:
|
|
if (value >= 0 && value <= 8)
|
|
cinfo->master->quant_tbl_master_idx = value;
|
|
break;
|
|
case JINT_DC_SCAN_OPT_MODE:
|
|
cinfo->master->dc_scan_opt_mode = value;
|
|
break;
|
|
default:
|
|
ERREXIT(cinfo, JERR_BAD_PARAM);
|
|
}
|
|
}
|
|
|
|
|
|
GLOBAL(int)
|
|
jpeg_c_get_int_param (const j_compress_ptr cinfo, J_INT_PARAM param)
|
|
{
|
|
switch (param) {
|
|
case JINT_COMPRESS_PROFILE:
|
|
return cinfo->master->compress_profile;
|
|
case JINT_TRELLIS_FREQ_SPLIT:
|
|
return cinfo->master->trellis_freq_split;
|
|
case JINT_TRELLIS_NUM_LOOPS:
|
|
return cinfo->master->trellis_num_loops;
|
|
case JINT_BASE_QUANT_TBL_IDX:
|
|
return cinfo->master->quant_tbl_master_idx;
|
|
case JINT_DC_SCAN_OPT_MODE:
|
|
return cinfo->master->dc_scan_opt_mode;
|
|
default:
|
|
ERREXIT(cinfo, JERR_BAD_PARAM);
|
|
}
|
|
|
|
return -1;
|
|
}
|