public jpeg_d_main_controller(jpeg_decompress_struct cinfo)
{
m_cinfo = cinfo;
/* Allocate the workspace.
* ngroups is the number of row groups we need.
*/
int ngroups = cinfo.min_DCT_v_scaled_size;
if (cinfo.m_upsample.NeedContextRows())
{
if (cinfo.min_DCT_v_scaled_size < 2) /* unsupported, see comments above */
cinfo.ERREXIT(J_MESSAGE_CODE.JERR_NOTIMPL);
alloc_funny_pointers(); /* Alloc space for xbuffer[] lists */
ngroups = cinfo.min_DCT_v_scaled_size + 2;
}
for (int ci = 0; ci < cinfo.m_num_components; ci++)
{
/* height of a row group of component */
int rgroup = (cinfo.Comp_info[ci].V_samp_factor * cinfo.Comp_info[ci].DCT_v_scaled_size) / cinfo.min_DCT_v_scaled_size;
m_buffer[ci] = jpeg_common_struct.AllocJpegSamples(
cinfo.Comp_info[ci].Width_in_blocks * cinfo.Comp_info[ci].DCT_h_scaled_size,
rgroup * ngroups);
}
}