public jpeg_d_coef_controller(jpeg_decompress_struct cinfo, bool need_full_buffer) { m_cinfo = cinfo; /* Create the coefficient buffer. */ if (need_full_buffer) { /* Allocate a full-image virtual array for each component, */ /* padded to a multiple of samp_factor DCT blocks in each direction. */ /* Note we ask for a pre-zeroed array. */ for (int ci = 0; ci < cinfo.m_num_components; ci++) { m_whole_image[ci] = jpeg_common_struct.CreateBlocksArray( JpegUtils.jround_up(cinfo.Comp_info[ci].Width_in_blocks, cinfo.Comp_info[ci].H_samp_factor), JpegUtils.jround_up(cinfo.Comp_info[ci].height_in_blocks, cinfo.Comp_info[ci].V_samp_factor)); m_whole_image[ci].ErrorProcessor = cinfo; } m_useDummyConsumeData = false; m_decompressor = DecompressorType.Ordinary; m_coef_arrays = m_whole_image; /* link to virtual arrays */ } else { /* We only need a single-MCU buffer. */ for (int i = 0; i < JpegConstants.D_MAX_BLOCKS_IN_MCU; i++) { m_MCU_buffer[i] = new JBLOCK(); } m_useDummyConsumeData = true; m_decompressor = DecompressorType.OnePass; m_coef_arrays = null; /* flag for no virtual arrays */ } }
/// <summary> /// Initialize for an output processing pass. /// </summary> public void start_output_pass() { /* If multipass, check to see whether to use block smoothing on this pass */ if (m_coef_arrays != null) { if (m_cinfo.m_do_block_smoothing && smoothing_ok()) { m_decompressor = DecompressorType.Smooth; } else { m_decompressor = DecompressorType.Ordinary; } } m_cinfo.m_output_iMCU_row = 0; }
/// <summary> /// Initialize for an output processing pass. /// </summary> public void StartOutputPass() { /* If multipass, check to see whether to use block smoothing on this pass */ if (m_coef_arrays is object) { if (m_cinfo.doBlockSmoothing && SmoothingOK()) { m_decompressor = DecompressorType.Smooth; } else { m_decompressor = DecompressorType.Ordinary; } } m_cinfo.outputIMcuRow = 0; }
public jpeg_d_coef_controller(jpeg_decompress_struct cinfo, bool need_full_buffer) { m_cinfo = cinfo; /* Create the coefficient buffer. */ if (need_full_buffer) { /* Allocate a full-image virtual array for each component, */ /* padded to a multiple of samp_factor DCT blocks in each direction. */ /* Note we ask for a pre-zeroed array. */ for (int ci = 0; ci < cinfo.m_num_components; ci++) { m_whole_image[ci] = jpeg_common_struct.CreateBlocksArray( JpegUtils.jround_up(cinfo.Comp_info[ci].Width_in_blocks, cinfo.Comp_info[ci].H_samp_factor), JpegUtils.jround_up(cinfo.Comp_info[ci].height_in_blocks, cinfo.Comp_info[ci].V_samp_factor)); m_whole_image[ci].ErrorProcessor = cinfo; } m_useDummyConsumeData = false; m_decompressor = DecompressorType.Ordinary; m_coef_arrays = m_whole_image; /* link to virtual arrays */ } else { /* We only need a single-MCU buffer. */ JBLOCK[] buffer = new JBLOCK[JpegConstants.D_MAX_BLOCKS_IN_MCU]; for (int i = 0; i < JpegConstants.D_MAX_BLOCKS_IN_MCU; i++) { buffer[i] = new JBLOCK(); for (int ii = 0; ii < buffer[i].data.Length; ii++) buffer[i].data[ii] = -12851; m_MCU_buffer[i] = buffer[i]; } m_useDummyConsumeData = true; m_decompressor = DecompressorType.OnePass; m_coef_arrays = null; /* flag for no virtual arrays */ } }
/// <summary> /// Initialize for an output processing pass. /// </summary> public void start_output_pass() { /* If multipass, check to see whether to use block smoothing on this pass */ if (m_coef_arrays != null) { if (m_cinfo.m_do_block_smoothing && smoothing_ok()) m_decompressor = DecompressorType.Smooth; else m_decompressor = DecompressorType.Ordinary; } m_cinfo.m_output_iMCU_row = 0; }