private void prepare_for_main_pass()
{
/* Initial pass: will collect input data, and do either Huffman
* optimization or data output for the first scan.
*/
select_scan_parameters();
per_scan_setup();
if (!m_cinfo.m_raw_data_in)
{
m_cinfo.m_cconvert.start_pass();
m_cinfo.m_prep.start_pass(J_BUF_MODE.JBUF_PASS_THRU);
}
m_cinfo.m_fdct.start_pass();
m_cinfo.m_entropy.start_pass(m_cinfo.m_optimize_coding);
m_cinfo.m_coef.start_pass((m_total_passes > 1 ? J_BUF_MODE.JBUF_SAVE_AND_PASS : J_BUF_MODE.JBUF_PASS_THRU));
m_cinfo.m_main.start_pass(J_BUF_MODE.JBUF_PASS_THRU);
if (m_cinfo.m_optimize_coding)
{
/* No immediate data output; postpone writing frame/scan headers */
m_call_pass_startup = false;
}
else
{
/* Will write frame/scan headers at first jpeg_write_scanlines call */
m_call_pass_startup = true;
}
}