Merge pull request #275 from mozilla/idct-selector

Make IDCT method customizable
This commit is contained in:
Kornel
2018-11-15 16:05:51 +00:00
committed by GitHub
3 changed files with 27 additions and 0 deletions

View File

@@ -27,6 +27,7 @@
#include "jdct.h" /* Private declarations for DCT subsystem */
#include "jsimddct.h"
#include "jpegcomp.h"
#include "jdmaster.h"
/*
@@ -86,6 +87,11 @@ typedef union {
#endif
#endif
EXTERN(void) jpeg_set_idct_method_selector (j_decompress_ptr cinfo, jpeg_idct_method_selector selector){
my_master_ptr master = (my_master_ptr) cinfo->master;
master->custom_idct_selector = selector;
}
/*
* Prepare for an output pass.
@@ -225,6 +231,14 @@ start_pass(j_decompress_ptr cinfo)
ERREXIT1(cinfo, JERR_BAD_DCTSIZE, compptr->_DCT_scaled_size);
break;
}
// Allow custom idct function to be set dynamically
my_master_ptr master = (my_master_ptr) cinfo->master;
if (master->custom_idct_selector != NULL) {
master->custom_idct_selector(cinfo, compptr, &method_ptr, &method);
}
idct->pub.inverse_DCT[ci] = method_ptr;
/* Create multiplier table from quant table.
* However, we can skip this if the component is uninteresting

View File

@@ -23,6 +23,11 @@ typedef struct {
*/
struct jpeg_color_quantizer *quantizer_1pass;
struct jpeg_color_quantizer *quantizer_2pass;
/*
* Permit users to replace the IDCT method
*/
jpeg_idct_method_selector custom_idct_selector;
} my_decomp_master;
typedef my_decomp_master *my_master_ptr;

View File

@@ -514,6 +514,8 @@ struct jpeg_compress_struct {
int script_space_size;
};
typedef void (*jpeg_idct_method) (j_decompress_ptr cinfo, jpeg_component_info *compptr, JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col);
typedef void (*jpeg_idct_method_selector) (j_decompress_ptr cinfo, jpeg_component_info *compptr, jpeg_idct_method * set_idct_method, int * set_idct_category);
/* Master record for a decompression instance */
@@ -1137,6 +1139,12 @@ EXTERN(boolean) jpeg_read_icc_profile(j_decompress_ptr cinfo,
JOCTET **icc_data_ptr,
unsigned int *icc_data_len);
/*
* Permit users to replace the IDCT method dynamically.
* The selector callback is called after the default idct implementation was choosen,
* and is able to override it.
*/
EXTERN(void) jpeg_set_idct_method_selector (j_decompress_ptr cinfo, jpeg_idct_method_selector selector);
/* These marker codes are exported since applications and data source modules
* are likely to want to use them.