private void jpeg_calc_jpeg_dimensions()
{
/* Sanity check on input image dimensions to prevent overflow in
* following calculation.
* We do check jpeg_width and jpeg_height in initial_setup below,
* but image_width and image_height can come from arbitrary data,
* and we need some space for multiplication by block_size.
*/
if (((long)m_image_width >> 24) != 0 || ((long)m_image_height >> 24) != 0)
ERREXIT(J_MESSAGE_CODE.JERR_IMAGE_TOO_BIG, (uint)JpegConstants.JPEG_MAX_DIMENSION);
/* Compute actual JPEG image dimensions and DCT scaling choices. */
if (scale_num >= scale_denom * block_size)
{
/* Provide block_size/1 scaling */
jpeg_width = m_image_width * block_size;
jpeg_height = m_image_height * block_size;
min_DCT_h_scaled_size = 1;
min_DCT_v_scaled_size = 1;
}
else if (scale_num * 2 >= scale_denom * block_size)
{
/* Provide block_size/2 scaling */
jpeg_width = (int)JpegUtils.jdiv_round_up((long)m_image_width * block_size, 2L);
jpeg_height = (int)JpegUtils.jdiv_round_up((long)m_image_height * block_size, 2L);
min_DCT_h_scaled_size = 2;
min_DCT_v_scaled_size = 2;
}
else if (scale_num * 3 >= scale_denom * block_size)
{
/* Provide block_size/3 scaling */
jpeg_width = (int)JpegUtils.jdiv_round_up((long)m_image_width * block_size, 3L);
jpeg_height = (int)JpegUtils.jdiv_round_up((long)m_image_height * block_size, 3L);
min_DCT_h_scaled_size = 3;
min_DCT_v_scaled_size = 3;
}
else if (scale_num * 4 >= scale_denom * block_size)
{
/* Provide block_size/4 scaling */
jpeg_width = (int)JpegUtils.jdiv_round_up((long)m_image_width * block_size, 4L);
jpeg_height = (int)JpegUtils.jdiv_round_up((long)m_image_height * block_size, 4L);
min_DCT_h_scaled_size = 4;
min_DCT_v_scaled_size = 4;
}
else if (scale_num * 5 >= scale_denom * block_size)
{
/* Provide block_size/5 scaling */
jpeg_width = (int)JpegUtils.jdiv_round_up((long)m_image_width * block_size, 5L);
jpeg_height = (int)JpegUtils.jdiv_round_up((long)m_image_height * block_size, 5L);
min_DCT_h_scaled_size = 5;
min_DCT_v_scaled_size = 5;
}
else if (scale_num * 6 >= scale_denom * block_size)
{
/* Provide block_size/6 scaling */
jpeg_width = (int)JpegUtils.jdiv_round_up((long)m_image_width * block_size, 6L);
jpeg_height = (int)JpegUtils.jdiv_round_up((long)m_image_height * block_size, 6L);
min_DCT_h_scaled_size = 6;
min_DCT_v_scaled_size = 6;
}
else if (scale_num * 7 >= scale_denom * block_size)
{
/* Provide block_size/7 scaling */
jpeg_width = (int)JpegUtils.jdiv_round_up((long)m_image_width * block_size, 7L);
jpeg_height = (int)JpegUtils.jdiv_round_up((long)m_image_height * block_size, 7L);
min_DCT_h_scaled_size = 7;
min_DCT_v_scaled_size = 7;
}
else if (scale_num * 8 >= scale_denom * block_size)
{
/* Provide block_size/8 scaling */
jpeg_width = (int)JpegUtils.jdiv_round_up((long)m_image_width * block_size, 8L);
jpeg_height = (int)JpegUtils.jdiv_round_up((long)m_image_height * block_size, 8L);
min_DCT_h_scaled_size = 8;
min_DCT_v_scaled_size = 8;
}
else if (scale_num * 9 >= scale_denom * block_size)
{
/* Provide block_size/9 scaling */
jpeg_width = (int)JpegUtils.jdiv_round_up((long)m_image_width * block_size, 9L);
jpeg_height = (int)JpegUtils.jdiv_round_up((long)m_image_height * block_size, 9L);
min_DCT_h_scaled_size = 9;
min_DCT_v_scaled_size = 9;
}
else if (scale_num * 10 >= scale_denom * block_size)
{
/* Provide block_size/10 scaling */
jpeg_width = (int)JpegUtils.jdiv_round_up((long)m_image_width * block_size, 10L);
jpeg_height = (int)JpegUtils.jdiv_round_up((long)m_image_height * block_size, 10L);
min_DCT_h_scaled_size = 10;
min_DCT_v_scaled_size = 10;
}
else if (scale_num * 11 >= scale_denom * block_size)
{
/* Provide block_size/11 scaling */
jpeg_width = (int)JpegUtils.jdiv_round_up((long)m_image_width * block_size, 11L);
jpeg_height = (int)JpegUtils.jdiv_round_up((long)m_image_height * block_size, 11L);
min_DCT_h_scaled_size = 11;
min_DCT_v_scaled_size = 11;
}
else if (scale_num * 12 >= scale_denom * block_size)
{
/* Provide block_size/12 scaling */
jpeg_width = (int)JpegUtils.jdiv_round_up((long)m_image_width * block_size, 12L);
jpeg_height = (int)JpegUtils.jdiv_round_up((long)m_image_height * block_size, 12L);
min_DCT_h_scaled_size = 12;
min_DCT_v_scaled_size = 12;
}
else if (scale_num * 13 >= scale_denom * block_size)
{
/* Provide block_size/13 scaling */
jpeg_width = (int)JpegUtils.jdiv_round_up((long)m_image_width * block_size, 13L);
jpeg_height = (int)JpegUtils.jdiv_round_up((long)m_image_height * block_size, 13L);
min_DCT_h_scaled_size = 13;
min_DCT_v_scaled_size = 13;
}
else if (scale_num * 14 >= scale_denom * block_size)
{
/* Provide block_size/14 scaling */
jpeg_width = (int)JpegUtils.jdiv_round_up((long)m_image_width * block_size, 14L);
jpeg_height = (int)JpegUtils.jdiv_round_up((long)m_image_height * block_size, 14L);
min_DCT_h_scaled_size = 14;
min_DCT_v_scaled_size = 14;
}
else if (scale_num * 15 >= scale_denom * block_size)
{
/* Provide block_size/15 scaling */
jpeg_width = (int)JpegUtils.jdiv_round_up((long)m_image_width * block_size, 15L);
jpeg_height = (int)JpegUtils.jdiv_round_up((long)m_image_height * block_size, 15L);
min_DCT_h_scaled_size = 15;
min_DCT_v_scaled_size = 15;
}
else
{
/* Provide block_size/16 scaling */
jpeg_width = (int)JpegUtils.jdiv_round_up((long)m_image_width * block_size, 16L);
jpeg_height = (int)JpegUtils.jdiv_round_up((long)m_image_height * block_size, 16L);
min_DCT_h_scaled_size = 16;
min_DCT_v_scaled_size = 16;
}
}