30 : m_quality(85), m_subsampling(H2V2), m_no_chroma_discrim_flag(
false),
31 m_two_pass_flag(
false), m_use_std_tables(
false)
35 inline bool check()
const
37 if((m_quality < 1) || (m_quality > 100))
39 if((uint)m_subsampling > (uint)H2V2)
52 subsampling_t m_subsampling;
56 bool m_no_chroma_discrim_flag;
62 bool m_use_std_tables;
107 bool init(
output_stream* pStream,
int width,
int height,
int src_channels,
110 const params& get_params()
const {
return m_params; }
115 uint get_total_passes()
const {
return m_params.m_two_pass_flag ? 2 : 1; }
116 inline uint get_cur_pass() {
return m_pass_num; }
122 bool process_scanline(
const void* pScanline);
127 typedef int32 sample_array_t;
131 uint8 m_num_components;
132 uint8 m_comp_h_samp[3], m_comp_v_samp[3];
133 int m_image_x, m_image_y, m_image_bpp, m_image_bpl;
134 int m_image_x_mcu, m_image_y_mcu;
135 int m_image_bpl_xlt, m_image_bpl_mcu;
137 int m_mcu_x, m_mcu_y;
138 uint8* m_mcu_lines[16];
140 sample_array_t m_sample_array[64];
141 int16 m_coefficient_array[64];
142 int32 m_quantization_tables[2][64];
143 uint m_huff_codes[4][256];
144 uint8 m_huff_code_sizes[4][256];
145 uint8 m_huff_bits[4][17];
146 uint8 m_huff_val[4][256];
147 uint32 m_huff_count[4][256];
148 int m_last_dc_val[3];
151 JPGE_OUT_BUF_SIZE = 2048
153 uint8 m_out_buf[JPGE_OUT_BUF_SIZE];
159 bool m_all_stream_writes_succeeded;
161 void optimize_huffman_table(
int table_num,
int table_len);
162 void emit_byte(uint8 i);
163 void emit_word(uint i);
164 void emit_marker(
int marker);
165 void emit_jfif_app0();
168 void emit_dht(uint8* bits, uint8* val,
int index,
bool ac_flag);
172 void compute_huffman_table(uint* codes, uint8* code_sizes, uint8* bits, uint8* val);
173 void compute_quant_table(int32* dst, int16* src);
174 void adjust_quant_table(int32* dst, int32* src);
175 void first_pass_init();
176 bool second_pass_init();
177 bool jpg_open(
int p_x_res,
int p_y_res,
int src_channels);
178 void load_block_8_8_grey(
int x);
179 void load_block_8_8(
int x,
int y,
int c);
180 void load_block_16_8(
int x,
int c);
181 void load_block_16_8_8(
int x,
int c);
182 void load_quantized_coefficients(
int component_num);
183 void flush_output_buffer();
184 void put_bits(uint bits, uint len);
185 void code_coefficients_pass_one(
int component_num);
186 void code_coefficients_pass_two(
int component_num);
187 void code_block(
int component_num);
188 void process_mcu_row();
189 bool terminate_pass_one();
190 bool terminate_pass_two();
191 bool process_end_of_image();
192 void load_mcu(
const void* src);